Lines Matching refs:cdev

107 	struct usb_composite_dev	*cdev = get_gadget_data(g);  in config_ep_by_speed()  local
175 ERROR(cdev, "ep0 bMaxBurst must be 0\n"); in config_ep_by_speed()
203 DBG(config->cdev, "adding '%s'/%p to config '%s'/%p\n", in usb_add_function()
243 DBG(config->cdev, "adding '%s'/%p --> %d\n", in usb_add_function()
282 struct usb_composite_dev *cdev = function->config->cdev; in usb_function_deactivate() local
286 spin_lock_irqsave(&cdev->lock, flags); in usb_function_deactivate()
288 if (cdev->deactivations == 0) in usb_function_deactivate()
289 status = usb_gadget_deactivate(cdev->gadget); in usb_function_deactivate()
291 cdev->deactivations++; in usb_function_deactivate()
293 spin_unlock_irqrestore(&cdev->lock, flags); in usb_function_deactivate()
310 struct usb_composite_dev *cdev = function->config->cdev; in usb_function_activate() local
314 spin_lock_irqsave(&cdev->lock, flags); in usb_function_activate()
316 if (WARN_ON(cdev->deactivations == 0)) in usb_function_activate()
319 cdev->deactivations--; in usb_function_activate()
320 if (cdev->deactivations == 0) in usb_function_activate()
321 status = usb_gadget_activate(cdev->gadget); in usb_function_activate()
324 spin_unlock_irqrestore(&cdev->lock, flags); in usb_function_activate()
446 static int config_desc(struct usb_composite_dev *cdev, unsigned w_value) in config_desc() argument
448 struct usb_gadget *gadget = cdev->gadget; in config_desc()
470 pos = &cdev->configs; in config_desc()
471 c = cdev->os_desc_config; in config_desc()
475 while ((pos = pos->next) != &cdev->configs) { in config_desc()
479 if (c == cdev->os_desc_config) in config_desc()
499 return config_buf(c, speed, cdev->req->buf, type); in config_desc()
505 static int count_configs(struct usb_composite_dev *cdev, unsigned type) in count_configs() argument
507 struct usb_gadget *gadget = cdev->gadget; in count_configs()
521 list_for_each_entry(c, &cdev->configs, list) { in count_configs()
547 static int bos_desc(struct usb_composite_dev *cdev) in bos_desc() argument
552 struct usb_bos_descriptor *bos = cdev->req->buf; in bos_desc()
564 usb_ext = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
576 ss_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
590 if (cdev->gadget->ops->get_config_params) in bos_desc()
591 cdev->gadget->ops->get_config_params(&dcd_config_params); in bos_desc()
603 static void device_qual(struct usb_composite_dev *cdev) in device_qual() argument
605 struct usb_qualifier_descriptor *qual = cdev->req->buf; in device_qual()
610 qual->bcdUSB = cdev->desc.bcdUSB; in device_qual()
611 qual->bDeviceClass = cdev->desc.bDeviceClass; in device_qual()
612 qual->bDeviceSubClass = cdev->desc.bDeviceSubClass; in device_qual()
613 qual->bDeviceProtocol = cdev->desc.bDeviceProtocol; in device_qual()
615 qual->bMaxPacketSize0 = cdev->gadget->ep0->maxpacket; in device_qual()
616 qual->bNumConfigurations = count_configs(cdev, USB_DT_DEVICE_QUALIFIER); in device_qual()
622 static void reset_config(struct usb_composite_dev *cdev) in reset_config() argument
626 DBG(cdev, "reset config\n"); in reset_config()
628 list_for_each_entry(f, &cdev->config->functions, list) { in reset_config()
634 cdev->config = NULL; in reset_config()
635 cdev->delayed_status = 0; in reset_config()
638 static int set_config(struct usb_composite_dev *cdev, in set_config() argument
641 struct usb_gadget *gadget = cdev->gadget; in set_config()
648 list_for_each_entry(c, &cdev->configs, list) { in set_config()
655 if (cdev->config) in set_config()
656 reset_config(cdev); in set_config()
664 if (cdev->config) in set_config()
665 reset_config(cdev); in set_config()
669 INFO(cdev, "%s config #%d: %s\n", in set_config()
677 cdev->config = c; in set_config()
719 DBG(cdev, "interface %d (%s/%p) alt 0 --> %d\n", in set_config()
722 reset_config(cdev); in set_config()
727 DBG(cdev, in set_config()
730 cdev->delayed_status++; in set_config()
731 DBG(cdev, "delayed_status count %d\n", in set_config()
732 cdev->delayed_status); in set_config()
740 if (result >= 0 && cdev->delayed_status) in set_config()
745 int usb_add_config_only(struct usb_composite_dev *cdev, in usb_add_config_only() argument
754 list_for_each_entry(c, &cdev->configs, list) { in usb_add_config_only()
759 config->cdev = cdev; in usb_add_config_only()
760 list_add_tail(&config->list, &cdev->configs); in usb_add_config_only()
785 int usb_add_config(struct usb_composite_dev *cdev, in usb_add_config() argument
794 DBG(cdev, "adding config #%u '%s'/%p\n", in usb_add_config()
798 status = usb_add_config_only(cdev, config); in usb_add_config()
811 DBG(cdev, "unbind function '%s'/%p\n", in usb_add_config()
818 config->cdev = NULL; in usb_add_config()
822 DBG(cdev, "cfg %d/%p speeds:%s%s%s\n", in usb_add_config()
827 ? (gadget_is_dualspeed(cdev->gadget) in usb_add_config()
837 DBG(cdev, " interface %d = %s/%p\n", in usb_add_config()
843 usb_ep_autoconfig_reset(cdev->gadget); in usb_add_config()
847 DBG(cdev, "added config '%s'/%u --> %d\n", config->label, in usb_add_config()
853 static void remove_config(struct usb_composite_dev *cdev, in remove_config() argument
863 DBG(cdev, "unbind function '%s'/%p\n", f->name, f); in remove_config()
870 DBG(cdev, "unbind config '%s'/%p\n", config->label, config); in remove_config()
885 void usb_remove_config(struct usb_composite_dev *cdev, in usb_remove_config() argument
890 spin_lock_irqsave(&cdev->lock, flags); in usb_remove_config()
892 if (cdev->config == config) in usb_remove_config()
893 reset_config(cdev); in usb_remove_config()
895 spin_unlock_irqrestore(&cdev->lock, flags); in usb_remove_config()
897 remove_config(cdev, config); in usb_remove_config()
948 static int get_string(struct usb_composite_dev *cdev, in get_string() argument
951 struct usb_composite_driver *composite = cdev->driver; in get_string()
974 list_for_each_entry(c, &cdev->configs, list) { in get_string()
985 list_for_each_entry(uc, &cdev->gstrings, list) { in get_string()
1001 if (cdev->use_os_string && language == 0 && id == OS_STRING_IDX) { in get_string()
1006 sizeof(b->qwSignature) == sizeof(cdev->qw_sign), in get_string()
1008 memcpy(&b->qwSignature, cdev->qw_sign, sizeof(b->qwSignature)); in get_string()
1009 b->bMS_VendorCode = cdev->b_vendor_code; in get_string()
1014 list_for_each_entry(uc, &cdev->gstrings, list) { in get_string()
1032 list_for_each_entry(c, &cdev->configs, list) { in get_string()
1063 int usb_string_id(struct usb_composite_dev *cdev) in usb_string_id() argument
1065 if (cdev->next_string_id < 254) { in usb_string_id()
1069 cdev->next_string_id++; in usb_string_id()
1070 return cdev->next_string_id; in usb_string_id()
1092 int usb_string_ids_tab(struct usb_composite_dev *cdev, struct usb_string *str) in usb_string_ids_tab() argument
1094 int next = cdev->next_string_id; in usb_string_ids_tab()
1102 cdev->next_string_id = next; in usb_string_ids_tab()
1176 struct usb_string *usb_gstrings_attach(struct usb_composite_dev *cdev, in usb_gstrings_attach() argument
1196 ret = usb_string_ids_tab(cdev, n_gs[0]->strings); in usb_gstrings_attach()
1213 list_add_tail(&uc->list, &cdev->gstrings); in usb_gstrings_attach()
1254 struct usb_composite_dev *cdev; in composite_setup_complete() local
1271 cdev = req->context; in composite_setup_complete()
1273 if (cdev->req == req) in composite_setup_complete()
1274 cdev->setup_pending = false; in composite_setup_complete()
1275 else if (cdev->os_desc_req == req) in composite_setup_complete()
1276 cdev->os_desc_pending = false; in composite_setup_complete()
1281 static int composite_ep0_queue(struct usb_composite_dev *cdev, in composite_ep0_queue() argument
1286 ret = usb_ep_queue(cdev->gadget->ep0, req, gfp_flags); in composite_ep0_queue()
1288 if (cdev->req == req) in composite_ep0_queue()
1289 cdev->setup_pending = true; in composite_ep0_queue()
1290 else if (cdev->os_desc_req == req) in composite_ep0_queue()
1291 cdev->os_desc_pending = true; in composite_ep0_queue()
1459 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_setup() local
1460 struct usb_request *req = cdev->req; in composite_setup()
1475 req->context = cdev; in composite_setup()
1478 gadget->ep0->driver_data = cdev; in composite_setup()
1496 cdev->desc.bNumConfigurations = in composite_setup()
1497 count_configs(cdev, USB_DT_DEVICE); in composite_setup()
1498 cdev->desc.bMaxPacketSize0 = in composite_setup()
1499 cdev->gadget->ep0->maxpacket; in composite_setup()
1502 cdev->desc.bcdUSB = cpu_to_le16(0x0300); in composite_setup()
1503 cdev->desc.bMaxPacketSize0 = 9; in composite_setup()
1505 cdev->desc.bcdUSB = cpu_to_le16(0x0210); in composite_setup()
1508 cdev->desc.bcdUSB = cpu_to_le16(0x0200); in composite_setup()
1511 value = min(w_length, (u16) sizeof cdev->desc); in composite_setup()
1512 memcpy(req->buf, &cdev->desc, value); in composite_setup()
1518 device_qual(cdev); in composite_setup()
1528 value = config_desc(cdev, w_value); in composite_setup()
1533 value = get_string(cdev, req->buf, in composite_setup()
1540 value = bos_desc(cdev); in composite_setup()
1549 if (cdev->config) in composite_setup()
1550 config = cdev->config; in composite_setup()
1553 &cdev->configs, in composite_setup()
1579 DBG(cdev, "HNP available\n"); in composite_setup()
1581 DBG(cdev, "HNP on another port\n"); in composite_setup()
1583 VDBG(cdev, "HNP inactive\n"); in composite_setup()
1585 spin_lock(&cdev->lock); in composite_setup()
1586 value = set_config(cdev, ctrl, w_value); in composite_setup()
1587 spin_unlock(&cdev->lock); in composite_setup()
1592 if (cdev->config) in composite_setup()
1593 *(u8 *)req->buf = cdev->config->bConfigurationValue; in composite_setup()
1605 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1607 f = cdev->config->interface[intf]; in composite_setup()
1614 DBG(cdev, in composite_setup()
1617 cdev->delayed_status++; in composite_setup()
1618 DBG(cdev, "delayed_status count %d\n", in composite_setup()
1619 cdev->delayed_status); in composite_setup()
1625 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1627 f = cdev->config->interface[intf]; in composite_setup()
1652 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1654 f = cdev->config->interface[intf]; in composite_setup()
1675 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1677 f = cdev->config->interface[intf]; in composite_setup()
1684 ERROR(cdev, in composite_setup()
1697 if (cdev->use_os_string && cdev->os_desc_config && in composite_setup()
1699 ctrl->bRequest == cdev->b_vendor_code) { in composite_setup()
1706 req = cdev->os_desc_req; in composite_setup()
1707 req->context = cdev; in composite_setup()
1710 os_desc_cfg = cdev->os_desc_config; in composite_setup()
1770 req->context = cdev; in composite_setup()
1772 value = composite_ep0_queue(cdev, req, GFP_ATOMIC); in composite_setup()
1774 DBG(cdev, "ep_queue --> %d\n", value); in composite_setup()
1781 VDBG(cdev, in composite_setup()
1794 if (cdev->config) { in composite_setup()
1795 list_for_each_entry(f, &cdev->config->functions, list) in composite_setup()
1803 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1805 f = cdev->config->interface[intf]; in composite_setup()
1810 list_for_each_entry(f, &cdev->config->functions, list) { in composite_setup()
1814 if (&f->list == &cdev->config->functions) in composite_setup()
1824 c = cdev->config; in composite_setup()
1849 req->context = cdev; in composite_setup()
1851 value = composite_ep0_queue(cdev, req, GFP_ATOMIC); in composite_setup()
1853 DBG(cdev, "ep_queue --> %d\n", value); in composite_setup()
1858 WARN(cdev, in composite_setup()
1870 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_disconnect() local
1876 spin_lock_irqsave(&cdev->lock, flags); in composite_disconnect()
1877 if (cdev->config) in composite_disconnect()
1878 reset_config(cdev); in composite_disconnect()
1879 if (cdev->driver->disconnect) in composite_disconnect()
1880 cdev->driver->disconnect(cdev); in composite_disconnect()
1881 spin_unlock_irqrestore(&cdev->lock, flags); in composite_disconnect()
1890 struct usb_composite_dev *cdev = get_gadget_data(gadget); in suspended_show() local
1892 return sprintf(buf, "%d\n", cdev->suspended); in suspended_show()
1898 struct usb_composite_dev *cdev = get_gadget_data(gadget); in __composite_unbind() local
1905 WARN_ON(cdev->config); in __composite_unbind()
1907 while (!list_empty(&cdev->configs)) { in __composite_unbind()
1909 c = list_first_entry(&cdev->configs, in __composite_unbind()
1911 remove_config(cdev, c); in __composite_unbind()
1913 if (cdev->driver->unbind && unbind_driver) in __composite_unbind()
1914 cdev->driver->unbind(cdev); in __composite_unbind()
1916 composite_dev_cleanup(cdev); in __composite_unbind()
1918 kfree(cdev->def_manufacturer); in __composite_unbind()
1919 kfree(cdev); in __composite_unbind()
1967 struct usb_composite_dev *cdev) in composite_dev_prepare() argument
1969 struct usb_gadget *gadget = cdev->gadget; in composite_dev_prepare()
1973 cdev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL); in composite_dev_prepare()
1974 if (!cdev->req) in composite_dev_prepare()
1977 cdev->req->buf = kmalloc(USB_COMP_EP0_BUFSIZ, GFP_KERNEL); in composite_dev_prepare()
1978 if (!cdev->req->buf) in composite_dev_prepare()
1985 cdev->req->complete = composite_setup_complete; in composite_dev_prepare()
1986 cdev->req->context = cdev; in composite_dev_prepare()
1987 gadget->ep0->driver_data = cdev; in composite_dev_prepare()
1989 cdev->driver = composite; in composite_dev_prepare()
2006 kfree(cdev->req->buf); in composite_dev_prepare()
2008 usb_ep_free_request(gadget->ep0, cdev->req); in composite_dev_prepare()
2009 cdev->req = NULL; in composite_dev_prepare()
2013 int composite_os_desc_req_prepare(struct usb_composite_dev *cdev, in composite_os_desc_req_prepare() argument
2018 cdev->os_desc_req = usb_ep_alloc_request(ep0, GFP_KERNEL); in composite_os_desc_req_prepare()
2019 if (!cdev->os_desc_req) { in composite_os_desc_req_prepare()
2020 ret = PTR_ERR(cdev->os_desc_req); in composite_os_desc_req_prepare()
2025 cdev->os_desc_req->buf = kmalloc(4096, GFP_KERNEL); in composite_os_desc_req_prepare()
2026 if (!cdev->os_desc_req->buf) { in composite_os_desc_req_prepare()
2027 ret = PTR_ERR(cdev->os_desc_req->buf); in composite_os_desc_req_prepare()
2028 kfree(cdev->os_desc_req); in composite_os_desc_req_prepare()
2031 cdev->os_desc_req->context = cdev; in composite_os_desc_req_prepare()
2032 cdev->os_desc_req->complete = composite_setup_complete; in composite_os_desc_req_prepare()
2037 void composite_dev_cleanup(struct usb_composite_dev *cdev) in composite_dev_cleanup() argument
2041 list_for_each_entry_safe(uc, tmp, &cdev->gstrings, list) { in composite_dev_cleanup()
2045 if (cdev->os_desc_req) { in composite_dev_cleanup()
2046 if (cdev->os_desc_pending) in composite_dev_cleanup()
2047 usb_ep_dequeue(cdev->gadget->ep0, cdev->os_desc_req); in composite_dev_cleanup()
2049 kfree(cdev->os_desc_req->buf); in composite_dev_cleanup()
2050 usb_ep_free_request(cdev->gadget->ep0, cdev->os_desc_req); in composite_dev_cleanup()
2052 if (cdev->req) { in composite_dev_cleanup()
2053 if (cdev->setup_pending) in composite_dev_cleanup()
2054 usb_ep_dequeue(cdev->gadget->ep0, cdev->req); in composite_dev_cleanup()
2056 kfree(cdev->req->buf); in composite_dev_cleanup()
2057 usb_ep_free_request(cdev->gadget->ep0, cdev->req); in composite_dev_cleanup()
2059 cdev->next_string_id = 0; in composite_dev_cleanup()
2060 device_remove_file(&cdev->gadget->dev, &dev_attr_suspended); in composite_dev_cleanup()
2066 struct usb_composite_dev *cdev; in composite_bind() local
2070 cdev = kzalloc(sizeof *cdev, GFP_KERNEL); in composite_bind()
2071 if (!cdev) in composite_bind()
2074 spin_lock_init(&cdev->lock); in composite_bind()
2075 cdev->gadget = gadget; in composite_bind()
2076 set_gadget_data(gadget, cdev); in composite_bind()
2077 INIT_LIST_HEAD(&cdev->configs); in composite_bind()
2078 INIT_LIST_HEAD(&cdev->gstrings); in composite_bind()
2080 status = composite_dev_prepare(composite, cdev); in composite_bind()
2088 status = composite->bind(cdev); in composite_bind()
2092 if (cdev->use_os_string) { in composite_bind()
2093 status = composite_os_desc_req_prepare(cdev, gadget->ep0); in composite_bind()
2098 update_unchanged_dev_desc(&cdev->desc, composite->dev); in composite_bind()
2101 if (composite->needs_serial && !cdev->desc.iSerialNumber) in composite_bind()
2102 WARNING(cdev, "userspace failed to provide iSerialNumber\n"); in composite_bind()
2104 INFO(cdev, "%s ready\n", composite->name); in composite_bind()
2116 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_suspend() local
2122 DBG(cdev, "suspend\n"); in composite_suspend()
2123 if (cdev->config) { in composite_suspend()
2124 list_for_each_entry(f, &cdev->config->functions, list) { in composite_suspend()
2129 if (cdev->driver->suspend) in composite_suspend()
2130 cdev->driver->suspend(cdev); in composite_suspend()
2132 cdev->suspended = 1; in composite_suspend()
2139 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_resume() local
2146 DBG(cdev, "resume\n"); in composite_resume()
2147 if (cdev->driver->resume) in composite_resume()
2148 cdev->driver->resume(cdev); in composite_resume()
2149 if (cdev->config) { in composite_resume()
2150 list_for_each_entry(f, &cdev->config->functions, list) { in composite_resume()
2155 maxpower = cdev->config->MaxPower; in composite_resume()
2161 cdev->suspended = 0; in composite_resume()
2242 void usb_composite_setup_continue(struct usb_composite_dev *cdev) in usb_composite_setup_continue() argument
2245 struct usb_request *req = cdev->req; in usb_composite_setup_continue()
2248 DBG(cdev, "%s\n", __func__); in usb_composite_setup_continue()
2249 spin_lock_irqsave(&cdev->lock, flags); in usb_composite_setup_continue()
2251 if (cdev->delayed_status == 0) { in usb_composite_setup_continue()
2252 WARN(cdev, "%s: Unexpected call\n", __func__); in usb_composite_setup_continue()
2254 } else if (--cdev->delayed_status == 0) { in usb_composite_setup_continue()
2255 DBG(cdev, "%s: Completing delayed status\n", __func__); in usb_composite_setup_continue()
2257 req->context = cdev; in usb_composite_setup_continue()
2258 value = composite_ep0_queue(cdev, req, GFP_ATOMIC); in usb_composite_setup_continue()
2260 DBG(cdev, "ep_queue --> %d\n", value); in usb_composite_setup_continue()
2262 composite_setup_complete(cdev->gadget->ep0, req); in usb_composite_setup_continue()
2266 spin_unlock_irqrestore(&cdev->lock, flags); in usb_composite_setup_continue()
2286 void usb_composite_overwrite_options(struct usb_composite_dev *cdev, in usb_composite_overwrite_options() argument
2289 struct usb_device_descriptor *desc = &cdev->desc; in usb_composite_overwrite_options()
2290 struct usb_gadget_strings *gstr = cdev->driver->strings[0]; in usb_composite_overwrite_options()
2312 cdev->def_manufacturer = composite_default_mfr(cdev->gadget); in usb_composite_overwrite_options()
2313 dev_str[USB_GADGET_MANUFACTURER_IDX].s = cdev->def_manufacturer; in usb_composite_overwrite_options()