Lines Matching defs:cdev
247 struct usb_composite_dev *cdev;
249 cdev = get_gadget_data(g);
250 ERROR(cdev, "ep0 bMaxBurst must be 0\n");
305 DBG(config->cdev, "adding '%s'/%p to config '%s'/%p\n",
347 DBG(config->cdev, "adding '%s'/%p --> %d\n",
389 struct usb_composite_dev *cdev = function->config->cdev;
393 spin_lock_irqsave(&cdev->lock, flags);
395 if (cdev->deactivations == 0) {
396 spin_unlock_irqrestore(&cdev->lock, flags);
397 status = usb_gadget_deactivate(cdev->gadget);
398 spin_lock_irqsave(&cdev->lock, flags);
401 cdev->deactivations++;
403 spin_unlock_irqrestore(&cdev->lock, flags);
420 struct usb_composite_dev *cdev = function->config->cdev;
424 spin_lock_irqsave(&cdev->lock, flags);
426 if (WARN_ON(cdev->deactivations == 0))
429 cdev->deactivations--;
430 if (cdev->deactivations == 0) {
431 spin_unlock_irqrestore(&cdev->lock, flags);
432 status = usb_gadget_activate(cdev->gadget);
433 spin_lock_irqsave(&cdev->lock, flags);
437 spin_unlock_irqrestore(&cdev->lock, flags);
551 static int config_desc(struct usb_composite_dev *cdev, unsigned w_value)
553 struct usb_gadget *gadget = cdev->gadget;
575 pos = &cdev->configs;
576 c = cdev->os_desc_config;
580 while ((pos = pos->next) != &cdev->configs) {
584 if (c == cdev->os_desc_config)
608 return config_buf(c, speed, cdev->req->buf, type);
614 static int count_configs(struct usb_composite_dev *cdev, unsigned type)
616 struct usb_gadget *gadget = cdev->gadget;
633 list_for_each_entry(c, &cdev->configs, list) {
655 * @cdev: pointer to usb_composite device to generate the bos
662 static int bos_desc(struct usb_composite_dev *cdev)
666 struct usb_bos_descriptor *bos = cdev->req->buf;
676 if (cdev->gadget->ops->get_config_params) {
677 cdev->gadget->ops->get_config_params(cdev->gadget,
702 usb_ext = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
715 if (gadget_is_superspeed(cdev->gadget)) {
718 ss_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
735 if (gadget_is_superspeed_plus(cdev->gadget)) {
738 ssp_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
783 static void device_qual(struct usb_composite_dev *cdev)
785 struct usb_qualifier_descriptor *qual = cdev->req->buf;
790 qual->bcdUSB = cdev->desc.bcdUSB;
791 qual->bDeviceClass = cdev->desc.bDeviceClass;
792 qual->bDeviceSubClass = cdev->desc.bDeviceSubClass;
793 qual->bDeviceProtocol = cdev->desc.bDeviceProtocol;
795 qual->bMaxPacketSize0 = cdev->gadget->ep0->maxpacket;
796 qual->bNumConfigurations = count_configs(cdev, USB_DT_DEVICE_QUALIFIER);
802 static void reset_config(struct usb_composite_dev *cdev)
806 DBG(cdev, "reset config\n");
808 list_for_each_entry(f, &cdev->config->functions, list) {
814 cdev->config = NULL;
815 cdev->delayed_status = 0;
818 static int set_config(struct usb_composite_dev *cdev,
821 struct usb_gadget *gadget = cdev->gadget;
828 list_for_each_entry(c, &cdev->configs, list) {
835 if (cdev->config)
836 reset_config(cdev);
844 if (cdev->config)
845 reset_config(cdev);
849 DBG(cdev, "%s config #%d: %s\n",
857 cdev->config = c;
890 DBG(cdev, "interface %d (%s/%p) alt 0 --> %d\n",
893 reset_config(cdev);
898 DBG(cdev,
901 cdev->delayed_status++;
902 DBG(cdev, "delayed_status count %d\n",
903 cdev->delayed_status);
924 if (result >= 0 && cdev->delayed_status)
929 int usb_add_config_only(struct usb_composite_dev *cdev,
938 list_for_each_entry(c, &cdev->configs, list) {
943 config->cdev = cdev;
944 list_add_tail(&config->list, &cdev->configs);
956 * @cdev: wraps the USB gadget
969 int usb_add_config(struct usb_composite_dev *cdev,
978 DBG(cdev, "adding config #%u '%s'/%p\n",
982 status = usb_add_config_only(cdev, config);
995 DBG(cdev, "unbind function '%s'/%p\n",
1002 config->cdev = NULL;
1006 DBG(cdev, "cfg %d/%p speeds:%s%s%s%s\n",
1012 ? (gadget_is_dualspeed(cdev->gadget)
1022 DBG(cdev, " interface %d = %s/%p\n",
1028 usb_ep_autoconfig_reset(cdev->gadget);
1032 DBG(cdev, "added config '%s'/%u --> %d\n", config->label,
1038 static void remove_config(struct usb_composite_dev *cdev,
1051 DBG(cdev, "unbind config '%s'/%p\n", config->label, config);
1059 * @cdev: wraps the USB gadget
1066 void usb_remove_config(struct usb_composite_dev *cdev,
1071 spin_lock_irqsave(&cdev->lock, flags);
1073 if (cdev->config == config)
1074 reset_config(cdev);
1076 spin_unlock_irqrestore(&cdev->lock, flags);
1078 remove_config(cdev, config);
1129 static int get_string(struct usb_composite_dev *cdev,
1132 struct usb_composite_driver *composite = cdev->driver;
1155 list_for_each_entry(c, &cdev->configs, list) {
1166 list_for_each_entry(uc, &cdev->gstrings, list) {
1182 if (cdev->use_os_string && language == 0 && id == OS_STRING_IDX) {
1187 sizeof(b->qwSignature) == sizeof(cdev->qw_sign),
1189 memcpy(&b->qwSignature, cdev->qw_sign, sizeof(b->qwSignature));
1190 b->bMS_VendorCode = cdev->b_vendor_code;
1195 list_for_each_entry(uc, &cdev->gstrings, list) {
1213 list_for_each_entry(c, &cdev->configs, list) {
1232 * @cdev: the device whose string descriptor IDs are being allocated
1244 int usb_string_id(struct usb_composite_dev *cdev)
1246 if (cdev->next_string_id < 254) {
1250 cdev->next_string_id++;
1251 return cdev->next_string_id;
1259 * @cdev: the device whose string descriptor IDs are being allocated
1273 int usb_string_ids_tab(struct usb_composite_dev *cdev, struct usb_string *str)
1275 int next = cdev->next_string_id;
1283 cdev->next_string_id = next;
1341 * usb_gstrings_attach() - attach gadget strings to a cdev and assign ids
1342 * @cdev: the device whose string descriptor IDs are being allocated
1348 * and attach it to the cdev. The actual string (usb_string.s) will not be
1357 struct usb_string *usb_gstrings_attach(struct usb_composite_dev *cdev,
1377 ret = usb_string_ids_tab(cdev, n_gs[0]->strings);
1394 list_add_tail(&uc->list, &cdev->gstrings);
1435 struct usb_composite_dev *cdev;
1452 cdev = req->context;
1454 if (cdev->req == req)
1455 cdev->setup_pending = false;
1456 else if (cdev->os_desc_req == req)
1457 cdev->os_desc_pending = false;
1462 static int composite_ep0_queue(struct usb_composite_dev *cdev,
1467 ret = usb_ep_queue(cdev->gadget->ep0, req, gfp_flags);
1469 if (cdev->req == req)
1470 cdev->setup_pending = true;
1471 else if (cdev->os_desc_req == req)
1472 cdev->os_desc_pending = true;
1640 struct usb_composite_dev *cdev = get_gadget_data(gadget);
1641 struct usb_request *req = cdev->req;
1668 req->context = cdev;
1671 gadget->ep0->driver_data = cdev;
1689 cdev->desc.bNumConfigurations =
1690 count_configs(cdev, USB_DT_DEVICE);
1691 cdev->desc.bMaxPacketSize0 =
1692 cdev->gadget->ep0->maxpacket;
1695 cdev->desc.bcdUSB = cpu_to_le16(0x0320);
1696 cdev->desc.bMaxPacketSize0 = 9;
1698 cdev->desc.bcdUSB = cpu_to_le16(0x0210);
1702 cdev->desc.bcdUSB = cpu_to_le16(0x0201);
1704 cdev->desc.bcdUSB = cpu_to_le16(0x0200);
1707 value = min(w_length, (u16) sizeof cdev->desc);
1708 memcpy(req->buf, &cdev->desc, value);
1714 device_qual(cdev);
1724 value = config_desc(cdev, w_value);
1729 value = get_string(cdev, req->buf,
1737 value = bos_desc(cdev);
1746 if (cdev->config)
1747 config = cdev->config;
1750 &cdev->configs,
1776 DBG(cdev, "HNP available\n");
1778 DBG(cdev, "HNP on another port\n");
1780 VDBG(cdev, "HNP inactive\n");
1782 spin_lock(&cdev->lock);
1783 value = set_config(cdev, ctrl, w_value);
1784 spin_unlock(&cdev->lock);
1789 if (cdev->config)
1790 *(u8 *)req->buf = cdev->config->bConfigurationValue;
1800 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
1802 f = cdev->config->interface[intf];
1814 spin_lock(&cdev->lock);
1817 DBG(cdev,
1820 cdev->delayed_status++;
1821 DBG(cdev, "delayed_status count %d\n",
1822 cdev->delayed_status);
1824 spin_unlock(&cdev->lock);
1829 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
1831 f = cdev->config->interface[intf];
1865 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
1867 f = cdev->config->interface[intf];
1888 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
1890 f = cdev->config->interface[intf];
1897 ERROR(cdev,
1910 if (cdev->use_os_string && cdev->os_desc_config &&
1912 ctrl->bRequest == cdev->b_vendor_code) {
1918 req = cdev->os_desc_req;
1919 req->context = cdev;
1922 os_desc_cfg = cdev->os_desc_config;
1970 VDBG(cdev,
1979 if (cdev->config) {
1980 list_for_each_entry(f, &cdev->config->functions, list)
1986 list_for_each_entry(c, &cdev->configs, list)
1996 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
1998 f = cdev->config->interface[intf];
2002 if (!cdev->config)
2005 list_for_each_entry(f, &cdev->config->functions, list) {
2009 if (&f->list == &cdev->config->functions)
2019 c = cdev->config;
2045 req->context = cdev;
2047 value = composite_ep0_queue(cdev, req, GFP_ATOMIC);
2049 DBG(cdev, "ep_queue --> %d\n", value);
2054 WARN(cdev,
2066 struct usb_composite_dev *cdev = get_gadget_data(gadget);
2072 spin_lock_irqsave(&cdev->lock, flags);
2073 cdev->suspended = 0;
2074 if (cdev->config)
2075 reset_config(cdev);
2076 if (cdev->driver->disconnect)
2077 cdev->driver->disconnect(cdev);
2078 spin_unlock_irqrestore(&cdev->lock, flags);
2087 struct usb_composite_dev *cdev = get_gadget_data(gadget);
2089 return sprintf(buf, "%d\n", cdev->suspended);
2095 struct usb_composite_dev *cdev = get_gadget_data(gadget);
2096 struct usb_gadget_strings *gstr = cdev->driver->strings[0];
2102 * state protected by cdev->lock.
2104 WARN_ON(cdev->config);
2106 while (!list_empty(&cdev->configs)) {
2108 c = list_first_entry(&cdev->configs,
2110 remove_config(cdev, c);
2112 if (cdev->driver->unbind && unbind_driver)
2113 cdev->driver->unbind(cdev);
2115 composite_dev_cleanup(cdev);
2117 if (dev_str[USB_GADGET_MANUFACTURER_IDX].s == cdev->def_manufacturer)
2120 kfree(cdev->def_manufacturer);
2121 kfree(cdev);
2169 struct usb_composite_dev *cdev)
2171 struct usb_gadget *gadget = cdev->gadget;
2175 cdev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL);
2176 if (!cdev->req)
2179 cdev->req->buf = kzalloc(USB_COMP_EP0_BUFSIZ, GFP_KERNEL);
2180 if (!cdev->req->buf)
2187 cdev->req->complete = composite_setup_complete;
2188 cdev->req->context = cdev;
2189 gadget->ep0->driver_data = cdev;
2191 cdev->driver = composite;
2208 kfree(cdev->req->buf);
2210 usb_ep_free_request(gadget->ep0, cdev->req);
2211 cdev->req = NULL;
2215 int composite_os_desc_req_prepare(struct usb_composite_dev *cdev,
2220 cdev->os_desc_req = usb_ep_alloc_request(ep0, GFP_KERNEL);
2221 if (!cdev->os_desc_req) {
2226 cdev->os_desc_req->buf = kmalloc(USB_COMP_EP0_OS_DESC_BUFSIZ,
2228 if (!cdev->os_desc_req->buf) {
2230 usb_ep_free_request(ep0, cdev->os_desc_req);
2233 cdev->os_desc_req->context = cdev;
2234 cdev->os_desc_req->complete = composite_setup_complete;
2239 void composite_dev_cleanup(struct usb_composite_dev *cdev)
2244 list_for_each_entry_safe(uc, tmp, &cdev->gstrings, list) {
2248 if (cdev->os_desc_req) {
2249 if (cdev->os_desc_pending)
2250 usb_ep_dequeue(cdev->gadget->ep0, cdev->os_desc_req);
2252 kfree(cdev->os_desc_req->buf);
2253 cdev->os_desc_req->buf = NULL;
2254 usb_ep_free_request(cdev->gadget->ep0, cdev->os_desc_req);
2255 cdev->os_desc_req = NULL;
2257 if (cdev->req) {
2258 if (cdev->setup_pending)
2259 usb_ep_dequeue(cdev->gadget->ep0, cdev->req);
2261 kfree(cdev->req->buf);
2262 cdev->req->buf = NULL;
2263 usb_ep_free_request(cdev->gadget->ep0, cdev->req);
2264 cdev->req = NULL;
2266 cdev->next_string_id = 0;
2267 device_remove_file(&cdev->gadget->dev, &dev_attr_suspended);
2279 &cdev->gadget->ep_list, ep_list) {
2288 struct usb_composite_dev *cdev;
2292 cdev = kzalloc(sizeof *cdev, GFP_KERNEL);
2293 if (!cdev)
2296 spin_lock_init(&cdev->lock);
2297 cdev->gadget = gadget;
2298 set_gadget_data(gadget, cdev);
2299 INIT_LIST_HEAD(&cdev->configs);
2300 INIT_LIST_HEAD(&cdev->gstrings);
2302 status = composite_dev_prepare(composite, cdev);
2310 status = composite->bind(cdev);
2314 if (cdev->use_os_string) {
2315 status = composite_os_desc_req_prepare(cdev, gadget->ep0);
2320 update_unchanged_dev_desc(&cdev->desc, composite->dev);
2323 if (composite->needs_serial && !cdev->desc.iSerialNumber)
2324 WARNING(cdev, "userspace failed to provide iSerialNumber\n");
2326 INFO(cdev, "%s ready\n", composite->name);
2338 struct usb_composite_dev *cdev = get_gadget_data(gadget);
2344 DBG(cdev, "suspend\n");
2345 if (cdev->config) {
2346 list_for_each_entry(f, &cdev->config->functions, list) {
2351 if (cdev->driver->suspend)
2352 cdev->driver->suspend(cdev);
2354 cdev->suspended = 1;
2362 struct usb_composite_dev *cdev = get_gadget_data(gadget);
2369 DBG(cdev, "resume\n");
2370 if (cdev->driver->resume)
2371 cdev->driver->resume(cdev);
2372 if (cdev->config) {
2373 list_for_each_entry(f, &cdev->config->functions, list) {
2378 maxpower = cdev->config->MaxPower ?
2379 cdev->config->MaxPower : CONFIG_USB_GADGET_VBUS_DRAW;
2391 cdev->suspended = 0;
2464 * @cdev: the composite device who's control transfer was kept waiting
2472 void usb_composite_setup_continue(struct usb_composite_dev *cdev)
2475 struct usb_request *req = cdev->req;
2478 DBG(cdev, "%s\n", __func__);
2479 spin_lock_irqsave(&cdev->lock, flags);
2481 if (cdev->delayed_status == 0) {
2482 WARN(cdev, "%s: Unexpected call\n", __func__);
2484 } else if (--cdev->delayed_status == 0) {
2485 DBG(cdev, "%s: Completing delayed status\n", __func__);
2487 req->context = cdev;
2488 value = composite_ep0_queue(cdev, req, GFP_ATOMIC);
2490 DBG(cdev, "ep_queue --> %d\n", value);
2492 composite_setup_complete(cdev->gadget->ep0, req);
2496 spin_unlock_irqrestore(&cdev->lock, flags);
2506 void usb_composite_overwrite_options(struct usb_composite_dev *cdev,
2509 struct usb_device_descriptor *desc = &cdev->desc;
2510 struct usb_gadget_strings *gstr = cdev->driver->strings[0];
2532 cdev->def_manufacturer = composite_default_mfr(cdev->gadget);
2533 dev_str[USB_GADGET_MANUFACTURER_IDX].s = cdev->def_manufacturer;