Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
config.c
Go to the documentation of this file.
1 #include <linux/usb.h>
2 #include <linux/usb/ch9.h>
3 #include <linux/usb/hcd.h>
4 #include <linux/usb/quirks.h>
5 #include <linux/module.h>
6 #include <linux/init.h>
7 #include <linux/slab.h>
8 #include <linux/device.h>
9 #include <asm/byteorder.h>
10 #include "usb.h"
11 
12 
13 #define USB_MAXALTSETTING 128 /* Hard limit */
14 #define USB_MAXENDPOINTS 30 /* Hard limit */
15 
16 #define USB_MAXCONFIG 8 /* Arbitrary limit */
17 
18 
19 static inline const char *plural(int n)
20 {
21  return (n == 1 ? "" : "s");
22 }
23 
24 static int find_next_descriptor(unsigned char *buffer, int size,
25  int dt1, int dt2, int *num_skipped)
26 {
27  struct usb_descriptor_header *h;
28  int n = 0;
29  unsigned char *buffer0 = buffer;
30 
31  /* Find the next descriptor of type dt1 or dt2 */
32  while (size > 0) {
33  h = (struct usb_descriptor_header *) buffer;
34  if (h->bDescriptorType == dt1 || h->bDescriptorType == dt2)
35  break;
36  buffer += h->bLength;
37  size -= h->bLength;
38  ++n;
39  }
40 
41  /* Store the number of descriptors skipped and return the
42  * number of bytes skipped */
43  if (num_skipped)
44  *num_skipped = n;
45  return buffer - buffer0;
46 }
47 
48 static void usb_parse_ss_endpoint_companion(struct device *ddev, int cfgno,
49  int inum, int asnum, struct usb_host_endpoint *ep,
50  unsigned char *buffer, int size)
51 {
53  int max_tx;
54 
55  /* The SuperSpeed endpoint companion descriptor is supposed to
56  * be the first thing immediately following the endpoint descriptor.
57  */
58  desc = (struct usb_ss_ep_comp_descriptor *) buffer;
60  size < USB_DT_SS_EP_COMP_SIZE) {
61  dev_warn(ddev, "No SuperSpeed endpoint companion for config %d "
62  " interface %d altsetting %d ep %d: "
63  "using minimum values\n",
64  cfgno, inum, asnum, ep->desc.bEndpointAddress);
65 
66  /* Fill in some default values.
67  * Leave bmAttributes as zero, which will mean no streams for
68  * bulk, and isoc won't support multiple bursts of packets.
69  * With bursts of only one packet, and a Mult of 1, the max
70  * amount of data moved per endpoint service interval is one
71  * packet.
72  */
73  ep->ss_ep_comp.bLength = USB_DT_SS_EP_COMP_SIZE;
74  ep->ss_ep_comp.bDescriptorType = USB_DT_SS_ENDPOINT_COMP;
75  if (usb_endpoint_xfer_isoc(&ep->desc) ||
76  usb_endpoint_xfer_int(&ep->desc))
77  ep->ss_ep_comp.wBytesPerInterval =
78  ep->desc.wMaxPacketSize;
79  return;
80  }
81 
82  memcpy(&ep->ss_ep_comp, desc, USB_DT_SS_EP_COMP_SIZE);
83 
84  /* Check the various values */
85  if (usb_endpoint_xfer_control(&ep->desc) && desc->bMaxBurst != 0) {
86  dev_warn(ddev, "Control endpoint with bMaxBurst = %d in "
87  "config %d interface %d altsetting %d ep %d: "
88  "setting to zero\n", desc->bMaxBurst,
89  cfgno, inum, asnum, ep->desc.bEndpointAddress);
90  ep->ss_ep_comp.bMaxBurst = 0;
91  } else if (desc->bMaxBurst > 15) {
92  dev_warn(ddev, "Endpoint with bMaxBurst = %d in "
93  "config %d interface %d altsetting %d ep %d: "
94  "setting to 15\n", desc->bMaxBurst,
95  cfgno, inum, asnum, ep->desc.bEndpointAddress);
96  ep->ss_ep_comp.bMaxBurst = 15;
97  }
98 
99  if ((usb_endpoint_xfer_control(&ep->desc) ||
100  usb_endpoint_xfer_int(&ep->desc)) &&
101  desc->bmAttributes != 0) {
102  dev_warn(ddev, "%s endpoint with bmAttributes = %d in "
103  "config %d interface %d altsetting %d ep %d: "
104  "setting to zero\n",
105  usb_endpoint_xfer_control(&ep->desc) ? "Control" : "Bulk",
106  desc->bmAttributes,
107  cfgno, inum, asnum, ep->desc.bEndpointAddress);
108  ep->ss_ep_comp.bmAttributes = 0;
109  } else if (usb_endpoint_xfer_bulk(&ep->desc) &&
110  desc->bmAttributes > 16) {
111  dev_warn(ddev, "Bulk endpoint with more than 65536 streams in "
112  "config %d interface %d altsetting %d ep %d: "
113  "setting to max\n",
114  cfgno, inum, asnum, ep->desc.bEndpointAddress);
115  ep->ss_ep_comp.bmAttributes = 16;
116  } else if (usb_endpoint_xfer_isoc(&ep->desc) &&
117  desc->bmAttributes > 2) {
118  dev_warn(ddev, "Isoc endpoint has Mult of %d in "
119  "config %d interface %d altsetting %d ep %d: "
120  "setting to 3\n", desc->bmAttributes + 1,
121  cfgno, inum, asnum, ep->desc.bEndpointAddress);
122  ep->ss_ep_comp.bmAttributes = 2;
123  }
124 
125  if (usb_endpoint_xfer_isoc(&ep->desc))
126  max_tx = (desc->bMaxBurst + 1) * (desc->bmAttributes + 1) *
127  usb_endpoint_maxp(&ep->desc);
128  else if (usb_endpoint_xfer_int(&ep->desc))
129  max_tx = usb_endpoint_maxp(&ep->desc) *
130  (desc->bMaxBurst + 1);
131  else
132  max_tx = 999999;
133  if (le16_to_cpu(desc->wBytesPerInterval) > max_tx) {
134  dev_warn(ddev, "%s endpoint with wBytesPerInterval of %d in "
135  "config %d interface %d altsetting %d ep %d: "
136  "setting to %d\n",
137  usb_endpoint_xfer_isoc(&ep->desc) ? "Isoc" : "Int",
139  cfgno, inum, asnum, ep->desc.bEndpointAddress,
140  max_tx);
141  ep->ss_ep_comp.wBytesPerInterval = cpu_to_le16(max_tx);
142  }
143 }
144 
145 static int usb_parse_endpoint(struct device *ddev, int cfgno, int inum,
146  int asnum, struct usb_host_interface *ifp, int num_ep,
147  unsigned char *buffer, int size)
148 {
149  unsigned char *buffer0 = buffer;
150  struct usb_endpoint_descriptor *d;
151  struct usb_host_endpoint *endpoint;
152  int n, i, j, retval;
153 
154  d = (struct usb_endpoint_descriptor *) buffer;
155  buffer += d->bLength;
156  size -= d->bLength;
157 
160  else if (d->bLength >= USB_DT_ENDPOINT_SIZE)
162  else {
163  dev_warn(ddev, "config %d interface %d altsetting %d has an "
164  "invalid endpoint descriptor of length %d, skipping\n",
165  cfgno, inum, asnum, d->bLength);
166  goto skip_to_next_endpoint_or_interface_descriptor;
167  }
168 
170  if (i >= 16 || i == 0) {
171  dev_warn(ddev, "config %d interface %d altsetting %d has an "
172  "invalid endpoint with address 0x%X, skipping\n",
173  cfgno, inum, asnum, d->bEndpointAddress);
174  goto skip_to_next_endpoint_or_interface_descriptor;
175  }
176 
177  /* Only store as many endpoints as we have room for */
178  if (ifp->desc.bNumEndpoints >= num_ep)
179  goto skip_to_next_endpoint_or_interface_descriptor;
180 
181  endpoint = &ifp->endpoint[ifp->desc.bNumEndpoints];
182  ++ifp->desc.bNumEndpoints;
183 
184  memcpy(&endpoint->desc, d, n);
185  INIT_LIST_HEAD(&endpoint->urb_list);
186 
187  /* Fix up bInterval values outside the legal range. Use 32 ms if no
188  * proper value can be guessed. */
189  i = 0; /* i = min, j = max, n = default */
190  j = 255;
191  if (usb_endpoint_xfer_int(d)) {
192  i = 1;
193  switch (to_usb_device(ddev)->speed) {
194  case USB_SPEED_SUPER:
195  case USB_SPEED_HIGH:
196  /* Many device manufacturers are using full-speed
197  * bInterval values in high-speed interrupt endpoint
198  * descriptors. Try to fix those and fall back to a
199  * 32 ms default value otherwise. */
200  n = fls(d->bInterval*8);
201  if (n == 0)
202  n = 9; /* 32 ms = 2^(9-1) uframes */
203  j = 16;
204  break;
205  default: /* USB_SPEED_FULL or _LOW */
206  /* For low-speed, 10 ms is the official minimum.
207  * But some "overclocked" devices might want faster
208  * polling so we'll allow it. */
209  n = 32;
210  break;
211  }
212  } else if (usb_endpoint_xfer_isoc(d)) {
213  i = 1;
214  j = 16;
215  switch (to_usb_device(ddev)->speed) {
216  case USB_SPEED_HIGH:
217  n = 9; /* 32 ms = 2^(9-1) uframes */
218  break;
219  default: /* USB_SPEED_FULL */
220  n = 6; /* 32 ms = 2^(6-1) frames */
221  break;
222  }
223  }
224  if (d->bInterval < i || d->bInterval > j) {
225  dev_warn(ddev, "config %d interface %d altsetting %d "
226  "endpoint 0x%X has an invalid bInterval %d, "
227  "changing to %d\n",
228  cfgno, inum, asnum,
229  d->bEndpointAddress, d->bInterval, n);
230  endpoint->desc.bInterval = n;
231  }
232 
233  /* Some buggy low-speed devices have Bulk endpoints, which is
234  * explicitly forbidden by the USB spec. In an attempt to make
235  * them usable, we will try treating them as Interrupt endpoints.
236  */
237  if (to_usb_device(ddev)->speed == USB_SPEED_LOW &&
238  usb_endpoint_xfer_bulk(d)) {
239  dev_warn(ddev, "config %d interface %d altsetting %d "
240  "endpoint 0x%X is Bulk; changing to Interrupt\n",
241  cfgno, inum, asnum, d->bEndpointAddress);
242  endpoint->desc.bmAttributes = USB_ENDPOINT_XFER_INT;
243  endpoint->desc.bInterval = 1;
244  if (usb_endpoint_maxp(&endpoint->desc) > 8)
245  endpoint->desc.wMaxPacketSize = cpu_to_le16(8);
246  }
247 
248  /*
249  * Some buggy high speed devices have bulk endpoints using
250  * maxpacket sizes other than 512. High speed HCDs may not
251  * be able to handle that particular bug, so let's warn...
252  */
253  if (to_usb_device(ddev)->speed == USB_SPEED_HIGH
254  && usb_endpoint_xfer_bulk(d)) {
255  unsigned maxp;
256 
257  maxp = usb_endpoint_maxp(&endpoint->desc) & 0x07ff;
258  if (maxp != 512)
259  dev_warn(ddev, "config %d interface %d altsetting %d "
260  "bulk endpoint 0x%X has invalid maxpacket %d\n",
261  cfgno, inum, asnum, d->bEndpointAddress,
262  maxp);
263  }
264 
265  /* Parse a possible SuperSpeed endpoint companion descriptor */
266  if (to_usb_device(ddev)->speed == USB_SPEED_SUPER)
267  usb_parse_ss_endpoint_companion(ddev, cfgno,
268  inum, asnum, endpoint, buffer, size);
269 
270  /* Skip over any Class Specific or Vendor Specific descriptors;
271  * find the next endpoint or interface descriptor */
272  endpoint->extra = buffer;
273  i = find_next_descriptor(buffer, size, USB_DT_ENDPOINT,
274  USB_DT_INTERFACE, &n);
275  endpoint->extralen = i;
276  retval = buffer - buffer0 + i;
277  if (n > 0)
278  dev_dbg(ddev, "skipped %d descriptor%s after %s\n",
279  n, plural(n), "endpoint");
280  return retval;
281 
282 skip_to_next_endpoint_or_interface_descriptor:
283  i = find_next_descriptor(buffer, size, USB_DT_ENDPOINT,
285  return buffer - buffer0 + i;
286 }
287 
289 {
290  struct usb_interface_cache *intfc = ref_to_usb_interface_cache(ref);
291  int j;
292 
293  for (j = 0; j < intfc->num_altsetting; j++) {
294  struct usb_host_interface *alt = &intfc->altsetting[j];
295 
296  kfree(alt->endpoint);
297  kfree(alt->string);
298  }
299  kfree(intfc);
300 }
301 
302 static int usb_parse_interface(struct device *ddev, int cfgno,
303  struct usb_host_config *config, unsigned char *buffer, int size,
304  u8 inums[], u8 nalts[])
305 {
306  unsigned char *buffer0 = buffer;
307  struct usb_interface_descriptor *d;
308  int inum, asnum;
309  struct usb_interface_cache *intfc;
310  struct usb_host_interface *alt;
311  int i, n;
312  int len, retval;
313  int num_ep, num_ep_orig;
314 
315  d = (struct usb_interface_descriptor *) buffer;
316  buffer += d->bLength;
317  size -= d->bLength;
318 
320  goto skip_to_next_interface_descriptor;
321 
322  /* Which interface entry is this? */
323  intfc = NULL;
324  inum = d->bInterfaceNumber;
325  for (i = 0; i < config->desc.bNumInterfaces; ++i) {
326  if (inums[i] == inum) {
327  intfc = config->intf_cache[i];
328  break;
329  }
330  }
331  if (!intfc || intfc->num_altsetting >= nalts[i])
332  goto skip_to_next_interface_descriptor;
333 
334  /* Check for duplicate altsetting entries */
335  asnum = d->bAlternateSetting;
336  for ((i = 0, alt = &intfc->altsetting[0]);
337  i < intfc->num_altsetting;
338  (++i, ++alt)) {
339  if (alt->desc.bAlternateSetting == asnum) {
340  dev_warn(ddev, "Duplicate descriptor for config %d "
341  "interface %d altsetting %d, skipping\n",
342  cfgno, inum, asnum);
343  goto skip_to_next_interface_descriptor;
344  }
345  }
346 
347  ++intfc->num_altsetting;
348  memcpy(&alt->desc, d, USB_DT_INTERFACE_SIZE);
349 
350  /* Skip over any Class Specific or Vendor Specific descriptors;
351  * find the first endpoint or interface descriptor */
352  alt->extra = buffer;
353  i = find_next_descriptor(buffer, size, USB_DT_ENDPOINT,
354  USB_DT_INTERFACE, &n);
355  alt->extralen = i;
356  if (n > 0)
357  dev_dbg(ddev, "skipped %d descriptor%s after %s\n",
358  n, plural(n), "interface");
359  buffer += i;
360  size -= i;
361 
362  /* Allocate space for the right(?) number of endpoints */
363  num_ep = num_ep_orig = alt->desc.bNumEndpoints;
364  alt->desc.bNumEndpoints = 0; /* Use as a counter */
365  if (num_ep > USB_MAXENDPOINTS) {
366  dev_warn(ddev, "too many endpoints for config %d interface %d "
367  "altsetting %d: %d, using maximum allowed: %d\n",
368  cfgno, inum, asnum, num_ep, USB_MAXENDPOINTS);
369  num_ep = USB_MAXENDPOINTS;
370  }
371 
372  if (num_ep > 0) {
373  /* Can't allocate 0 bytes */
374  len = sizeof(struct usb_host_endpoint) * num_ep;
375  alt->endpoint = kzalloc(len, GFP_KERNEL);
376  if (!alt->endpoint)
377  return -ENOMEM;
378  }
379 
380  /* Parse all the endpoint descriptors */
381  n = 0;
382  while (size > 0) {
383  if (((struct usb_descriptor_header *) buffer)->bDescriptorType
384  == USB_DT_INTERFACE)
385  break;
386  retval = usb_parse_endpoint(ddev, cfgno, inum, asnum, alt,
387  num_ep, buffer, size);
388  if (retval < 0)
389  return retval;
390  ++n;
391 
392  buffer += retval;
393  size -= retval;
394  }
395 
396  if (n != num_ep_orig)
397  dev_warn(ddev, "config %d interface %d altsetting %d has %d "
398  "endpoint descriptor%s, different from the interface "
399  "descriptor's value: %d\n",
400  cfgno, inum, asnum, n, plural(n), num_ep_orig);
401  return buffer - buffer0;
402 
403 skip_to_next_interface_descriptor:
404  i = find_next_descriptor(buffer, size, USB_DT_INTERFACE,
406  return buffer - buffer0 + i;
407 }
408 
409 static int usb_parse_configuration(struct usb_device *dev, int cfgidx,
410  struct usb_host_config *config, unsigned char *buffer, int size)
411 {
412  struct device *ddev = &dev->dev;
413  unsigned char *buffer0 = buffer;
414  int cfgno;
415  int nintf, nintf_orig;
416  int i, j, n;
417  struct usb_interface_cache *intfc;
418  unsigned char *buffer2;
419  int size2;
421  int len, retval;
422  u8 inums[USB_MAXINTERFACES], nalts[USB_MAXINTERFACES];
423  unsigned iad_num = 0;
424 
425  memcpy(&config->desc, buffer, USB_DT_CONFIG_SIZE);
426  if (config->desc.bDescriptorType != USB_DT_CONFIG ||
427  config->desc.bLength < USB_DT_CONFIG_SIZE) {
428  dev_err(ddev, "invalid descriptor for config index %d: "
429  "type = 0x%X, length = %d\n", cfgidx,
430  config->desc.bDescriptorType, config->desc.bLength);
431  return -EINVAL;
432  }
433  cfgno = config->desc.bConfigurationValue;
434 
435  buffer += config->desc.bLength;
436  size -= config->desc.bLength;
437 
438  nintf = nintf_orig = config->desc.bNumInterfaces;
439  if (nintf > USB_MAXINTERFACES) {
440  dev_warn(ddev, "config %d has too many interfaces: %d, "
441  "using maximum allowed: %d\n",
442  cfgno, nintf, USB_MAXINTERFACES);
443  nintf = USB_MAXINTERFACES;
444  }
445 
446  /* Go through the descriptors, checking their length and counting the
447  * number of altsettings for each interface */
448  n = 0;
449  for ((buffer2 = buffer, size2 = size);
450  size2 > 0;
451  (buffer2 += header->bLength, size2 -= header->bLength)) {
452 
453  if (size2 < sizeof(struct usb_descriptor_header)) {
454  dev_warn(ddev, "config %d descriptor has %d excess "
455  "byte%s, ignoring\n",
456  cfgno, size2, plural(size2));
457  break;
458  }
459 
460  header = (struct usb_descriptor_header *) buffer2;
461  if ((header->bLength > size2) || (header->bLength < 2)) {
462  dev_warn(ddev, "config %d has an invalid descriptor "
463  "of length %d, skipping remainder of the config\n",
464  cfgno, header->bLength);
465  break;
466  }
467 
468  if (header->bDescriptorType == USB_DT_INTERFACE) {
469  struct usb_interface_descriptor *d;
470  int inum;
471 
472  d = (struct usb_interface_descriptor *) header;
473  if (d->bLength < USB_DT_INTERFACE_SIZE) {
474  dev_warn(ddev, "config %d has an invalid "
475  "interface descriptor of length %d, "
476  "skipping\n", cfgno, d->bLength);
477  continue;
478  }
479 
480  inum = d->bInterfaceNumber;
481 
482  if ((dev->quirks & USB_QUIRK_HONOR_BNUMINTERFACES) &&
483  n >= nintf_orig) {
484  dev_warn(ddev, "config %d has more interface "
485  "descriptors, than it declares in "
486  "bNumInterfaces, ignoring interface "
487  "number: %d\n", cfgno, inum);
488  continue;
489  }
490 
491  if (inum >= nintf_orig)
492  dev_warn(ddev, "config %d has an invalid "
493  "interface number: %d but max is %d\n",
494  cfgno, inum, nintf_orig - 1);
495 
496  /* Have we already encountered this interface?
497  * Count its altsettings */
498  for (i = 0; i < n; ++i) {
499  if (inums[i] == inum)
500  break;
501  }
502  if (i < n) {
503  if (nalts[i] < 255)
504  ++nalts[i];
505  } else if (n < USB_MAXINTERFACES) {
506  inums[n] = inum;
507  nalts[n] = 1;
508  ++n;
509  }
510 
511  } else if (header->bDescriptorType ==
513  if (iad_num == USB_MAXIADS) {
514  dev_warn(ddev, "found more Interface "
515  "Association Descriptors "
516  "than allocated for in "
517  "configuration %d\n", cfgno);
518  } else {
519  config->intf_assoc[iad_num] =
521  *)header;
522  iad_num++;
523  }
524 
525  } else if (header->bDescriptorType == USB_DT_DEVICE ||
526  header->bDescriptorType == USB_DT_CONFIG)
527  dev_warn(ddev, "config %d contains an unexpected "
528  "descriptor of type 0x%X, skipping\n",
529  cfgno, header->bDescriptorType);
530 
531  } /* for ((buffer2 = buffer, size2 = size); ...) */
532  size = buffer2 - buffer;
533  config->desc.wTotalLength = cpu_to_le16(buffer2 - buffer0);
534 
535  if (n != nintf)
536  dev_warn(ddev, "config %d has %d interface%s, different from "
537  "the descriptor's value: %d\n",
538  cfgno, n, plural(n), nintf_orig);
539  else if (n == 0)
540  dev_warn(ddev, "config %d has no interfaces?\n", cfgno);
541  config->desc.bNumInterfaces = nintf = n;
542 
543  /* Check for missing interface numbers */
544  for (i = 0; i < nintf; ++i) {
545  for (j = 0; j < nintf; ++j) {
546  if (inums[j] == i)
547  break;
548  }
549  if (j >= nintf)
550  dev_warn(ddev, "config %d has no interface number "
551  "%d\n", cfgno, i);
552  }
553 
554  /* Allocate the usb_interface_caches and altsetting arrays */
555  for (i = 0; i < nintf; ++i) {
556  j = nalts[i];
557  if (j > USB_MAXALTSETTING) {
558  dev_warn(ddev, "too many alternate settings for "
559  "config %d interface %d: %d, "
560  "using maximum allowed: %d\n",
561  cfgno, inums[i], j, USB_MAXALTSETTING);
562  nalts[i] = j = USB_MAXALTSETTING;
563  }
564 
565  len = sizeof(*intfc) + sizeof(struct usb_host_interface) * j;
566  config->intf_cache[i] = intfc = kzalloc(len, GFP_KERNEL);
567  if (!intfc)
568  return -ENOMEM;
569  kref_init(&intfc->ref);
570  }
571 
572  /* FIXME: parse the BOS descriptor */
573 
574  /* Skip over any Class Specific or Vendor Specific descriptors;
575  * find the first interface descriptor */
576  config->extra = buffer;
577  i = find_next_descriptor(buffer, size, USB_DT_INTERFACE,
578  USB_DT_INTERFACE, &n);
579  config->extralen = i;
580  if (n > 0)
581  dev_dbg(ddev, "skipped %d descriptor%s after %s\n",
582  n, plural(n), "configuration");
583  buffer += i;
584  size -= i;
585 
586  /* Parse all the interface/altsetting descriptors */
587  while (size > 0) {
588  retval = usb_parse_interface(ddev, cfgno, config,
589  buffer, size, inums, nalts);
590  if (retval < 0)
591  return retval;
592 
593  buffer += retval;
594  size -= retval;
595  }
596 
597  /* Check for missing altsettings */
598  for (i = 0; i < nintf; ++i) {
599  intfc = config->intf_cache[i];
600  for (j = 0; j < intfc->num_altsetting; ++j) {
601  for (n = 0; n < intfc->num_altsetting; ++n) {
602  if (intfc->altsetting[n].desc.
603  bAlternateSetting == j)
604  break;
605  }
606  if (n >= intfc->num_altsetting)
607  dev_warn(ddev, "config %d interface %d has no "
608  "altsetting %d\n", cfgno, inums[i], j);
609  }
610  }
611 
612  return 0;
613 }
614 
615 /* hub-only!! ... and only exported for reset/reinit path.
616  * otherwise used internally on disconnect/destroy path
617  */
618 void usb_destroy_configuration(struct usb_device *dev)
619 {
620  int c, i;
621 
622  if (!dev->config)
623  return;
624 
625  if (dev->rawdescriptors) {
626  for (i = 0; i < dev->descriptor.bNumConfigurations; i++)
627  kfree(dev->rawdescriptors[i]);
628 
629  kfree(dev->rawdescriptors);
630  dev->rawdescriptors = NULL;
631  }
632 
633  for (c = 0; c < dev->descriptor.bNumConfigurations; c++) {
634  struct usb_host_config *cf = &dev->config[c];
635 
636  kfree(cf->string);
637  for (i = 0; i < cf->desc.bNumInterfaces; i++) {
638  if (cf->intf_cache[i])
639  kref_put(&cf->intf_cache[i]->ref,
641  }
642  }
643  kfree(dev->config);
644  dev->config = NULL;
645 }
646 
647 
648 /*
649  * Get the USB config descriptors, cache and parse'em
650  *
651  * hub-only!! ... and only in reset path, or usb_new_device()
652  * (used by real hubs and virtual root hubs)
653  *
654  * NOTE: if this is a WUSB device and is not authorized, we skip the
655  * whole thing. A non-authorized USB device has no
656  * configurations.
657  */
658 int usb_get_configuration(struct usb_device *dev)
659 {
660  struct device *ddev = &dev->dev;
661  int ncfg = dev->descriptor.bNumConfigurations;
662  int result = 0;
663  unsigned int cfgno, length;
664  unsigned char *bigbuffer;
665  struct usb_config_descriptor *desc;
666 
667  cfgno = 0;
668  if (dev->authorized == 0) /* Not really an error */
669  goto out_not_authorized;
670  result = -ENOMEM;
671  if (ncfg > USB_MAXCONFIG) {
672  dev_warn(ddev, "too many configurations: %d, "
673  "using maximum allowed: %d\n", ncfg, USB_MAXCONFIG);
674  dev->descriptor.bNumConfigurations = ncfg = USB_MAXCONFIG;
675  }
676 
677  if (ncfg < 1) {
678  dev_err(ddev, "no configurations\n");
679  return -EINVAL;
680  }
681 
682  length = ncfg * sizeof(struct usb_host_config);
683  dev->config = kzalloc(length, GFP_KERNEL);
684  if (!dev->config)
685  goto err2;
686 
687  length = ncfg * sizeof(char *);
688  dev->rawdescriptors = kzalloc(length, GFP_KERNEL);
689  if (!dev->rawdescriptors)
690  goto err2;
691 
693  if (!desc)
694  goto err2;
695 
696  result = 0;
697  for (; cfgno < ncfg; cfgno++) {
698  /* We grab just the first descriptor so we know how long
699  * the whole configuration is */
700  result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno,
701  desc, USB_DT_CONFIG_SIZE);
702  if (result < 0) {
703  dev_err(ddev, "unable to read config index %d "
704  "descriptor/%s: %d\n", cfgno, "start", result);
705  if (result != -EPIPE)
706  goto err;
707  dev_err(ddev, "chopping to %d config(s)\n", cfgno);
708  dev->descriptor.bNumConfigurations = cfgno;
709  break;
710  } else if (result < 4) {
711  dev_err(ddev, "config index %d descriptor too short "
712  "(expected %i, got %i)\n", cfgno,
713  USB_DT_CONFIG_SIZE, result);
714  result = -EINVAL;
715  goto err;
716  }
717  length = max((int) le16_to_cpu(desc->wTotalLength),
719 
720  /* Now that we know the length, get the whole thing */
721  bigbuffer = kmalloc(length, GFP_KERNEL);
722  if (!bigbuffer) {
723  result = -ENOMEM;
724  goto err;
725  }
726  result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno,
727  bigbuffer, length);
728  if (result < 0) {
729  dev_err(ddev, "unable to read config index %d "
730  "descriptor/%s\n", cfgno, "all");
731  kfree(bigbuffer);
732  goto err;
733  }
734  if (result < length) {
735  dev_warn(ddev, "config index %d descriptor too short "
736  "(expected %i, got %i)\n", cfgno, length, result);
737  length = result;
738  }
739 
740  dev->rawdescriptors[cfgno] = bigbuffer;
741 
742  result = usb_parse_configuration(dev, cfgno,
743  &dev->config[cfgno], bigbuffer, length);
744  if (result < 0) {
745  ++cfgno;
746  goto err;
747  }
748  }
749  result = 0;
750 
751 err:
752  kfree(desc);
753 out_not_authorized:
754  dev->descriptor.bNumConfigurations = cfgno;
755 err2:
756  if (result == -ENOMEM)
757  dev_err(ddev, "out of memory\n");
758  return result;
759 }
760 
761 void usb_release_bos_descriptor(struct usb_device *dev)
762 {
763  if (dev->bos) {
764  kfree(dev->bos->desc);
765  kfree(dev->bos);
766  dev->bos = NULL;
767  }
768 }
769 
770 /* Get BOS descriptor set */
771 int usb_get_bos_descriptor(struct usb_device *dev)
772 {
773  struct device *ddev = &dev->dev;
774  struct usb_bos_descriptor *bos;
775  struct usb_dev_cap_header *cap;
776  unsigned char *buffer;
777  int length, total_len, num, i;
778  int ret;
779 
780  bos = kzalloc(sizeof(struct usb_bos_descriptor), GFP_KERNEL);
781  if (!bos)
782  return -ENOMEM;
783 
784  /* Get BOS descriptor */
785  ret = usb_get_descriptor(dev, USB_DT_BOS, 0, bos, USB_DT_BOS_SIZE);
786  if (ret < USB_DT_BOS_SIZE) {
787  dev_err(ddev, "unable to get BOS descriptor\n");
788  if (ret >= 0)
789  ret = -ENOMSG;
790  kfree(bos);
791  return ret;
792  }
793 
794  length = bos->bLength;
795  total_len = le16_to_cpu(bos->wTotalLength);
796  num = bos->bNumDeviceCaps;
797  kfree(bos);
798  if (total_len < length)
799  return -EINVAL;
800 
801  dev->bos = kzalloc(sizeof(struct usb_host_bos), GFP_KERNEL);
802  if (!dev->bos)
803  return -ENOMEM;
804 
805  /* Now let's get the whole BOS descriptor set */
806  buffer = kzalloc(total_len, GFP_KERNEL);
807  if (!buffer) {
808  ret = -ENOMEM;
809  goto err;
810  }
811  dev->bos->desc = (struct usb_bos_descriptor *)buffer;
812 
813  ret = usb_get_descriptor(dev, USB_DT_BOS, 0, buffer, total_len);
814  if (ret < total_len) {
815  dev_err(ddev, "unable to get BOS descriptor set\n");
816  if (ret >= 0)
817  ret = -ENOMSG;
818  goto err;
819  }
820  total_len -= length;
821 
822  for (i = 0; i < num; i++) {
823  buffer += length;
824  cap = (struct usb_dev_cap_header *)buffer;
825  length = cap->bLength;
826 
827  if (total_len < length)
828  break;
829  total_len -= length;
830 
832  dev_warn(ddev, "descriptor type invalid, skip\n");
833  continue;
834  }
835 
836  switch (cap->bDevCapabilityType) {
838  /* Wireless USB cap descriptor is handled by wusb */
839  break;
840  case USB_CAP_TYPE_EXT:
841  dev->bos->ext_cap =
842  (struct usb_ext_cap_descriptor *)buffer;
843  break;
844  case USB_SS_CAP_TYPE:
845  dev->bos->ss_cap =
846  (struct usb_ss_cap_descriptor *)buffer;
847  break;
848  case CONTAINER_ID_TYPE:
849  dev->bos->ss_id =
850  (struct usb_ss_container_id_descriptor *)buffer;
851  break;
852  default:
853  break;
854  }
855  }
856 
857  return 0;
858 
859 err:
861  return ret;
862 }