Lines Matching refs:cdev

229 				struct usb_composite_dev *cdev;  in config_ep_by_speed()  local
231 cdev = get_gadget_data(g); in config_ep_by_speed()
232 ERROR(cdev, "ep0 bMaxBurst must be 0\n"); in config_ep_by_speed()
261 DBG(config->cdev, "adding '%s'/%p to config '%s'/%p\n", in usb_add_function()
303 DBG(config->cdev, "adding '%s'/%p --> %d\n", in usb_add_function()
345 struct usb_composite_dev *cdev = function->config->cdev; in usb_function_deactivate() local
349 spin_lock_irqsave(&cdev->lock, flags); in usb_function_deactivate()
351 if (cdev->deactivations == 0) in usb_function_deactivate()
352 status = usb_gadget_deactivate(cdev->gadget); in usb_function_deactivate()
354 cdev->deactivations++; in usb_function_deactivate()
356 spin_unlock_irqrestore(&cdev->lock, flags); in usb_function_deactivate()
373 struct usb_composite_dev *cdev = function->config->cdev; in usb_function_activate() local
377 spin_lock_irqsave(&cdev->lock, flags); in usb_function_activate()
379 if (WARN_ON(cdev->deactivations == 0)) in usb_function_activate()
382 cdev->deactivations--; in usb_function_activate()
383 if (cdev->deactivations == 0) in usb_function_activate()
384 status = usb_gadget_activate(cdev->gadget); in usb_function_activate()
387 spin_unlock_irqrestore(&cdev->lock, flags); in usb_function_activate()
499 static int config_desc(struct usb_composite_dev *cdev, unsigned w_value) in config_desc() argument
501 struct usb_gadget *gadget = cdev->gadget; in config_desc()
523 pos = &cdev->configs; in config_desc()
524 c = cdev->os_desc_config; in config_desc()
528 while ((pos = pos->next) != &cdev->configs) { in config_desc()
532 if (c == cdev->os_desc_config) in config_desc()
556 return config_buf(c, speed, cdev->req->buf, type); in config_desc()
562 static int count_configs(struct usb_composite_dev *cdev, unsigned type) in count_configs() argument
564 struct usb_gadget *gadget = cdev->gadget; in count_configs()
581 list_for_each_entry(c, &cdev->configs, list) { in count_configs()
610 static int bos_desc(struct usb_composite_dev *cdev) in bos_desc() argument
614 struct usb_bos_descriptor *bos = cdev->req->buf; in bos_desc()
626 usb_ext = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
638 if (gadget_is_superspeed(cdev->gadget)) { in bos_desc()
641 ss_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
655 if (cdev->gadget->ops->get_config_params) { in bos_desc()
656 cdev->gadget->ops->get_config_params( in bos_desc()
669 if (gadget_is_superspeed_plus(cdev->gadget)) { in bos_desc()
672 ssp_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
717 static void device_qual(struct usb_composite_dev *cdev) in device_qual() argument
719 struct usb_qualifier_descriptor *qual = cdev->req->buf; in device_qual()
724 qual->bcdUSB = cdev->desc.bcdUSB; in device_qual()
725 qual->bDeviceClass = cdev->desc.bDeviceClass; in device_qual()
726 qual->bDeviceSubClass = cdev->desc.bDeviceSubClass; in device_qual()
727 qual->bDeviceProtocol = cdev->desc.bDeviceProtocol; in device_qual()
729 qual->bMaxPacketSize0 = cdev->gadget->ep0->maxpacket; in device_qual()
730 qual->bNumConfigurations = count_configs(cdev, USB_DT_DEVICE_QUALIFIER); in device_qual()
736 static void reset_config(struct usb_composite_dev *cdev) in reset_config() argument
740 DBG(cdev, "reset config\n"); in reset_config()
742 list_for_each_entry(f, &cdev->config->functions, list) { in reset_config()
748 cdev->config = NULL; in reset_config()
749 cdev->delayed_status = 0; in reset_config()
752 static int set_config(struct usb_composite_dev *cdev, in set_config() argument
755 struct usb_gadget *gadget = cdev->gadget; in set_config()
762 list_for_each_entry(c, &cdev->configs, list) { in set_config()
769 if (cdev->config) in set_config()
770 reset_config(cdev); in set_config()
778 if (cdev->config) in set_config()
779 reset_config(cdev); in set_config()
783 INFO(cdev, "%s config #%d: %s\n", in set_config()
791 cdev->config = c; in set_config()
824 DBG(cdev, "interface %d (%s/%p) alt 0 --> %d\n", in set_config()
827 reset_config(cdev); in set_config()
832 DBG(cdev, in set_config()
835 cdev->delayed_status++; in set_config()
836 DBG(cdev, "delayed_status count %d\n", in set_config()
837 cdev->delayed_status); in set_config()
845 if (result >= 0 && cdev->delayed_status) in set_config()
850 int usb_add_config_only(struct usb_composite_dev *cdev, in usb_add_config_only() argument
859 list_for_each_entry(c, &cdev->configs, list) { in usb_add_config_only()
864 config->cdev = cdev; in usb_add_config_only()
865 list_add_tail(&config->list, &cdev->configs); in usb_add_config_only()
890 int usb_add_config(struct usb_composite_dev *cdev, in usb_add_config() argument
899 DBG(cdev, "adding config #%u '%s'/%p\n", in usb_add_config()
903 status = usb_add_config_only(cdev, config); in usb_add_config()
916 DBG(cdev, "unbind function '%s'/%p\n", in usb_add_config()
923 config->cdev = NULL; in usb_add_config()
927 DBG(cdev, "cfg %d/%p speeds:%s%s%s%s\n", in usb_add_config()
933 ? (gadget_is_dualspeed(cdev->gadget) in usb_add_config()
943 DBG(cdev, " interface %d = %s/%p\n", in usb_add_config()
949 usb_ep_autoconfig_reset(cdev->gadget); in usb_add_config()
953 DBG(cdev, "added config '%s'/%u --> %d\n", config->label, in usb_add_config()
959 static void remove_config(struct usb_composite_dev *cdev, in remove_config() argument
972 DBG(cdev, "unbind config '%s'/%p\n", config->label, config); in remove_config()
987 void usb_remove_config(struct usb_composite_dev *cdev, in usb_remove_config() argument
992 spin_lock_irqsave(&cdev->lock, flags); in usb_remove_config()
994 if (cdev->config == config) in usb_remove_config()
995 reset_config(cdev); in usb_remove_config()
997 spin_unlock_irqrestore(&cdev->lock, flags); in usb_remove_config()
999 remove_config(cdev, config); in usb_remove_config()
1050 static int get_string(struct usb_composite_dev *cdev, in get_string() argument
1053 struct usb_composite_driver *composite = cdev->driver; in get_string()
1076 list_for_each_entry(c, &cdev->configs, list) { in get_string()
1087 list_for_each_entry(uc, &cdev->gstrings, list) { in get_string()
1103 if (cdev->use_os_string && language == 0 && id == OS_STRING_IDX) { in get_string()
1108 sizeof(b->qwSignature) == sizeof(cdev->qw_sign), in get_string()
1110 memcpy(&b->qwSignature, cdev->qw_sign, sizeof(b->qwSignature)); in get_string()
1111 b->bMS_VendorCode = cdev->b_vendor_code; in get_string()
1116 list_for_each_entry(uc, &cdev->gstrings, list) { in get_string()
1134 list_for_each_entry(c, &cdev->configs, list) { in get_string()
1165 int usb_string_id(struct usb_composite_dev *cdev) in usb_string_id() argument
1167 if (cdev->next_string_id < 254) { in usb_string_id()
1171 cdev->next_string_id++; in usb_string_id()
1172 return cdev->next_string_id; in usb_string_id()
1194 int usb_string_ids_tab(struct usb_composite_dev *cdev, struct usb_string *str) in usb_string_ids_tab() argument
1196 int next = cdev->next_string_id; in usb_string_ids_tab()
1204 cdev->next_string_id = next; in usb_string_ids_tab()
1278 struct usb_string *usb_gstrings_attach(struct usb_composite_dev *cdev, in usb_gstrings_attach() argument
1298 ret = usb_string_ids_tab(cdev, n_gs[0]->strings); in usb_gstrings_attach()
1315 list_add_tail(&uc->list, &cdev->gstrings); in usb_gstrings_attach()
1356 struct usb_composite_dev *cdev; in composite_setup_complete() local
1373 cdev = req->context; in composite_setup_complete()
1375 if (cdev->req == req) in composite_setup_complete()
1376 cdev->setup_pending = false; in composite_setup_complete()
1377 else if (cdev->os_desc_req == req) in composite_setup_complete()
1378 cdev->os_desc_pending = false; in composite_setup_complete()
1383 static int composite_ep0_queue(struct usb_composite_dev *cdev, in composite_ep0_queue() argument
1388 ret = usb_ep_queue(cdev->gadget->ep0, req, gfp_flags); in composite_ep0_queue()
1390 if (cdev->req == req) in composite_ep0_queue()
1391 cdev->setup_pending = true; in composite_ep0_queue()
1392 else if (cdev->os_desc_req == req) in composite_ep0_queue()
1393 cdev->os_desc_pending = true; in composite_ep0_queue()
1561 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_setup() local
1562 struct usb_request *req = cdev->req; in composite_setup()
1577 req->context = cdev; in composite_setup()
1580 gadget->ep0->driver_data = cdev; in composite_setup()
1598 cdev->desc.bNumConfigurations = in composite_setup()
1599 count_configs(cdev, USB_DT_DEVICE); in composite_setup()
1600 cdev->desc.bMaxPacketSize0 = in composite_setup()
1601 cdev->gadget->ep0->maxpacket; in composite_setup()
1604 cdev->desc.bcdUSB = cpu_to_le16(0x0320); in composite_setup()
1605 cdev->desc.bMaxPacketSize0 = 9; in composite_setup()
1607 cdev->desc.bcdUSB = cpu_to_le16(0x0210); in composite_setup()
1611 cdev->desc.bcdUSB = cpu_to_le16(0x0201); in composite_setup()
1613 cdev->desc.bcdUSB = cpu_to_le16(0x0200); in composite_setup()
1616 value = min(w_length, (u16) sizeof cdev->desc); in composite_setup()
1617 memcpy(req->buf, &cdev->desc, value); in composite_setup()
1623 device_qual(cdev); in composite_setup()
1633 value = config_desc(cdev, w_value); in composite_setup()
1638 value = get_string(cdev, req->buf, in composite_setup()
1646 value = bos_desc(cdev); in composite_setup()
1655 if (cdev->config) in composite_setup()
1656 config = cdev->config; in composite_setup()
1659 &cdev->configs, in composite_setup()
1685 DBG(cdev, "HNP available\n"); in composite_setup()
1687 DBG(cdev, "HNP on another port\n"); in composite_setup()
1689 VDBG(cdev, "HNP inactive\n"); in composite_setup()
1691 spin_lock(&cdev->lock); in composite_setup()
1692 value = set_config(cdev, ctrl, w_value); in composite_setup()
1693 spin_unlock(&cdev->lock); in composite_setup()
1698 if (cdev->config) in composite_setup()
1699 *(u8 *)req->buf = cdev->config->bConfigurationValue; in composite_setup()
1709 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1711 f = cdev->config->interface[intf]; in composite_setup()
1723 spin_lock(&cdev->lock); in composite_setup()
1726 DBG(cdev, in composite_setup()
1729 cdev->delayed_status++; in composite_setup()
1730 DBG(cdev, "delayed_status count %d\n", in composite_setup()
1731 cdev->delayed_status); in composite_setup()
1733 spin_unlock(&cdev->lock); in composite_setup()
1738 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1740 f = cdev->config->interface[intf]; in composite_setup()
1774 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1776 f = cdev->config->interface[intf]; in composite_setup()
1797 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1799 f = cdev->config->interface[intf]; in composite_setup()
1806 ERROR(cdev, in composite_setup()
1819 if (cdev->use_os_string && cdev->os_desc_config && in composite_setup()
1821 ctrl->bRequest == cdev->b_vendor_code) { in composite_setup()
1827 req = cdev->os_desc_req; in composite_setup()
1828 req->context = cdev; in composite_setup()
1831 os_desc_cfg = cdev->os_desc_config; in composite_setup()
1876 VDBG(cdev, in composite_setup()
1885 if (cdev->config) { in composite_setup()
1886 list_for_each_entry(f, &cdev->config->functions, list) in composite_setup()
1892 list_for_each_entry(c, &cdev->configs, list) in composite_setup()
1902 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1904 f = cdev->config->interface[intf]; in composite_setup()
1908 if (!cdev->config) in composite_setup()
1911 list_for_each_entry(f, &cdev->config->functions, list) { in composite_setup()
1915 if (&f->list == &cdev->config->functions) in composite_setup()
1925 c = cdev->config; in composite_setup()
1951 req->context = cdev; in composite_setup()
1953 value = composite_ep0_queue(cdev, req, GFP_ATOMIC); in composite_setup()
1955 DBG(cdev, "ep_queue --> %d\n", value); in composite_setup()
1960 WARN(cdev, in composite_setup()
1972 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_disconnect() local
1978 spin_lock_irqsave(&cdev->lock, flags); in composite_disconnect()
1979 if (cdev->config) in composite_disconnect()
1980 reset_config(cdev); in composite_disconnect()
1981 if (cdev->driver->disconnect) in composite_disconnect()
1982 cdev->driver->disconnect(cdev); in composite_disconnect()
1983 spin_unlock_irqrestore(&cdev->lock, flags); in composite_disconnect()
1992 struct usb_composite_dev *cdev = get_gadget_data(gadget); in suspended_show() local
1994 return sprintf(buf, "%d\n", cdev->suspended); in suspended_show()
2000 struct usb_composite_dev *cdev = get_gadget_data(gadget); in __composite_unbind() local
2001 struct usb_gadget_strings *gstr = cdev->driver->strings[0]; in __composite_unbind()
2009 WARN_ON(cdev->config); in __composite_unbind()
2011 while (!list_empty(&cdev->configs)) { in __composite_unbind()
2013 c = list_first_entry(&cdev->configs, in __composite_unbind()
2015 remove_config(cdev, c); in __composite_unbind()
2017 if (cdev->driver->unbind && unbind_driver) in __composite_unbind()
2018 cdev->driver->unbind(cdev); in __composite_unbind()
2020 composite_dev_cleanup(cdev); in __composite_unbind()
2022 if (dev_str[USB_GADGET_MANUFACTURER_IDX].s == cdev->def_manufacturer) in __composite_unbind()
2025 kfree(cdev->def_manufacturer); in __composite_unbind()
2026 kfree(cdev); in __composite_unbind()
2074 struct usb_composite_dev *cdev) in composite_dev_prepare() argument
2076 struct usb_gadget *gadget = cdev->gadget; in composite_dev_prepare()
2080 cdev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL); in composite_dev_prepare()
2081 if (!cdev->req) in composite_dev_prepare()
2084 cdev->req->buf = kmalloc(USB_COMP_EP0_BUFSIZ, GFP_KERNEL); in composite_dev_prepare()
2085 if (!cdev->req->buf) in composite_dev_prepare()
2092 cdev->req->complete = composite_setup_complete; in composite_dev_prepare()
2093 cdev->req->context = cdev; in composite_dev_prepare()
2094 gadget->ep0->driver_data = cdev; in composite_dev_prepare()
2096 cdev->driver = composite; in composite_dev_prepare()
2113 kfree(cdev->req->buf); in composite_dev_prepare()
2115 usb_ep_free_request(gadget->ep0, cdev->req); in composite_dev_prepare()
2116 cdev->req = NULL; in composite_dev_prepare()
2120 int composite_os_desc_req_prepare(struct usb_composite_dev *cdev, in composite_os_desc_req_prepare() argument
2125 cdev->os_desc_req = usb_ep_alloc_request(ep0, GFP_KERNEL); in composite_os_desc_req_prepare()
2126 if (!cdev->os_desc_req) { in composite_os_desc_req_prepare()
2131 cdev->os_desc_req->buf = kmalloc(USB_COMP_EP0_OS_DESC_BUFSIZ, in composite_os_desc_req_prepare()
2133 if (!cdev->os_desc_req->buf) { in composite_os_desc_req_prepare()
2135 usb_ep_free_request(ep0, cdev->os_desc_req); in composite_os_desc_req_prepare()
2138 cdev->os_desc_req->context = cdev; in composite_os_desc_req_prepare()
2139 cdev->os_desc_req->complete = composite_setup_complete; in composite_os_desc_req_prepare()
2144 void composite_dev_cleanup(struct usb_composite_dev *cdev) in composite_dev_cleanup() argument
2149 list_for_each_entry_safe(uc, tmp, &cdev->gstrings, list) { in composite_dev_cleanup()
2153 if (cdev->os_desc_req) { in composite_dev_cleanup()
2154 if (cdev->os_desc_pending) in composite_dev_cleanup()
2155 usb_ep_dequeue(cdev->gadget->ep0, cdev->os_desc_req); in composite_dev_cleanup()
2157 kfree(cdev->os_desc_req->buf); in composite_dev_cleanup()
2158 usb_ep_free_request(cdev->gadget->ep0, cdev->os_desc_req); in composite_dev_cleanup()
2160 if (cdev->req) { in composite_dev_cleanup()
2161 if (cdev->setup_pending) in composite_dev_cleanup()
2162 usb_ep_dequeue(cdev->gadget->ep0, cdev->req); in composite_dev_cleanup()
2164 kfree(cdev->req->buf); in composite_dev_cleanup()
2165 usb_ep_free_request(cdev->gadget->ep0, cdev->req); in composite_dev_cleanup()
2167 cdev->next_string_id = 0; in composite_dev_cleanup()
2168 device_remove_file(&cdev->gadget->dev, &dev_attr_suspended); in composite_dev_cleanup()
2180 &cdev->gadget->ep_list, ep_list) { in composite_dev_cleanup()
2189 struct usb_composite_dev *cdev; in composite_bind() local
2193 cdev = kzalloc(sizeof *cdev, GFP_KERNEL); in composite_bind()
2194 if (!cdev) in composite_bind()
2197 spin_lock_init(&cdev->lock); in composite_bind()
2198 cdev->gadget = gadget; in composite_bind()
2199 set_gadget_data(gadget, cdev); in composite_bind()
2200 INIT_LIST_HEAD(&cdev->configs); in composite_bind()
2201 INIT_LIST_HEAD(&cdev->gstrings); in composite_bind()
2203 status = composite_dev_prepare(composite, cdev); in composite_bind()
2211 status = composite->bind(cdev); in composite_bind()
2215 if (cdev->use_os_string) { in composite_bind()
2216 status = composite_os_desc_req_prepare(cdev, gadget->ep0); in composite_bind()
2221 update_unchanged_dev_desc(&cdev->desc, composite->dev); in composite_bind()
2224 if (composite->needs_serial && !cdev->desc.iSerialNumber) in composite_bind()
2225 WARNING(cdev, "userspace failed to provide iSerialNumber\n"); in composite_bind()
2227 INFO(cdev, "%s ready\n", composite->name); in composite_bind()
2239 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_suspend() local
2245 DBG(cdev, "suspend\n"); in composite_suspend()
2246 if (cdev->config) { in composite_suspend()
2247 list_for_each_entry(f, &cdev->config->functions, list) { in composite_suspend()
2252 if (cdev->driver->suspend) in composite_suspend()
2253 cdev->driver->suspend(cdev); in composite_suspend()
2255 cdev->suspended = 1; in composite_suspend()
2262 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_resume() local
2269 DBG(cdev, "resume\n"); in composite_resume()
2270 if (cdev->driver->resume) in composite_resume()
2271 cdev->driver->resume(cdev); in composite_resume()
2272 if (cdev->config) { in composite_resume()
2273 list_for_each_entry(f, &cdev->config->functions, list) { in composite_resume()
2278 maxpower = cdev->config->MaxPower; in composite_resume()
2284 cdev->suspended = 0; in composite_resume()
2365 void usb_composite_setup_continue(struct usb_composite_dev *cdev) in usb_composite_setup_continue() argument
2368 struct usb_request *req = cdev->req; in usb_composite_setup_continue()
2371 DBG(cdev, "%s\n", __func__); in usb_composite_setup_continue()
2372 spin_lock_irqsave(&cdev->lock, flags); in usb_composite_setup_continue()
2374 if (cdev->delayed_status == 0) { in usb_composite_setup_continue()
2375 WARN(cdev, "%s: Unexpected call\n", __func__); in usb_composite_setup_continue()
2377 } else if (--cdev->delayed_status == 0) { in usb_composite_setup_continue()
2378 DBG(cdev, "%s: Completing delayed status\n", __func__); in usb_composite_setup_continue()
2380 req->context = cdev; in usb_composite_setup_continue()
2381 value = composite_ep0_queue(cdev, req, GFP_ATOMIC); in usb_composite_setup_continue()
2383 DBG(cdev, "ep_queue --> %d\n", value); in usb_composite_setup_continue()
2385 composite_setup_complete(cdev->gadget->ep0, req); in usb_composite_setup_continue()
2389 spin_unlock_irqrestore(&cdev->lock, flags); in usb_composite_setup_continue()
2399 void usb_composite_overwrite_options(struct usb_composite_dev *cdev, in usb_composite_overwrite_options() argument
2402 struct usb_device_descriptor *desc = &cdev->desc; in usb_composite_overwrite_options()
2403 struct usb_gadget_strings *gstr = cdev->driver->strings[0]; in usb_composite_overwrite_options()
2425 cdev->def_manufacturer = composite_default_mfr(cdev->gadget); in usb_composite_overwrite_options()
2426 dev_str[USB_GADGET_MANUFACTURER_IDX].s = cdev->def_manufacturer; in usb_composite_overwrite_options()