Lines Matching refs:cdev
162 struct usb_composite_dev *cdev; in config_ep_by_speed_and_alt() local
203 cdev = get_gadget_data(g); in config_ep_by_speed_and_alt()
205 WARNING(cdev, in config_ep_by_speed_and_alt()
265 ERROR(cdev, "ep0 bMaxBurst must be 0\n"); in config_ep_by_speed_and_alt()
319 DBG(config->cdev, "adding '%s'/%p to config '%s'/%p\n", in usb_add_function()
361 DBG(config->cdev, "adding '%s'/%p --> %d\n", in usb_add_function()
403 struct usb_composite_dev *cdev = function->config->cdev; in usb_function_deactivate() local
407 spin_lock_irqsave(&cdev->lock, flags); in usb_function_deactivate()
409 if (cdev->deactivations == 0) { in usb_function_deactivate()
410 spin_unlock_irqrestore(&cdev->lock, flags); in usb_function_deactivate()
411 status = usb_gadget_deactivate(cdev->gadget); in usb_function_deactivate()
412 spin_lock_irqsave(&cdev->lock, flags); in usb_function_deactivate()
415 cdev->deactivations++; in usb_function_deactivate()
417 spin_unlock_irqrestore(&cdev->lock, flags); in usb_function_deactivate()
434 struct usb_composite_dev *cdev = function->config->cdev; in usb_function_activate() local
438 spin_lock_irqsave(&cdev->lock, flags); in usb_function_activate()
440 if (WARN_ON(cdev->deactivations == 0)) in usb_function_activate()
443 cdev->deactivations--; in usb_function_activate()
444 if (cdev->deactivations == 0) { in usb_function_activate()
445 spin_unlock_irqrestore(&cdev->lock, flags); in usb_function_activate()
446 status = usb_gadget_activate(cdev->gadget); in usb_function_activate()
447 spin_lock_irqsave(&cdev->lock, flags); in usb_function_activate()
451 spin_unlock_irqrestore(&cdev->lock, flags); in usb_function_activate()
565 static int config_desc(struct usb_composite_dev *cdev, unsigned w_value) in config_desc() argument
567 struct usb_gadget *gadget = cdev->gadget; in config_desc()
589 pos = &cdev->configs; in config_desc()
590 c = cdev->os_desc_config; in config_desc()
594 while ((pos = pos->next) != &cdev->configs) { in config_desc()
598 if (c == cdev->os_desc_config) in config_desc()
622 return config_buf(c, speed, cdev->req->buf, type); in config_desc()
628 static int count_configs(struct usb_composite_dev *cdev, unsigned type) in count_configs() argument
630 struct usb_gadget *gadget = cdev->gadget; in count_configs()
647 list_for_each_entry(c, &cdev->configs, list) { in count_configs()
676 static int bos_desc(struct usb_composite_dev *cdev) in bos_desc() argument
680 struct usb_bos_descriptor *bos = cdev->req->buf; in bos_desc()
690 if (cdev->gadget->ops->get_config_params) { in bos_desc()
691 cdev->gadget->ops->get_config_params(cdev->gadget, in bos_desc()
716 usb_ext = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
729 if (gadget_is_superspeed(cdev->gadget)) { in bos_desc()
732 ss_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
749 if (gadget_is_superspeed_plus(cdev->gadget)) { in bos_desc()
755 if (cdev->gadget->max_ssp_rate == USB_SSP_GEN_2x2) in bos_desc()
764 ssp_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
802 if (cdev->gadget->max_ssp_rate == USB_SSP_GEN_2x1 || in bos_desc()
803 cdev->gadget->max_ssp_rate == USB_SSP_GEN_UNKNOWN) in bos_desc()
827 static void device_qual(struct usb_composite_dev *cdev) in device_qual() argument
829 struct usb_qualifier_descriptor *qual = cdev->req->buf; in device_qual()
834 qual->bcdUSB = cdev->desc.bcdUSB; in device_qual()
835 qual->bDeviceClass = cdev->desc.bDeviceClass; in device_qual()
836 qual->bDeviceSubClass = cdev->desc.bDeviceSubClass; in device_qual()
837 qual->bDeviceProtocol = cdev->desc.bDeviceProtocol; in device_qual()
839 qual->bMaxPacketSize0 = cdev->gadget->ep0->maxpacket; in device_qual()
840 qual->bNumConfigurations = count_configs(cdev, USB_DT_DEVICE_QUALIFIER); in device_qual()
846 static void reset_config(struct usb_composite_dev *cdev) in reset_config() argument
850 DBG(cdev, "reset config\n"); in reset_config()
852 list_for_each_entry(f, &cdev->config->functions, list) { in reset_config()
858 cdev->config = NULL; in reset_config()
859 cdev->delayed_status = 0; in reset_config()
862 static int set_config(struct usb_composite_dev *cdev, in set_config() argument
865 struct usb_gadget *gadget = cdev->gadget; in set_config()
872 list_for_each_entry(c, &cdev->configs, list) { in set_config()
879 if (cdev->config) in set_config()
880 reset_config(cdev); in set_config()
888 if (cdev->config) in set_config()
889 reset_config(cdev); in set_config()
893 DBG(cdev, "%s config #%d: %s\n", in set_config()
901 cdev->config = c; in set_config()
934 DBG(cdev, "interface %d (%s/%p) alt 0 --> %d\n", in set_config()
937 reset_config(cdev); in set_config()
942 DBG(cdev, in set_config()
945 cdev->delayed_status++; in set_config()
946 DBG(cdev, "delayed_status count %d\n", in set_config()
947 cdev->delayed_status); in set_config()
968 if (result >= 0 && cdev->delayed_status) in set_config()
973 int usb_add_config_only(struct usb_composite_dev *cdev, in usb_add_config_only() argument
982 list_for_each_entry(c, &cdev->configs, list) { in usb_add_config_only()
987 config->cdev = cdev; in usb_add_config_only()
988 list_add_tail(&config->list, &cdev->configs); in usb_add_config_only()
1013 int usb_add_config(struct usb_composite_dev *cdev, in usb_add_config() argument
1022 DBG(cdev, "adding config #%u '%s'/%p\n", in usb_add_config()
1026 status = usb_add_config_only(cdev, config); in usb_add_config()
1039 DBG(cdev, "unbind function '%s'/%p\n", in usb_add_config()
1046 config->cdev = NULL; in usb_add_config()
1050 DBG(cdev, "cfg %d/%p speeds:%s%s%s%s\n", in usb_add_config()
1056 ? (gadget_is_dualspeed(cdev->gadget) in usb_add_config()
1066 DBG(cdev, " interface %d = %s/%p\n", in usb_add_config()
1072 usb_ep_autoconfig_reset(cdev->gadget); in usb_add_config()
1076 DBG(cdev, "added config '%s'/%u --> %d\n", config->label, in usb_add_config()
1082 static void remove_config(struct usb_composite_dev *cdev, in remove_config() argument
1095 DBG(cdev, "unbind config '%s'/%p\n", config->label, config); in remove_config()
1110 void usb_remove_config(struct usb_composite_dev *cdev, in usb_remove_config() argument
1115 spin_lock_irqsave(&cdev->lock, flags); in usb_remove_config()
1117 if (cdev->config == config) in usb_remove_config()
1118 reset_config(cdev); in usb_remove_config()
1120 spin_unlock_irqrestore(&cdev->lock, flags); in usb_remove_config()
1122 remove_config(cdev, config); in usb_remove_config()
1173 static int get_string(struct usb_composite_dev *cdev, in get_string() argument
1176 struct usb_composite_driver *composite = cdev->driver; in get_string()
1199 list_for_each_entry(c, &cdev->configs, list) { in get_string()
1210 list_for_each_entry(uc, &cdev->gstrings, list) { in get_string()
1226 if (cdev->use_os_string && language == 0 && id == OS_STRING_IDX) { in get_string()
1231 sizeof(b->qwSignature) == sizeof(cdev->qw_sign), in get_string()
1233 memcpy(&b->qwSignature, cdev->qw_sign, sizeof(b->qwSignature)); in get_string()
1234 b->bMS_VendorCode = cdev->b_vendor_code; in get_string()
1239 list_for_each_entry(uc, &cdev->gstrings, list) { in get_string()
1257 list_for_each_entry(c, &cdev->configs, list) { in get_string()
1288 int usb_string_id(struct usb_composite_dev *cdev) in usb_string_id() argument
1290 if (cdev->next_string_id < 254) { in usb_string_id()
1294 cdev->next_string_id++; in usb_string_id()
1295 return cdev->next_string_id; in usb_string_id()
1317 int usb_string_ids_tab(struct usb_composite_dev *cdev, struct usb_string *str) in usb_string_ids_tab() argument
1319 int next = cdev->next_string_id; in usb_string_ids_tab()
1327 cdev->next_string_id = next; in usb_string_ids_tab()
1401 struct usb_string *usb_gstrings_attach(struct usb_composite_dev *cdev, in usb_gstrings_attach() argument
1421 ret = usb_string_ids_tab(cdev, n_gs[0]->strings); in usb_gstrings_attach()
1438 list_add_tail(&uc->list, &cdev->gstrings); in usb_gstrings_attach()
1479 struct usb_composite_dev *cdev; in composite_setup_complete() local
1496 cdev = req->context; in composite_setup_complete()
1498 if (cdev->req == req) in composite_setup_complete()
1499 cdev->setup_pending = false; in composite_setup_complete()
1500 else if (cdev->os_desc_req == req) in composite_setup_complete()
1501 cdev->os_desc_pending = false; in composite_setup_complete()
1506 static int composite_ep0_queue(struct usb_composite_dev *cdev, in composite_ep0_queue() argument
1511 ret = usb_ep_queue(cdev->gadget->ep0, req, gfp_flags); in composite_ep0_queue()
1513 if (cdev->req == req) in composite_ep0_queue()
1514 cdev->setup_pending = true; in composite_ep0_queue()
1515 else if (cdev->os_desc_req == req) in composite_ep0_queue()
1516 cdev->os_desc_pending = true; in composite_ep0_queue()
1684 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_setup() local
1685 struct usb_request *req = cdev->req; in composite_setup()
1712 req->context = cdev; in composite_setup()
1715 gadget->ep0->driver_data = cdev; in composite_setup()
1733 cdev->desc.bNumConfigurations = in composite_setup()
1734 count_configs(cdev, USB_DT_DEVICE); in composite_setup()
1735 cdev->desc.bMaxPacketSize0 = in composite_setup()
1736 cdev->gadget->ep0->maxpacket; in composite_setup()
1739 cdev->desc.bcdUSB = cpu_to_le16(0x0320); in composite_setup()
1740 cdev->desc.bMaxPacketSize0 = 9; in composite_setup()
1742 cdev->desc.bcdUSB = cpu_to_le16(0x0210); in composite_setup()
1746 cdev->desc.bcdUSB = cpu_to_le16(0x0201); in composite_setup()
1748 cdev->desc.bcdUSB = cpu_to_le16(0x0200); in composite_setup()
1751 value = min(w_length, (u16) sizeof cdev->desc); in composite_setup()
1752 memcpy(req->buf, &cdev->desc, value); in composite_setup()
1758 device_qual(cdev); in composite_setup()
1768 value = config_desc(cdev, w_value); in composite_setup()
1773 value = get_string(cdev, req->buf, in composite_setup()
1781 value = bos_desc(cdev); in composite_setup()
1790 if (cdev->config) in composite_setup()
1791 config = cdev->config; in composite_setup()
1794 &cdev->configs, in composite_setup()
1820 DBG(cdev, "HNP available\n"); in composite_setup()
1822 DBG(cdev, "HNP on another port\n"); in composite_setup()
1824 VDBG(cdev, "HNP inactive\n"); in composite_setup()
1826 spin_lock(&cdev->lock); in composite_setup()
1827 value = set_config(cdev, ctrl, w_value); in composite_setup()
1828 spin_unlock(&cdev->lock); in composite_setup()
1833 if (cdev->config) in composite_setup()
1834 *(u8 *)req->buf = cdev->config->bConfigurationValue; in composite_setup()
1844 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1846 f = cdev->config->interface[intf]; in composite_setup()
1858 spin_lock(&cdev->lock); in composite_setup()
1861 DBG(cdev, in composite_setup()
1864 cdev->delayed_status++; in composite_setup()
1865 DBG(cdev, "delayed_status count %d\n", in composite_setup()
1866 cdev->delayed_status); in composite_setup()
1868 spin_unlock(&cdev->lock); in composite_setup()
1873 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1875 f = cdev->config->interface[intf]; in composite_setup()
1909 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1911 f = cdev->config->interface[intf]; in composite_setup()
1932 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1934 f = cdev->config->interface[intf]; in composite_setup()
1941 ERROR(cdev, in composite_setup()
1954 if (cdev->use_os_string && cdev->os_desc_config && in composite_setup()
1956 ctrl->bRequest == cdev->b_vendor_code) { in composite_setup()
1962 req = cdev->os_desc_req; in composite_setup()
1963 req->context = cdev; in composite_setup()
1966 os_desc_cfg = cdev->os_desc_config; in composite_setup()
2014 VDBG(cdev, in composite_setup()
2023 if (cdev->config) { in composite_setup()
2024 list_for_each_entry(f, &cdev->config->functions, list) in composite_setup()
2030 list_for_each_entry(c, &cdev->configs, list) in composite_setup()
2040 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
2042 f = cdev->config->interface[intf]; in composite_setup()
2046 if (!cdev->config) in composite_setup()
2049 list_for_each_entry(f, &cdev->config->functions, list) { in composite_setup()
2053 if (&f->list == &cdev->config->functions) in composite_setup()
2063 c = cdev->config; in composite_setup()
2089 req->context = cdev; in composite_setup()
2091 value = composite_ep0_queue(cdev, req, GFP_ATOMIC); in composite_setup()
2093 DBG(cdev, "ep_queue --> %d\n", value); in composite_setup()
2098 WARN(cdev, in composite_setup()
2110 struct usb_composite_dev *cdev = get_gadget_data(gadget); in __composite_disconnect() local
2116 spin_lock_irqsave(&cdev->lock, flags); in __composite_disconnect()
2117 cdev->suspended = 0; in __composite_disconnect()
2118 if (cdev->config) in __composite_disconnect()
2119 reset_config(cdev); in __composite_disconnect()
2120 if (cdev->driver->disconnect) in __composite_disconnect()
2121 cdev->driver->disconnect(cdev); in __composite_disconnect()
2122 spin_unlock_irqrestore(&cdev->lock, flags); in __composite_disconnect()
2148 struct usb_composite_dev *cdev = get_gadget_data(gadget); in suspended_show() local
2150 return sprintf(buf, "%d\n", cdev->suspended); in suspended_show()
2156 struct usb_composite_dev *cdev = get_gadget_data(gadget); in __composite_unbind() local
2157 struct usb_gadget_strings *gstr = cdev->driver->strings[0]; in __composite_unbind()
2165 WARN_ON(cdev->config); in __composite_unbind()
2167 while (!list_empty(&cdev->configs)) { in __composite_unbind()
2169 c = list_first_entry(&cdev->configs, in __composite_unbind()
2171 remove_config(cdev, c); in __composite_unbind()
2173 if (cdev->driver->unbind && unbind_driver) in __composite_unbind()
2174 cdev->driver->unbind(cdev); in __composite_unbind()
2176 composite_dev_cleanup(cdev); in __composite_unbind()
2178 if (dev_str[USB_GADGET_MANUFACTURER_IDX].s == cdev->def_manufacturer) in __composite_unbind()
2181 kfree(cdev->def_manufacturer); in __composite_unbind()
2182 kfree(cdev); in __composite_unbind()
2230 struct usb_composite_dev *cdev) in composite_dev_prepare() argument
2232 struct usb_gadget *gadget = cdev->gadget; in composite_dev_prepare()
2236 cdev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL); in composite_dev_prepare()
2237 if (!cdev->req) in composite_dev_prepare()
2240 cdev->req->buf = kzalloc(USB_COMP_EP0_BUFSIZ, GFP_KERNEL); in composite_dev_prepare()
2241 if (!cdev->req->buf) in composite_dev_prepare()
2248 cdev->req->complete = composite_setup_complete; in composite_dev_prepare()
2249 cdev->req->context = cdev; in composite_dev_prepare()
2250 gadget->ep0->driver_data = cdev; in composite_dev_prepare()
2252 cdev->driver = composite; in composite_dev_prepare()
2269 kfree(cdev->req->buf); in composite_dev_prepare()
2271 usb_ep_free_request(gadget->ep0, cdev->req); in composite_dev_prepare()
2272 cdev->req = NULL; in composite_dev_prepare()
2276 int composite_os_desc_req_prepare(struct usb_composite_dev *cdev, in composite_os_desc_req_prepare() argument
2281 cdev->os_desc_req = usb_ep_alloc_request(ep0, GFP_KERNEL); in composite_os_desc_req_prepare()
2282 if (!cdev->os_desc_req) { in composite_os_desc_req_prepare()
2287 cdev->os_desc_req->buf = kmalloc(USB_COMP_EP0_OS_DESC_BUFSIZ, in composite_os_desc_req_prepare()
2289 if (!cdev->os_desc_req->buf) { in composite_os_desc_req_prepare()
2291 usb_ep_free_request(ep0, cdev->os_desc_req); in composite_os_desc_req_prepare()
2294 cdev->os_desc_req->context = cdev; in composite_os_desc_req_prepare()
2295 cdev->os_desc_req->complete = composite_setup_complete; in composite_os_desc_req_prepare()
2300 void composite_dev_cleanup(struct usb_composite_dev *cdev) in composite_dev_cleanup() argument
2305 list_for_each_entry_safe(uc, tmp, &cdev->gstrings, list) { in composite_dev_cleanup()
2309 if (cdev->os_desc_req) { in composite_dev_cleanup()
2310 if (cdev->os_desc_pending) in composite_dev_cleanup()
2311 usb_ep_dequeue(cdev->gadget->ep0, cdev->os_desc_req); in composite_dev_cleanup()
2313 kfree(cdev->os_desc_req->buf); in composite_dev_cleanup()
2314 cdev->os_desc_req->buf = NULL; in composite_dev_cleanup()
2315 usb_ep_free_request(cdev->gadget->ep0, cdev->os_desc_req); in composite_dev_cleanup()
2316 cdev->os_desc_req = NULL; in composite_dev_cleanup()
2318 if (cdev->req) { in composite_dev_cleanup()
2319 if (cdev->setup_pending) in composite_dev_cleanup()
2320 usb_ep_dequeue(cdev->gadget->ep0, cdev->req); in composite_dev_cleanup()
2322 kfree(cdev->req->buf); in composite_dev_cleanup()
2323 cdev->req->buf = NULL; in composite_dev_cleanup()
2324 usb_ep_free_request(cdev->gadget->ep0, cdev->req); in composite_dev_cleanup()
2325 cdev->req = NULL; in composite_dev_cleanup()
2327 cdev->next_string_id = 0; in composite_dev_cleanup()
2328 device_remove_file(&cdev->gadget->dev, &dev_attr_suspended); in composite_dev_cleanup()
2340 &cdev->gadget->ep_list, ep_list) { in composite_dev_cleanup()
2349 struct usb_composite_dev *cdev; in composite_bind() local
2353 cdev = kzalloc(sizeof *cdev, GFP_KERNEL); in composite_bind()
2354 if (!cdev) in composite_bind()
2357 spin_lock_init(&cdev->lock); in composite_bind()
2358 cdev->gadget = gadget; in composite_bind()
2359 set_gadget_data(gadget, cdev); in composite_bind()
2360 INIT_LIST_HEAD(&cdev->configs); in composite_bind()
2361 INIT_LIST_HEAD(&cdev->gstrings); in composite_bind()
2363 status = composite_dev_prepare(composite, cdev); in composite_bind()
2371 status = composite->bind(cdev); in composite_bind()
2375 if (cdev->use_os_string) { in composite_bind()
2376 status = composite_os_desc_req_prepare(cdev, gadget->ep0); in composite_bind()
2381 update_unchanged_dev_desc(&cdev->desc, composite->dev); in composite_bind()
2384 if (composite->needs_serial && !cdev->desc.iSerialNumber) in composite_bind()
2385 WARNING(cdev, "userspace failed to provide iSerialNumber\n"); in composite_bind()
2387 INFO(cdev, "%s ready\n", composite->name); in composite_bind()
2399 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_suspend() local
2405 DBG(cdev, "suspend\n"); in composite_suspend()
2406 if (cdev->config) { in composite_suspend()
2407 list_for_each_entry(f, &cdev->config->functions, list) { in composite_suspend()
2412 if (cdev->driver->suspend) in composite_suspend()
2413 cdev->driver->suspend(cdev); in composite_suspend()
2415 cdev->suspended = 1; in composite_suspend()
2423 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_resume() local
2430 DBG(cdev, "resume\n"); in composite_resume()
2431 if (cdev->driver->resume) in composite_resume()
2432 cdev->driver->resume(cdev); in composite_resume()
2433 if (cdev->config) { in composite_resume()
2434 list_for_each_entry(f, &cdev->config->functions, list) { in composite_resume()
2439 maxpower = cdev->config->MaxPower ? in composite_resume()
2440 cdev->config->MaxPower : CONFIG_USB_GADGET_VBUS_DRAW; in composite_resume()
2452 cdev->suspended = 0; in composite_resume()
2533 void usb_composite_setup_continue(struct usb_composite_dev *cdev) in usb_composite_setup_continue() argument
2536 struct usb_request *req = cdev->req; in usb_composite_setup_continue()
2539 DBG(cdev, "%s\n", __func__); in usb_composite_setup_continue()
2540 spin_lock_irqsave(&cdev->lock, flags); in usb_composite_setup_continue()
2542 if (cdev->delayed_status == 0) { in usb_composite_setup_continue()
2543 WARN(cdev, "%s: Unexpected call\n", __func__); in usb_composite_setup_continue()
2545 } else if (--cdev->delayed_status == 0) { in usb_composite_setup_continue()
2546 DBG(cdev, "%s: Completing delayed status\n", __func__); in usb_composite_setup_continue()
2548 req->context = cdev; in usb_composite_setup_continue()
2549 value = composite_ep0_queue(cdev, req, GFP_ATOMIC); in usb_composite_setup_continue()
2551 DBG(cdev, "ep_queue --> %d\n", value); in usb_composite_setup_continue()
2553 composite_setup_complete(cdev->gadget->ep0, req); in usb_composite_setup_continue()
2557 spin_unlock_irqrestore(&cdev->lock, flags); in usb_composite_setup_continue()
2567 void usb_composite_overwrite_options(struct usb_composite_dev *cdev, in usb_composite_overwrite_options() argument
2570 struct usb_device_descriptor *desc = &cdev->desc; in usb_composite_overwrite_options()
2571 struct usb_gadget_strings *gstr = cdev->driver->strings[0]; in usb_composite_overwrite_options()
2593 cdev->def_manufacturer = composite_default_mfr(cdev->gadget); in usb_composite_overwrite_options()
2594 dev_str[USB_GADGET_MANUFACTURER_IDX].s = cdev->def_manufacturer; in usb_composite_overwrite_options()