OSDN Git Service

2c022a08f16387a754b46f0091506fe374606480
[android-x86/kernel.git] / drivers / usb / gadget / composite.c
1 /*
2  * composite.c - infrastructure for Composite USB Gadgets
3  *
4  * Copyright (C) 2006-2008 David Brownell
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  */
11
12 /* #define VERBOSE_DEBUG */
13
14 #include <linux/kallsyms.h>
15 #include <linux/kernel.h>
16 #include <linux/slab.h>
17 #include <linux/module.h>
18 #include <linux/device.h>
19 #include <linux/utsname.h>
20
21 #include <linux/usb/composite.h>
22 #include <linux/usb/otg.h>
23 #include <asm/unaligned.h>
24
25 #include "u_os_desc.h"
26
27 /**
28  * struct usb_os_string - represents OS String to be reported by a gadget
29  * @bLength: total length of the entire descritor, always 0x12
30  * @bDescriptorType: USB_DT_STRING
31  * @qwSignature: the OS String proper
32  * @bMS_VendorCode: code used by the host for subsequent requests
33  * @bPad: not used, must be zero
34  */
35 struct usb_os_string {
36         __u8    bLength;
37         __u8    bDescriptorType;
38         __u8    qwSignature[OS_STRING_QW_SIGN_LEN];
39         __u8    bMS_VendorCode;
40         __u8    bPad;
41 } __packed;
42
43 /*
44  * The code in this file is utility code, used to build a gadget driver
45  * from one or more "function" drivers, one or more "configuration"
46  * objects, and a "usb_composite_driver" by gluing them together along
47  * with the relevant device-wide data.
48  */
49
50 static struct usb_gadget_strings **get_containers_gs(
51                 struct usb_gadget_string_container *uc)
52 {
53         return (struct usb_gadget_strings **)uc->stash;
54 }
55
56 /**
57  * function_descriptors() - get function descriptors for speed
58  * @f: the function
59  * @speed: the speed
60  *
61  * Returns the descriptors or NULL if not set.
62  */
63 static struct usb_descriptor_header **
64 function_descriptors(struct usb_function *f,
65                      enum usb_device_speed speed)
66 {
67         struct usb_descriptor_header **descriptors;
68
69         /*
70          * NOTE: we try to help gadget drivers which might not be setting
71          * max_speed appropriately.
72          */
73
74         switch (speed) {
75         case USB_SPEED_SUPER_PLUS:
76                 descriptors = f->ssp_descriptors;
77                 if (descriptors)
78                         break;
79                 /* FALLTHROUGH */
80         case USB_SPEED_SUPER:
81                 descriptors = f->ss_descriptors;
82                 if (descriptors)
83                         break;
84                 /* FALLTHROUGH */
85         case USB_SPEED_HIGH:
86                 descriptors = f->hs_descriptors;
87                 if (descriptors)
88                         break;
89                 /* FALLTHROUGH */
90         default:
91                 descriptors = f->fs_descriptors;
92         }
93
94         /*
95          * if we can't find any descriptors at all, then this gadget deserves to
96          * Oops with a NULL pointer dereference
97          */
98
99         return descriptors;
100 }
101
102 /**
103  * next_ep_desc() - advance to the next EP descriptor
104  * @t: currect pointer within descriptor array
105  *
106  * Return: next EP descriptor or NULL
107  *
108  * Iterate over @t until either EP descriptor found or
109  * NULL (that indicates end of list) encountered
110  */
111 static struct usb_descriptor_header**
112 next_ep_desc(struct usb_descriptor_header **t)
113 {
114         for (; *t; t++) {
115                 if ((*t)->bDescriptorType == USB_DT_ENDPOINT)
116                         return t;
117         }
118         return NULL;
119 }
120
121 /*
122  * for_each_ep_desc()- iterate over endpoint descriptors in the
123  *              descriptors list
124  * @start:      pointer within descriptor array.
125  * @ep_desc:    endpoint descriptor to use as the loop cursor
126  */
127 #define for_each_ep_desc(start, ep_desc) \
128         for (ep_desc = next_ep_desc(start); \
129               ep_desc; ep_desc = next_ep_desc(ep_desc+1))
130
131 /**
132  * config_ep_by_speed() - configures the given endpoint
133  * according to gadget speed.
134  * @g: pointer to the gadget
135  * @f: usb function
136  * @_ep: the endpoint to configure
137  *
138  * Return: error code, 0 on success
139  *
140  * This function chooses the right descriptors for a given
141  * endpoint according to gadget speed and saves it in the
142  * endpoint desc field. If the endpoint already has a descriptor
143  * assigned to it - overwrites it with currently corresponding
144  * descriptor. The endpoint maxpacket field is updated according
145  * to the chosen descriptor.
146  * Note: the supplied function should hold all the descriptors
147  * for supported speeds
148  */
149 int config_ep_by_speed(struct usb_gadget *g,
150                         struct usb_function *f,
151                         struct usb_ep *_ep)
152 {
153         struct usb_endpoint_descriptor *chosen_desc = NULL;
154         struct usb_descriptor_header **speed_desc = NULL;
155
156         struct usb_ss_ep_comp_descriptor *comp_desc = NULL;
157         int want_comp_desc = 0;
158
159         struct usb_descriptor_header **d_spd; /* cursor for speed desc */
160
161         if (!g || !f || !_ep)
162                 return -EIO;
163
164         /* select desired speed */
165         switch (g->speed) {
166         case USB_SPEED_SUPER_PLUS:
167                 if (gadget_is_superspeed_plus(g)) {
168                         speed_desc = f->ssp_descriptors;
169                         want_comp_desc = 1;
170                         break;
171                 }
172                 /* else: Fall trough */
173         case USB_SPEED_SUPER:
174                 if (gadget_is_superspeed(g)) {
175                         speed_desc = f->ss_descriptors;
176                         want_comp_desc = 1;
177                         break;
178                 }
179                 /* else: Fall trough */
180         case USB_SPEED_HIGH:
181                 if (gadget_is_dualspeed(g)) {
182                         speed_desc = f->hs_descriptors;
183                         break;
184                 }
185                 /* else: fall through */
186         default:
187                 speed_desc = f->fs_descriptors;
188         }
189         /* find descriptors */
190         for_each_ep_desc(speed_desc, d_spd) {
191                 chosen_desc = (struct usb_endpoint_descriptor *)*d_spd;
192                 if (chosen_desc->bEndpointAddress == _ep->address)
193                         goto ep_found;
194         }
195         return -EIO;
196
197 ep_found:
198         /* commit results */
199         _ep->maxpacket = usb_endpoint_maxp(chosen_desc) & 0x7ff;
200         _ep->desc = chosen_desc;
201         _ep->comp_desc = NULL;
202         _ep->maxburst = 0;
203         _ep->mult = 1;
204
205         if (g->speed == USB_SPEED_HIGH && (usb_endpoint_xfer_isoc(_ep->desc) ||
206                                 usb_endpoint_xfer_int(_ep->desc)))
207                 _ep->mult = ((usb_endpoint_maxp(_ep->desc) & 0x1800) >> 11) + 1;
208
209         if (!want_comp_desc)
210                 return 0;
211
212         /*
213          * Companion descriptor should follow EP descriptor
214          * USB 3.0 spec, #9.6.7
215          */
216         comp_desc = (struct usb_ss_ep_comp_descriptor *)*(++d_spd);
217         if (!comp_desc ||
218             (comp_desc->bDescriptorType != USB_DT_SS_ENDPOINT_COMP))
219                 return -EIO;
220         _ep->comp_desc = comp_desc;
221         if (g->speed >= USB_SPEED_SUPER) {
222                 switch (usb_endpoint_type(_ep->desc)) {
223                 case USB_ENDPOINT_XFER_ISOC:
224                         /* mult: bits 1:0 of bmAttributes */
225                         _ep->mult = (comp_desc->bmAttributes & 0x3) + 1;
226                 case USB_ENDPOINT_XFER_BULK:
227                 case USB_ENDPOINT_XFER_INT:
228                         _ep->maxburst = comp_desc->bMaxBurst + 1;
229                         break;
230                 default:
231                         if (comp_desc->bMaxBurst != 0) {
232                                 struct usb_composite_dev *cdev;
233
234                                 cdev = get_gadget_data(g);
235                                 ERROR(cdev, "ep0 bMaxBurst must be 0\n");
236                         }
237                         _ep->maxburst = 1;
238                         break;
239                 }
240         }
241         return 0;
242 }
243 EXPORT_SYMBOL_GPL(config_ep_by_speed);
244
245 /**
246  * usb_add_function() - add a function to a configuration
247  * @config: the configuration
248  * @function: the function being added
249  * Context: single threaded during gadget setup
250  *
251  * After initialization, each configuration must have one or more
252  * functions added to it.  Adding a function involves calling its @bind()
253  * method to allocate resources such as interface and string identifiers
254  * and endpoints.
255  *
256  * This function returns the value of the function's bind(), which is
257  * zero for success else a negative errno value.
258  */
259 int usb_add_function(struct usb_configuration *config,
260                 struct usb_function *function)
261 {
262         int     value = -EINVAL;
263
264         DBG(config->cdev, "adding '%s'/%p to config '%s'/%p\n",
265                         function->name, function,
266                         config->label, config);
267
268         if (!function->set_alt || !function->disable)
269                 goto done;
270
271         function->config = config;
272         list_add_tail(&function->list, &config->functions);
273
274         if (function->bind_deactivated) {
275                 value = usb_function_deactivate(function);
276                 if (value)
277                         goto done;
278         }
279
280         /* REVISIT *require* function->bind? */
281         if (function->bind) {
282                 value = function->bind(config, function);
283                 if (value < 0) {
284                         list_del(&function->list);
285                         function->config = NULL;
286                 }
287         } else
288                 value = 0;
289
290         /* We allow configurations that don't work at both speeds.
291          * If we run into a lowspeed Linux system, treat it the same
292          * as full speed ... it's the function drivers that will need
293          * to avoid bulk and ISO transfers.
294          */
295         if (!config->fullspeed && function->fs_descriptors)
296                 config->fullspeed = true;
297         if (!config->highspeed && function->hs_descriptors)
298                 config->highspeed = true;
299         if (!config->superspeed && function->ss_descriptors)
300                 config->superspeed = true;
301         if (!config->superspeed_plus && function->ssp_descriptors)
302                 config->superspeed_plus = true;
303
304 done:
305         if (value)
306                 DBG(config->cdev, "adding '%s'/%p --> %d\n",
307                                 function->name, function, value);
308         return value;
309 }
310 EXPORT_SYMBOL_GPL(usb_add_function);
311
312 void usb_remove_function(struct usb_configuration *c, struct usb_function *f)
313 {
314         if (f->disable)
315                 f->disable(f);
316
317         bitmap_zero(f->endpoints, 32);
318         list_del(&f->list);
319         if (f->unbind)
320                 f->unbind(c, f);
321 }
322 EXPORT_SYMBOL_GPL(usb_remove_function);
323
324 /**
325  * usb_function_deactivate - prevent function and gadget enumeration
326  * @function: the function that isn't yet ready to respond
327  *
328  * Blocks response of the gadget driver to host enumeration by
329  * preventing the data line pullup from being activated.  This is
330  * normally called during @bind() processing to change from the
331  * initial "ready to respond" state, or when a required resource
332  * becomes available.
333  *
334  * For example, drivers that serve as a passthrough to a userspace
335  * daemon can block enumeration unless that daemon (such as an OBEX,
336  * MTP, or print server) is ready to handle host requests.
337  *
338  * Not all systems support software control of their USB peripheral
339  * data pullups.
340  *
341  * Returns zero on success, else negative errno.
342  */
343 int usb_function_deactivate(struct usb_function *function)
344 {
345         struct usb_composite_dev        *cdev = function->config->cdev;
346         unsigned long                   flags;
347         int                             status = 0;
348
349         spin_lock_irqsave(&cdev->lock, flags);
350
351         if (cdev->deactivations == 0)
352                 status = usb_gadget_deactivate(cdev->gadget);
353         if (status == 0)
354                 cdev->deactivations++;
355
356         spin_unlock_irqrestore(&cdev->lock, flags);
357         return status;
358 }
359 EXPORT_SYMBOL_GPL(usb_function_deactivate);
360
361 /**
362  * usb_function_activate - allow function and gadget enumeration
363  * @function: function on which usb_function_activate() was called
364  *
365  * Reverses effect of usb_function_deactivate().  If no more functions
366  * are delaying their activation, the gadget driver will respond to
367  * host enumeration procedures.
368  *
369  * Returns zero on success, else negative errno.
370  */
371 int usb_function_activate(struct usb_function *function)
372 {
373         struct usb_composite_dev        *cdev = function->config->cdev;
374         unsigned long                   flags;
375         int                             status = 0;
376
377         spin_lock_irqsave(&cdev->lock, flags);
378
379         if (WARN_ON(cdev->deactivations == 0))
380                 status = -EINVAL;
381         else {
382                 cdev->deactivations--;
383                 if (cdev->deactivations == 0)
384                         status = usb_gadget_activate(cdev->gadget);
385         }
386
387         spin_unlock_irqrestore(&cdev->lock, flags);
388         return status;
389 }
390 EXPORT_SYMBOL_GPL(usb_function_activate);
391
392 /**
393  * usb_interface_id() - allocate an unused interface ID
394  * @config: configuration associated with the interface
395  * @function: function handling the interface
396  * Context: single threaded during gadget setup
397  *
398  * usb_interface_id() is called from usb_function.bind() callbacks to
399  * allocate new interface IDs.  The function driver will then store that
400  * ID in interface, association, CDC union, and other descriptors.  It
401  * will also handle any control requests targeted at that interface,
402  * particularly changing its altsetting via set_alt().  There may
403  * also be class-specific or vendor-specific requests to handle.
404  *
405  * All interface identifier should be allocated using this routine, to
406  * ensure that for example different functions don't wrongly assign
407  * different meanings to the same identifier.  Note that since interface
408  * identifiers are configuration-specific, functions used in more than
409  * one configuration (or more than once in a given configuration) need
410  * multiple versions of the relevant descriptors.
411  *
412  * Returns the interface ID which was allocated; or -ENODEV if no
413  * more interface IDs can be allocated.
414  */
415 int usb_interface_id(struct usb_configuration *config,
416                 struct usb_function *function)
417 {
418         unsigned id = config->next_interface_id;
419
420         if (id < MAX_CONFIG_INTERFACES) {
421                 config->interface[id] = function;
422                 config->next_interface_id = id + 1;
423                 return id;
424         }
425         return -ENODEV;
426 }
427 EXPORT_SYMBOL_GPL(usb_interface_id);
428
429 static u8 encode_bMaxPower(enum usb_device_speed speed,
430                 struct usb_configuration *c)
431 {
432         unsigned val;
433
434         if (c->MaxPower)
435                 val = c->MaxPower;
436         else
437                 val = CONFIG_USB_GADGET_VBUS_DRAW;
438         if (!val)
439                 return 0;
440         switch (speed) {
441         case USB_SPEED_SUPER:
442                 return DIV_ROUND_UP(val, 8);
443         default:
444                 return DIV_ROUND_UP(val, 2);
445         }
446 }
447
448 static int config_buf(struct usb_configuration *config,
449                 enum usb_device_speed speed, void *buf, u8 type)
450 {
451         struct usb_config_descriptor    *c = buf;
452         void                            *next = buf + USB_DT_CONFIG_SIZE;
453         int                             len;
454         struct usb_function             *f;
455         int                             status;
456
457         len = USB_COMP_EP0_BUFSIZ - USB_DT_CONFIG_SIZE;
458         /* write the config descriptor */
459         c = buf;
460         c->bLength = USB_DT_CONFIG_SIZE;
461         c->bDescriptorType = type;
462         /* wTotalLength is written later */
463         c->bNumInterfaces = config->next_interface_id;
464         c->bConfigurationValue = config->bConfigurationValue;
465         c->iConfiguration = config->iConfiguration;
466         c->bmAttributes = USB_CONFIG_ATT_ONE | config->bmAttributes;
467         c->bMaxPower = encode_bMaxPower(speed, config);
468
469         /* There may be e.g. OTG descriptors */
470         if (config->descriptors) {
471                 status = usb_descriptor_fillbuf(next, len,
472                                 config->descriptors);
473                 if (status < 0)
474                         return status;
475                 len -= status;
476                 next += status;
477         }
478
479         /* add each function's descriptors */
480         list_for_each_entry(f, &config->functions, list) {
481                 struct usb_descriptor_header **descriptors;
482
483                 descriptors = function_descriptors(f, speed);
484                 if (!descriptors)
485                         continue;
486                 status = usb_descriptor_fillbuf(next, len,
487                         (const struct usb_descriptor_header **) descriptors);
488                 if (status < 0)
489                         return status;
490                 len -= status;
491                 next += status;
492         }
493
494         len = next - buf;
495         c->wTotalLength = cpu_to_le16(len);
496         return len;
497 }
498
499 static int config_desc(struct usb_composite_dev *cdev, unsigned w_value)
500 {
501         struct usb_gadget               *gadget = cdev->gadget;
502         struct usb_configuration        *c;
503         struct list_head                *pos;
504         u8                              type = w_value >> 8;
505         enum usb_device_speed           speed = USB_SPEED_UNKNOWN;
506
507         if (gadget->speed >= USB_SPEED_SUPER)
508                 speed = gadget->speed;
509         else if (gadget_is_dualspeed(gadget)) {
510                 int     hs = 0;
511                 if (gadget->speed == USB_SPEED_HIGH)
512                         hs = 1;
513                 if (type == USB_DT_OTHER_SPEED_CONFIG)
514                         hs = !hs;
515                 if (hs)
516                         speed = USB_SPEED_HIGH;
517
518         }
519
520         /* This is a lookup by config *INDEX* */
521         w_value &= 0xff;
522
523         pos = &cdev->configs;
524         c = cdev->os_desc_config;
525         if (c)
526                 goto check_config;
527
528         while ((pos = pos->next) !=  &cdev->configs) {
529                 c = list_entry(pos, typeof(*c), list);
530
531                 /* skip OS Descriptors config which is handled separately */
532                 if (c == cdev->os_desc_config)
533                         continue;
534
535 check_config:
536                 /* ignore configs that won't work at this speed */
537                 switch (speed) {
538                 case USB_SPEED_SUPER_PLUS:
539                         if (!c->superspeed_plus)
540                                 continue;
541                         break;
542                 case USB_SPEED_SUPER:
543                         if (!c->superspeed)
544                                 continue;
545                         break;
546                 case USB_SPEED_HIGH:
547                         if (!c->highspeed)
548                                 continue;
549                         break;
550                 default:
551                         if (!c->fullspeed)
552                                 continue;
553                 }
554
555                 if (w_value == 0)
556                         return config_buf(c, speed, cdev->req->buf, type);
557                 w_value--;
558         }
559         return -EINVAL;
560 }
561
562 static int count_configs(struct usb_composite_dev *cdev, unsigned type)
563 {
564         struct usb_gadget               *gadget = cdev->gadget;
565         struct usb_configuration        *c;
566         unsigned                        count = 0;
567         int                             hs = 0;
568         int                             ss = 0;
569         int                             ssp = 0;
570
571         if (gadget_is_dualspeed(gadget)) {
572                 if (gadget->speed == USB_SPEED_HIGH)
573                         hs = 1;
574                 if (gadget->speed == USB_SPEED_SUPER)
575                         ss = 1;
576                 if (gadget->speed == USB_SPEED_SUPER_PLUS)
577                         ssp = 1;
578                 if (type == USB_DT_DEVICE_QUALIFIER)
579                         hs = !hs;
580         }
581         list_for_each_entry(c, &cdev->configs, list) {
582                 /* ignore configs that won't work at this speed */
583                 if (ssp) {
584                         if (!c->superspeed_plus)
585                                 continue;
586                 } else if (ss) {
587                         if (!c->superspeed)
588                                 continue;
589                 } else if (hs) {
590                         if (!c->highspeed)
591                                 continue;
592                 } else {
593                         if (!c->fullspeed)
594                                 continue;
595                 }
596                 count++;
597         }
598         return count;
599 }
600
601 /**
602  * bos_desc() - prepares the BOS descriptor.
603  * @cdev: pointer to usb_composite device to generate the bos
604  *      descriptor for
605  *
606  * This function generates the BOS (Binary Device Object)
607  * descriptor and its device capabilities descriptors. The BOS
608  * descriptor should be supported by a SuperSpeed device.
609  */
610 static int bos_desc(struct usb_composite_dev *cdev)
611 {
612         struct usb_ext_cap_descriptor   *usb_ext;
613         struct usb_ss_cap_descriptor    *ss_cap;
614         struct usb_dcd_config_params    dcd_config_params;
615         struct usb_bos_descriptor       *bos = cdev->req->buf;
616
617         bos->bLength = USB_DT_BOS_SIZE;
618         bos->bDescriptorType = USB_DT_BOS;
619
620         bos->wTotalLength = cpu_to_le16(USB_DT_BOS_SIZE);
621         bos->bNumDeviceCaps = 0;
622
623         /*
624          * A SuperSpeed device shall include the USB2.0 extension descriptor
625          * and shall support LPM when operating in USB2.0 HS mode.
626          */
627         usb_ext = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
628         bos->bNumDeviceCaps++;
629         le16_add_cpu(&bos->wTotalLength, USB_DT_USB_EXT_CAP_SIZE);
630         usb_ext->bLength = USB_DT_USB_EXT_CAP_SIZE;
631         usb_ext->bDescriptorType = USB_DT_DEVICE_CAPABILITY;
632         usb_ext->bDevCapabilityType = USB_CAP_TYPE_EXT;
633         usb_ext->bmAttributes = cpu_to_le32(USB_LPM_SUPPORT | USB_BESL_SUPPORT);
634
635         /*
636          * The Superspeed USB Capability descriptor shall be implemented by all
637          * SuperSpeed devices.
638          */
639         ss_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
640         bos->bNumDeviceCaps++;
641         le16_add_cpu(&bos->wTotalLength, USB_DT_USB_SS_CAP_SIZE);
642         ss_cap->bLength = USB_DT_USB_SS_CAP_SIZE;
643         ss_cap->bDescriptorType = USB_DT_DEVICE_CAPABILITY;
644         ss_cap->bDevCapabilityType = USB_SS_CAP_TYPE;
645         ss_cap->bmAttributes = 0; /* LTM is not supported yet */
646         ss_cap->wSpeedSupported = cpu_to_le16(USB_LOW_SPEED_OPERATION |
647                                 USB_FULL_SPEED_OPERATION |
648                                 USB_HIGH_SPEED_OPERATION |
649                                 USB_5GBPS_OPERATION);
650         ss_cap->bFunctionalitySupport = USB_LOW_SPEED_OPERATION;
651
652         /* Get Controller configuration */
653         if (cdev->gadget->ops->get_config_params)
654                 cdev->gadget->ops->get_config_params(&dcd_config_params);
655         else {
656                 dcd_config_params.bU1devExitLat = USB_DEFAULT_U1_DEV_EXIT_LAT;
657                 dcd_config_params.bU2DevExitLat =
658                         cpu_to_le16(USB_DEFAULT_U2_DEV_EXIT_LAT);
659         }
660         ss_cap->bU1devExitLat = dcd_config_params.bU1devExitLat;
661         ss_cap->bU2DevExitLat = dcd_config_params.bU2DevExitLat;
662
663         /* The SuperSpeedPlus USB Device Capability descriptor */
664         if (gadget_is_superspeed_plus(cdev->gadget)) {
665                 struct usb_ssp_cap_descriptor *ssp_cap;
666
667                 ssp_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
668                 bos->bNumDeviceCaps++;
669
670                 /*
671                  * Report typical values.
672                  */
673
674                 le16_add_cpu(&bos->wTotalLength, USB_DT_USB_SSP_CAP_SIZE(1));
675                 ssp_cap->bLength = USB_DT_USB_SSP_CAP_SIZE(1);
676                 ssp_cap->bDescriptorType = USB_DT_DEVICE_CAPABILITY;
677                 ssp_cap->bDevCapabilityType = USB_SSP_CAP_TYPE;
678                 ssp_cap->bReserved = 0;
679                 ssp_cap->wReserved = 0;
680
681                 /* SSAC = 1 (2 attributes) */
682                 ssp_cap->bmAttributes = cpu_to_le32(1);
683
684                 /* Min RX/TX Lane Count = 1 */
685                 ssp_cap->wFunctionalitySupport =
686                         cpu_to_le16((1 << 8) | (1 << 12));
687
688                 /*
689                  * bmSublinkSpeedAttr[0]:
690                  *   ST  = Symmetric, RX
691                  *   LSE =  3 (Gbps)
692                  *   LP  =  1 (SuperSpeedPlus)
693                  *   LSM = 10 (10 Gbps)
694                  */
695                 ssp_cap->bmSublinkSpeedAttr[0] =
696                         cpu_to_le32((3 << 4) | (1 << 14) | (0xa << 16));
697                 /*
698                  * bmSublinkSpeedAttr[1] =
699                  *   ST  = Symmetric, TX
700                  *   LSE =  3 (Gbps)
701                  *   LP  =  1 (SuperSpeedPlus)
702                  *   LSM = 10 (10 Gbps)
703                  */
704                 ssp_cap->bmSublinkSpeedAttr[1] =
705                         cpu_to_le32((3 << 4) | (1 << 14) |
706                                     (0xa << 16) | (1 << 7));
707         }
708
709         return le16_to_cpu(bos->wTotalLength);
710 }
711
712 static void device_qual(struct usb_composite_dev *cdev)
713 {
714         struct usb_qualifier_descriptor *qual = cdev->req->buf;
715
716         qual->bLength = sizeof(*qual);
717         qual->bDescriptorType = USB_DT_DEVICE_QUALIFIER;
718         /* POLICY: same bcdUSB and device type info at both speeds */
719         qual->bcdUSB = cdev->desc.bcdUSB;
720         qual->bDeviceClass = cdev->desc.bDeviceClass;
721         qual->bDeviceSubClass = cdev->desc.bDeviceSubClass;
722         qual->bDeviceProtocol = cdev->desc.bDeviceProtocol;
723         /* ASSUME same EP0 fifo size at both speeds */
724         qual->bMaxPacketSize0 = cdev->gadget->ep0->maxpacket;
725         qual->bNumConfigurations = count_configs(cdev, USB_DT_DEVICE_QUALIFIER);
726         qual->bRESERVED = 0;
727 }
728
729 /*-------------------------------------------------------------------------*/
730
731 static void reset_config(struct usb_composite_dev *cdev)
732 {
733         struct usb_function             *f;
734
735         DBG(cdev, "reset config\n");
736
737         list_for_each_entry(f, &cdev->config->functions, list) {
738                 if (f->disable)
739                         f->disable(f);
740
741                 bitmap_zero(f->endpoints, 32);
742         }
743         cdev->config = NULL;
744         cdev->delayed_status = 0;
745 }
746
747 static int set_config(struct usb_composite_dev *cdev,
748                 const struct usb_ctrlrequest *ctrl, unsigned number)
749 {
750         struct usb_gadget       *gadget = cdev->gadget;
751         struct usb_configuration *c = NULL;
752         int                     result = -EINVAL;
753         unsigned                power = gadget_is_otg(gadget) ? 8 : 100;
754         int                     tmp;
755
756         if (number) {
757                 list_for_each_entry(c, &cdev->configs, list) {
758                         if (c->bConfigurationValue == number) {
759                                 /*
760                                  * We disable the FDs of the previous
761                                  * configuration only if the new configuration
762                                  * is a valid one
763                                  */
764                                 if (cdev->config)
765                                         reset_config(cdev);
766                                 result = 0;
767                                 break;
768                         }
769                 }
770                 if (result < 0)
771                         goto done;
772         } else { /* Zero configuration value - need to reset the config */
773                 if (cdev->config)
774                         reset_config(cdev);
775                 result = 0;
776         }
777
778         INFO(cdev, "%s config #%d: %s\n",
779              usb_speed_string(gadget->speed),
780              number, c ? c->label : "unconfigured");
781
782         if (!c)
783                 goto done;
784
785         usb_gadget_set_state(gadget, USB_STATE_CONFIGURED);
786         cdev->config = c;
787
788         /* Initialize all interfaces by setting them to altsetting zero. */
789         for (tmp = 0; tmp < MAX_CONFIG_INTERFACES; tmp++) {
790                 struct usb_function     *f = c->interface[tmp];
791                 struct usb_descriptor_header **descriptors;
792
793                 if (!f)
794                         break;
795
796                 /*
797                  * Record which endpoints are used by the function. This is used
798                  * to dispatch control requests targeted at that endpoint to the
799                  * function's setup callback instead of the current
800                  * configuration's setup callback.
801                  */
802                 descriptors = function_descriptors(f, gadget->speed);
803
804                 for (; *descriptors; ++descriptors) {
805                         struct usb_endpoint_descriptor *ep;
806                         int addr;
807
808                         if ((*descriptors)->bDescriptorType != USB_DT_ENDPOINT)
809                                 continue;
810
811                         ep = (struct usb_endpoint_descriptor *)*descriptors;
812                         addr = ((ep->bEndpointAddress & 0x80) >> 3)
813                              |  (ep->bEndpointAddress & 0x0f);
814                         set_bit(addr, f->endpoints);
815                 }
816
817                 result = f->set_alt(f, tmp, 0);
818                 if (result < 0) {
819                         DBG(cdev, "interface %d (%s/%p) alt 0 --> %d\n",
820                                         tmp, f->name, f, result);
821
822                         reset_config(cdev);
823                         goto done;
824                 }
825
826                 if (result == USB_GADGET_DELAYED_STATUS) {
827                         DBG(cdev,
828                          "%s: interface %d (%s) requested delayed status\n",
829                                         __func__, tmp, f->name);
830                         cdev->delayed_status++;
831                         DBG(cdev, "delayed_status count %d\n",
832                                         cdev->delayed_status);
833                 }
834         }
835
836         /* when we return, be sure our power usage is valid */
837         power = c->MaxPower ? c->MaxPower : CONFIG_USB_GADGET_VBUS_DRAW;
838 done:
839         usb_gadget_vbus_draw(gadget, power);
840         if (result >= 0 && cdev->delayed_status)
841                 result = USB_GADGET_DELAYED_STATUS;
842         return result;
843 }
844
845 int usb_add_config_only(struct usb_composite_dev *cdev,
846                 struct usb_configuration *config)
847 {
848         struct usb_configuration *c;
849
850         if (!config->bConfigurationValue)
851                 return -EINVAL;
852
853         /* Prevent duplicate configuration identifiers */
854         list_for_each_entry(c, &cdev->configs, list) {
855                 if (c->bConfigurationValue == config->bConfigurationValue)
856                         return -EBUSY;
857         }
858
859         config->cdev = cdev;
860         list_add_tail(&config->list, &cdev->configs);
861
862         INIT_LIST_HEAD(&config->functions);
863         config->next_interface_id = 0;
864         memset(config->interface, 0, sizeof(config->interface));
865
866         return 0;
867 }
868 EXPORT_SYMBOL_GPL(usb_add_config_only);
869
870 /**
871  * usb_add_config() - add a configuration to a device.
872  * @cdev: wraps the USB gadget
873  * @config: the configuration, with bConfigurationValue assigned
874  * @bind: the configuration's bind function
875  * Context: single threaded during gadget setup
876  *
877  * One of the main tasks of a composite @bind() routine is to
878  * add each of the configurations it supports, using this routine.
879  *
880  * This function returns the value of the configuration's @bind(), which
881  * is zero for success else a negative errno value.  Binding configurations
882  * assigns global resources including string IDs, and per-configuration
883  * resources such as interface IDs and endpoints.
884  */
885 int usb_add_config(struct usb_composite_dev *cdev,
886                 struct usb_configuration *config,
887                 int (*bind)(struct usb_configuration *))
888 {
889         int                             status = -EINVAL;
890
891         if (!bind)
892                 goto done;
893
894         DBG(cdev, "adding config #%u '%s'/%p\n",
895                         config->bConfigurationValue,
896                         config->label, config);
897
898         status = usb_add_config_only(cdev, config);
899         if (status)
900                 goto done;
901
902         status = bind(config);
903         if (status < 0) {
904                 while (!list_empty(&config->functions)) {
905                         struct usb_function             *f;
906
907                         f = list_first_entry(&config->functions,
908                                         struct usb_function, list);
909                         list_del(&f->list);
910                         if (f->unbind) {
911                                 DBG(cdev, "unbind function '%s'/%p\n",
912                                         f->name, f);
913                                 f->unbind(config, f);
914                                 /* may free memory for "f" */
915                         }
916                 }
917                 list_del(&config->list);
918                 config->cdev = NULL;
919         } else {
920                 unsigned        i;
921
922                 DBG(cdev, "cfg %d/%p speeds:%s%s%s%s\n",
923                         config->bConfigurationValue, config,
924                         config->superspeed_plus ? " superplus" : "",
925                         config->superspeed ? " super" : "",
926                         config->highspeed ? " high" : "",
927                         config->fullspeed
928                                 ? (gadget_is_dualspeed(cdev->gadget)
929                                         ? " full"
930                                         : " full/low")
931                                 : "");
932
933                 for (i = 0; i < MAX_CONFIG_INTERFACES; i++) {
934                         struct usb_function     *f = config->interface[i];
935
936                         if (!f)
937                                 continue;
938                         DBG(cdev, "  interface %d = %s/%p\n",
939                                 i, f->name, f);
940                 }
941         }
942
943         /* set_alt(), or next bind(), sets up ep->claimed as needed */
944         usb_ep_autoconfig_reset(cdev->gadget);
945
946 done:
947         if (status)
948                 DBG(cdev, "added config '%s'/%u --> %d\n", config->label,
949                                 config->bConfigurationValue, status);
950         return status;
951 }
952 EXPORT_SYMBOL_GPL(usb_add_config);
953
954 static void remove_config(struct usb_composite_dev *cdev,
955                               struct usb_configuration *config)
956 {
957         while (!list_empty(&config->functions)) {
958                 struct usb_function             *f;
959
960                 f = list_first_entry(&config->functions,
961                                 struct usb_function, list);
962                 list_del(&f->list);
963                 if (f->unbind) {
964                         DBG(cdev, "unbind function '%s'/%p\n", f->name, f);
965                         f->unbind(config, f);
966                         /* may free memory for "f" */
967                 }
968         }
969         list_del(&config->list);
970         if (config->unbind) {
971                 DBG(cdev, "unbind config '%s'/%p\n", config->label, config);
972                 config->unbind(config);
973                         /* may free memory for "c" */
974         }
975 }
976
977 /**
978  * usb_remove_config() - remove a configuration from a device.
979  * @cdev: wraps the USB gadget
980  * @config: the configuration
981  *
982  * Drivers must call usb_gadget_disconnect before calling this function
983  * to disconnect the device from the host and make sure the host will not
984  * try to enumerate the device while we are changing the config list.
985  */
986 void usb_remove_config(struct usb_composite_dev *cdev,
987                       struct usb_configuration *config)
988 {
989         unsigned long flags;
990
991         spin_lock_irqsave(&cdev->lock, flags);
992
993         if (cdev->config == config)
994                 reset_config(cdev);
995
996         spin_unlock_irqrestore(&cdev->lock, flags);
997
998         remove_config(cdev, config);
999 }
1000
1001 /*-------------------------------------------------------------------------*/
1002
1003 /* We support strings in multiple languages ... string descriptor zero
1004  * says which languages are supported.  The typical case will be that
1005  * only one language (probably English) is used, with i18n handled on
1006  * the host side.
1007  */
1008
1009 static void collect_langs(struct usb_gadget_strings **sp, __le16 *buf)
1010 {
1011         const struct usb_gadget_strings *s;
1012         __le16                          language;
1013         __le16                          *tmp;
1014
1015         while (*sp) {
1016                 s = *sp;
1017                 language = cpu_to_le16(s->language);
1018                 for (tmp = buf; *tmp && tmp < &buf[126]; tmp++) {
1019                         if (*tmp == language)
1020                                 goto repeat;
1021                 }
1022                 *tmp++ = language;
1023 repeat:
1024                 sp++;
1025         }
1026 }
1027
1028 static int lookup_string(
1029         struct usb_gadget_strings       **sp,
1030         void                            *buf,
1031         u16                             language,
1032         int                             id
1033 )
1034 {
1035         struct usb_gadget_strings       *s;
1036         int                             value;
1037
1038         while (*sp) {
1039                 s = *sp++;
1040                 if (s->language != language)
1041                         continue;
1042                 value = usb_gadget_get_string(s, id, buf);
1043                 if (value > 0)
1044                         return value;
1045         }
1046         return -EINVAL;
1047 }
1048
1049 static int get_string(struct usb_composite_dev *cdev,
1050                 void *buf, u16 language, int id)
1051 {
1052         struct usb_composite_driver     *composite = cdev->driver;
1053         struct usb_gadget_string_container *uc;
1054         struct usb_configuration        *c;
1055         struct usb_function             *f;
1056         int                             len;
1057
1058         /* Yes, not only is USB's i18n support probably more than most
1059          * folk will ever care about ... also, it's all supported here.
1060          * (Except for UTF8 support for Unicode's "Astral Planes".)
1061          */
1062
1063         /* 0 == report all available language codes */
1064         if (id == 0) {
1065                 struct usb_string_descriptor    *s = buf;
1066                 struct usb_gadget_strings       **sp;
1067
1068                 memset(s, 0, 256);
1069                 s->bDescriptorType = USB_DT_STRING;
1070
1071                 sp = composite->strings;
1072                 if (sp)
1073                         collect_langs(sp, s->wData);
1074
1075                 list_for_each_entry(c, &cdev->configs, list) {
1076                         sp = c->strings;
1077                         if (sp)
1078                                 collect_langs(sp, s->wData);
1079
1080                         list_for_each_entry(f, &c->functions, list) {
1081                                 sp = f->strings;
1082                                 if (sp)
1083                                         collect_langs(sp, s->wData);
1084                         }
1085                 }
1086                 list_for_each_entry(uc, &cdev->gstrings, list) {
1087                         struct usb_gadget_strings **sp;
1088
1089                         sp = get_containers_gs(uc);
1090                         collect_langs(sp, s->wData);
1091                 }
1092
1093                 for (len = 0; len <= 126 && s->wData[len]; len++)
1094                         continue;
1095                 if (!len)
1096                         return -EINVAL;
1097
1098                 s->bLength = 2 * (len + 1);
1099                 return s->bLength;
1100         }
1101
1102         if (cdev->use_os_string && language == 0 && id == OS_STRING_IDX) {
1103                 struct usb_os_string *b = buf;
1104                 b->bLength = sizeof(*b);
1105                 b->bDescriptorType = USB_DT_STRING;
1106                 compiletime_assert(
1107                         sizeof(b->qwSignature) == sizeof(cdev->qw_sign),
1108                         "qwSignature size must be equal to qw_sign");
1109                 memcpy(&b->qwSignature, cdev->qw_sign, sizeof(b->qwSignature));
1110                 b->bMS_VendorCode = cdev->b_vendor_code;
1111                 b->bPad = 0;
1112                 return sizeof(*b);
1113         }
1114
1115         list_for_each_entry(uc, &cdev->gstrings, list) {
1116                 struct usb_gadget_strings **sp;
1117
1118                 sp = get_containers_gs(uc);
1119                 len = lookup_string(sp, buf, language, id);
1120                 if (len > 0)
1121                         return len;
1122         }
1123
1124         /* String IDs are device-scoped, so we look up each string
1125          * table we're told about.  These lookups are infrequent;
1126          * simpler-is-better here.
1127          */
1128         if (composite->strings) {
1129                 len = lookup_string(composite->strings, buf, language, id);
1130                 if (len > 0)
1131                         return len;
1132         }
1133         list_for_each_entry(c, &cdev->configs, list) {
1134                 if (c->strings) {
1135                         len = lookup_string(c->strings, buf, language, id);
1136                         if (len > 0)
1137                                 return len;
1138                 }
1139                 list_for_each_entry(f, &c->functions, list) {
1140                         if (!f->strings)
1141                                 continue;
1142                         len = lookup_string(f->strings, buf, language, id);
1143                         if (len > 0)
1144                                 return len;
1145                 }
1146         }
1147         return -EINVAL;
1148 }
1149
1150 /**
1151  * usb_string_id() - allocate an unused string ID
1152  * @cdev: the device whose string descriptor IDs are being allocated
1153  * Context: single threaded during gadget setup
1154  *
1155  * @usb_string_id() is called from bind() callbacks to allocate
1156  * string IDs.  Drivers for functions, configurations, or gadgets will
1157  * then store that ID in the appropriate descriptors and string table.
1158  *
1159  * All string identifier should be allocated using this,
1160  * @usb_string_ids_tab() or @usb_string_ids_n() routine, to ensure
1161  * that for example different functions don't wrongly assign different
1162  * meanings to the same identifier.
1163  */
1164 int usb_string_id(struct usb_composite_dev *cdev)
1165 {
1166         if (cdev->next_string_id < 254) {
1167                 /* string id 0 is reserved by USB spec for list of
1168                  * supported languages */
1169                 /* 255 reserved as well? -- mina86 */
1170                 cdev->next_string_id++;
1171                 return cdev->next_string_id;
1172         }
1173         return -ENODEV;
1174 }
1175 EXPORT_SYMBOL_GPL(usb_string_id);
1176
1177 /**
1178  * usb_string_ids() - allocate unused string IDs in batch
1179  * @cdev: the device whose string descriptor IDs are being allocated
1180  * @str: an array of usb_string objects to assign numbers to
1181  * Context: single threaded during gadget setup
1182  *
1183  * @usb_string_ids() is called from bind() callbacks to allocate
1184  * string IDs.  Drivers for functions, configurations, or gadgets will
1185  * then copy IDs from the string table to the appropriate descriptors
1186  * and string table for other languages.
1187  *
1188  * All string identifier should be allocated using this,
1189  * @usb_string_id() or @usb_string_ids_n() routine, to ensure that for
1190  * example different functions don't wrongly assign different meanings
1191  * to the same identifier.
1192  */
1193 int usb_string_ids_tab(struct usb_composite_dev *cdev, struct usb_string *str)
1194 {
1195         int next = cdev->next_string_id;
1196
1197         for (; str->s; ++str) {
1198                 if (unlikely(next >= 254))
1199                         return -ENODEV;
1200                 str->id = ++next;
1201         }
1202
1203         cdev->next_string_id = next;
1204
1205         return 0;
1206 }
1207 EXPORT_SYMBOL_GPL(usb_string_ids_tab);
1208
1209 static struct usb_gadget_string_container *copy_gadget_strings(
1210                 struct usb_gadget_strings **sp, unsigned n_gstrings,
1211                 unsigned n_strings)
1212 {
1213         struct usb_gadget_string_container *uc;
1214         struct usb_gadget_strings **gs_array;
1215         struct usb_gadget_strings *gs;
1216         struct usb_string *s;
1217         unsigned mem;
1218         unsigned n_gs;
1219         unsigned n_s;
1220         void *stash;
1221
1222         mem = sizeof(*uc);
1223         mem += sizeof(void *) * (n_gstrings + 1);
1224         mem += sizeof(struct usb_gadget_strings) * n_gstrings;
1225         mem += sizeof(struct usb_string) * (n_strings + 1) * (n_gstrings);
1226         uc = kmalloc(mem, GFP_KERNEL);
1227         if (!uc)
1228                 return ERR_PTR(-ENOMEM);
1229         gs_array = get_containers_gs(uc);
1230         stash = uc->stash;
1231         stash += sizeof(void *) * (n_gstrings + 1);
1232         for (n_gs = 0; n_gs < n_gstrings; n_gs++) {
1233                 struct usb_string *org_s;
1234
1235                 gs_array[n_gs] = stash;
1236                 gs = gs_array[n_gs];
1237                 stash += sizeof(struct usb_gadget_strings);
1238                 gs->language = sp[n_gs]->language;
1239                 gs->strings = stash;
1240                 org_s = sp[n_gs]->strings;
1241
1242                 for (n_s = 0; n_s < n_strings; n_s++) {
1243                         s = stash;
1244                         stash += sizeof(struct usb_string);
1245                         if (org_s->s)
1246                                 s->s = org_s->s;
1247                         else
1248                                 s->s = "";
1249                         org_s++;
1250                 }
1251                 s = stash;
1252                 s->s = NULL;
1253                 stash += sizeof(struct usb_string);
1254
1255         }
1256         gs_array[n_gs] = NULL;
1257         return uc;
1258 }
1259
1260 /**
1261  * usb_gstrings_attach() - attach gadget strings to a cdev and assign ids
1262  * @cdev: the device whose string descriptor IDs are being allocated
1263  * and attached.
1264  * @sp: an array of usb_gadget_strings to attach.
1265  * @n_strings: number of entries in each usb_strings array (sp[]->strings)
1266  *
1267  * This function will create a deep copy of usb_gadget_strings and usb_string
1268  * and attach it to the cdev. The actual string (usb_string.s) will not be
1269  * copied but only a referenced will be made. The struct usb_gadget_strings
1270  * array may contain multiple languages and should be NULL terminated.
1271  * The ->language pointer of each struct usb_gadget_strings has to contain the
1272  * same amount of entries.
1273  * For instance: sp[0] is en-US, sp[1] is es-ES. It is expected that the first
1274  * usb_string entry of es-ES contains the translation of the first usb_string
1275  * entry of en-US. Therefore both entries become the same id assign.
1276  */
1277 struct usb_string *usb_gstrings_attach(struct usb_composite_dev *cdev,
1278                 struct usb_gadget_strings **sp, unsigned n_strings)
1279 {
1280         struct usb_gadget_string_container *uc;
1281         struct usb_gadget_strings **n_gs;
1282         unsigned n_gstrings = 0;
1283         unsigned i;
1284         int ret;
1285
1286         for (i = 0; sp[i]; i++)
1287                 n_gstrings++;
1288
1289         if (!n_gstrings)
1290                 return ERR_PTR(-EINVAL);
1291
1292         uc = copy_gadget_strings(sp, n_gstrings, n_strings);
1293         if (IS_ERR(uc))
1294                 return ERR_CAST(uc);
1295
1296         n_gs = get_containers_gs(uc);
1297         ret = usb_string_ids_tab(cdev, n_gs[0]->strings);
1298         if (ret)
1299                 goto err;
1300
1301         for (i = 1; i < n_gstrings; i++) {
1302                 struct usb_string *m_s;
1303                 struct usb_string *s;
1304                 unsigned n;
1305
1306                 m_s = n_gs[0]->strings;
1307                 s = n_gs[i]->strings;
1308                 for (n = 0; n < n_strings; n++) {
1309                         s->id = m_s->id;
1310                         s++;
1311                         m_s++;
1312                 }
1313         }
1314         list_add_tail(&uc->list, &cdev->gstrings);
1315         return n_gs[0]->strings;
1316 err:
1317         kfree(uc);
1318         return ERR_PTR(ret);
1319 }
1320 EXPORT_SYMBOL_GPL(usb_gstrings_attach);
1321
1322 /**
1323  * usb_string_ids_n() - allocate unused string IDs in batch
1324  * @c: the device whose string descriptor IDs are being allocated
1325  * @n: number of string IDs to allocate
1326  * Context: single threaded during gadget setup
1327  *
1328  * Returns the first requested ID.  This ID and next @n-1 IDs are now
1329  * valid IDs.  At least provided that @n is non-zero because if it
1330  * is, returns last requested ID which is now very useful information.
1331  *
1332  * @usb_string_ids_n() is called from bind() callbacks to allocate
1333  * string IDs.  Drivers for functions, configurations, or gadgets will
1334  * then store that ID in the appropriate descriptors and string table.
1335  *
1336  * All string identifier should be allocated using this,
1337  * @usb_string_id() or @usb_string_ids_n() routine, to ensure that for
1338  * example different functions don't wrongly assign different meanings
1339  * to the same identifier.
1340  */
1341 int usb_string_ids_n(struct usb_composite_dev *c, unsigned n)
1342 {
1343         unsigned next = c->next_string_id;
1344         if (unlikely(n > 254 || (unsigned)next + n > 254))
1345                 return -ENODEV;
1346         c->next_string_id += n;
1347         return next + 1;
1348 }
1349 EXPORT_SYMBOL_GPL(usb_string_ids_n);
1350
1351 /*-------------------------------------------------------------------------*/
1352
1353 static void composite_setup_complete(struct usb_ep *ep, struct usb_request *req)
1354 {
1355         struct usb_composite_dev *cdev;
1356
1357         if (req->status || req->actual != req->length)
1358                 DBG((struct usb_composite_dev *) ep->driver_data,
1359                                 "setup complete --> %d, %d/%d\n",
1360                                 req->status, req->actual, req->length);
1361
1362         /*
1363          * REVIST The same ep0 requests are shared with function drivers
1364          * so they don't have to maintain the same ->complete() stubs.
1365          *
1366          * Because of that, we need to check for the validity of ->context
1367          * here, even though we know we've set it to something useful.
1368          */
1369         if (!req->context)
1370                 return;
1371
1372         cdev = req->context;
1373
1374         if (cdev->req == req)
1375                 cdev->setup_pending = false;
1376         else if (cdev->os_desc_req == req)
1377                 cdev->os_desc_pending = false;
1378         else
1379                 WARN(1, "unknown request %p\n", req);
1380 }
1381
1382 static int composite_ep0_queue(struct usb_composite_dev *cdev,
1383                 struct usb_request *req, gfp_t gfp_flags)
1384 {
1385         int ret;
1386
1387         ret = usb_ep_queue(cdev->gadget->ep0, req, gfp_flags);
1388         if (ret == 0) {
1389                 if (cdev->req == req)
1390                         cdev->setup_pending = true;
1391                 else if (cdev->os_desc_req == req)
1392                         cdev->os_desc_pending = true;
1393                 else
1394                         WARN(1, "unknown request %p\n", req);
1395         }
1396
1397         return ret;
1398 }
1399
1400 static int count_ext_compat(struct usb_configuration *c)
1401 {
1402         int i, res;
1403
1404         res = 0;
1405         for (i = 0; i < c->next_interface_id; ++i) {
1406                 struct usb_function *f;
1407                 int j;
1408
1409                 f = c->interface[i];
1410                 for (j = 0; j < f->os_desc_n; ++j) {
1411                         struct usb_os_desc *d;
1412
1413                         if (i != f->os_desc_table[j].if_id)
1414                                 continue;
1415                         d = f->os_desc_table[j].os_desc;
1416                         if (d && d->ext_compat_id)
1417                                 ++res;
1418                 }
1419         }
1420         BUG_ON(res > 255);
1421         return res;
1422 }
1423
1424 static int fill_ext_compat(struct usb_configuration *c, u8 *buf)
1425 {
1426         int i, count;
1427
1428         count = 16;
1429         for (i = 0; i < c->next_interface_id; ++i) {
1430                 struct usb_function *f;
1431                 int j;
1432
1433                 f = c->interface[i];
1434                 for (j = 0; j < f->os_desc_n; ++j) {
1435                         struct usb_os_desc *d;
1436
1437                         if (i != f->os_desc_table[j].if_id)
1438                                 continue;
1439                         d = f->os_desc_table[j].os_desc;
1440                         if (d && d->ext_compat_id) {
1441                                 *buf++ = i;
1442                                 *buf++ = 0x01;
1443                                 memcpy(buf, d->ext_compat_id, 16);
1444                                 buf += 22;
1445                         } else {
1446                                 ++buf;
1447                                 *buf = 0x01;
1448                                 buf += 23;
1449                         }
1450                         count += 24;
1451                         if (count + 24 >= USB_COMP_EP0_OS_DESC_BUFSIZ)
1452                                 return count;
1453                 }
1454         }
1455
1456         return count;
1457 }
1458
1459 static int count_ext_prop(struct usb_configuration *c, int interface)
1460 {
1461         struct usb_function *f;
1462         int j;
1463
1464         f = c->interface[interface];
1465         for (j = 0; j < f->os_desc_n; ++j) {
1466                 struct usb_os_desc *d;
1467
1468                 if (interface != f->os_desc_table[j].if_id)
1469                         continue;
1470                 d = f->os_desc_table[j].os_desc;
1471                 if (d && d->ext_compat_id)
1472                         return d->ext_prop_count;
1473         }
1474         return 0;
1475 }
1476
1477 static int len_ext_prop(struct usb_configuration *c, int interface)
1478 {
1479         struct usb_function *f;
1480         struct usb_os_desc *d;
1481         int j, res;
1482
1483         res = 10; /* header length */
1484         f = c->interface[interface];
1485         for (j = 0; j < f->os_desc_n; ++j) {
1486                 if (interface != f->os_desc_table[j].if_id)
1487                         continue;
1488                 d = f->os_desc_table[j].os_desc;
1489                 if (d)
1490                         return min(res + d->ext_prop_len, 4096);
1491         }
1492         return res;
1493 }
1494
1495 static int fill_ext_prop(struct usb_configuration *c, int interface, u8 *buf)
1496 {
1497         struct usb_function *f;
1498         struct usb_os_desc *d;
1499         struct usb_os_desc_ext_prop *ext_prop;
1500         int j, count, n, ret;
1501
1502         f = c->interface[interface];
1503         count = 10; /* header length */
1504         for (j = 0; j < f->os_desc_n; ++j) {
1505                 if (interface != f->os_desc_table[j].if_id)
1506                         continue;
1507                 d = f->os_desc_table[j].os_desc;
1508                 if (d)
1509                         list_for_each_entry(ext_prop, &d->ext_prop, entry) {
1510                                 n = ext_prop->data_len +
1511                                         ext_prop->name_len + 14;
1512                                 if (count + n >= USB_COMP_EP0_OS_DESC_BUFSIZ)
1513                                         return count;
1514                                 usb_ext_prop_put_size(buf, n);
1515                                 usb_ext_prop_put_type(buf, ext_prop->type);
1516                                 ret = usb_ext_prop_put_name(buf, ext_prop->name,
1517                                                             ext_prop->name_len);
1518                                 if (ret < 0)
1519                                         return ret;
1520                                 switch (ext_prop->type) {
1521                                 case USB_EXT_PROP_UNICODE:
1522                                 case USB_EXT_PROP_UNICODE_ENV:
1523                                 case USB_EXT_PROP_UNICODE_LINK:
1524                                         usb_ext_prop_put_unicode(buf, ret,
1525                                                          ext_prop->data,
1526                                                          ext_prop->data_len);
1527                                         break;
1528                                 case USB_EXT_PROP_BINARY:
1529                                         usb_ext_prop_put_binary(buf, ret,
1530                                                         ext_prop->data,
1531                                                         ext_prop->data_len);
1532                                         break;
1533                                 case USB_EXT_PROP_LE32:
1534                                         /* not implemented */
1535                                 case USB_EXT_PROP_BE32:
1536                                         /* not implemented */
1537                                 default:
1538                                         return -EINVAL;
1539                                 }
1540                                 buf += n;
1541                                 count += n;
1542                         }
1543         }
1544
1545         return count;
1546 }
1547
1548 /*
1549  * The setup() callback implements all the ep0 functionality that's
1550  * not handled lower down, in hardware or the hardware driver(like
1551  * device and endpoint feature flags, and their status).  It's all
1552  * housekeeping for the gadget function we're implementing.  Most of
1553  * the work is in config and function specific setup.
1554  */
1555 int
1556 composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
1557 {
1558         struct usb_composite_dev        *cdev = get_gadget_data(gadget);
1559         struct usb_request              *req = cdev->req;
1560         int                             value = -EOPNOTSUPP;
1561         int                             status = 0;
1562         u16                             w_index = le16_to_cpu(ctrl->wIndex);
1563         u8                              intf = w_index & 0xFF;
1564         u16                             w_value = le16_to_cpu(ctrl->wValue);
1565         u16                             w_length = le16_to_cpu(ctrl->wLength);
1566         struct usb_function             *f = NULL;
1567         u8                              endp;
1568
1569         /* partial re-init of the response message; the function or the
1570          * gadget might need to intercept e.g. a control-OUT completion
1571          * when we delegate to it.
1572          */
1573         req->zero = 0;
1574         req->context = cdev;
1575         req->complete = composite_setup_complete;
1576         req->length = 0;
1577         gadget->ep0->driver_data = cdev;
1578
1579         /*
1580          * Don't let non-standard requests match any of the cases below
1581          * by accident.
1582          */
1583         if ((ctrl->bRequestType & USB_TYPE_MASK) != USB_TYPE_STANDARD)
1584                 goto unknown;
1585
1586         switch (ctrl->bRequest) {
1587
1588         /* we handle all standard USB descriptors */
1589         case USB_REQ_GET_DESCRIPTOR:
1590                 if (ctrl->bRequestType != USB_DIR_IN)
1591                         goto unknown;
1592                 switch (w_value >> 8) {
1593
1594                 case USB_DT_DEVICE:
1595                         cdev->desc.bNumConfigurations =
1596                                 count_configs(cdev, USB_DT_DEVICE);
1597                         cdev->desc.bMaxPacketSize0 =
1598                                 cdev->gadget->ep0->maxpacket;
1599                         if (gadget_is_superspeed(gadget)) {
1600                                 if (gadget->speed >= USB_SPEED_SUPER) {
1601                                         cdev->desc.bcdUSB = cpu_to_le16(0x0310);
1602                                         cdev->desc.bMaxPacketSize0 = 9;
1603                                 } else {
1604                                         cdev->desc.bcdUSB = cpu_to_le16(0x0210);
1605                                 }
1606                         } else {
1607                                 cdev->desc.bcdUSB = cpu_to_le16(0x0200);
1608                         }
1609
1610                         value = min(w_length, (u16) sizeof cdev->desc);
1611                         memcpy(req->buf, &cdev->desc, value);
1612                         break;
1613                 case USB_DT_DEVICE_QUALIFIER:
1614                         if (!gadget_is_dualspeed(gadget) ||
1615                             gadget->speed >= USB_SPEED_SUPER)
1616                                 break;
1617                         device_qual(cdev);
1618                         value = min_t(int, w_length,
1619                                 sizeof(struct usb_qualifier_descriptor));
1620                         break;
1621                 case USB_DT_OTHER_SPEED_CONFIG:
1622                         if (!gadget_is_dualspeed(gadget) ||
1623                             gadget->speed >= USB_SPEED_SUPER)
1624                                 break;
1625                         /* FALLTHROUGH */
1626                 case USB_DT_CONFIG:
1627                         value = config_desc(cdev, w_value);
1628                         if (value >= 0)
1629                                 value = min(w_length, (u16) value);
1630                         break;
1631                 case USB_DT_STRING:
1632                         value = get_string(cdev, req->buf,
1633                                         w_index, w_value & 0xff);
1634                         if (value >= 0)
1635                                 value = min(w_length, (u16) value);
1636                         break;
1637                 case USB_DT_BOS:
1638                         if (gadget_is_superspeed(gadget)) {
1639                                 value = bos_desc(cdev);
1640                                 value = min(w_length, (u16) value);
1641                         }
1642                         break;
1643                 case USB_DT_OTG:
1644                         if (gadget_is_otg(gadget)) {
1645                                 struct usb_configuration *config;
1646                                 int otg_desc_len = 0;
1647
1648                                 if (cdev->config)
1649                                         config = cdev->config;
1650                                 else
1651                                         config = list_first_entry(
1652                                                         &cdev->configs,
1653                                                 struct usb_configuration, list);
1654                                 if (!config)
1655                                         goto done;
1656
1657                                 if (gadget->otg_caps &&
1658                                         (gadget->otg_caps->otg_rev >= 0x0200))
1659                                         otg_desc_len += sizeof(
1660                                                 struct usb_otg20_descriptor);
1661                                 else
1662                                         otg_desc_len += sizeof(
1663                                                 struct usb_otg_descriptor);
1664
1665                                 value = min_t(int, w_length, otg_desc_len);
1666                                 memcpy(req->buf, config->descriptors[0], value);
1667                         }
1668                         break;
1669                 }
1670                 break;
1671
1672         /* any number of configs can work */
1673         case USB_REQ_SET_CONFIGURATION:
1674                 if (ctrl->bRequestType != 0)
1675                         goto unknown;
1676                 if (gadget_is_otg(gadget)) {
1677                         if (gadget->a_hnp_support)
1678                                 DBG(cdev, "HNP available\n");
1679                         else if (gadget->a_alt_hnp_support)
1680                                 DBG(cdev, "HNP on another port\n");
1681                         else
1682                                 VDBG(cdev, "HNP inactive\n");
1683                 }
1684                 spin_lock(&cdev->lock);
1685                 value = set_config(cdev, ctrl, w_value);
1686                 spin_unlock(&cdev->lock);
1687                 break;
1688         case USB_REQ_GET_CONFIGURATION:
1689                 if (ctrl->bRequestType != USB_DIR_IN)
1690                         goto unknown;
1691                 if (cdev->config)
1692                         *(u8 *)req->buf = cdev->config->bConfigurationValue;
1693                 else
1694                         *(u8 *)req->buf = 0;
1695                 value = min(w_length, (u16) 1);
1696                 break;
1697
1698         /* function drivers must handle get/set altsetting */
1699         case USB_REQ_SET_INTERFACE:
1700                 if (ctrl->bRequestType != USB_RECIP_INTERFACE)
1701                         goto unknown;
1702                 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
1703                         break;
1704                 f = cdev->config->interface[intf];
1705                 if (!f)
1706                         break;
1707
1708                 /*
1709                  * If there's no get_alt() method, we know only altsetting zero
1710                  * works. There is no need to check if set_alt() is not NULL
1711                  * as we check this in usb_add_function().
1712                  */
1713                 if (w_value && !f->get_alt)
1714                         break;
1715
1716                 spin_lock(&cdev->lock);
1717                 value = f->set_alt(f, w_index, w_value);
1718                 if (value == USB_GADGET_DELAYED_STATUS) {
1719                         DBG(cdev,
1720                          "%s: interface %d (%s) requested delayed status\n",
1721                                         __func__, intf, f->name);
1722                         cdev->delayed_status++;
1723                         DBG(cdev, "delayed_status count %d\n",
1724                                         cdev->delayed_status);
1725                 }
1726                 spin_unlock(&cdev->lock);
1727                 break;
1728         case USB_REQ_GET_INTERFACE:
1729                 if (ctrl->bRequestType != (USB_DIR_IN|USB_RECIP_INTERFACE))
1730                         goto unknown;
1731                 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
1732                         break;
1733                 f = cdev->config->interface[intf];
1734                 if (!f)
1735                         break;
1736                 /* lots of interfaces only need altsetting zero... */
1737                 value = f->get_alt ? f->get_alt(f, w_index) : 0;
1738                 if (value < 0)
1739                         break;
1740                 *((u8 *)req->buf) = value;
1741                 value = min(w_length, (u16) 1);
1742                 break;
1743         case USB_REQ_GET_STATUS:
1744                 if (gadget_is_otg(gadget) && gadget->hnp_polling_support &&
1745                                                 (w_index == OTG_STS_SELECTOR)) {
1746                         if (ctrl->bRequestType != (USB_DIR_IN |
1747                                                         USB_RECIP_DEVICE))
1748                                 goto unknown;
1749                         *((u8 *)req->buf) = gadget->host_request_flag;
1750                         value = 1;
1751                         break;
1752                 }
1753
1754                 /*
1755                  * USB 3.0 additions:
1756                  * Function driver should handle get_status request. If such cb
1757                  * wasn't supplied we respond with default value = 0
1758                  * Note: function driver should supply such cb only for the
1759                  * first interface of the function
1760                  */
1761                 if (!gadget_is_superspeed(gadget))
1762                         goto unknown;
1763                 if (ctrl->bRequestType != (USB_DIR_IN | USB_RECIP_INTERFACE))
1764                         goto unknown;
1765                 value = 2;      /* This is the length of the get_status reply */
1766                 put_unaligned_le16(0, req->buf);
1767                 if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
1768                         break;
1769                 f = cdev->config->interface[intf];
1770                 if (!f)
1771                         break;
1772                 status = f->get_status ? f->get_status(f) : 0;
1773                 if (status < 0)
1774                         break;
1775                 put_unaligned_le16(status & 0x0000ffff, req->buf);
1776                 break;
1777         /*
1778          * Function drivers should handle SetFeature/ClearFeature
1779          * (FUNCTION_SUSPEND) request. function_suspend cb should be supplied
1780          * only for the first interface of the function
1781          */
1782         case USB_REQ_CLEAR_FEATURE:
1783         case USB_REQ_SET_FEATURE:
1784                 if (!gadget_is_superspeed(gadget))
1785                         goto unknown;
1786                 if (ctrl->bRequestType != (USB_DIR_OUT | USB_RECIP_INTERFACE))
1787                         goto unknown;
1788                 switch (w_value) {
1789                 case USB_INTRF_FUNC_SUSPEND:
1790                         if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
1791                                 break;
1792                         f = cdev->config->interface[intf];
1793                         if (!f)
1794                                 break;
1795                         value = 0;
1796                         if (f->func_suspend)
1797                                 value = f->func_suspend(f, w_index >> 8);
1798                         if (value < 0) {
1799                                 ERROR(cdev,
1800                                       "func_suspend() returned error %d\n",
1801                                       value);
1802                                 value = 0;
1803                         }
1804                         break;
1805                 }
1806                 break;
1807         default:
1808 unknown:
1809                 /*
1810                  * OS descriptors handling
1811                  */
1812                 if (cdev->use_os_string && cdev->os_desc_config &&
1813                     (ctrl->bRequestType & USB_TYPE_VENDOR) &&
1814                     ctrl->bRequest == cdev->b_vendor_code) {
1815                         struct usb_request              *req;
1816                         struct usb_configuration        *os_desc_cfg;
1817                         u8                              *buf;
1818                         int                             interface;
1819                         int                             count = 0;
1820
1821                         req = cdev->os_desc_req;
1822                         req->context = cdev;
1823                         req->complete = composite_setup_complete;
1824                         buf = req->buf;
1825                         os_desc_cfg = cdev->os_desc_config;
1826                         w_length = min_t(u16, w_length, USB_COMP_EP0_OS_DESC_BUFSIZ);
1827                         memset(buf, 0, w_length);
1828                         buf[5] = 0x01;
1829                         switch (ctrl->bRequestType & USB_RECIP_MASK) {
1830                         case USB_RECIP_DEVICE:
1831                                 if (w_index != 0x4 || (w_value >> 8))
1832                                         break;
1833                                 buf[6] = w_index;
1834                                 if (w_length == 0x10) {
1835                                         /* Number of ext compat interfaces */
1836                                         count = count_ext_compat(os_desc_cfg);
1837                                         buf[8] = count;
1838                                         count *= 24; /* 24 B/ext compat desc */
1839                                         count += 16; /* header */
1840                                         put_unaligned_le32(count, buf);
1841                                         value = w_length;
1842                                 } else {
1843                                         /* "extended compatibility ID"s */
1844                                         count = count_ext_compat(os_desc_cfg);
1845                                         buf[8] = count;
1846                                         count *= 24; /* 24 B/ext compat desc */
1847                                         count += 16; /* header */
1848                                         put_unaligned_le32(count, buf);
1849                                         buf += 16;
1850                                         value = fill_ext_compat(os_desc_cfg, buf);
1851                                         value = min_t(u16, w_length, value);
1852                                 }
1853                                 break;
1854                         case USB_RECIP_INTERFACE:
1855                                 if (w_index != 0x5 || (w_value >> 8))
1856                                         break;
1857                                 interface = w_value & 0xFF;
1858                                 buf[6] = w_index;
1859                                 if (w_length == 0x0A) {
1860                                         count = count_ext_prop(os_desc_cfg,
1861                                                 interface);
1862                                         put_unaligned_le16(count, buf + 8);
1863                                         count = len_ext_prop(os_desc_cfg,
1864                                                 interface);
1865                                         put_unaligned_le32(count, buf);
1866
1867                                         value = w_length;
1868                                 } else {
1869                                         count = count_ext_prop(os_desc_cfg,
1870                                                 interface);
1871                                         put_unaligned_le16(count, buf + 8);
1872                                         count = len_ext_prop(os_desc_cfg,
1873                                                 interface);
1874                                         put_unaligned_le32(count, buf);
1875                                         buf += 10;
1876                                         value = fill_ext_prop(os_desc_cfg,
1877                                                               interface, buf);
1878                                         if (value < 0)
1879                                                 return value;
1880                                         value = min_t(u16, w_length, value);
1881                                 }
1882                                 break;
1883                         }
1884
1885                         if (value >= 0) {
1886                                 req->length = value;
1887                                 req->context = cdev;
1888                                 req->zero = value < w_length;
1889                                 value = composite_ep0_queue(cdev, req,
1890                                                             GFP_ATOMIC);
1891                                 if (value < 0) {
1892                                         DBG(cdev, "ep_queue --> %d\n", value);
1893                                         req->status = 0;
1894                                         composite_setup_complete(gadget->ep0,
1895                                                                  req);
1896                                 }
1897                         }
1898                         return value;
1899                 }
1900
1901                 VDBG(cdev,
1902                         "non-core control req%02x.%02x v%04x i%04x l%d\n",
1903                         ctrl->bRequestType, ctrl->bRequest,
1904                         w_value, w_index, w_length);
1905
1906                 /* functions always handle their interfaces and endpoints...
1907                  * punt other recipients (other, WUSB, ...) to the current
1908                  * configuration code.
1909                  */
1910                 if (cdev->config) {
1911                         list_for_each_entry(f, &cdev->config->functions, list)
1912                                 if (f->req_match &&
1913                                     f->req_match(f, ctrl, false))
1914                                         goto try_fun_setup;
1915                 } else {
1916                         struct usb_configuration *c;
1917                         list_for_each_entry(c, &cdev->configs, list)
1918                                 list_for_each_entry(f, &c->functions, list)
1919                                         if (f->req_match &&
1920                                             f->req_match(f, ctrl, true))
1921                                                 goto try_fun_setup;
1922                 }
1923                 f = NULL;
1924
1925                 switch (ctrl->bRequestType & USB_RECIP_MASK) {
1926                 case USB_RECIP_INTERFACE:
1927                         if (!cdev->config || intf >= MAX_CONFIG_INTERFACES)
1928                                 break;
1929                         f = cdev->config->interface[intf];
1930                         break;
1931
1932                 case USB_RECIP_ENDPOINT:
1933                         if (!cdev->config)
1934                                 break;
1935                         endp = ((w_index & 0x80) >> 3) | (w_index & 0x0f);
1936                         list_for_each_entry(f, &cdev->config->functions, list) {
1937                                 if (test_bit(endp, f->endpoints))
1938                                         break;
1939                         }
1940                         if (&f->list == &cdev->config->functions)
1941                                 f = NULL;
1942                         break;
1943                 }
1944 try_fun_setup:
1945                 if (f && f->setup)
1946                         value = f->setup(f, ctrl);
1947                 else {
1948                         struct usb_configuration        *c;
1949
1950                         c = cdev->config;
1951                         if (!c)
1952                                 goto done;
1953
1954                         /* try current config's setup */
1955                         if (c->setup) {
1956                                 value = c->setup(c, ctrl);
1957                                 goto done;
1958                         }
1959
1960                         /* try the only function in the current config */
1961                         if (!list_is_singular(&c->functions))
1962                                 goto done;
1963                         f = list_first_entry(&c->functions, struct usb_function,
1964                                              list);
1965                         if (f->setup)
1966                                 value = f->setup(f, ctrl);
1967                 }
1968
1969                 goto done;
1970         }
1971
1972         /* respond with data transfer before status phase? */
1973         if (value >= 0 && value != USB_GADGET_DELAYED_STATUS) {
1974                 req->length = value;
1975                 req->context = cdev;
1976                 req->zero = value < w_length;
1977                 value = composite_ep0_queue(cdev, req, GFP_ATOMIC);
1978                 if (value < 0) {
1979                         DBG(cdev, "ep_queue --> %d\n", value);
1980                         req->status = 0;
1981                         composite_setup_complete(gadget->ep0, req);
1982                 }
1983         } else if (value == USB_GADGET_DELAYED_STATUS && w_length != 0) {
1984                 WARN(cdev,
1985                         "%s: Delayed status not supported for w_length != 0",
1986                         __func__);
1987         }
1988
1989 done:
1990         /* device either stalls (value < 0) or reports success */
1991         return value;
1992 }
1993
1994 void composite_disconnect(struct usb_gadget *gadget)
1995 {
1996         struct usb_composite_dev        *cdev = get_gadget_data(gadget);
1997         unsigned long                   flags;
1998
1999         /* REVISIT:  should we have config and device level
2000          * disconnect callbacks?
2001          */
2002         spin_lock_irqsave(&cdev->lock, flags);
2003         if (cdev->config)
2004                 reset_config(cdev);
2005         if (cdev->driver->disconnect)
2006                 cdev->driver->disconnect(cdev);
2007         spin_unlock_irqrestore(&cdev->lock, flags);
2008 }
2009
2010 /*-------------------------------------------------------------------------*/
2011
2012 static ssize_t suspended_show(struct device *dev, struct device_attribute *attr,
2013                               char *buf)
2014 {
2015         struct usb_gadget *gadget = dev_to_usb_gadget(dev);
2016         struct usb_composite_dev *cdev = get_gadget_data(gadget);
2017
2018         return sprintf(buf, "%d\n", cdev->suspended);
2019 }
2020 static DEVICE_ATTR_RO(suspended);
2021
2022 static void __composite_unbind(struct usb_gadget *gadget, bool unbind_driver)
2023 {
2024         struct usb_composite_dev        *cdev = get_gadget_data(gadget);
2025         struct usb_gadget_strings       *gstr = cdev->driver->strings[0];
2026         struct usb_string               *dev_str = gstr->strings;
2027
2028         /* composite_disconnect() must already have been called
2029          * by the underlying peripheral controller driver!
2030          * so there's no i/o concurrency that could affect the
2031          * state protected by cdev->lock.
2032          */
2033         WARN_ON(cdev->config);
2034
2035         while (!list_empty(&cdev->configs)) {
2036                 struct usb_configuration        *c;
2037                 c = list_first_entry(&cdev->configs,
2038                                 struct usb_configuration, list);
2039                 remove_config(cdev, c);
2040         }
2041         if (cdev->driver->unbind && unbind_driver)
2042                 cdev->driver->unbind(cdev);
2043
2044         composite_dev_cleanup(cdev);
2045
2046         if (dev_str[USB_GADGET_MANUFACTURER_IDX].s == cdev->def_manufacturer)
2047                 dev_str[USB_GADGET_MANUFACTURER_IDX].s = "";
2048
2049         kfree(cdev->def_manufacturer);
2050         kfree(cdev);
2051         set_gadget_data(gadget, NULL);
2052 }
2053
2054 static void composite_unbind(struct usb_gadget *gadget)
2055 {
2056         __composite_unbind(gadget, true);
2057 }
2058
2059 static void update_unchanged_dev_desc(struct usb_device_descriptor *new,
2060                 const struct usb_device_descriptor *old)
2061 {
2062         __le16 idVendor;
2063         __le16 idProduct;
2064         __le16 bcdDevice;
2065         u8 iSerialNumber;
2066         u8 iManufacturer;
2067         u8 iProduct;
2068
2069         /*
2070          * these variables may have been set in
2071          * usb_composite_overwrite_options()
2072          */
2073         idVendor = new->idVendor;
2074         idProduct = new->idProduct;
2075         bcdDevice = new->bcdDevice;
2076         iSerialNumber = new->iSerialNumber;
2077         iManufacturer = new->iManufacturer;
2078         iProduct = new->iProduct;
2079
2080         *new = *old;
2081         if (idVendor)
2082                 new->idVendor = idVendor;
2083         if (idProduct)
2084                 new->idProduct = idProduct;
2085         if (bcdDevice)
2086                 new->bcdDevice = bcdDevice;
2087         else
2088                 new->bcdDevice = cpu_to_le16(get_default_bcdDevice());
2089         if (iSerialNumber)
2090                 new->iSerialNumber = iSerialNumber;
2091         if (iManufacturer)
2092                 new->iManufacturer = iManufacturer;
2093         if (iProduct)
2094                 new->iProduct = iProduct;
2095 }
2096
2097 int composite_dev_prepare(struct usb_composite_driver *composite,
2098                 struct usb_composite_dev *cdev)
2099 {
2100         struct usb_gadget *gadget = cdev->gadget;
2101         int ret = -ENOMEM;
2102
2103         /* preallocate control response and buffer */
2104         cdev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL);
2105         if (!cdev->req)
2106                 return -ENOMEM;
2107
2108         cdev->req->buf = kmalloc(USB_COMP_EP0_BUFSIZ, GFP_KERNEL);
2109         if (!cdev->req->buf)
2110                 goto fail;
2111
2112         ret = device_create_file(&gadget->dev, &dev_attr_suspended);
2113         if (ret)
2114                 goto fail_dev;
2115
2116         cdev->req->complete = composite_setup_complete;
2117         cdev->req->context = cdev;
2118         gadget->ep0->driver_data = cdev;
2119
2120         cdev->driver = composite;
2121
2122         /*
2123          * As per USB compliance update, a device that is actively drawing
2124          * more than 100mA from USB must report itself as bus-powered in
2125          * the GetStatus(DEVICE) call.
2126          */
2127         if (CONFIG_USB_GADGET_VBUS_DRAW <= USB_SELF_POWER_VBUS_MAX_DRAW)
2128                 usb_gadget_set_selfpowered(gadget);
2129
2130         /* interface and string IDs start at zero via kzalloc.
2131          * we force endpoints to start unassigned; few controller
2132          * drivers will zero ep->driver_data.
2133          */
2134         usb_ep_autoconfig_reset(gadget);
2135         return 0;
2136 fail_dev:
2137         kfree(cdev->req->buf);
2138 fail:
2139         usb_ep_free_request(gadget->ep0, cdev->req);
2140         cdev->req = NULL;
2141         return ret;
2142 }
2143
2144 int composite_os_desc_req_prepare(struct usb_composite_dev *cdev,
2145                                   struct usb_ep *ep0)
2146 {
2147         int ret = 0;
2148
2149         cdev->os_desc_req = usb_ep_alloc_request(ep0, GFP_KERNEL);
2150         if (!cdev->os_desc_req) {
2151                 ret = -ENOMEM;
2152                 goto end;
2153         }
2154
2155         cdev->os_desc_req->buf = kmalloc(USB_COMP_EP0_OS_DESC_BUFSIZ,
2156                                          GFP_KERNEL);
2157         if (!cdev->os_desc_req->buf) {
2158                 ret = -ENOMEM;
2159                 usb_ep_free_request(ep0, cdev->os_desc_req);
2160                 goto end;
2161         }
2162         cdev->os_desc_req->context = cdev;
2163         cdev->os_desc_req->complete = composite_setup_complete;
2164 end:
2165         return ret;
2166 }
2167
2168 void composite_dev_cleanup(struct usb_composite_dev *cdev)
2169 {
2170         struct usb_gadget_string_container *uc, *tmp;
2171
2172         list_for_each_entry_safe(uc, tmp, &cdev->gstrings, list) {
2173                 list_del(&uc->list);
2174                 kfree(uc);
2175         }
2176         if (cdev->os_desc_req) {
2177                 if (cdev->os_desc_pending)
2178                         usb_ep_dequeue(cdev->gadget->ep0, cdev->os_desc_req);
2179
2180                 kfree(cdev->os_desc_req->buf);
2181                 usb_ep_free_request(cdev->gadget->ep0, cdev->os_desc_req);
2182         }
2183         if (cdev->req) {
2184                 if (cdev->setup_pending)
2185                         usb_ep_dequeue(cdev->gadget->ep0, cdev->req);
2186
2187                 kfree(cdev->req->buf);
2188                 usb_ep_free_request(cdev->gadget->ep0, cdev->req);
2189         }
2190         cdev->next_string_id = 0;
2191         device_remove_file(&cdev->gadget->dev, &dev_attr_suspended);
2192 }
2193
2194 static int composite_bind(struct usb_gadget *gadget,
2195                 struct usb_gadget_driver *gdriver)
2196 {
2197         struct usb_composite_dev        *cdev;
2198         struct usb_composite_driver     *composite = to_cdriver(gdriver);
2199         int                             status = -ENOMEM;
2200
2201         cdev = kzalloc(sizeof *cdev, GFP_KERNEL);
2202         if (!cdev)
2203                 return status;
2204
2205         spin_lock_init(&cdev->lock);
2206         cdev->gadget = gadget;
2207         set_gadget_data(gadget, cdev);
2208         INIT_LIST_HEAD(&cdev->configs);
2209         INIT_LIST_HEAD(&cdev->gstrings);
2210
2211         status = composite_dev_prepare(composite, cdev);
2212         if (status)
2213                 goto fail;
2214
2215         /* composite gadget needs to assign strings for whole device (like
2216          * serial number), register function drivers, potentially update
2217          * power state and consumption, etc
2218          */
2219         status = composite->bind(cdev);
2220         if (status < 0)
2221                 goto fail;
2222
2223         if (cdev->use_os_string) {
2224                 status = composite_os_desc_req_prepare(cdev, gadget->ep0);
2225                 if (status)
2226                         goto fail;
2227         }
2228
2229         update_unchanged_dev_desc(&cdev->desc, composite->dev);
2230
2231         /* has userspace failed to provide a serial number? */
2232         if (composite->needs_serial && !cdev->desc.iSerialNumber)
2233                 WARNING(cdev, "userspace failed to provide iSerialNumber\n");
2234
2235         INFO(cdev, "%s ready\n", composite->name);
2236         return 0;
2237
2238 fail:
2239         __composite_unbind(gadget, false);
2240         return status;
2241 }
2242
2243 /*-------------------------------------------------------------------------*/
2244
2245 void composite_suspend(struct usb_gadget *gadget)
2246 {
2247         struct usb_composite_dev        *cdev = get_gadget_data(gadget);
2248         struct usb_function             *f;
2249
2250         /* REVISIT:  should we have config level
2251          * suspend/resume callbacks?
2252          */
2253         DBG(cdev, "suspend\n");
2254         if (cdev->config) {
2255                 list_for_each_entry(f, &cdev->config->functions, list) {
2256                         if (f->suspend)
2257                                 f->suspend(f);
2258                 }
2259         }
2260         if (cdev->driver->suspend)
2261                 cdev->driver->suspend(cdev);
2262
2263         cdev->suspended = 1;
2264
2265         usb_gadget_vbus_draw(gadget, 2);
2266 }
2267
2268 void composite_resume(struct usb_gadget *gadget)
2269 {
2270         struct usb_composite_dev        *cdev = get_gadget_data(gadget);
2271         struct usb_function             *f;
2272         u16                             maxpower;
2273
2274         /* REVISIT:  should we have config level
2275          * suspend/resume callbacks?
2276          */
2277         DBG(cdev, "resume\n");
2278         if (cdev->driver->resume)
2279                 cdev->driver->resume(cdev);
2280         if (cdev->config) {
2281                 list_for_each_entry(f, &cdev->config->functions, list) {
2282                         if (f->resume)
2283                                 f->resume(f);
2284                 }
2285
2286                 maxpower = cdev->config->MaxPower;
2287
2288                 usb_gadget_vbus_draw(gadget, maxpower ?
2289                         maxpower : CONFIG_USB_GADGET_VBUS_DRAW);
2290         }
2291
2292         cdev->suspended = 0;
2293 }
2294
2295 /*-------------------------------------------------------------------------*/
2296
2297 static const struct usb_gadget_driver composite_driver_template = {
2298         .bind           = composite_bind,
2299         .unbind         = composite_unbind,
2300
2301         .setup          = composite_setup,
2302         .reset          = composite_disconnect,
2303         .disconnect     = composite_disconnect,
2304
2305         .suspend        = composite_suspend,
2306         .resume         = composite_resume,
2307
2308         .driver = {
2309                 .owner          = THIS_MODULE,
2310         },
2311 };
2312
2313 /**
2314  * usb_composite_probe() - register a composite driver
2315  * @driver: the driver to register
2316  *
2317  * Context: single threaded during gadget setup
2318  *
2319  * This function is used to register drivers using the composite driver
2320  * framework.  The return value is zero, or a negative errno value.
2321  * Those values normally come from the driver's @bind method, which does
2322  * all the work of setting up the driver to match the hardware.
2323  *
2324  * On successful return, the gadget is ready to respond to requests from
2325  * the host, unless one of its components invokes usb_gadget_disconnect()
2326  * while it was binding.  That would usually be done in order to wait for
2327  * some userspace participation.
2328  */
2329 int usb_composite_probe(struct usb_composite_driver *driver)
2330 {
2331         struct usb_gadget_driver *gadget_driver;
2332
2333         if (!driver || !driver->dev || !driver->bind)
2334                 return -EINVAL;
2335
2336         if (!driver->name)
2337                 driver->name = "composite";
2338
2339         driver->gadget_driver = composite_driver_template;
2340         gadget_driver = &driver->gadget_driver;
2341
2342         gadget_driver->function =  (char *) driver->name;
2343         gadget_driver->driver.name = driver->name;
2344         gadget_driver->max_speed = driver->max_speed;
2345
2346         return usb_gadget_probe_driver(gadget_driver);
2347 }
2348 EXPORT_SYMBOL_GPL(usb_composite_probe);
2349
2350 /**
2351  * usb_composite_unregister() - unregister a composite driver
2352  * @driver: the driver to unregister
2353  *
2354  * This function is used to unregister drivers using the composite
2355  * driver framework.
2356  */
2357 void usb_composite_unregister(struct usb_composite_driver *driver)
2358 {
2359         usb_gadget_unregister_driver(&driver->gadget_driver);
2360 }
2361 EXPORT_SYMBOL_GPL(usb_composite_unregister);
2362
2363 /**
2364  * usb_composite_setup_continue() - Continue with the control transfer
2365  * @cdev: the composite device who's control transfer was kept waiting
2366  *
2367  * This function must be called by the USB function driver to continue
2368  * with the control transfer's data/status stage in case it had requested to
2369  * delay the data/status stages. A USB function's setup handler (e.g. set_alt())
2370  * can request the composite framework to delay the setup request's data/status
2371  * stages by returning USB_GADGET_DELAYED_STATUS.
2372  */
2373 void usb_composite_setup_continue(struct usb_composite_dev *cdev)
2374 {
2375         int                     value;
2376         struct usb_request      *req = cdev->req;
2377         unsigned long           flags;
2378
2379         DBG(cdev, "%s\n", __func__);
2380         spin_lock_irqsave(&cdev->lock, flags);
2381
2382         if (cdev->delayed_status == 0) {
2383                 WARN(cdev, "%s: Unexpected call\n", __func__);
2384
2385         } else if (--cdev->delayed_status == 0) {
2386                 DBG(cdev, "%s: Completing delayed status\n", __func__);
2387                 req->length = 0;
2388                 req->context = cdev;
2389                 value = composite_ep0_queue(cdev, req, GFP_ATOMIC);
2390                 if (value < 0) {
2391                         DBG(cdev, "ep_queue --> %d\n", value);
2392                         req->status = 0;
2393                         composite_setup_complete(cdev->gadget->ep0, req);
2394                 }
2395         }
2396
2397         spin_unlock_irqrestore(&cdev->lock, flags);
2398 }
2399 EXPORT_SYMBOL_GPL(usb_composite_setup_continue);
2400
2401 static char *composite_default_mfr(struct usb_gadget *gadget)
2402 {
2403         char *mfr;
2404         int len;
2405
2406         len = snprintf(NULL, 0, "%s %s with %s", init_utsname()->sysname,
2407                         init_utsname()->release, gadget->name);
2408         len++;
2409         mfr = kmalloc(len, GFP_KERNEL);
2410         if (!mfr)
2411                 return NULL;
2412         snprintf(mfr, len, "%s %s with %s", init_utsname()->sysname,
2413                         init_utsname()->release, gadget->name);
2414         return mfr;
2415 }
2416
2417 void usb_composite_overwrite_options(struct usb_composite_dev *cdev,
2418                 struct usb_composite_overwrite *covr)
2419 {
2420         struct usb_device_descriptor    *desc = &cdev->desc;
2421         struct usb_gadget_strings       *gstr = cdev->driver->strings[0];
2422         struct usb_string               *dev_str = gstr->strings;
2423
2424         if (covr->idVendor)
2425                 desc->idVendor = cpu_to_le16(covr->idVendor);
2426
2427         if (covr->idProduct)
2428                 desc->idProduct = cpu_to_le16(covr->idProduct);
2429
2430         if (covr->bcdDevice)
2431                 desc->bcdDevice = cpu_to_le16(covr->bcdDevice);
2432
2433         if (covr->serial_number) {
2434                 desc->iSerialNumber = dev_str[USB_GADGET_SERIAL_IDX].id;
2435                 dev_str[USB_GADGET_SERIAL_IDX].s = covr->serial_number;
2436         }
2437         if (covr->manufacturer) {
2438                 desc->iManufacturer = dev_str[USB_GADGET_MANUFACTURER_IDX].id;
2439                 dev_str[USB_GADGET_MANUFACTURER_IDX].s = covr->manufacturer;
2440
2441         } else if (!strlen(dev_str[USB_GADGET_MANUFACTURER_IDX].s)) {
2442                 desc->iManufacturer = dev_str[USB_GADGET_MANUFACTURER_IDX].id;
2443                 cdev->def_manufacturer = composite_default_mfr(cdev->gadget);
2444                 dev_str[USB_GADGET_MANUFACTURER_IDX].s = cdev->def_manufacturer;
2445         }
2446
2447         if (covr->product) {
2448                 desc->iProduct = dev_str[USB_GADGET_PRODUCT_IDX].id;
2449                 dev_str[USB_GADGET_PRODUCT_IDX].s = covr->product;
2450         }
2451 }
2452 EXPORT_SYMBOL_GPL(usb_composite_overwrite_options);
2453
2454 MODULE_LICENSE("GPL");
2455 MODULE_AUTHOR("David Brownell");