Lines Matching refs:cdev

106 	struct usb_composite_dev	*cdev = get_gadget_data(g);  in config_ep_by_speed()  local
174 ERROR(cdev, "ep0 bMaxBurst must be 0\n"); in config_ep_by_speed()
202 DBG(config->cdev, "adding '%s'/%p to config '%s'/%p\n", in usb_add_function()
236 DBG(config->cdev, "adding '%s'/%p --> %d\n", in usb_add_function()
275 struct usb_composite_dev *cdev = function->config->cdev; in usb_function_deactivate() local
279 spin_lock_irqsave(&cdev->lock, flags); in usb_function_deactivate()
281 if (cdev->deactivations == 0) in usb_function_deactivate()
282 status = usb_gadget_disconnect(cdev->gadget); in usb_function_deactivate()
284 cdev->deactivations++; in usb_function_deactivate()
286 spin_unlock_irqrestore(&cdev->lock, flags); in usb_function_deactivate()
303 struct usb_composite_dev *cdev = function->config->cdev; in usb_function_activate() local
307 spin_lock_irqsave(&cdev->lock, flags); in usb_function_activate()
309 if (WARN_ON(cdev->deactivations == 0)) in usb_function_activate()
312 cdev->deactivations--; in usb_function_activate()
313 if (cdev->deactivations == 0) in usb_function_activate()
314 status = usb_gadget_connect(cdev->gadget); in usb_function_activate()
317 spin_unlock_irqrestore(&cdev->lock, flags); in usb_function_activate()
439 static int config_desc(struct usb_composite_dev *cdev, unsigned w_value) in config_desc() argument
441 struct usb_gadget *gadget = cdev->gadget; in config_desc()
463 pos = &cdev->configs; in config_desc()
464 c = cdev->os_desc_config; in config_desc()
468 while ((pos = pos->next) != &cdev->configs) { in config_desc()
472 if (c == cdev->os_desc_config) in config_desc()
492 return config_buf(c, speed, cdev->req->buf, type); in config_desc()
498 static int count_configs(struct usb_composite_dev *cdev, unsigned type) in count_configs() argument
500 struct usb_gadget *gadget = cdev->gadget; in count_configs()
514 list_for_each_entry(c, &cdev->configs, list) { in count_configs()
540 static int bos_desc(struct usb_composite_dev *cdev) in bos_desc() argument
545 struct usb_bos_descriptor *bos = cdev->req->buf; in bos_desc()
557 usb_ext = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
569 ss_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
583 if (cdev->gadget->ops->get_config_params) in bos_desc()
584 cdev->gadget->ops->get_config_params(&dcd_config_params); in bos_desc()
596 static void device_qual(struct usb_composite_dev *cdev) in device_qual() argument
598 struct usb_qualifier_descriptor *qual = cdev->req->buf; in device_qual()
603 qual->bcdUSB = cdev->desc.bcdUSB; in device_qual()
604 qual->bDeviceClass = cdev->desc.bDeviceClass; in device_qual()
605 qual->bDeviceSubClass = cdev->desc.bDeviceSubClass; in device_qual()
606 qual->bDeviceProtocol = cdev->desc.bDeviceProtocol; in device_qual()
608 qual->bMaxPacketSize0 = cdev->gadget->ep0->maxpacket; in device_qual()
609 qual->bNumConfigurations = count_configs(cdev, USB_DT_DEVICE_QUALIFIER); in device_qual()
615 static void reset_config(struct usb_composite_dev *cdev) in reset_config() argument
619 DBG(cdev, "reset config\n"); in reset_config()
621 list_for_each_entry(f, &cdev->config->functions, list) { in reset_config()
627 cdev->config = NULL; in reset_config()
628 cdev->delayed_status = 0; in reset_config()
631 static int set_config(struct usb_composite_dev *cdev, in set_config() argument
634 struct usb_gadget *gadget = cdev->gadget; in set_config()
641 list_for_each_entry(c, &cdev->configs, list) { in set_config()
648 if (cdev->config) in set_config()
649 reset_config(cdev); in set_config()
657 if (cdev->config) in set_config()
658 reset_config(cdev); in set_config()
662 INFO(cdev, "%s config #%d: %s\n", in set_config()
670 cdev->config = c; in set_config()
712 DBG(cdev, "interface %d (%s/%p) alt 0 --> %d\n", in set_config()
715 reset_config(cdev); in set_config()
720 DBG(cdev, in set_config()
723 cdev->delayed_status++; in set_config()
724 DBG(cdev, "delayed_status count %d\n", in set_config()
725 cdev->delayed_status); in set_config()
733 if (result >= 0 && cdev->delayed_status) in set_config()
738 int usb_add_config_only(struct usb_composite_dev *cdev, in usb_add_config_only() argument
747 list_for_each_entry(c, &cdev->configs, list) { in usb_add_config_only()
752 config->cdev = cdev; in usb_add_config_only()
753 list_add_tail(&config->list, &cdev->configs); in usb_add_config_only()
778 int usb_add_config(struct usb_composite_dev *cdev, in usb_add_config() argument
787 DBG(cdev, "adding config #%u '%s'/%p\n", in usb_add_config()
791 status = usb_add_config_only(cdev, config); in usb_add_config()
804 DBG(cdev, "unbind function '%s'/%p\n", in usb_add_config()
811 config->cdev = NULL; in usb_add_config()
815 DBG(cdev, "cfg %d/%p speeds:%s%s%s\n", in usb_add_config()
820 ? (gadget_is_dualspeed(cdev->gadget) in usb_add_config()
830 DBG(cdev, " interface %d = %s/%p\n", in usb_add_config()
838 usb_ep_autoconfig_reset(cdev->gadget); in usb_add_config()
842 DBG(cdev, "added config '%s'/%u --> %d\n", config->label, in usb_add_config()
848 static void remove_config(struct usb_composite_dev *cdev, in remove_config() argument
858 DBG(cdev, "unbind function '%s'/%p\n", f->name, f); in remove_config()
865 DBG(cdev, "unbind config '%s'/%p\n", config->label, config); in remove_config()
880 void usb_remove_config(struct usb_composite_dev *cdev, in usb_remove_config() argument
885 spin_lock_irqsave(&cdev->lock, flags); in usb_remove_config()
887 if (cdev->config == config) in usb_remove_config()
888 reset_config(cdev); in usb_remove_config()
890 spin_unlock_irqrestore(&cdev->lock, flags); in usb_remove_config()
892 remove_config(cdev, config); in usb_remove_config()
943 static int get_string(struct usb_composite_dev *cdev, in get_string() argument
946 struct usb_composite_driver *composite = cdev->driver; in get_string()
969 list_for_each_entry(c, &cdev->configs, list) { in get_string()
980 list_for_each_entry(uc, &cdev->gstrings, list) { in get_string()
996 if (cdev->use_os_string && language == 0 && id == OS_STRING_IDX) { in get_string()
1001 sizeof(b->qwSignature) == sizeof(cdev->qw_sign), in get_string()
1003 memcpy(&b->qwSignature, cdev->qw_sign, sizeof(b->qwSignature)); in get_string()
1004 b->bMS_VendorCode = cdev->b_vendor_code; in get_string()
1009 list_for_each_entry(uc, &cdev->gstrings, list) { in get_string()
1027 list_for_each_entry(c, &cdev->configs, list) { in get_string()
1058 int usb_string_id(struct usb_composite_dev *cdev) in usb_string_id() argument
1060 if (cdev->next_string_id < 254) { in usb_string_id()
1064 cdev->next_string_id++; in usb_string_id()
1065 return cdev->next_string_id; in usb_string_id()
1087 int usb_string_ids_tab(struct usb_composite_dev *cdev, struct usb_string *str) in usb_string_ids_tab() argument
1089 int next = cdev->next_string_id; in usb_string_ids_tab()
1097 cdev->next_string_id = next; in usb_string_ids_tab()
1171 struct usb_string *usb_gstrings_attach(struct usb_composite_dev *cdev, in usb_gstrings_attach() argument
1191 ret = usb_string_ids_tab(cdev, n_gs[0]->strings); in usb_gstrings_attach()
1208 list_add_tail(&uc->list, &cdev->gstrings); in usb_gstrings_attach()
1249 struct usb_composite_dev *cdev; in composite_setup_complete() local
1266 cdev = req->context; in composite_setup_complete()
1268 if (cdev->req == req) in composite_setup_complete()
1269 cdev->setup_pending = false; in composite_setup_complete()
1270 else if (cdev->os_desc_req == req) in composite_setup_complete()
1271 cdev->os_desc_pending = false; in composite_setup_complete()
1276 static int composite_ep0_queue(struct usb_composite_dev *cdev, in composite_ep0_queue() argument
1281 ret = usb_ep_queue(cdev->gadget->ep0, req, gfp_flags); in composite_ep0_queue()
1283 if (cdev->req == req) in composite_ep0_queue()
1284 cdev->setup_pending = true; in composite_ep0_queue()
1285 else if (cdev->os_desc_req == req) in composite_ep0_queue()
1286 cdev->os_desc_pending = true; in composite_ep0_queue()
1454 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_setup() local
1455 struct usb_request *req = cdev->req; in composite_setup()
1470 req->context = cdev; in composite_setup()
1473 gadget->ep0->driver_data = cdev; in composite_setup()
1491 cdev->desc.bNumConfigurations = in composite_setup()
1492 count_configs(cdev, USB_DT_DEVICE); in composite_setup()
1493 cdev->desc.bMaxPacketSize0 = in composite_setup()
1494 cdev->gadget->ep0->maxpacket; in composite_setup()
1497 cdev->desc.bcdUSB = cpu_to_le16(0x0300); in composite_setup()
1498 cdev->desc.bMaxPacketSize0 = 9; in composite_setup()
1500 cdev->desc.bcdUSB = cpu_to_le16(0x0210); in composite_setup()
1504 value = min(w_length, (u16) sizeof cdev->desc); in composite_setup()
1505 memcpy(req->buf, &cdev->desc, value); in composite_setup()
1511 device_qual(cdev); in composite_setup()
1521 value = config_desc(cdev, w_value); in composite_setup()
1526 value = get_string(cdev, req->buf, in composite_setup()
1533 value = bos_desc(cdev); in composite_setup()
1546 DBG(cdev, "HNP available\n"); in composite_setup()
1548 DBG(cdev, "HNP on another port\n"); in composite_setup()
1550 VDBG(cdev, "HNP inactive\n"); in composite_setup()
1552 spin_lock(&cdev->lock); in composite_setup()
1553 value = set_config(cdev, ctrl, w_value); in composite_setup()
1554 spin_unlock(&cdev->lock); in composite_setup()
1559 if (cdev->config) in composite_setup()
1560 *(u8 *)req->buf = cdev->config->bConfigurationValue; in composite_setup()
1572 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1574 f = cdev->config->interface[intf]; in composite_setup()
1581 DBG(cdev, in composite_setup()
1584 cdev->delayed_status++; in composite_setup()
1585 DBG(cdev, "delayed_status count %d\n", in composite_setup()
1586 cdev->delayed_status); in composite_setup()
1592 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1594 f = cdev->config->interface[intf]; in composite_setup()
1619 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1621 f = cdev->config->interface[intf]; in composite_setup()
1642 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1644 f = cdev->config->interface[intf]; in composite_setup()
1651 ERROR(cdev, in composite_setup()
1664 if (cdev->use_os_string && cdev->os_desc_config && in composite_setup()
1666 ctrl->bRequest == cdev->b_vendor_code) { in composite_setup()
1673 req = cdev->os_desc_req; in composite_setup()
1674 req->context = cdev; in composite_setup()
1677 os_desc_cfg = cdev->os_desc_config; in composite_setup()
1737 req->context = cdev; in composite_setup()
1739 value = composite_ep0_queue(cdev, req, GFP_ATOMIC); in composite_setup()
1741 DBG(cdev, "ep_queue --> %d\n", value); in composite_setup()
1748 VDBG(cdev, in composite_setup()
1761 if (cdev->config) { in composite_setup()
1762 list_for_each_entry(f, &cdev->config->functions, list) in composite_setup()
1770 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1772 f = cdev->config->interface[intf]; in composite_setup()
1777 list_for_each_entry(f, &cdev->config->functions, list) { in composite_setup()
1781 if (&f->list == &cdev->config->functions) in composite_setup()
1791 c = cdev->config; in composite_setup()
1816 req->context = cdev; in composite_setup()
1818 value = composite_ep0_queue(cdev, req, GFP_ATOMIC); in composite_setup()
1820 DBG(cdev, "ep_queue --> %d\n", value); in composite_setup()
1825 WARN(cdev, in composite_setup()
1837 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_disconnect() local
1843 spin_lock_irqsave(&cdev->lock, flags); in composite_disconnect()
1844 if (cdev->config) in composite_disconnect()
1845 reset_config(cdev); in composite_disconnect()
1846 if (cdev->driver->disconnect) in composite_disconnect()
1847 cdev->driver->disconnect(cdev); in composite_disconnect()
1848 spin_unlock_irqrestore(&cdev->lock, flags); in composite_disconnect()
1857 struct usb_composite_dev *cdev = get_gadget_data(gadget); in suspended_show() local
1859 return sprintf(buf, "%d\n", cdev->suspended); in suspended_show()
1865 struct usb_composite_dev *cdev = get_gadget_data(gadget); in __composite_unbind() local
1872 WARN_ON(cdev->config); in __composite_unbind()
1874 while (!list_empty(&cdev->configs)) { in __composite_unbind()
1876 c = list_first_entry(&cdev->configs, in __composite_unbind()
1878 remove_config(cdev, c); in __composite_unbind()
1880 if (cdev->driver->unbind && unbind_driver) in __composite_unbind()
1881 cdev->driver->unbind(cdev); in __composite_unbind()
1883 composite_dev_cleanup(cdev); in __composite_unbind()
1885 kfree(cdev->def_manufacturer); in __composite_unbind()
1886 kfree(cdev); in __composite_unbind()
1934 struct usb_composite_dev *cdev) in composite_dev_prepare() argument
1936 struct usb_gadget *gadget = cdev->gadget; in composite_dev_prepare()
1940 cdev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL); in composite_dev_prepare()
1941 if (!cdev->req) in composite_dev_prepare()
1944 cdev->req->buf = kmalloc(USB_COMP_EP0_BUFSIZ, GFP_KERNEL); in composite_dev_prepare()
1945 if (!cdev->req->buf) in composite_dev_prepare()
1952 cdev->req->complete = composite_setup_complete; in composite_dev_prepare()
1953 cdev->req->context = cdev; in composite_dev_prepare()
1954 gadget->ep0->driver_data = cdev; in composite_dev_prepare()
1956 cdev->driver = composite; in composite_dev_prepare()
1973 kfree(cdev->req->buf); in composite_dev_prepare()
1975 usb_ep_free_request(gadget->ep0, cdev->req); in composite_dev_prepare()
1976 cdev->req = NULL; in composite_dev_prepare()
1980 int composite_os_desc_req_prepare(struct usb_composite_dev *cdev, in composite_os_desc_req_prepare() argument
1985 cdev->os_desc_req = usb_ep_alloc_request(ep0, GFP_KERNEL); in composite_os_desc_req_prepare()
1986 if (!cdev->os_desc_req) { in composite_os_desc_req_prepare()
1987 ret = PTR_ERR(cdev->os_desc_req); in composite_os_desc_req_prepare()
1992 cdev->os_desc_req->buf = kmalloc(4096, GFP_KERNEL); in composite_os_desc_req_prepare()
1993 if (!cdev->os_desc_req->buf) { in composite_os_desc_req_prepare()
1994 ret = PTR_ERR(cdev->os_desc_req->buf); in composite_os_desc_req_prepare()
1995 kfree(cdev->os_desc_req); in composite_os_desc_req_prepare()
1998 cdev->os_desc_req->context = cdev; in composite_os_desc_req_prepare()
1999 cdev->os_desc_req->complete = composite_setup_complete; in composite_os_desc_req_prepare()
2004 void composite_dev_cleanup(struct usb_composite_dev *cdev) in composite_dev_cleanup() argument
2008 list_for_each_entry_safe(uc, tmp, &cdev->gstrings, list) { in composite_dev_cleanup()
2012 if (cdev->os_desc_req) { in composite_dev_cleanup()
2013 if (cdev->os_desc_pending) in composite_dev_cleanup()
2014 usb_ep_dequeue(cdev->gadget->ep0, cdev->os_desc_req); in composite_dev_cleanup()
2016 kfree(cdev->os_desc_req->buf); in composite_dev_cleanup()
2017 usb_ep_free_request(cdev->gadget->ep0, cdev->os_desc_req); in composite_dev_cleanup()
2019 if (cdev->req) { in composite_dev_cleanup()
2020 if (cdev->setup_pending) in composite_dev_cleanup()
2021 usb_ep_dequeue(cdev->gadget->ep0, cdev->req); in composite_dev_cleanup()
2023 kfree(cdev->req->buf); in composite_dev_cleanup()
2024 usb_ep_free_request(cdev->gadget->ep0, cdev->req); in composite_dev_cleanup()
2026 cdev->next_string_id = 0; in composite_dev_cleanup()
2027 device_remove_file(&cdev->gadget->dev, &dev_attr_suspended); in composite_dev_cleanup()
2033 struct usb_composite_dev *cdev; in composite_bind() local
2037 cdev = kzalloc(sizeof *cdev, GFP_KERNEL); in composite_bind()
2038 if (!cdev) in composite_bind()
2041 spin_lock_init(&cdev->lock); in composite_bind()
2042 cdev->gadget = gadget; in composite_bind()
2043 set_gadget_data(gadget, cdev); in composite_bind()
2044 INIT_LIST_HEAD(&cdev->configs); in composite_bind()
2045 INIT_LIST_HEAD(&cdev->gstrings); in composite_bind()
2047 status = composite_dev_prepare(composite, cdev); in composite_bind()
2055 status = composite->bind(cdev); in composite_bind()
2059 if (cdev->use_os_string) { in composite_bind()
2060 status = composite_os_desc_req_prepare(cdev, gadget->ep0); in composite_bind()
2065 update_unchanged_dev_desc(&cdev->desc, composite->dev); in composite_bind()
2068 if (composite->needs_serial && !cdev->desc.iSerialNumber) in composite_bind()
2069 WARNING(cdev, "userspace failed to provide iSerialNumber\n"); in composite_bind()
2071 INFO(cdev, "%s ready\n", composite->name); in composite_bind()
2083 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_suspend() local
2089 DBG(cdev, "suspend\n"); in composite_suspend()
2090 if (cdev->config) { in composite_suspend()
2091 list_for_each_entry(f, &cdev->config->functions, list) { in composite_suspend()
2096 if (cdev->driver->suspend) in composite_suspend()
2097 cdev->driver->suspend(cdev); in composite_suspend()
2099 cdev->suspended = 1; in composite_suspend()
2106 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_resume() local
2113 DBG(cdev, "resume\n"); in composite_resume()
2114 if (cdev->driver->resume) in composite_resume()
2115 cdev->driver->resume(cdev); in composite_resume()
2116 if (cdev->config) { in composite_resume()
2117 list_for_each_entry(f, &cdev->config->functions, list) { in composite_resume()
2122 maxpower = cdev->config->MaxPower; in composite_resume()
2128 cdev->suspended = 0; in composite_resume()
2209 void usb_composite_setup_continue(struct usb_composite_dev *cdev) in usb_composite_setup_continue() argument
2212 struct usb_request *req = cdev->req; in usb_composite_setup_continue()
2215 DBG(cdev, "%s\n", __func__); in usb_composite_setup_continue()
2216 spin_lock_irqsave(&cdev->lock, flags); in usb_composite_setup_continue()
2218 if (cdev->delayed_status == 0) { in usb_composite_setup_continue()
2219 WARN(cdev, "%s: Unexpected call\n", __func__); in usb_composite_setup_continue()
2221 } else if (--cdev->delayed_status == 0) { in usb_composite_setup_continue()
2222 DBG(cdev, "%s: Completing delayed status\n", __func__); in usb_composite_setup_continue()
2224 req->context = cdev; in usb_composite_setup_continue()
2225 value = composite_ep0_queue(cdev, req, GFP_ATOMIC); in usb_composite_setup_continue()
2227 DBG(cdev, "ep_queue --> %d\n", value); in usb_composite_setup_continue()
2229 composite_setup_complete(cdev->gadget->ep0, req); in usb_composite_setup_continue()
2233 spin_unlock_irqrestore(&cdev->lock, flags); in usb_composite_setup_continue()
2253 void usb_composite_overwrite_options(struct usb_composite_dev *cdev, in usb_composite_overwrite_options() argument
2256 struct usb_device_descriptor *desc = &cdev->desc; in usb_composite_overwrite_options()
2257 struct usb_gadget_strings *gstr = cdev->driver->strings[0]; in usb_composite_overwrite_options()
2279 cdev->def_manufacturer = composite_default_mfr(cdev->gadget); in usb_composite_overwrite_options()
2280 dev_str[USB_GADGET_MANUFACTURER_IDX].s = cdev->def_manufacturer; in usb_composite_overwrite_options()