Print this page
5832 EOF wireless usb (aka UWB)
Reviewed by: TBD
Reviewed by: TBD
Approved by: TBD

*** 19,28 **** --- 19,30 ---- * CDDL HEADER END */ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. + * + * Copyright 2014 Garrett D'Amore <garrett@damore.org> */ /* * USBA: Solaris USB Architecture support *
*** 110,127 **** uint_t usbai_register_errlevel = USB_LOG_L2; uint_t usbai_register_dump_errlevel = USB_LOG_L2; uint_t usbai_register_errmask = (uint_t)-1; /* Function prototypes */ - static int usba_build_bos(usba_device_t *, usb_client_dev_data_t *); static int usba_build_descr_tree(dev_info_t *, usba_device_t *, usb_client_dev_data_t *); static void usba_process_cfg_descr(usba_reg_state_t *); static int usba_process_if_descr(usba_reg_state_t *, boolean_t *); static int usba_process_ep_descr(usba_reg_state_t *); static int usba_process_cv_descr(usba_reg_state_t *); - static int usba_process_ep_comp_descr(usba_reg_state_t *); static int usba_set_parse_values(dev_info_t *dip, usba_device_t *usba_device, usba_reg_state_t *state); static void* usba_kmem_realloc(void *, int, int); static void usba_augment_array(void **, uint_t, uint_t); static void usba_make_alts_sparse(usb_alt_if_data_t **, uint_t *); --- 112,127 ----
*** 425,444 **** kmem_free(usb_reg, sizeof (usb_client_dev_data_t)); return (USB_FAILURE); } - /* get parsed bos for wusb device */ - if (usba_device->usb_is_wireless) { - if ((rval = usba_build_bos(usba_device, usb_reg)) != - USB_SUCCESS) { - kmem_free(usb_reg, sizeof (usb_client_dev_data_t)); - - return (rval); - } - } - usb_reg->dev_iblock_cookie = usba_hcdi_get_hcdi( usba_device->usb_root_hub_dip)->hcdi_soft_iblock_cookie; USB_DPRINTF_L4(DPRINT_MASK_REGISTER, usbai_reg_log_handle, "cookie = 0x%p", (void *)usb_reg->dev_iblock_cookie); --- 425,434 ----
*** 593,606 **** /* Free config tree under reg->dev_cfg. */ if (reg->dev_cfg != NULL) { usb_free_descr_tree(dip, reg); } - if (reg->dev_bos != NULL) { - kmem_free(reg->dev_bos, sizeof (usb_bos_data_t)); - } - mutex_enter(&usba_device->usb_mutex); prev = &usba_device->usb_client_dev_data_list; entry = usba_device->usb_client_dev_data_list.cddl_next; /* free the entries in usb_client_data_list */ --- 583,592 ----
*** 645,688 **** USB_DPRINTF_L4(DPRINT_MASK_REGISTER, usbai_reg_log_handle, "usb_free_dev_data done"); } /* - * This builds the BOS descriptors for WUSB device - */ - static int - usba_build_bos(usba_device_t *usba_device, usb_client_dev_data_t *usb_reg) - { - uint8_t *buf; - size_t size, buflen; - - buf = usba_device->usb_wireless_data->wusb_bos; - buflen = usba_device->usb_wireless_data->wusb_bos_length; - - usb_reg->dev_bos = kmem_zalloc(sizeof (usb_bos_data_t), - KM_SLEEP); - size = usb_parse_bos_descr(buf, buflen, &usb_reg->dev_bos->bos_descr, - sizeof (usb_bos_descr_t)); - if (size != USB_BOS_DESCR_SIZE) { - kmem_free(usb_reg->dev_bos, sizeof (usb_bos_data_t)); - - return (USB_FAILURE); - } - - size = usb_parse_uwb_bos_descr(buf, buflen, - &usb_reg->dev_bos->bos_uwb_cap, sizeof (usb_uwb_cap_descr_t)); - if (size != USB_UWB_CAP_DESCR_SIZE) { - kmem_free(usb_reg->dev_bos, sizeof (usb_bos_data_t)); - - return (USB_FAILURE); - } - - return (USB_SUCCESS); - } - - - /* * usba_build_descr_tree: * This builds the descriptor tree. See module header comment for tree * description. * * Arguments: --- 631,640 ----
*** 845,866 **** state.st_last_processed_descr_type = USB_DESCR_TYPE_EP; } break; - case USB_DESCR_TYPE_WIRELESS_EP_COMP: - /* for WUSB devices */ - if (process_this_if_tree && - state.st_build_ep_comp) { - if (usba_process_ep_comp_descr( - &state) != USB_SUCCESS) { - - return (USB_FAILURE); - } - } - - break; case USB_DESCR_TYPE_STRING: USB_DPRINTF_L2(DPRINT_MASK_ALL, usbai_reg_log_handle, "usb_get_dev_data: " "Found unexpected str descr at addr 0x%p", --- 797,806 ----
*** 1105,1138 **** return (USB_SUCCESS); } - static int - usba_process_ep_comp_descr(usba_reg_state_t *state) - { - USB_DPRINTF_L4(DPRINT_MASK_REGISTER, usbai_reg_log_handle, - "usba_process_ep_comp_descr starting"); - - /* No endpoint descr preceeds this descr */ - if (state->st_curr_ep == NULL) { - USB_DPRINTF_L2(DPRINT_MASK_REGISTER, usbai_reg_log_handle, - "usba_process_ep_comp_descr: no endpt before the descr"); - - return (USB_FAILURE); - } - - (void) usb_parse_data("ccccsscc", state->st_curr_raw_descr, - state->st_curr_raw_descr_len, - &state->st_curr_ep->ep_comp_descr, - sizeof (usb_ep_comp_descr_t)); - USB_DPRINTF_L4(DPRINT_MASK_REGISTER, usbai_reg_log_handle, - "usba_process_ep_comp_descr done"); - - return (USB_SUCCESS); - } - /* * usba_process_cv_descr: * This processes a raw endpoint descriptor, and sets up an analogous * endpoint descriptor in the descriptor tree. C/Vs are associated with * other descriptors they follow in the raw data. --- 1045,1054 ----
*** 1225,1235 **** usba_reg_state_t *state) { /* Default to *all* in case configuration# prop not set. */ mutex_enter(&usba_device->usb_mutex); state->st_cfg_to_build = usba_device->usb_active_cfg_ndx; - state->st_build_ep_comp = usba_device->usb_is_wireless; mutex_exit(&usba_device->usb_mutex); if (state->st_cfg_to_build == USBA_DEV_CONFIG_INDEX_UNDEFINED) { state->st_cfg_to_build = USBA_ALL; } state->st_if_to_build = usb_get_if_number(dip); --- 1141,1150 ----