Lines Matching refs:cdev

247 				struct usb_composite_dev *cdev;  in config_ep_by_speed_and_alt()  local
249 cdev = get_gadget_data(g); in config_ep_by_speed_and_alt()
250 ERROR(cdev, "ep0 bMaxBurst must be 0\n"); in config_ep_by_speed_and_alt()
305 DBG(config->cdev, "adding '%s'/%p to config '%s'/%p\n", in usb_add_function()
347 DBG(config->cdev, "adding '%s'/%p --> %d\n", in usb_add_function()
389 struct usb_composite_dev *cdev = function->config->cdev; in usb_function_deactivate() local
393 spin_lock_irqsave(&cdev->lock, flags); in usb_function_deactivate()
395 if (cdev->deactivations == 0) in usb_function_deactivate()
396 status = usb_gadget_deactivate(cdev->gadget); in usb_function_deactivate()
398 cdev->deactivations++; in usb_function_deactivate()
400 spin_unlock_irqrestore(&cdev->lock, flags); in usb_function_deactivate()
417 struct usb_composite_dev *cdev = function->config->cdev; in usb_function_activate() local
421 spin_lock_irqsave(&cdev->lock, flags); in usb_function_activate()
423 if (WARN_ON(cdev->deactivations == 0)) in usb_function_activate()
426 cdev->deactivations--; in usb_function_activate()
427 if (cdev->deactivations == 0) in usb_function_activate()
428 status = usb_gadget_activate(cdev->gadget); in usb_function_activate()
431 spin_unlock_irqrestore(&cdev->lock, flags); in usb_function_activate()
545 static int config_desc(struct usb_composite_dev *cdev, unsigned w_value) in config_desc() argument
547 struct usb_gadget *gadget = cdev->gadget; in config_desc()
569 pos = &cdev->configs; in config_desc()
570 c = cdev->os_desc_config; in config_desc()
574 while ((pos = pos->next) != &cdev->configs) { in config_desc()
578 if (c == cdev->os_desc_config) in config_desc()
602 return config_buf(c, speed, cdev->req->buf, type); in config_desc()
608 static int count_configs(struct usb_composite_dev *cdev, unsigned type) in count_configs() argument
610 struct usb_gadget *gadget = cdev->gadget; in count_configs()
627 list_for_each_entry(c, &cdev->configs, list) { in count_configs()
656 static int bos_desc(struct usb_composite_dev *cdev) in bos_desc() argument
660 struct usb_bos_descriptor *bos = cdev->req->buf; in bos_desc()
670 if (cdev->gadget->ops->get_config_params) { in bos_desc()
671 cdev->gadget->ops->get_config_params(cdev->gadget, in bos_desc()
696 usb_ext = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
709 if (gadget_is_superspeed(cdev->gadget)) { in bos_desc()
712 ss_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
729 if (gadget_is_superspeed_plus(cdev->gadget)) { in bos_desc()
732 ssp_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength); in bos_desc()
777 static void device_qual(struct usb_composite_dev *cdev) in device_qual() argument
779 struct usb_qualifier_descriptor *qual = cdev->req->buf; in device_qual()
784 qual->bcdUSB = cdev->desc.bcdUSB; in device_qual()
785 qual->bDeviceClass = cdev->desc.bDeviceClass; in device_qual()
786 qual->bDeviceSubClass = cdev->desc.bDeviceSubClass; in device_qual()
787 qual->bDeviceProtocol = cdev->desc.bDeviceProtocol; in device_qual()
789 qual->bMaxPacketSize0 = cdev->gadget->ep0->maxpacket; in device_qual()
790 qual->bNumConfigurations = count_configs(cdev, USB_DT_DEVICE_QUALIFIER); in device_qual()
796 static void reset_config(struct usb_composite_dev *cdev) in reset_config() argument
800 DBG(cdev, "reset config\n"); in reset_config()
802 list_for_each_entry(f, &cdev->config->functions, list) { in reset_config()
808 cdev->config = NULL; in reset_config()
809 cdev->delayed_status = 0; in reset_config()
812 static int set_config(struct usb_composite_dev *cdev, in set_config() argument
815 struct usb_gadget *gadget = cdev->gadget; in set_config()
822 list_for_each_entry(c, &cdev->configs, list) { in set_config()
829 if (cdev->config) in set_config()
830 reset_config(cdev); in set_config()
838 if (cdev->config) in set_config()
839 reset_config(cdev); in set_config()
843 DBG(cdev, "%s config #%d: %s\n", in set_config()
851 cdev->config = c; in set_config()
884 DBG(cdev, "interface %d (%s/%p) alt 0 --> %d\n", in set_config()
887 reset_config(cdev); in set_config()
892 DBG(cdev, in set_config()
895 cdev->delayed_status++; in set_config()
896 DBG(cdev, "delayed_status count %d\n", in set_config()
897 cdev->delayed_status); in set_config()
914 if (result >= 0 && cdev->delayed_status) in set_config()
919 int usb_add_config_only(struct usb_composite_dev *cdev, in usb_add_config_only() argument
928 list_for_each_entry(c, &cdev->configs, list) { in usb_add_config_only()
933 config->cdev = cdev; in usb_add_config_only()
934 list_add_tail(&config->list, &cdev->configs); in usb_add_config_only()
959 int usb_add_config(struct usb_composite_dev *cdev, in usb_add_config() argument
968 DBG(cdev, "adding config #%u '%s'/%p\n", in usb_add_config()
972 status = usb_add_config_only(cdev, config); in usb_add_config()
985 DBG(cdev, "unbind function '%s'/%p\n", in usb_add_config()
992 config->cdev = NULL; in usb_add_config()
996 DBG(cdev, "cfg %d/%p speeds:%s%s%s%s\n", in usb_add_config()
1002 ? (gadget_is_dualspeed(cdev->gadget) in usb_add_config()
1012 DBG(cdev, " interface %d = %s/%p\n", in usb_add_config()
1018 usb_ep_autoconfig_reset(cdev->gadget); in usb_add_config()
1022 DBG(cdev, "added config '%s'/%u --> %d\n", config->label, in usb_add_config()
1028 static void remove_config(struct usb_composite_dev *cdev, in remove_config() argument
1041 DBG(cdev, "unbind config '%s'/%p\n", config->label, config); in remove_config()
1056 void usb_remove_config(struct usb_composite_dev *cdev, in usb_remove_config() argument
1061 spin_lock_irqsave(&cdev->lock, flags); in usb_remove_config()
1063 if (cdev->config == config) in usb_remove_config()
1064 reset_config(cdev); in usb_remove_config()
1066 spin_unlock_irqrestore(&cdev->lock, flags); in usb_remove_config()
1068 remove_config(cdev, config); in usb_remove_config()
1119 static int get_string(struct usb_composite_dev *cdev, in get_string() argument
1122 struct usb_composite_driver *composite = cdev->driver; in get_string()
1145 list_for_each_entry(c, &cdev->configs, list) { in get_string()
1156 list_for_each_entry(uc, &cdev->gstrings, list) { in get_string()
1172 if (cdev->use_os_string && language == 0 && id == OS_STRING_IDX) { in get_string()
1177 sizeof(b->qwSignature) == sizeof(cdev->qw_sign), in get_string()
1179 memcpy(&b->qwSignature, cdev->qw_sign, sizeof(b->qwSignature)); in get_string()
1180 b->bMS_VendorCode = cdev->b_vendor_code; in get_string()
1185 list_for_each_entry(uc, &cdev->gstrings, list) { in get_string()
1203 list_for_each_entry(c, &cdev->configs, list) { in get_string()
1234 int usb_string_id(struct usb_composite_dev *cdev) in usb_string_id() argument
1236 if (cdev->next_string_id < 254) { in usb_string_id()
1240 cdev->next_string_id++; in usb_string_id()
1241 return cdev->next_string_id; in usb_string_id()
1263 int usb_string_ids_tab(struct usb_composite_dev *cdev, struct usb_string *str) in usb_string_ids_tab() argument
1265 int next = cdev->next_string_id; in usb_string_ids_tab()
1273 cdev->next_string_id = next; in usb_string_ids_tab()
1347 struct usb_string *usb_gstrings_attach(struct usb_composite_dev *cdev, in usb_gstrings_attach() argument
1367 ret = usb_string_ids_tab(cdev, n_gs[0]->strings); in usb_gstrings_attach()
1384 list_add_tail(&uc->list, &cdev->gstrings); in usb_gstrings_attach()
1425 struct usb_composite_dev *cdev; in composite_setup_complete() local
1442 cdev = req->context; in composite_setup_complete()
1444 if (cdev->req == req) in composite_setup_complete()
1445 cdev->setup_pending = false; in composite_setup_complete()
1446 else if (cdev->os_desc_req == req) in composite_setup_complete()
1447 cdev->os_desc_pending = false; in composite_setup_complete()
1452 static int composite_ep0_queue(struct usb_composite_dev *cdev, in composite_ep0_queue() argument
1457 ret = usb_ep_queue(cdev->gadget->ep0, req, gfp_flags); in composite_ep0_queue()
1459 if (cdev->req == req) in composite_ep0_queue()
1460 cdev->setup_pending = true; in composite_ep0_queue()
1461 else if (cdev->os_desc_req == req) in composite_ep0_queue()
1462 cdev->os_desc_pending = true; in composite_ep0_queue()
1630 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_setup() local
1631 struct usb_request *req = cdev->req; in composite_setup()
1646 req->context = cdev; in composite_setup()
1649 gadget->ep0->driver_data = cdev; in composite_setup()
1667 cdev->desc.bNumConfigurations = in composite_setup()
1668 count_configs(cdev, USB_DT_DEVICE); in composite_setup()
1669 cdev->desc.bMaxPacketSize0 = in composite_setup()
1670 cdev->gadget->ep0->maxpacket; in composite_setup()
1673 cdev->desc.bcdUSB = cpu_to_le16(0x0320); in composite_setup()
1674 cdev->desc.bMaxPacketSize0 = 9; in composite_setup()
1676 cdev->desc.bcdUSB = cpu_to_le16(0x0210); in composite_setup()
1680 cdev->desc.bcdUSB = cpu_to_le16(0x0201); in composite_setup()
1682 cdev->desc.bcdUSB = cpu_to_le16(0x0200); in composite_setup()
1685 value = min(w_length, (u16) sizeof cdev->desc); in composite_setup()
1686 memcpy(req->buf, &cdev->desc, value); in composite_setup()
1692 device_qual(cdev); in composite_setup()
1702 value = config_desc(cdev, w_value); in composite_setup()
1707 value = get_string(cdev, req->buf, in composite_setup()
1715 value = bos_desc(cdev); in composite_setup()
1724 if (cdev->config) in composite_setup()
1725 config = cdev->config; in composite_setup()
1728 &cdev->configs, in composite_setup()
1754 DBG(cdev, "HNP available\n"); in composite_setup()
1756 DBG(cdev, "HNP on another port\n"); in composite_setup()
1758 VDBG(cdev, "HNP inactive\n"); in composite_setup()
1760 spin_lock(&cdev->lock); in composite_setup()
1761 value = set_config(cdev, ctrl, w_value); in composite_setup()
1762 spin_unlock(&cdev->lock); in composite_setup()
1767 if (cdev->config) in composite_setup()
1768 *(u8 *)req->buf = cdev->config->bConfigurationValue; in composite_setup()
1778 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1780 f = cdev->config->interface[intf]; in composite_setup()
1792 spin_lock(&cdev->lock); in composite_setup()
1795 DBG(cdev, in composite_setup()
1798 cdev->delayed_status++; in composite_setup()
1799 DBG(cdev, "delayed_status count %d\n", in composite_setup()
1800 cdev->delayed_status); in composite_setup()
1802 spin_unlock(&cdev->lock); in composite_setup()
1807 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1809 f = cdev->config->interface[intf]; in composite_setup()
1843 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1845 f = cdev->config->interface[intf]; in composite_setup()
1866 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1868 f = cdev->config->interface[intf]; in composite_setup()
1875 ERROR(cdev, in composite_setup()
1888 if (cdev->use_os_string && cdev->os_desc_config && in composite_setup()
1890 ctrl->bRequest == cdev->b_vendor_code) { in composite_setup()
1896 req = cdev->os_desc_req; in composite_setup()
1897 req->context = cdev; in composite_setup()
1900 os_desc_cfg = cdev->os_desc_config; in composite_setup()
1945 VDBG(cdev, in composite_setup()
1954 if (cdev->config) { in composite_setup()
1955 list_for_each_entry(f, &cdev->config->functions, list) in composite_setup()
1961 list_for_each_entry(c, &cdev->configs, list) in composite_setup()
1971 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES) in composite_setup()
1973 f = cdev->config->interface[intf]; in composite_setup()
1977 if (!cdev->config) in composite_setup()
1980 list_for_each_entry(f, &cdev->config->functions, list) { in composite_setup()
1984 if (&f->list == &cdev->config->functions) in composite_setup()
1994 c = cdev->config; in composite_setup()
2020 req->context = cdev; in composite_setup()
2022 value = composite_ep0_queue(cdev, req, GFP_ATOMIC); in composite_setup()
2024 DBG(cdev, "ep_queue --> %d\n", value); in composite_setup()
2029 WARN(cdev, in composite_setup()
2041 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_disconnect() local
2047 spin_lock_irqsave(&cdev->lock, flags); in composite_disconnect()
2048 cdev->suspended = 0; in composite_disconnect()
2049 if (cdev->config) in composite_disconnect()
2050 reset_config(cdev); in composite_disconnect()
2051 if (cdev->driver->disconnect) in composite_disconnect()
2052 cdev->driver->disconnect(cdev); in composite_disconnect()
2053 spin_unlock_irqrestore(&cdev->lock, flags); in composite_disconnect()
2062 struct usb_composite_dev *cdev = get_gadget_data(gadget); in suspended_show() local
2064 return sprintf(buf, "%d\n", cdev->suspended); in suspended_show()
2070 struct usb_composite_dev *cdev = get_gadget_data(gadget); in __composite_unbind() local
2071 struct usb_gadget_strings *gstr = cdev->driver->strings[0]; in __composite_unbind()
2079 WARN_ON(cdev->config); in __composite_unbind()
2081 while (!list_empty(&cdev->configs)) { in __composite_unbind()
2083 c = list_first_entry(&cdev->configs, in __composite_unbind()
2085 remove_config(cdev, c); in __composite_unbind()
2087 if (cdev->driver->unbind && unbind_driver) in __composite_unbind()
2088 cdev->driver->unbind(cdev); in __composite_unbind()
2090 composite_dev_cleanup(cdev); in __composite_unbind()
2092 if (dev_str[USB_GADGET_MANUFACTURER_IDX].s == cdev->def_manufacturer) in __composite_unbind()
2095 kfree(cdev->def_manufacturer); in __composite_unbind()
2096 kfree(cdev); in __composite_unbind()
2144 struct usb_composite_dev *cdev) in composite_dev_prepare() argument
2146 struct usb_gadget *gadget = cdev->gadget; in composite_dev_prepare()
2150 cdev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL); in composite_dev_prepare()
2151 if (!cdev->req) in composite_dev_prepare()
2154 cdev->req->buf = kmalloc(USB_COMP_EP0_BUFSIZ, GFP_KERNEL); in composite_dev_prepare()
2155 if (!cdev->req->buf) in composite_dev_prepare()
2162 cdev->req->complete = composite_setup_complete; in composite_dev_prepare()
2163 cdev->req->context = cdev; in composite_dev_prepare()
2164 gadget->ep0->driver_data = cdev; in composite_dev_prepare()
2166 cdev->driver = composite; in composite_dev_prepare()
2183 kfree(cdev->req->buf); in composite_dev_prepare()
2185 usb_ep_free_request(gadget->ep0, cdev->req); in composite_dev_prepare()
2186 cdev->req = NULL; in composite_dev_prepare()
2190 int composite_os_desc_req_prepare(struct usb_composite_dev *cdev, in composite_os_desc_req_prepare() argument
2195 cdev->os_desc_req = usb_ep_alloc_request(ep0, GFP_KERNEL); in composite_os_desc_req_prepare()
2196 if (!cdev->os_desc_req) { in composite_os_desc_req_prepare()
2201 cdev->os_desc_req->buf = kmalloc(USB_COMP_EP0_OS_DESC_BUFSIZ, in composite_os_desc_req_prepare()
2203 if (!cdev->os_desc_req->buf) { in composite_os_desc_req_prepare()
2205 usb_ep_free_request(ep0, cdev->os_desc_req); in composite_os_desc_req_prepare()
2208 cdev->os_desc_req->context = cdev; in composite_os_desc_req_prepare()
2209 cdev->os_desc_req->complete = composite_setup_complete; in composite_os_desc_req_prepare()
2214 void composite_dev_cleanup(struct usb_composite_dev *cdev) in composite_dev_cleanup() argument
2219 list_for_each_entry_safe(uc, tmp, &cdev->gstrings, list) { in composite_dev_cleanup()
2223 if (cdev->os_desc_req) { in composite_dev_cleanup()
2224 if (cdev->os_desc_pending) in composite_dev_cleanup()
2225 usb_ep_dequeue(cdev->gadget->ep0, cdev->os_desc_req); in composite_dev_cleanup()
2227 kfree(cdev->os_desc_req->buf); in composite_dev_cleanup()
2228 cdev->os_desc_req->buf = NULL; in composite_dev_cleanup()
2229 usb_ep_free_request(cdev->gadget->ep0, cdev->os_desc_req); in composite_dev_cleanup()
2230 cdev->os_desc_req = NULL; in composite_dev_cleanup()
2232 if (cdev->req) { in composite_dev_cleanup()
2233 if (cdev->setup_pending) in composite_dev_cleanup()
2234 usb_ep_dequeue(cdev->gadget->ep0, cdev->req); in composite_dev_cleanup()
2236 kfree(cdev->req->buf); in composite_dev_cleanup()
2237 cdev->req->buf = NULL; in composite_dev_cleanup()
2238 usb_ep_free_request(cdev->gadget->ep0, cdev->req); in composite_dev_cleanup()
2239 cdev->req = NULL; in composite_dev_cleanup()
2241 cdev->next_string_id = 0; in composite_dev_cleanup()
2242 device_remove_file(&cdev->gadget->dev, &dev_attr_suspended); in composite_dev_cleanup()
2254 &cdev->gadget->ep_list, ep_list) { in composite_dev_cleanup()
2263 struct usb_composite_dev *cdev; in composite_bind() local
2267 cdev = kzalloc(sizeof *cdev, GFP_KERNEL); in composite_bind()
2268 if (!cdev) in composite_bind()
2271 spin_lock_init(&cdev->lock); in composite_bind()
2272 cdev->gadget = gadget; in composite_bind()
2273 set_gadget_data(gadget, cdev); in composite_bind()
2274 INIT_LIST_HEAD(&cdev->configs); in composite_bind()
2275 INIT_LIST_HEAD(&cdev->gstrings); in composite_bind()
2277 status = composite_dev_prepare(composite, cdev); in composite_bind()
2285 status = composite->bind(cdev); in composite_bind()
2289 if (cdev->use_os_string) { in composite_bind()
2290 status = composite_os_desc_req_prepare(cdev, gadget->ep0); in composite_bind()
2295 update_unchanged_dev_desc(&cdev->desc, composite->dev); in composite_bind()
2298 if (composite->needs_serial && !cdev->desc.iSerialNumber) in composite_bind()
2299 WARNING(cdev, "userspace failed to provide iSerialNumber\n"); in composite_bind()
2301 INFO(cdev, "%s ready\n", composite->name); in composite_bind()
2313 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_suspend() local
2319 DBG(cdev, "suspend\n"); in composite_suspend()
2320 if (cdev->config) { in composite_suspend()
2321 list_for_each_entry(f, &cdev->config->functions, list) { in composite_suspend()
2326 if (cdev->driver->suspend) in composite_suspend()
2327 cdev->driver->suspend(cdev); in composite_suspend()
2329 cdev->suspended = 1; in composite_suspend()
2337 struct usb_composite_dev *cdev = get_gadget_data(gadget); in composite_resume() local
2344 DBG(cdev, "resume\n"); in composite_resume()
2345 if (cdev->driver->resume) in composite_resume()
2346 cdev->driver->resume(cdev); in composite_resume()
2347 if (cdev->config) { in composite_resume()
2348 list_for_each_entry(f, &cdev->config->functions, list) { in composite_resume()
2353 maxpower = cdev->config->MaxPower ? in composite_resume()
2354 cdev->config->MaxPower : CONFIG_USB_GADGET_VBUS_DRAW; in composite_resume()
2366 cdev->suspended = 0; in composite_resume()
2447 void usb_composite_setup_continue(struct usb_composite_dev *cdev) in usb_composite_setup_continue() argument
2450 struct usb_request *req = cdev->req; in usb_composite_setup_continue()
2453 DBG(cdev, "%s\n", __func__); in usb_composite_setup_continue()
2454 spin_lock_irqsave(&cdev->lock, flags); in usb_composite_setup_continue()
2456 if (cdev->delayed_status == 0) { in usb_composite_setup_continue()
2457 WARN(cdev, "%s: Unexpected call\n", __func__); in usb_composite_setup_continue()
2459 } else if (--cdev->delayed_status == 0) { in usb_composite_setup_continue()
2460 DBG(cdev, "%s: Completing delayed status\n", __func__); in usb_composite_setup_continue()
2462 req->context = cdev; in usb_composite_setup_continue()
2463 value = composite_ep0_queue(cdev, req, GFP_ATOMIC); in usb_composite_setup_continue()
2465 DBG(cdev, "ep_queue --> %d\n", value); in usb_composite_setup_continue()
2467 composite_setup_complete(cdev->gadget->ep0, req); in usb_composite_setup_continue()
2471 spin_unlock_irqrestore(&cdev->lock, flags); in usb_composite_setup_continue()
2481 void usb_composite_overwrite_options(struct usb_composite_dev *cdev, in usb_composite_overwrite_options() argument
2484 struct usb_device_descriptor *desc = &cdev->desc; in usb_composite_overwrite_options()
2485 struct usb_gadget_strings *gstr = cdev->driver->strings[0]; in usb_composite_overwrite_options()
2507 cdev->def_manufacturer = composite_default_mfr(cdev->gadget); in usb_composite_overwrite_options()
2508 dev_str[USB_GADGET_MANUFACTURER_IDX].s = cdev->def_manufacturer; in usb_composite_overwrite_options()