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()
624 if (cdev->gadget->ops->get_config_params) { in bos_desc()
625 cdev->gadget->ops->get_config_params(cdev->gadget, in bos_desc()
650 usb_ext = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
663 if (gadget_is_superspeed(cdev->gadget)) { in bos_desc()
666 ss_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
683 if (gadget_is_superspeed_plus(cdev->gadget)) { in bos_desc()
686 ssp_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
731 static void device_qual(struct usb_composite_dev *cdev) in device_qual() argument
733 struct usb_qualifier_descriptor *qual = cdev->req->buf; in device_qual()
738 qual->bcdUSB = cdev->desc.bcdUSB; in device_qual()
739 qual->bDeviceClass = cdev->desc.bDeviceClass; in device_qual()
740 qual->bDeviceSubClass = cdev->desc.bDeviceSubClass; in device_qual()
741 qual->bDeviceProtocol = cdev->desc.bDeviceProtocol; in device_qual()
743 qual->bMaxPacketSize0 = cdev->gadget->ep0->maxpacket; in device_qual()
744 qual->bNumConfigurations = count_configs(cdev, USB_DT_DEVICE_QUALIFIER); in device_qual()
750 static void reset_config(struct usb_composite_dev *cdev) in reset_config() argument
754 DBG(cdev, "reset config\n"); in reset_config()
756 list_for_each_entry(f, &cdev->config->functions, list) { in reset_config()
762 cdev->config = NULL; in reset_config()
763 cdev->delayed_status = 0; in reset_config()
766 static int set_config(struct usb_composite_dev *cdev, in set_config() argument
769 struct usb_gadget *gadget = cdev->gadget; in set_config()
776 list_for_each_entry(c, &cdev->configs, list) { in set_config()
783 if (cdev->config) in set_config()
784 reset_config(cdev); in set_config()
792 if (cdev->config) in set_config()
793 reset_config(cdev); in set_config()
797 INFO(cdev, "%s config #%d: %s\n", in set_config()
805 cdev->config = c; in set_config()
838 DBG(cdev, "interface %d (%s/%p) alt 0 --> %d\n", in set_config()
841 reset_config(cdev); in set_config()
846 DBG(cdev, in set_config()
849 cdev->delayed_status++; in set_config()
850 DBG(cdev, "delayed_status count %d\n", in set_config()
851 cdev->delayed_status); in set_config()
859 if (result >= 0 && cdev->delayed_status) in set_config()
864 int usb_add_config_only(struct usb_composite_dev *cdev, in usb_add_config_only() argument
873 list_for_each_entry(c, &cdev->configs, list) { in usb_add_config_only()
878 config->cdev = cdev; in usb_add_config_only()
879 list_add_tail(&config->list, &cdev->configs); in usb_add_config_only()
904 int usb_add_config(struct usb_composite_dev *cdev, in usb_add_config() argument
913 DBG(cdev, "adding config #%u '%s'/%p\n", in usb_add_config()
917 status = usb_add_config_only(cdev, config); in usb_add_config()
930 DBG(cdev, "unbind function '%s'/%p\n", in usb_add_config()
937 config->cdev = NULL; in usb_add_config()
941 DBG(cdev, "cfg %d/%p speeds:%s%s%s%s\n", in usb_add_config()
947 ? (gadget_is_dualspeed(cdev->gadget) in usb_add_config()
957 DBG(cdev, " interface %d = %s/%p\n", in usb_add_config()
963 usb_ep_autoconfig_reset(cdev->gadget); in usb_add_config()
967 DBG(cdev, "added config '%s'/%u --> %d\n", config->label, in usb_add_config()
973 static void remove_config(struct usb_composite_dev *cdev, in remove_config() argument
986 DBG(cdev, "unbind config '%s'/%p\n", config->label, config); in remove_config()
1001 void usb_remove_config(struct usb_composite_dev *cdev, in usb_remove_config() argument
1006 spin_lock_irqsave(&cdev->lock, flags); in usb_remove_config()
1008 if (cdev->config == config) in usb_remove_config()
1009 reset_config(cdev); in usb_remove_config()
1011 spin_unlock_irqrestore(&cdev->lock, flags); in usb_remove_config()
1013 remove_config(cdev, config); in usb_remove_config()
1064 static int get_string(struct usb_composite_dev *cdev, in get_string() argument
1067 struct usb_composite_driver *composite = cdev->driver; in get_string()
1090 list_for_each_entry(c, &cdev->configs, list) { in get_string()
1101 list_for_each_entry(uc, &cdev->gstrings, list) { in get_string()
1117 if (cdev->use_os_string && language == 0 && id == OS_STRING_IDX) { in get_string()
1122 sizeof(b->qwSignature) == sizeof(cdev->qw_sign), in get_string()
1124 memcpy(&b->qwSignature, cdev->qw_sign, sizeof(b->qwSignature)); in get_string()
1125 b->bMS_VendorCode = cdev->b_vendor_code; in get_string()
1130 list_for_each_entry(uc, &cdev->gstrings, list) { in get_string()
1148 list_for_each_entry(c, &cdev->configs, list) { in get_string()
1179 int usb_string_id(struct usb_composite_dev *cdev) in usb_string_id() argument
1181 if (cdev->next_string_id < 254) { in usb_string_id()
1185 cdev->next_string_id++; in usb_string_id()
1186 return cdev->next_string_id; in usb_string_id()
1208 int usb_string_ids_tab(struct usb_composite_dev *cdev, struct usb_string *str) in usb_string_ids_tab() argument
1210 int next = cdev->next_string_id; in usb_string_ids_tab()
1218 cdev->next_string_id = next; in usb_string_ids_tab()
1292 struct usb_string *usb_gstrings_attach(struct usb_composite_dev *cdev, in usb_gstrings_attach() argument
1312 ret = usb_string_ids_tab(cdev, n_gs[0]->strings); in usb_gstrings_attach()
1329 list_add_tail(&uc->list, &cdev->gstrings); in usb_gstrings_attach()
1370 struct usb_composite_dev *cdev; in composite_setup_complete() local
1387 cdev = req->context; in composite_setup_complete()
1389 if (cdev->req == req) in composite_setup_complete()
1390 cdev->setup_pending = false; in composite_setup_complete()
1391 else if (cdev->os_desc_req == req) in composite_setup_complete()
1392 cdev->os_desc_pending = false; in composite_setup_complete()
1397 static int composite_ep0_queue(struct usb_composite_dev *cdev, in composite_ep0_queue() argument
1402 ret = usb_ep_queue(cdev->gadget->ep0, req, gfp_flags); in composite_ep0_queue()
1404 if (cdev->req == req) in composite_ep0_queue()
1405 cdev->setup_pending = true; in composite_ep0_queue()
1406 else if (cdev->os_desc_req == req) in composite_ep0_queue()
1407 cdev->os_desc_pending = true; in composite_ep0_queue()
1575 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_setup() local
1576 struct usb_request *req = cdev->req; in composite_setup()
1591 req->context = cdev; in composite_setup()
1594 gadget->ep0->driver_data = cdev; in composite_setup()
1612 cdev->desc.bNumConfigurations = in composite_setup()
1613 count_configs(cdev, USB_DT_DEVICE); in composite_setup()
1614 cdev->desc.bMaxPacketSize0 = in composite_setup()
1615 cdev->gadget->ep0->maxpacket; in composite_setup()
1618 cdev->desc.bcdUSB = cpu_to_le16(0x0320); in composite_setup()
1619 cdev->desc.bMaxPacketSize0 = 9; in composite_setup()
1621 cdev->desc.bcdUSB = cpu_to_le16(0x0210); in composite_setup()
1625 cdev->desc.bcdUSB = cpu_to_le16(0x0201); in composite_setup()
1627 cdev->desc.bcdUSB = cpu_to_le16(0x0200); in composite_setup()
1630 value = min(w_length, (u16) sizeof cdev->desc); in composite_setup()
1631 memcpy(req->buf, &cdev->desc, value); in composite_setup()
1637 device_qual(cdev); in composite_setup()
1647 value = config_desc(cdev, w_value); in composite_setup()
1652 value = get_string(cdev, req->buf, in composite_setup()
1660 value = bos_desc(cdev); in composite_setup()
1669 if (cdev->config) in composite_setup()
1670 config = cdev->config; in composite_setup()
1673 &cdev->configs, in composite_setup()
1699 DBG(cdev, "HNP available\n"); in composite_setup()
1701 DBG(cdev, "HNP on another port\n"); in composite_setup()
1703 VDBG(cdev, "HNP inactive\n"); in composite_setup()
1705 spin_lock(&cdev->lock); in composite_setup()
1706 value = set_config(cdev, ctrl, w_value); in composite_setup()
1707 spin_unlock(&cdev->lock); in composite_setup()
1712 if (cdev->config) in composite_setup()
1713 *(u8 *)req->buf = cdev->config->bConfigurationValue; in composite_setup()
1723 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1725 f = cdev->config->interface[intf]; in composite_setup()
1737 spin_lock(&cdev->lock); in composite_setup()
1740 DBG(cdev, in composite_setup()
1743 cdev->delayed_status++; in composite_setup()
1744 DBG(cdev, "delayed_status count %d\n", in composite_setup()
1745 cdev->delayed_status); in composite_setup()
1747 spin_unlock(&cdev->lock); in composite_setup()
1752 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1754 f = cdev->config->interface[intf]; in composite_setup()
1788 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1790 f = cdev->config->interface[intf]; in composite_setup()
1811 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1813 f = cdev->config->interface[intf]; in composite_setup()
1820 ERROR(cdev, in composite_setup()
1833 if (cdev->use_os_string && cdev->os_desc_config && in composite_setup()
1835 ctrl->bRequest == cdev->b_vendor_code) { in composite_setup()
1841 req = cdev->os_desc_req; in composite_setup()
1842 req->context = cdev; in composite_setup()
1845 os_desc_cfg = cdev->os_desc_config; in composite_setup()
1890 VDBG(cdev, in composite_setup()
1899 if (cdev->config) { in composite_setup()
1900 list_for_each_entry(f, &cdev->config->functions, list) in composite_setup()
1906 list_for_each_entry(c, &cdev->configs, list) in composite_setup()
1916 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1918 f = cdev->config->interface[intf]; in composite_setup()
1922 if (!cdev->config) in composite_setup()
1925 list_for_each_entry(f, &cdev->config->functions, list) { in composite_setup()
1929 if (&f->list == &cdev->config->functions) in composite_setup()
1939 c = cdev->config; in composite_setup()
1965 req->context = cdev; in composite_setup()
1967 value = composite_ep0_queue(cdev, req, GFP_ATOMIC); in composite_setup()
1969 DBG(cdev, "ep_queue --> %d\n", value); in composite_setup()
1974 WARN(cdev, in composite_setup()
1986 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_disconnect() local
1992 spin_lock_irqsave(&cdev->lock, flags); in composite_disconnect()
1993 cdev->suspended = 0; in composite_disconnect()
1994 if (cdev->config) in composite_disconnect()
1995 reset_config(cdev); in composite_disconnect()
1996 if (cdev->driver->disconnect) in composite_disconnect()
1997 cdev->driver->disconnect(cdev); in composite_disconnect()
1998 spin_unlock_irqrestore(&cdev->lock, flags); in composite_disconnect()
2007 struct usb_composite_dev *cdev = get_gadget_data(gadget); in suspended_show() local
2009 return sprintf(buf, "%d\n", cdev->suspended); in suspended_show()
2015 struct usb_composite_dev *cdev = get_gadget_data(gadget); in __composite_unbind() local
2016 struct usb_gadget_strings *gstr = cdev->driver->strings[0]; in __composite_unbind()
2024 WARN_ON(cdev->config); in __composite_unbind()
2026 while (!list_empty(&cdev->configs)) { in __composite_unbind()
2028 c = list_first_entry(&cdev->configs, in __composite_unbind()
2030 remove_config(cdev, c); in __composite_unbind()
2032 if (cdev->driver->unbind && unbind_driver) in __composite_unbind()
2033 cdev->driver->unbind(cdev); in __composite_unbind()
2035 composite_dev_cleanup(cdev); in __composite_unbind()
2037 if (dev_str[USB_GADGET_MANUFACTURER_IDX].s == cdev->def_manufacturer) in __composite_unbind()
2040 kfree(cdev->def_manufacturer); in __composite_unbind()
2041 kfree(cdev); in __composite_unbind()
2089 struct usb_composite_dev *cdev) in composite_dev_prepare() argument
2091 struct usb_gadget *gadget = cdev->gadget; in composite_dev_prepare()
2095 cdev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL); in composite_dev_prepare()
2096 if (!cdev->req) in composite_dev_prepare()
2099 cdev->req->buf = kmalloc(USB_COMP_EP0_BUFSIZ, GFP_KERNEL); in composite_dev_prepare()
2100 if (!cdev->req->buf) in composite_dev_prepare()
2107 cdev->req->complete = composite_setup_complete; in composite_dev_prepare()
2108 cdev->req->context = cdev; in composite_dev_prepare()
2109 gadget->ep0->driver_data = cdev; in composite_dev_prepare()
2111 cdev->driver = composite; in composite_dev_prepare()
2128 kfree(cdev->req->buf); in composite_dev_prepare()
2130 usb_ep_free_request(gadget->ep0, cdev->req); in composite_dev_prepare()
2131 cdev->req = NULL; in composite_dev_prepare()
2135 int composite_os_desc_req_prepare(struct usb_composite_dev *cdev, in composite_os_desc_req_prepare() argument
2140 cdev->os_desc_req = usb_ep_alloc_request(ep0, GFP_KERNEL); in composite_os_desc_req_prepare()
2141 if (!cdev->os_desc_req) { in composite_os_desc_req_prepare()
2146 cdev->os_desc_req->buf = kmalloc(USB_COMP_EP0_OS_DESC_BUFSIZ, in composite_os_desc_req_prepare()
2148 if (!cdev->os_desc_req->buf) { in composite_os_desc_req_prepare()
2150 usb_ep_free_request(ep0, cdev->os_desc_req); in composite_os_desc_req_prepare()
2153 cdev->os_desc_req->context = cdev; in composite_os_desc_req_prepare()
2154 cdev->os_desc_req->complete = composite_setup_complete; in composite_os_desc_req_prepare()
2159 void composite_dev_cleanup(struct usb_composite_dev *cdev) in composite_dev_cleanup() argument
2164 list_for_each_entry_safe(uc, tmp, &cdev->gstrings, list) { in composite_dev_cleanup()
2168 if (cdev->os_desc_req) { in composite_dev_cleanup()
2169 if (cdev->os_desc_pending) in composite_dev_cleanup()
2170 usb_ep_dequeue(cdev->gadget->ep0, cdev->os_desc_req); in composite_dev_cleanup()
2172 kfree(cdev->os_desc_req->buf); in composite_dev_cleanup()
2173 cdev->os_desc_req->buf = NULL; in composite_dev_cleanup()
2174 usb_ep_free_request(cdev->gadget->ep0, cdev->os_desc_req); in composite_dev_cleanup()
2175 cdev->os_desc_req = NULL; in composite_dev_cleanup()
2177 if (cdev->req) { in composite_dev_cleanup()
2178 if (cdev->setup_pending) in composite_dev_cleanup()
2179 usb_ep_dequeue(cdev->gadget->ep0, cdev->req); in composite_dev_cleanup()
2181 kfree(cdev->req->buf); in composite_dev_cleanup()
2182 cdev->req->buf = NULL; in composite_dev_cleanup()
2183 usb_ep_free_request(cdev->gadget->ep0, cdev->req); in composite_dev_cleanup()
2184 cdev->req = NULL; in composite_dev_cleanup()
2186 cdev->next_string_id = 0; in composite_dev_cleanup()
2187 device_remove_file(&cdev->gadget->dev, &dev_attr_suspended); in composite_dev_cleanup()
2199 &cdev->gadget->ep_list, ep_list) { in composite_dev_cleanup()
2208 struct usb_composite_dev *cdev; in composite_bind() local
2212 cdev = kzalloc(sizeof *cdev, GFP_KERNEL); in composite_bind()
2213 if (!cdev) in composite_bind()
2216 spin_lock_init(&cdev->lock); in composite_bind()
2217 cdev->gadget = gadget; in composite_bind()
2218 set_gadget_data(gadget, cdev); in composite_bind()
2219 INIT_LIST_HEAD(&cdev->configs); in composite_bind()
2220 INIT_LIST_HEAD(&cdev->gstrings); in composite_bind()
2222 status = composite_dev_prepare(composite, cdev); in composite_bind()
2230 status = composite->bind(cdev); in composite_bind()
2234 if (cdev->use_os_string) { in composite_bind()
2235 status = composite_os_desc_req_prepare(cdev, gadget->ep0); in composite_bind()
2240 update_unchanged_dev_desc(&cdev->desc, composite->dev); in composite_bind()
2243 if (composite->needs_serial && !cdev->desc.iSerialNumber) in composite_bind()
2244 WARNING(cdev, "userspace failed to provide iSerialNumber\n"); in composite_bind()
2246 INFO(cdev, "%s ready\n", composite->name); in composite_bind()
2258 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_suspend() local
2264 DBG(cdev, "suspend\n"); in composite_suspend()
2265 if (cdev->config) { in composite_suspend()
2266 list_for_each_entry(f, &cdev->config->functions, list) { in composite_suspend()
2271 if (cdev->driver->suspend) in composite_suspend()
2272 cdev->driver->suspend(cdev); in composite_suspend()
2274 cdev->suspended = 1; in composite_suspend()
2281 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_resume() local
2288 DBG(cdev, "resume\n"); in composite_resume()
2289 if (cdev->driver->resume) in composite_resume()
2290 cdev->driver->resume(cdev); in composite_resume()
2291 if (cdev->config) { in composite_resume()
2292 list_for_each_entry(f, &cdev->config->functions, list) { in composite_resume()
2297 maxpower = cdev->config->MaxPower; in composite_resume()
2303 cdev->suspended = 0; in composite_resume()
2384 void usb_composite_setup_continue(struct usb_composite_dev *cdev) in usb_composite_setup_continue() argument
2387 struct usb_request *req = cdev->req; in usb_composite_setup_continue()
2390 DBG(cdev, "%s\n", __func__); in usb_composite_setup_continue()
2391 spin_lock_irqsave(&cdev->lock, flags); in usb_composite_setup_continue()
2393 if (cdev->delayed_status == 0) { in usb_composite_setup_continue()
2394 WARN(cdev, "%s: Unexpected call\n", __func__); in usb_composite_setup_continue()
2396 } else if (--cdev->delayed_status == 0) { in usb_composite_setup_continue()
2397 DBG(cdev, "%s: Completing delayed status\n", __func__); in usb_composite_setup_continue()
2399 req->context = cdev; in usb_composite_setup_continue()
2400 value = composite_ep0_queue(cdev, req, GFP_ATOMIC); in usb_composite_setup_continue()
2402 DBG(cdev, "ep_queue --> %d\n", value); in usb_composite_setup_continue()
2404 composite_setup_complete(cdev->gadget->ep0, req); in usb_composite_setup_continue()
2408 spin_unlock_irqrestore(&cdev->lock, flags); in usb_composite_setup_continue()
2418 void usb_composite_overwrite_options(struct usb_composite_dev *cdev, in usb_composite_overwrite_options() argument
2421 struct usb_device_descriptor *desc = &cdev->desc; in usb_composite_overwrite_options()
2422 struct usb_gadget_strings *gstr = cdev->driver->strings[0]; in usb_composite_overwrite_options()
2444 cdev->def_manufacturer = composite_default_mfr(cdev->gadget); in usb_composite_overwrite_options()
2445 dev_str[USB_GADGET_MANUFACTURER_IDX].s = cdev->def_manufacturer; in usb_composite_overwrite_options()