usb: dwc2_udc_otg: Read MAX_HW_ENDPOINT from HWCFG4 register
[platform/kernel/u-boot.git] / drivers / usb / gadget / composite.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * composite.c - infrastructure for Composite USB Gadgets
4  *
5  * Copyright (C) 2006-2008 David Brownell
6  * U-Boot porting: Lukasz Majewski <l.majewski@samsung.com>
7  */
8 #undef DEBUG
9
10 #include <linux/bitops.h>
11 #include <linux/usb/composite.h>
12
13 #define USB_BUFSIZ      4096
14
15 static struct usb_composite_driver *composite;
16
17 /**
18  * usb_add_function() - add a function to a configuration
19  * @config: the configuration
20  * @function: the function being added
21  * Context: single threaded during gadget setup
22  *
23  * After initialization, each configuration must have one or more
24  * functions added to it.  Adding a function involves calling its @bind()
25  * method to allocate resources such as interface and string identifiers
26  * and endpoints.
27  *
28  * This function returns the value of the function's bind(), which is
29  * zero for success else a negative errno value.
30  */
31 int usb_add_function(struct usb_configuration *config,
32                 struct usb_function *function)
33 {
34         int     value = -EINVAL;
35
36         debug("adding '%s'/%p to config '%s'/%p\n",
37                         function->name, function,
38                         config->label, config);
39
40         if (!function->set_alt || !function->disable)
41                 goto done;
42
43         function->config = config;
44         list_add_tail(&function->list, &config->functions);
45
46         if (function->bind) {
47                 value = function->bind(config, function);
48                 if (value < 0) {
49                         list_del(&function->list);
50                         function->config = NULL;
51                 }
52         } else
53                 value = 0;
54
55         if (!config->fullspeed && function->descriptors)
56                 config->fullspeed = 1;
57         if (!config->highspeed && function->hs_descriptors)
58                 config->highspeed = 1;
59
60 done:
61         if (value)
62                 debug("adding '%s'/%p --> %d\n",
63                                 function->name, function, value);
64         return value;
65 }
66
67 /**
68  * usb_function_deactivate - prevent function and gadget enumeration
69  * @function: the function that isn't yet ready to respond
70  *
71  * Blocks response of the gadget driver to host enumeration by
72  * preventing the data line pullup from being activated.  This is
73  * normally called during @bind() processing to change from the
74  * initial "ready to respond" state, or when a required resource
75  * becomes available.
76  *
77  * For example, drivers that serve as a passthrough to a userspace
78  * daemon can block enumeration unless that daemon (such as an OBEX,
79  * MTP, or print server) is ready to handle host requests.
80  *
81  * Not all systems support software control of their USB peripheral
82  * data pullups.
83  *
84  * Returns zero on success, else negative errno.
85  */
86 int usb_function_deactivate(struct usb_function *function)
87 {
88         struct usb_composite_dev        *cdev = function->config->cdev;
89         int                             status = 0;
90
91         if (cdev->deactivations == 0)
92                 status = usb_gadget_disconnect(cdev->gadget);
93         if (status == 0)
94                 cdev->deactivations++;
95
96         return status;
97 }
98
99 /**
100  * usb_function_activate - allow function and gadget enumeration
101  * @function: function on which usb_function_activate() was called
102  *
103  * Reverses effect of usb_function_deactivate().  If no more functions
104  * are delaying their activation, the gadget driver will respond to
105  * host enumeration procedures.
106  *
107  * Returns zero on success, else negative errno.
108  */
109 int usb_function_activate(struct usb_function *function)
110 {
111         struct usb_composite_dev        *cdev = function->config->cdev;
112         int                             status = 0;
113
114         if (cdev->deactivations == 0)
115                 status = -EINVAL;
116         else {
117                 cdev->deactivations--;
118                 if (cdev->deactivations == 0)
119                         status = usb_gadget_connect(cdev->gadget);
120         }
121
122         return status;
123 }
124
125 /**
126  * usb_interface_id() - allocate an unused interface ID
127  * @config: configuration associated with the interface
128  * @function: function handling the interface
129  * Context: single threaded during gadget setup
130  *
131  * usb_interface_id() is called from usb_function.bind() callbacks to
132  * allocate new interface IDs.  The function driver will then store that
133  * ID in interface, association, CDC union, and other descriptors.  It
134  * will also handle any control requests targetted at that interface,
135  * particularly changing its altsetting via set_alt().  There may
136  * also be class-specific or vendor-specific requests to handle.
137  *
138  * All interface identifier should be allocated using this routine, to
139  * ensure that for example different functions don't wrongly assign
140  * different meanings to the same identifier.  Note that since interface
141  * identifers are configuration-specific, functions used in more than
142  * one configuration (or more than once in a given configuration) need
143  * multiple versions of the relevant descriptors.
144  *
145  * Returns the interface ID which was allocated; or -ENODEV if no
146  * more interface IDs can be allocated.
147  */
148 int usb_interface_id(struct usb_configuration *config,
149                 struct usb_function *function)
150 {
151         unsigned char id = config->next_interface_id;
152
153         if (id < MAX_CONFIG_INTERFACES) {
154                 config->interface[id] = function;
155                 config->next_interface_id = id + 1;
156                 return id;
157         }
158         return -ENODEV;
159 }
160
161 static int config_buf(struct usb_configuration *config,
162                 enum usb_device_speed speed, void *buf, u8 type)
163 {
164         int                             len = USB_BUFSIZ - USB_DT_CONFIG_SIZE;
165         void                            *next = buf + USB_DT_CONFIG_SIZE;
166         struct usb_descriptor_header    **descriptors;
167         struct usb_config_descriptor    *c;
168         int                             status;
169         struct usb_function             *f;
170
171         /* write the config descriptor */
172         c = buf;
173         c->bLength = USB_DT_CONFIG_SIZE;
174         c->bDescriptorType = type;
175
176         c->bNumInterfaces = config->next_interface_id;
177         c->bConfigurationValue = config->bConfigurationValue;
178         c->iConfiguration = config->iConfiguration;
179         c->bmAttributes = USB_CONFIG_ATT_ONE | config->bmAttributes;
180         c->bMaxPower = config->bMaxPower ? : (CONFIG_USB_GADGET_VBUS_DRAW / 2);
181
182         /* There may be e.g. OTG descriptors */
183         if (config->descriptors) {
184                 status = usb_descriptor_fillbuf(next, len,
185                                 config->descriptors);
186                 if (status < 0)
187                         return status;
188                 len -= status;
189                 next += status;
190         }
191
192         /* add each function's descriptors */
193         list_for_each_entry(f, &config->functions, list) {
194                 if (speed == USB_SPEED_HIGH)
195                         descriptors = f->hs_descriptors;
196                 else
197                         descriptors = f->descriptors;
198                 if (!descriptors)
199                         continue;
200                 status = usb_descriptor_fillbuf(next, len,
201                         (const struct usb_descriptor_header **) descriptors);
202                 if (status < 0)
203                         return status;
204                 len -= status;
205                 next += status;
206         }
207
208         len = next - buf;
209         c->wTotalLength = cpu_to_le16(len);
210         return len;
211 }
212
213 static int config_desc(struct usb_composite_dev *cdev, unsigned w_value)
214 {
215         enum usb_device_speed           speed = USB_SPEED_UNKNOWN;
216         struct usb_gadget               *gadget = cdev->gadget;
217         u8                              type = w_value >> 8;
218         int                             hs = 0;
219         struct usb_configuration        *c;
220
221         if (gadget_is_dualspeed(gadget)) {
222                 if (gadget->speed == USB_SPEED_HIGH)
223                         hs = 1;
224                 if (type == USB_DT_OTHER_SPEED_CONFIG)
225                         hs = !hs;
226                 if (hs)
227                         speed = USB_SPEED_HIGH;
228         }
229
230         w_value &= 0xff;
231         list_for_each_entry(c, &cdev->configs, list) {
232                 if (speed == USB_SPEED_HIGH) {
233                         if (!c->highspeed)
234                                 continue;
235                 } else {
236                         if (!c->fullspeed)
237                                 continue;
238                 }
239                 if (w_value == 0)
240                         return config_buf(c, speed, cdev->req->buf, type);
241                 w_value--;
242         }
243         return -EINVAL;
244 }
245
246 static int count_configs(struct usb_composite_dev *cdev, unsigned type)
247 {
248         struct usb_gadget               *gadget = cdev->gadget;
249         unsigned                        count = 0;
250         int                             hs = 0;
251         struct usb_configuration        *c;
252
253         if (gadget_is_dualspeed(gadget)) {
254                 if (gadget->speed == USB_SPEED_HIGH)
255                         hs = 1;
256                 if (type == USB_DT_DEVICE_QUALIFIER)
257                         hs = !hs;
258         }
259         list_for_each_entry(c, &cdev->configs, list) {
260                 /* ignore configs that won't work at this speed */
261                 if (hs) {
262                         if (!c->highspeed)
263                                 continue;
264                 } else {
265                         if (!c->fullspeed)
266                                 continue;
267                 }
268                 count++;
269         }
270         return count;
271 }
272
273 static void device_qual(struct usb_composite_dev *cdev)
274 {
275         struct usb_qualifier_descriptor *qual = cdev->req->buf;
276
277         qual->bLength = sizeof(*qual);
278         qual->bDescriptorType = USB_DT_DEVICE_QUALIFIER;
279         /* POLICY: same bcdUSB and device type info at both speeds */
280         qual->bcdUSB = cdev->desc.bcdUSB;
281         qual->bDeviceClass = cdev->desc.bDeviceClass;
282         qual->bDeviceSubClass = cdev->desc.bDeviceSubClass;
283         qual->bDeviceProtocol = cdev->desc.bDeviceProtocol;
284         /* ASSUME same EP0 fifo size at both speeds */
285         qual->bMaxPacketSize0 = cdev->gadget->ep0->maxpacket;
286         qual->bNumConfigurations = count_configs(cdev, USB_DT_DEVICE_QUALIFIER);
287         qual->bRESERVED = 0;
288 }
289
290 static void reset_config(struct usb_composite_dev *cdev)
291 {
292         struct usb_function             *f;
293
294         debug("%s:\n", __func__);
295
296         list_for_each_entry(f, &cdev->config->functions, list) {
297                 if (f->disable)
298                         f->disable(f);
299
300                 bitmap_zero(f->endpoints, 32);
301         }
302         cdev->config = NULL;
303 }
304
305 static int set_config(struct usb_composite_dev *cdev,
306                 const struct usb_ctrlrequest *ctrl, unsigned number)
307 {
308         struct usb_gadget       *gadget = cdev->gadget;
309         unsigned                power = gadget_is_otg(gadget) ? 8 : 100;
310         struct usb_descriptor_header **descriptors;
311         int                     result = -EINVAL;
312         struct usb_endpoint_descriptor *ep;
313         struct usb_configuration *c = NULL;
314         int                     addr;
315         int                     tmp;
316         struct usb_function     *f;
317
318         if (cdev->config)
319                 reset_config(cdev);
320
321         if (number) {
322                 list_for_each_entry(c, &cdev->configs, list) {
323                         if (c->bConfigurationValue == number) {
324                                 result = 0;
325                                 break;
326                         }
327                 }
328                 if (result < 0)
329                         goto done;
330         } else
331                 result = 0;
332
333         debug("%s: %s speed config #%d: %s\n", __func__,
334              ({ char *speed;
335                      switch (gadget->speed) {
336                      case USB_SPEED_LOW:
337                              speed = "low";
338                              break;
339                      case USB_SPEED_FULL:
340                              speed = "full";
341                              break;
342                      case USB_SPEED_HIGH:
343                              speed = "high";
344                              break;
345                      default:
346                              speed = "?";
347                              break;
348                      };
349                      speed;
350              }), number, c ? c->label : "unconfigured");
351
352         if (!c)
353                 goto done;
354
355         cdev->config = c;
356
357         /* Initialize all interfaces by setting them to altsetting zero. */
358         for (tmp = 0; tmp < MAX_CONFIG_INTERFACES; tmp++) {
359                 f = c->interface[tmp];
360                 if (!f)
361                         break;
362
363                 /*
364                  * Record which endpoints are used by the function. This is used
365                  * to dispatch control requests targeted at that endpoint to the
366                  * function's setup callback instead of the current
367                  * configuration's setup callback.
368                  */
369                 if (gadget->speed == USB_SPEED_HIGH)
370                         descriptors = f->hs_descriptors;
371                 else
372                         descriptors = f->descriptors;
373
374                 for (; *descriptors; ++descriptors) {
375                         if ((*descriptors)->bDescriptorType != USB_DT_ENDPOINT)
376                                 continue;
377
378                         ep = (struct usb_endpoint_descriptor *)*descriptors;
379                         addr = ((ep->bEndpointAddress & 0x80) >> 3)
380                              |  (ep->bEndpointAddress & 0x0f);
381                         generic_set_bit(addr, f->endpoints);
382                 }
383
384                 result = f->set_alt(f, tmp, 0);
385                 if (result < 0) {
386                         debug("interface %d (%s/%p) alt 0 --> %d\n",
387                                         tmp, f->name, f, result);
388
389                         reset_config(cdev);
390                         goto done;
391                 }
392         }
393
394         /* when we return, be sure our power usage is valid */
395         power = c->bMaxPower ? (2 * c->bMaxPower) : CONFIG_USB_GADGET_VBUS_DRAW;
396 done:
397         usb_gadget_vbus_draw(gadget, power);
398         return result;
399 }
400
401 /**
402  * usb_add_config() - add a configuration to a device.
403  * @cdev: wraps the USB gadget
404  * @config: the configuration, with bConfigurationValue assigned
405  * Context: single threaded during gadget setup
406  *
407  * One of the main tasks of a composite driver's bind() routine is to
408  * add each of the configurations it supports, using this routine.
409  *
410  * This function returns the value of the configuration's bind(), which
411  * is zero for success else a negative errno value.  Binding configurations
412  * assigns global resources including string IDs, and per-configuration
413  * resources such as interface IDs and endpoints.
414  */
415 int usb_add_config(struct usb_composite_dev *cdev,
416                 struct usb_configuration *config)
417 {
418         int                             status = -EINVAL;
419         struct usb_configuration        *c;
420         struct usb_function             *f;
421         unsigned int                    i;
422
423         debug("%s: adding config #%u '%s'/%p\n", __func__,
424                         config->bConfigurationValue,
425                         config->label, config);
426
427         if (!config->bConfigurationValue || !config->bind)
428                 goto done;
429
430         /* Prevent duplicate configuration identifiers */
431         list_for_each_entry(c, &cdev->configs, list) {
432                 if (c->bConfigurationValue == config->bConfigurationValue) {
433                         status = -EBUSY;
434                         goto done;
435                 }
436         }
437
438         config->cdev = cdev;
439         list_add_tail(&config->list, &cdev->configs);
440
441         INIT_LIST_HEAD(&config->functions);
442         config->next_interface_id = 0;
443
444         status = config->bind(config);
445         if (status < 0) {
446                 list_del(&config->list);
447                 config->cdev = NULL;
448         } else {
449                 debug("cfg %d/%p speeds:%s%s\n",
450                         config->bConfigurationValue, config,
451                         config->highspeed ? " high" : "",
452                         config->fullspeed
453                                 ? (gadget_is_dualspeed(cdev->gadget)
454                                         ? " full"
455                                         : " full/low")
456                                 : "");
457
458                 for (i = 0; i < MAX_CONFIG_INTERFACES; i++) {
459                         f = config->interface[i];
460                         if (!f)
461                                 continue;
462                         debug("%s: interface %d = %s/%p\n",
463                               __func__, i, f->name, f);
464                 }
465         }
466
467         usb_ep_autoconfig_reset(cdev->gadget);
468
469 done:
470         if (status)
471                 debug("added config '%s'/%u --> %d\n", config->label,
472                                 config->bConfigurationValue, status);
473         return status;
474 }
475
476 /*
477  * We support strings in multiple languages ... string descriptor zero
478  * says which languages are supported.  The typical case will be that
479  * only one language (probably English) is used, with I18N handled on
480  * the host side.
481  */
482
483 static void collect_langs(struct usb_gadget_strings **sp, __le16 *buf)
484 {
485         const struct usb_gadget_strings *s;
486         u16                             language;
487         __le16                          *tmp;
488
489         while (*sp) {
490                 s = *sp;
491                 language = cpu_to_le16(s->language);
492                 for (tmp = buf; *tmp && tmp < &buf[126]; tmp++) {
493                         if (*tmp == language)
494                                 goto repeat;
495                 }
496                 *tmp++ = language;
497 repeat:
498                 sp++;
499         }
500 }
501
502 static int lookup_string(
503         struct usb_gadget_strings       **sp,
504         void                            *buf,
505         u16                             language,
506         int                             id
507 )
508 {
509         int                             value;
510         struct usb_gadget_strings       *s;
511
512         while (*sp) {
513                 s = *sp++;
514                 if (s->language != language)
515                         continue;
516                 value = usb_gadget_get_string(s, id, buf);
517                 if (value > 0)
518                         return value;
519         }
520         return -EINVAL;
521 }
522
523 static int get_string(struct usb_composite_dev *cdev,
524                 void *buf, u16 language, int id)
525 {
526         struct usb_string_descriptor    *s = buf;
527         struct usb_gadget_strings       **sp;
528         int                             len;
529         struct usb_configuration        *c;
530         struct usb_function             *f;
531
532         /*
533          * Yes, not only is USB's I18N support probably more than most
534          * folk will ever care about ... also, it's all supported here.
535          * (Except for UTF8 support for Unicode's "Astral Planes".)
536          */
537
538         /* 0 == report all available language codes */
539         if (id == 0) {
540                 memset(s, 0, 256);
541                 s->bDescriptorType = USB_DT_STRING;
542
543                 sp = composite->strings;
544                 if (sp)
545                         collect_langs(sp, s->wData);
546
547                 list_for_each_entry(c, &cdev->configs, list) {
548                         sp = c->strings;
549                         if (sp)
550                                 collect_langs(sp, s->wData);
551
552                         list_for_each_entry(f, &c->functions, list) {
553                                 sp = f->strings;
554                                 if (sp)
555                                         collect_langs(sp, s->wData);
556                         }
557                 }
558
559                 for (len = 0; len <= 126 && s->wData[len]; len++)
560                         continue;
561                 if (!len)
562                         return -EINVAL;
563
564                 s->bLength = 2 * (len + 1);
565                 return s->bLength;
566         }
567
568         /*
569          * Otherwise, look up and return a specified string.  String IDs
570          * are device-scoped, so we look up each string table we're told
571          * about.  These lookups are infrequent; simpler-is-better here.
572          */
573         if (composite->strings) {
574                 len = lookup_string(composite->strings, buf, language, id);
575                 if (len > 0)
576                         return len;
577         }
578         list_for_each_entry(c, &cdev->configs, list) {
579                 if (c->strings) {
580                         len = lookup_string(c->strings, buf, language, id);
581                         if (len > 0)
582                                 return len;
583                 }
584                 list_for_each_entry(f, &c->functions, list) {
585                         if (!f->strings)
586                                 continue;
587                         len = lookup_string(f->strings, buf, language, id);
588                         if (len > 0)
589                                 return len;
590                 }
591         }
592         return -EINVAL;
593 }
594
595 /**
596  * usb_string_id() - allocate an unused string ID
597  * @cdev: the device whose string descriptor IDs are being allocated
598  * Context: single threaded during gadget setup
599  *
600  * @usb_string_id() is called from bind() callbacks to allocate
601  * string IDs.  Drivers for functions, configurations, or gadgets will
602  * then store that ID in the appropriate descriptors and string table.
603  *
604  * All string identifier should be allocated using this,
605  * @usb_string_ids_tab() or @usb_string_ids_n() routine, to ensure
606  * that for example different functions don't wrongly assign different
607  * meanings to the same identifier.
608  */
609 int usb_string_id(struct usb_composite_dev *cdev)
610 {
611         if (cdev->next_string_id < 254) {
612                 /*
613                  * string id 0 is reserved by USB spec for list of
614                  * supported languages
615                  * 255 reserved as well? -- mina86
616                  */
617                 cdev->next_string_id++;
618                 return cdev->next_string_id;
619         }
620         return -ENODEV;
621 }
622
623 /**
624  * usb_string_ids() - allocate unused string IDs in batch
625  * @cdev: the device whose string descriptor IDs are being allocated
626  * @str: an array of usb_string objects to assign numbers to
627  * Context: single threaded during gadget setup
628  *
629  * @usb_string_ids() is called from bind() callbacks to allocate
630  * string IDs.  Drivers for functions, configurations, or gadgets will
631  * then copy IDs from the string table to the appropriate descriptors
632  * and string table for other languages.
633  *
634  * All string identifier should be allocated using this,
635  * @usb_string_id() or @usb_string_ids_n() routine, to ensure that for
636  * example different functions don't wrongly assign different meanings
637  * to the same identifier.
638  */
639 int usb_string_ids_tab(struct usb_composite_dev *cdev, struct usb_string *str)
640 {
641         u8 next = cdev->next_string_id;
642
643         for (; str->s; ++str) {
644                 if (next >= 254)
645                         return -ENODEV;
646                 str->id = ++next;
647         }
648
649         cdev->next_string_id = next;
650
651         return 0;
652 }
653
654 /**
655  * usb_string_ids_n() - allocate unused string IDs in batch
656  * @c: the device whose string descriptor IDs are being allocated
657  * @n: number of string IDs to allocate
658  * Context: single threaded during gadget setup
659  *
660  * Returns the first requested ID.  This ID and next @n-1 IDs are now
661  * valid IDs.  At least provided that @n is non-zero because if it
662  * is, returns last requested ID which is now very useful information.
663  *
664  * @usb_string_ids_n() is called from bind() callbacks to allocate
665  * string IDs.  Drivers for functions, configurations, or gadgets will
666  * then store that ID in the appropriate descriptors and string table.
667  *
668  * All string identifier should be allocated using this,
669  * @usb_string_id() or @usb_string_ids_n() routine, to ensure that for
670  * example different functions don't wrongly assign different meanings
671  * to the same identifier.
672  */
673 int usb_string_ids_n(struct usb_composite_dev *c, unsigned n)
674 {
675         u8 next = c->next_string_id;
676
677         if (n > 254 || next + n > 254)
678                 return -ENODEV;
679
680         c->next_string_id += n;
681         return next + 1;
682 }
683
684 static void composite_setup_complete(struct usb_ep *ep, struct usb_request *req)
685 {
686         if (req->status || req->actual != req->length)
687                 debug("%s: setup complete --> %d, %d/%d\n", __func__,
688                                 req->status, req->actual, req->length);
689 }
690
691 /*
692  * The setup() callback implements all the ep0 functionality that's
693  * not handled lower down, in hardware or the hardware driver(like
694  * device and endpoint feature flags, and their status).  It's all
695  * housekeeping for the gadget function we're implementing.  Most of
696  * the work is in config and function specific setup.
697  */
698 static int
699 composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
700 {
701         u16                             w_length = le16_to_cpu(ctrl->wLength);
702         u16                             w_index = le16_to_cpu(ctrl->wIndex);
703         u16                             w_value = le16_to_cpu(ctrl->wValue);
704         struct usb_composite_dev        *cdev = get_gadget_data(gadget);
705         u8                              intf = w_index & 0xFF;
706         int                             value = -EOPNOTSUPP;
707         struct usb_request              *req = cdev->req;
708         struct usb_function             *f = NULL;
709         int                             standard;
710         u8                              endp;
711         struct usb_configuration        *c;
712
713         /*
714          * partial re-init of the response message; the function or the
715          * gadget might need to intercept e.g. a control-OUT completion
716          * when we delegate to it.
717          */
718         req->zero = 0;
719         req->complete = composite_setup_complete;
720         req->length = USB_BUFSIZ;
721         gadget->ep0->driver_data = cdev;
722         standard = (ctrl->bRequestType & USB_TYPE_MASK)
723                                                 == USB_TYPE_STANDARD;
724         if (!standard)
725                 goto unknown;
726
727         switch (ctrl->bRequest) {
728
729         /* we handle all standard USB descriptors */
730         case USB_REQ_GET_DESCRIPTOR:
731                 if (ctrl->bRequestType != USB_DIR_IN)
732                         goto unknown;
733                 switch (w_value >> 8) {
734
735                 case USB_DT_DEVICE:
736                         cdev->desc.bNumConfigurations =
737                                 count_configs(cdev, USB_DT_DEVICE);
738
739                         /*
740                          * If the speed is Super speed, then the supported
741                          * max packet size is 512 and it should be sent as
742                          * exponent of 2. So, 9(2^9=512) should be filled in
743                          * bMaxPacketSize0. Also fill USB version as 3.0
744                          * if speed is Super speed.
745                          */
746                         if (cdev->gadget->speed == USB_SPEED_SUPER) {
747                                 cdev->desc.bMaxPacketSize0 = 9;
748                                 cdev->desc.bcdUSB = cpu_to_le16(0x0300);
749                         } else {
750                                 cdev->desc.bMaxPacketSize0 =
751                                         cdev->gadget->ep0->maxpacket;
752                         }
753                         value = min(w_length, (u16) sizeof cdev->desc);
754                         memcpy(req->buf, &cdev->desc, value);
755                         break;
756                 case USB_DT_DEVICE_QUALIFIER:
757                         if (!gadget_is_dualspeed(gadget))
758                                 break;
759                         device_qual(cdev);
760                         value = min_t(int, w_length,
761                                       sizeof(struct usb_qualifier_descriptor));
762                         break;
763                 case USB_DT_OTHER_SPEED_CONFIG:
764                         if (!gadget_is_dualspeed(gadget))
765                                 break;
766
767                 case USB_DT_CONFIG:
768                         value = config_desc(cdev, w_value);
769                         if (value >= 0)
770                                 value = min(w_length, (u16) value);
771                         break;
772                 case USB_DT_STRING:
773                         value = get_string(cdev, req->buf,
774                                         w_index, w_value & 0xff);
775                         if (value >= 0)
776                                 value = min(w_length, (u16) value);
777                         break;
778                 case USB_DT_BOS:
779                         /*
780                          * The USB compliance test (USB 2.0 Command Verifier)
781                          * issues this request. We should not run into the
782                          * default path here. But return for now until
783                          * the superspeed support is added.
784                          */
785                         break;
786                 default:
787                         goto unknown;
788                 }
789                 break;
790
791         /* any number of configs can work */
792         case USB_REQ_SET_CONFIGURATION:
793                 if (ctrl->bRequestType != 0)
794                         goto unknown;
795                 if (gadget_is_otg(gadget)) {
796                         if (gadget->a_hnp_support)
797                                 debug("HNP available\n");
798                         else if (gadget->a_alt_hnp_support)
799                                 debug("HNP on another port\n");
800                         else
801                                 debug("HNP inactive\n");
802                 }
803
804                 value = set_config(cdev, ctrl, w_value);
805                 break;
806         case USB_REQ_GET_CONFIGURATION:
807                 if (ctrl->bRequestType != USB_DIR_IN)
808                         goto unknown;
809                 if (cdev->config)
810                         *(u8 *)req->buf = cdev->config->bConfigurationValue;
811                 else
812                         *(u8 *)req->buf = 0;
813                 value = min(w_length, (u16) 1);
814                 break;
815
816         /*
817          * function drivers must handle get/set altsetting; if there's
818          * no get() method, we know only altsetting zero works.
819          */
820         case USB_REQ_SET_INTERFACE:
821                 if (ctrl->bRequestType != USB_RECIP_INTERFACE)
822                         goto unknown;
823                 if (!cdev->config || w_index >= MAX_CONFIG_INTERFACES)
824                         break;
825                 f = cdev->config->interface[intf];
826                 if (!f)
827                         break;
828                 if (w_value && !f->set_alt)
829                         break;
830                 value = f->set_alt(f, w_index, w_value);
831                 break;
832         case USB_REQ_GET_INTERFACE:
833                 if (ctrl->bRequestType != (USB_DIR_IN|USB_RECIP_INTERFACE))
834                         goto unknown;
835                 if (!cdev->config || w_index >= MAX_CONFIG_INTERFACES)
836                         break;
837                 f = cdev->config->interface[intf];
838                 if (!f)
839                         break;
840                 /* lots of interfaces only need altsetting zero... */
841                 value = f->get_alt ? f->get_alt(f, w_index) : 0;
842                 if (value < 0)
843                         break;
844                 *((u8 *)req->buf) = value;
845                 value = min(w_length, (u16) 1);
846                 break;
847         default:
848 unknown:
849                 debug("non-core control req%02x.%02x v%04x i%04x l%d\n",
850                         ctrl->bRequestType, ctrl->bRequest,
851                         w_value, w_index, w_length);
852
853                 if (!cdev->config)
854                         goto done;
855
856                 /*
857                  * functions always handle their interfaces and endpoints...
858                  * punt other recipients (other, WUSB, ...) to the current
859                  * configuration code.
860                  */
861                 switch (ctrl->bRequestType & USB_RECIP_MASK) {
862                 case USB_RECIP_INTERFACE:
863                         f = cdev->config->interface[intf];
864                         break;
865
866                 case USB_RECIP_ENDPOINT:
867                         endp = ((w_index & 0x80) >> 3) | (w_index & 0x0f);
868                         list_for_each_entry(f, &cdev->config->functions, list) {
869                                 if (test_bit(endp, f->endpoints))
870                                         break;
871                         }
872                         if (&f->list == &cdev->config->functions)
873                                 f = NULL;
874                         break;
875                 /*
876                  * dfu-util (version 0.5) sets bmRequestType.Receipent = Device
877                  * for non-standard request (w_value = 0x21,
878                  * bRequest = GET_DESCRIPTOR in this case).
879                  * When only one interface is registered (as it is done now),
880                  * then this request shall be handled as it was requested for
881                  * interface.
882                  *
883                  * In the below code it is checked if only one interface is
884                  * present and proper function for it is extracted. Due to that
885                  * function's setup (f->setup) is called to handle this
886                  * special non-standard request.
887                  */
888                 case USB_RECIP_DEVICE:
889                         debug("cdev->config->next_interface_id: %d intf: %d\n",
890                                cdev->config->next_interface_id, intf);
891                         if (cdev->config->next_interface_id == 1)
892                                 f = cdev->config->interface[intf];
893                         break;
894                 }
895
896                 if (f && f->setup)
897                         value = f->setup(f, ctrl);
898                 else {
899                         c = cdev->config;
900                         if (c->setup)
901                                 value = c->setup(c, ctrl);
902                 }
903
904                 goto done;
905         }
906
907         /* respond with data transfer before status phase? */
908         if (value >= 0) {
909                 req->length = value;
910                 req->zero = value < w_length;
911                 value = usb_ep_queue(gadget->ep0, req, GFP_KERNEL);
912                 if (value < 0) {
913                         debug("ep_queue --> %d\n", value);
914                         req->status = 0;
915                         composite_setup_complete(gadget->ep0, req);
916                 }
917         }
918
919 done:
920         /* device either stalls (value < 0) or reports success */
921         return value;
922 }
923
924 static void composite_disconnect(struct usb_gadget *gadget)
925 {
926         struct usb_composite_dev        *cdev = get_gadget_data(gadget);
927
928         if (cdev->config)
929                 reset_config(cdev);
930         if (composite->disconnect)
931                 composite->disconnect(cdev);
932 }
933
934 static void composite_unbind(struct usb_gadget *gadget)
935 {
936         struct usb_composite_dev        *cdev = get_gadget_data(gadget);
937         struct usb_configuration        *c;
938         struct usb_function             *f;
939
940         /*
941          * composite_disconnect() must already have been called
942          * by the underlying peripheral controller driver!
943          * so there's no i/o concurrency that could affect the
944          * state protected by cdev->lock.
945          */
946         BUG_ON(cdev->config);
947
948         while (!list_empty(&cdev->configs)) {
949                 c = list_first_entry(&cdev->configs,
950                                 struct usb_configuration, list);
951                 while (!list_empty(&c->functions)) {
952                         f = list_first_entry(&c->functions,
953                                         struct usb_function, list);
954                         list_del(&f->list);
955                         if (f->unbind) {
956                                 debug("unbind function '%s'/%p\n",
957                                                 f->name, f);
958                                 f->unbind(c, f);
959                         }
960                 }
961                 list_del(&c->list);
962                 if (c->unbind) {
963                         debug("unbind config '%s'/%p\n", c->label, c);
964                         c->unbind(c);
965                 }
966                 free(c);
967         }
968         if (composite->unbind)
969                 composite->unbind(cdev);
970
971         if (cdev->req) {
972                 kfree(cdev->req->buf);
973                 usb_ep_free_request(gadget->ep0, cdev->req);
974         }
975         kfree(cdev);
976         set_gadget_data(gadget, NULL);
977
978         composite = NULL;
979 }
980
981 static int composite_bind(struct usb_gadget *gadget)
982 {
983         int                             status = -ENOMEM;
984         struct usb_composite_dev        *cdev;
985
986         cdev = calloc(sizeof *cdev, 1);
987         if (!cdev)
988                 return status;
989
990         cdev->gadget = gadget;
991         set_gadget_data(gadget, cdev);
992         INIT_LIST_HEAD(&cdev->configs);
993
994         /* preallocate control response and buffer */
995         cdev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL);
996         if (!cdev->req)
997                 goto fail;
998         cdev->req->buf = memalign(CONFIG_SYS_CACHELINE_SIZE, USB_BUFSIZ);
999         if (!cdev->req->buf)
1000                 goto fail;
1001         cdev->req->complete = composite_setup_complete;
1002         gadget->ep0->driver_data = cdev;
1003
1004         cdev->bufsiz = USB_BUFSIZ;
1005         cdev->driver = composite;
1006
1007         usb_gadget_set_selfpowered(gadget);
1008         usb_ep_autoconfig_reset(cdev->gadget);
1009
1010         status = composite->bind(cdev);
1011         if (status < 0)
1012                 goto fail;
1013
1014         memcpy(&cdev->desc, composite->dev,
1015                sizeof(struct usb_device_descriptor));
1016         cdev->desc.bMaxPacketSize0 = gadget->ep0->maxpacket;
1017
1018         debug("%s: ready\n", composite->name);
1019         return 0;
1020
1021 fail:
1022         composite_unbind(gadget);
1023         return status;
1024 }
1025
1026 static void
1027 composite_suspend(struct usb_gadget *gadget)
1028 {
1029         struct usb_composite_dev        *cdev = get_gadget_data(gadget);
1030         struct usb_function             *f;
1031
1032         debug("%s: suspend\n", __func__);
1033         if (cdev->config) {
1034                 list_for_each_entry(f, &cdev->config->functions, list) {
1035                         if (f->suspend)
1036                                 f->suspend(f);
1037                 }
1038         }
1039         if (composite->suspend)
1040                 composite->suspend(cdev);
1041
1042         cdev->suspended = 1;
1043 }
1044
1045 static void
1046 composite_resume(struct usb_gadget *gadget)
1047 {
1048         struct usb_composite_dev        *cdev = get_gadget_data(gadget);
1049         struct usb_function             *f;
1050
1051         debug("%s: resume\n", __func__);
1052         if (composite->resume)
1053                 composite->resume(cdev);
1054         if (cdev->config) {
1055                 list_for_each_entry(f, &cdev->config->functions, list) {
1056                         if (f->resume)
1057                                 f->resume(f);
1058                 }
1059         }
1060
1061         cdev->suspended = 0;
1062 }
1063
1064 static struct usb_gadget_driver composite_driver = {
1065         .speed          = USB_SPEED_HIGH,
1066
1067         .bind           = composite_bind,
1068         .unbind         = composite_unbind,
1069
1070         .setup          = composite_setup,
1071         .reset          = composite_disconnect,
1072         .disconnect     = composite_disconnect,
1073
1074         .suspend        = composite_suspend,
1075         .resume         = composite_resume,
1076 };
1077
1078 /**
1079  * usb_composite_register() - register a composite driver
1080  * @driver: the driver to register
1081  * Context: single threaded during gadget setup
1082  *
1083  * This function is used to register drivers using the composite driver
1084  * framework.  The return value is zero, or a negative errno value.
1085  * Those values normally come from the driver's @bind method, which does
1086  * all the work of setting up the driver to match the hardware.
1087  *
1088  * On successful return, the gadget is ready to respond to requests from
1089  * the host, unless one of its components invokes usb_gadget_disconnect()
1090  * while it was binding.  That would usually be done in order to wait for
1091  * some userspace participation.
1092  */
1093 int usb_composite_register(struct usb_composite_driver *driver)
1094 {
1095         int res;
1096
1097         if (!driver || !driver->dev || !driver->bind || composite)
1098                 return -EINVAL;
1099
1100         if (!driver->name)
1101                 driver->name = "composite";
1102         composite = driver;
1103
1104         res = usb_gadget_register_driver(&composite_driver);
1105         if (res != 0)
1106                 composite = NULL;
1107
1108         return res;
1109 }
1110
1111 /**
1112  * usb_composite_unregister() - unregister a composite driver
1113  * @driver: the driver to unregister
1114  *
1115  * This function is used to unregister drivers using the composite
1116  * driver framework.
1117  */
1118 void usb_composite_unregister(struct usb_composite_driver *driver)
1119 {
1120         if (composite != driver)
1121                 return;
1122         usb_gadget_unregister_driver(&composite_driver);
1123         composite = NULL;
1124 }