]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/usb/core/hcd.c
USB: Set usb port's DeviceRemovable according acpi information
[karo-tx-linux.git] / drivers / usb / core / hcd.c
1 /*
2  * (C) Copyright Linus Torvalds 1999
3  * (C) Copyright Johannes Erdfelt 1999-2001
4  * (C) Copyright Andreas Gal 1999
5  * (C) Copyright Gregory P. Smith 1999
6  * (C) Copyright Deti Fliegl 1999
7  * (C) Copyright Randy Dunlap 2000
8  * (C) Copyright David Brownell 2000-2002
9  * 
10  * This program is free software; you can redistribute it and/or modify it
11  * under the terms of the GNU General Public License as published by the
12  * Free Software Foundation; either version 2 of the License, or (at your
13  * option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful, but
16  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
18  * for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software Foundation,
22  * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23  */
24
25 #include <linux/bcd.h>
26 #include <linux/module.h>
27 #include <linux/version.h>
28 #include <linux/kernel.h>
29 #include <linux/slab.h>
30 #include <linux/completion.h>
31 #include <linux/utsname.h>
32 #include <linux/mm.h>
33 #include <asm/io.h>
34 #include <linux/device.h>
35 #include <linux/dma-mapping.h>
36 #include <linux/mutex.h>
37 #include <asm/irq.h>
38 #include <asm/byteorder.h>
39 #include <asm/unaligned.h>
40 #include <linux/platform_device.h>
41 #include <linux/workqueue.h>
42
43 #include <linux/usb.h>
44 #include <linux/usb/hcd.h>
45
46 #include "usb.h"
47
48
49 /*-------------------------------------------------------------------------*/
50
51 /*
52  * USB Host Controller Driver framework
53  *
54  * Plugs into usbcore (usb_bus) and lets HCDs share code, minimizing
55  * HCD-specific behaviors/bugs.
56  *
57  * This does error checks, tracks devices and urbs, and delegates to a
58  * "hc_driver" only for code (and data) that really needs to know about
59  * hardware differences.  That includes root hub registers, i/o queues,
60  * and so on ... but as little else as possible.
61  *
62  * Shared code includes most of the "root hub" code (these are emulated,
63  * though each HC's hardware works differently) and PCI glue, plus request
64  * tracking overhead.  The HCD code should only block on spinlocks or on
65  * hardware handshaking; blocking on software events (such as other kernel
66  * threads releasing resources, or completing actions) is all generic.
67  *
68  * Happens the USB 2.0 spec says this would be invisible inside the "USBD",
69  * and includes mostly a "HCDI" (HCD Interface) along with some APIs used
70  * only by the hub driver ... and that neither should be seen or used by
71  * usb client device drivers.
72  *
73  * Contributors of ideas or unattributed patches include: David Brownell,
74  * Roman Weissgaerber, Rory Bolt, Greg Kroah-Hartman, ...
75  *
76  * HISTORY:
77  * 2002-02-21   Pull in most of the usb_bus support from usb.c; some
78  *              associated cleanup.  "usb_hcd" still != "usb_bus".
79  * 2001-12-12   Initial patch version for Linux 2.5.1 kernel.
80  */
81
82 /*-------------------------------------------------------------------------*/
83
84 /* Keep track of which host controller drivers are loaded */
85 unsigned long usb_hcds_loaded;
86 EXPORT_SYMBOL_GPL(usb_hcds_loaded);
87
88 /* host controllers we manage */
89 LIST_HEAD (usb_bus_list);
90 EXPORT_SYMBOL_GPL (usb_bus_list);
91
92 /* used when allocating bus numbers */
93 #define USB_MAXBUS              64
94 struct usb_busmap {
95         unsigned long busmap [USB_MAXBUS / (8*sizeof (unsigned long))];
96 };
97 static struct usb_busmap busmap;
98
99 /* used when updating list of hcds */
100 DEFINE_MUTEX(usb_bus_list_lock);        /* exported only for usbfs */
101 EXPORT_SYMBOL_GPL (usb_bus_list_lock);
102
103 /* used for controlling access to virtual root hubs */
104 static DEFINE_SPINLOCK(hcd_root_hub_lock);
105
106 /* used when updating an endpoint's URB list */
107 static DEFINE_SPINLOCK(hcd_urb_list_lock);
108
109 /* used to protect against unlinking URBs after the device is gone */
110 static DEFINE_SPINLOCK(hcd_urb_unlink_lock);
111
112 /* wait queue for synchronous unlinks */
113 DECLARE_WAIT_QUEUE_HEAD(usb_kill_urb_queue);
114
115 static inline int is_root_hub(struct usb_device *udev)
116 {
117         return (udev->parent == NULL);
118 }
119
120 /*-------------------------------------------------------------------------*/
121
122 /*
123  * Sharable chunks of root hub code.
124  */
125
126 /*-------------------------------------------------------------------------*/
127 #define KERNEL_REL      bin2bcd(((LINUX_VERSION_CODE >> 16) & 0x0ff))
128 #define KERNEL_VER      bin2bcd(((LINUX_VERSION_CODE >> 8) & 0x0ff))
129
130 /* usb 3.0 root hub device descriptor */
131 static const u8 usb3_rh_dev_descriptor[18] = {
132         0x12,       /*  __u8  bLength; */
133         0x01,       /*  __u8  bDescriptorType; Device */
134         0x00, 0x03, /*  __le16 bcdUSB; v3.0 */
135
136         0x09,       /*  __u8  bDeviceClass; HUB_CLASSCODE */
137         0x00,       /*  __u8  bDeviceSubClass; */
138         0x03,       /*  __u8  bDeviceProtocol; USB 3.0 hub */
139         0x09,       /*  __u8  bMaxPacketSize0; 2^9 = 512 Bytes */
140
141         0x6b, 0x1d, /*  __le16 idVendor; Linux Foundation 0x1d6b */
142         0x03, 0x00, /*  __le16 idProduct; device 0x0003 */
143         KERNEL_VER, KERNEL_REL, /*  __le16 bcdDevice */
144
145         0x03,       /*  __u8  iManufacturer; */
146         0x02,       /*  __u8  iProduct; */
147         0x01,       /*  __u8  iSerialNumber; */
148         0x01        /*  __u8  bNumConfigurations; */
149 };
150
151 /* usb 2.0 root hub device descriptor */
152 static const u8 usb2_rh_dev_descriptor [18] = {
153         0x12,       /*  __u8  bLength; */
154         0x01,       /*  __u8  bDescriptorType; Device */
155         0x00, 0x02, /*  __le16 bcdUSB; v2.0 */
156
157         0x09,       /*  __u8  bDeviceClass; HUB_CLASSCODE */
158         0x00,       /*  __u8  bDeviceSubClass; */
159         0x00,       /*  __u8  bDeviceProtocol; [ usb 2.0 no TT ] */
160         0x40,       /*  __u8  bMaxPacketSize0; 64 Bytes */
161
162         0x6b, 0x1d, /*  __le16 idVendor; Linux Foundation 0x1d6b */
163         0x02, 0x00, /*  __le16 idProduct; device 0x0002 */
164         KERNEL_VER, KERNEL_REL, /*  __le16 bcdDevice */
165
166         0x03,       /*  __u8  iManufacturer; */
167         0x02,       /*  __u8  iProduct; */
168         0x01,       /*  __u8  iSerialNumber; */
169         0x01        /*  __u8  bNumConfigurations; */
170 };
171
172 /* no usb 2.0 root hub "device qualifier" descriptor: one speed only */
173
174 /* usb 1.1 root hub device descriptor */
175 static const u8 usb11_rh_dev_descriptor [18] = {
176         0x12,       /*  __u8  bLength; */
177         0x01,       /*  __u8  bDescriptorType; Device */
178         0x10, 0x01, /*  __le16 bcdUSB; v1.1 */
179
180         0x09,       /*  __u8  bDeviceClass; HUB_CLASSCODE */
181         0x00,       /*  __u8  bDeviceSubClass; */
182         0x00,       /*  __u8  bDeviceProtocol; [ low/full speeds only ] */
183         0x40,       /*  __u8  bMaxPacketSize0; 64 Bytes */
184
185         0x6b, 0x1d, /*  __le16 idVendor; Linux Foundation 0x1d6b */
186         0x01, 0x00, /*  __le16 idProduct; device 0x0001 */
187         KERNEL_VER, KERNEL_REL, /*  __le16 bcdDevice */
188
189         0x03,       /*  __u8  iManufacturer; */
190         0x02,       /*  __u8  iProduct; */
191         0x01,       /*  __u8  iSerialNumber; */
192         0x01        /*  __u8  bNumConfigurations; */
193 };
194
195
196 /*-------------------------------------------------------------------------*/
197
198 /* Configuration descriptors for our root hubs */
199
200 static const u8 fs_rh_config_descriptor [] = {
201
202         /* one configuration */
203         0x09,       /*  __u8  bLength; */
204         0x02,       /*  __u8  bDescriptorType; Configuration */
205         0x19, 0x00, /*  __le16 wTotalLength; */
206         0x01,       /*  __u8  bNumInterfaces; (1) */
207         0x01,       /*  __u8  bConfigurationValue; */
208         0x00,       /*  __u8  iConfiguration; */
209         0xc0,       /*  __u8  bmAttributes; 
210                                  Bit 7: must be set,
211                                      6: Self-powered,
212                                      5: Remote wakeup,
213                                      4..0: resvd */
214         0x00,       /*  __u8  MaxPower; */
215       
216         /* USB 1.1:
217          * USB 2.0, single TT organization (mandatory):
218          *      one interface, protocol 0
219          *
220          * USB 2.0, multiple TT organization (optional):
221          *      two interfaces, protocols 1 (like single TT)
222          *      and 2 (multiple TT mode) ... config is
223          *      sometimes settable
224          *      NOT IMPLEMENTED
225          */
226
227         /* one interface */
228         0x09,       /*  __u8  if_bLength; */
229         0x04,       /*  __u8  if_bDescriptorType; Interface */
230         0x00,       /*  __u8  if_bInterfaceNumber; */
231         0x00,       /*  __u8  if_bAlternateSetting; */
232         0x01,       /*  __u8  if_bNumEndpoints; */
233         0x09,       /*  __u8  if_bInterfaceClass; HUB_CLASSCODE */
234         0x00,       /*  __u8  if_bInterfaceSubClass; */
235         0x00,       /*  __u8  if_bInterfaceProtocol; [usb1.1 or single tt] */
236         0x00,       /*  __u8  if_iInterface; */
237      
238         /* one endpoint (status change endpoint) */
239         0x07,       /*  __u8  ep_bLength; */
240         0x05,       /*  __u8  ep_bDescriptorType; Endpoint */
241         0x81,       /*  __u8  ep_bEndpointAddress; IN Endpoint 1 */
242         0x03,       /*  __u8  ep_bmAttributes; Interrupt */
243         0x02, 0x00, /*  __le16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8) */
244         0xff        /*  __u8  ep_bInterval; (255ms -- usb 2.0 spec) */
245 };
246
247 static const u8 hs_rh_config_descriptor [] = {
248
249         /* one configuration */
250         0x09,       /*  __u8  bLength; */
251         0x02,       /*  __u8  bDescriptorType; Configuration */
252         0x19, 0x00, /*  __le16 wTotalLength; */
253         0x01,       /*  __u8  bNumInterfaces; (1) */
254         0x01,       /*  __u8  bConfigurationValue; */
255         0x00,       /*  __u8  iConfiguration; */
256         0xc0,       /*  __u8  bmAttributes; 
257                                  Bit 7: must be set,
258                                      6: Self-powered,
259                                      5: Remote wakeup,
260                                      4..0: resvd */
261         0x00,       /*  __u8  MaxPower; */
262       
263         /* USB 1.1:
264          * USB 2.0, single TT organization (mandatory):
265          *      one interface, protocol 0
266          *
267          * USB 2.0, multiple TT organization (optional):
268          *      two interfaces, protocols 1 (like single TT)
269          *      and 2 (multiple TT mode) ... config is
270          *      sometimes settable
271          *      NOT IMPLEMENTED
272          */
273
274         /* one interface */
275         0x09,       /*  __u8  if_bLength; */
276         0x04,       /*  __u8  if_bDescriptorType; Interface */
277         0x00,       /*  __u8  if_bInterfaceNumber; */
278         0x00,       /*  __u8  if_bAlternateSetting; */
279         0x01,       /*  __u8  if_bNumEndpoints; */
280         0x09,       /*  __u8  if_bInterfaceClass; HUB_CLASSCODE */
281         0x00,       /*  __u8  if_bInterfaceSubClass; */
282         0x00,       /*  __u8  if_bInterfaceProtocol; [usb1.1 or single tt] */
283         0x00,       /*  __u8  if_iInterface; */
284      
285         /* one endpoint (status change endpoint) */
286         0x07,       /*  __u8  ep_bLength; */
287         0x05,       /*  __u8  ep_bDescriptorType; Endpoint */
288         0x81,       /*  __u8  ep_bEndpointAddress; IN Endpoint 1 */
289         0x03,       /*  __u8  ep_bmAttributes; Interrupt */
290                     /* __le16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8)
291                      * see hub.c:hub_configure() for details. */
292         (USB_MAXCHILDREN + 1 + 7) / 8, 0x00,
293         0x0c        /*  __u8  ep_bInterval; (256ms -- usb 2.0 spec) */
294 };
295
296 static const u8 ss_rh_config_descriptor[] = {
297         /* one configuration */
298         0x09,       /*  __u8  bLength; */
299         0x02,       /*  __u8  bDescriptorType; Configuration */
300         0x1f, 0x00, /*  __le16 wTotalLength; */
301         0x01,       /*  __u8  bNumInterfaces; (1) */
302         0x01,       /*  __u8  bConfigurationValue; */
303         0x00,       /*  __u8  iConfiguration; */
304         0xc0,       /*  __u8  bmAttributes;
305                                  Bit 7: must be set,
306                                      6: Self-powered,
307                                      5: Remote wakeup,
308                                      4..0: resvd */
309         0x00,       /*  __u8  MaxPower; */
310
311         /* one interface */
312         0x09,       /*  __u8  if_bLength; */
313         0x04,       /*  __u8  if_bDescriptorType; Interface */
314         0x00,       /*  __u8  if_bInterfaceNumber; */
315         0x00,       /*  __u8  if_bAlternateSetting; */
316         0x01,       /*  __u8  if_bNumEndpoints; */
317         0x09,       /*  __u8  if_bInterfaceClass; HUB_CLASSCODE */
318         0x00,       /*  __u8  if_bInterfaceSubClass; */
319         0x00,       /*  __u8  if_bInterfaceProtocol; */
320         0x00,       /*  __u8  if_iInterface; */
321
322         /* one endpoint (status change endpoint) */
323         0x07,       /*  __u8  ep_bLength; */
324         0x05,       /*  __u8  ep_bDescriptorType; Endpoint */
325         0x81,       /*  __u8  ep_bEndpointAddress; IN Endpoint 1 */
326         0x03,       /*  __u8  ep_bmAttributes; Interrupt */
327                     /* __le16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8)
328                      * see hub.c:hub_configure() for details. */
329         (USB_MAXCHILDREN + 1 + 7) / 8, 0x00,
330         0x0c,       /*  __u8  ep_bInterval; (256ms -- usb 2.0 spec) */
331
332         /* one SuperSpeed endpoint companion descriptor */
333         0x06,        /* __u8 ss_bLength */
334         0x30,        /* __u8 ss_bDescriptorType; SuperSpeed EP Companion */
335         0x00,        /* __u8 ss_bMaxBurst; allows 1 TX between ACKs */
336         0x00,        /* __u8 ss_bmAttributes; 1 packet per service interval */
337         0x02, 0x00   /* __le16 ss_wBytesPerInterval; 15 bits for max 15 ports */
338 };
339
340 /* authorized_default behaviour:
341  * -1 is authorized for all devices except wireless (old behaviour)
342  * 0 is unauthorized for all devices
343  * 1 is authorized for all devices
344  */
345 static int authorized_default = -1;
346 module_param(authorized_default, int, S_IRUGO|S_IWUSR);
347 MODULE_PARM_DESC(authorized_default,
348                 "Default USB device authorization: 0 is not authorized, 1 is "
349                 "authorized, -1 is authorized except for wireless USB (default, "
350                 "old behaviour");
351 /*-------------------------------------------------------------------------*/
352
353 /**
354  * ascii2desc() - Helper routine for producing UTF-16LE string descriptors
355  * @s: Null-terminated ASCII (actually ISO-8859-1) string
356  * @buf: Buffer for USB string descriptor (header + UTF-16LE)
357  * @len: Length (in bytes; may be odd) of descriptor buffer.
358  *
359  * The return value is the number of bytes filled in: 2 + 2*strlen(s) or
360  * buflen, whichever is less.
361  *
362  * USB String descriptors can contain at most 126 characters; input
363  * strings longer than that are truncated.
364  */
365 static unsigned
366 ascii2desc(char const *s, u8 *buf, unsigned len)
367 {
368         unsigned n, t = 2 + 2*strlen(s);
369
370         if (t > 254)
371                 t = 254;        /* Longest possible UTF string descriptor */
372         if (len > t)
373                 len = t;
374
375         t += USB_DT_STRING << 8;        /* Now t is first 16 bits to store */
376
377         n = len;
378         while (n--) {
379                 *buf++ = t;
380                 if (!n--)
381                         break;
382                 *buf++ = t >> 8;
383                 t = (unsigned char)*s++;
384         }
385         return len;
386 }
387
388 /**
389  * rh_string() - provides string descriptors for root hub
390  * @id: the string ID number (0: langids, 1: serial #, 2: product, 3: vendor)
391  * @hcd: the host controller for this root hub
392  * @data: buffer for output packet
393  * @len: length of the provided buffer
394  *
395  * Produces either a manufacturer, product or serial number string for the
396  * virtual root hub device.
397  * Returns the number of bytes filled in: the length of the descriptor or
398  * of the provided buffer, whichever is less.
399  */
400 static unsigned
401 rh_string(int id, struct usb_hcd const *hcd, u8 *data, unsigned len)
402 {
403         char buf[100];
404         char const *s;
405         static char const langids[4] = {4, USB_DT_STRING, 0x09, 0x04};
406
407         // language ids
408         switch (id) {
409         case 0:
410                 /* Array of LANGID codes (0x0409 is MSFT-speak for "en-us") */
411                 /* See http://www.usb.org/developers/docs/USB_LANGIDs.pdf */
412                 if (len > 4)
413                         len = 4;
414                 memcpy(data, langids, len);
415                 return len;
416         case 1:
417                 /* Serial number */
418                 s = hcd->self.bus_name;
419                 break;
420         case 2:
421                 /* Product name */
422                 s = hcd->product_desc;
423                 break;
424         case 3:
425                 /* Manufacturer */
426                 snprintf (buf, sizeof buf, "%s %s %s", init_utsname()->sysname,
427                         init_utsname()->release, hcd->driver->description);
428                 s = buf;
429                 break;
430         default:
431                 /* Can't happen; caller guarantees it */
432                 return 0;
433         }
434
435         return ascii2desc(s, data, len);
436 }
437
438
439 /* Root hub control transfers execute synchronously */
440 static int rh_call_control (struct usb_hcd *hcd, struct urb *urb)
441 {
442         struct usb_ctrlrequest *cmd;
443         u16             typeReq, wValue, wIndex, wLength;
444         u8              *ubuf = urb->transfer_buffer;
445         /*
446          * tbuf should be as big as the BOS descriptor and
447          * the USB hub descriptor.
448          */
449         u8              tbuf[USB_DT_BOS_SIZE + USB_DT_USB_SS_CAP_SIZE]
450                 __attribute__((aligned(4)));
451         const u8        *bufp = tbuf;
452         unsigned        len = 0;
453         int             status;
454         u8              patch_wakeup = 0;
455         u8              patch_protocol = 0;
456
457         might_sleep();
458
459         spin_lock_irq(&hcd_root_hub_lock);
460         status = usb_hcd_link_urb_to_ep(hcd, urb);
461         spin_unlock_irq(&hcd_root_hub_lock);
462         if (status)
463                 return status;
464         urb->hcpriv = hcd;      /* Indicate it's queued */
465
466         cmd = (struct usb_ctrlrequest *) urb->setup_packet;
467         typeReq  = (cmd->bRequestType << 8) | cmd->bRequest;
468         wValue   = le16_to_cpu (cmd->wValue);
469         wIndex   = le16_to_cpu (cmd->wIndex);
470         wLength  = le16_to_cpu (cmd->wLength);
471
472         if (wLength > urb->transfer_buffer_length)
473                 goto error;
474
475         urb->actual_length = 0;
476         switch (typeReq) {
477
478         /* DEVICE REQUESTS */
479
480         /* The root hub's remote wakeup enable bit is implemented using
481          * driver model wakeup flags.  If this system supports wakeup
482          * through USB, userspace may change the default "allow wakeup"
483          * policy through sysfs or these calls.
484          *
485          * Most root hubs support wakeup from downstream devices, for
486          * runtime power management (disabling USB clocks and reducing
487          * VBUS power usage).  However, not all of them do so; silicon,
488          * board, and BIOS bugs here are not uncommon, so these can't
489          * be treated quite like external hubs.
490          *
491          * Likewise, not all root hubs will pass wakeup events upstream,
492          * to wake up the whole system.  So don't assume root hub and
493          * controller capabilities are identical.
494          */
495
496         case DeviceRequest | USB_REQ_GET_STATUS:
497                 tbuf [0] = (device_may_wakeup(&hcd->self.root_hub->dev)
498                                         << USB_DEVICE_REMOTE_WAKEUP)
499                                 | (1 << USB_DEVICE_SELF_POWERED);
500                 tbuf [1] = 0;
501                 len = 2;
502                 break;
503         case DeviceOutRequest | USB_REQ_CLEAR_FEATURE:
504                 if (wValue == USB_DEVICE_REMOTE_WAKEUP)
505                         device_set_wakeup_enable(&hcd->self.root_hub->dev, 0);
506                 else
507                         goto error;
508                 break;
509         case DeviceOutRequest | USB_REQ_SET_FEATURE:
510                 if (device_can_wakeup(&hcd->self.root_hub->dev)
511                                 && wValue == USB_DEVICE_REMOTE_WAKEUP)
512                         device_set_wakeup_enable(&hcd->self.root_hub->dev, 1);
513                 else
514                         goto error;
515                 break;
516         case DeviceRequest | USB_REQ_GET_CONFIGURATION:
517                 tbuf [0] = 1;
518                 len = 1;
519                         /* FALLTHROUGH */
520         case DeviceOutRequest | USB_REQ_SET_CONFIGURATION:
521                 break;
522         case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
523                 switch (wValue & 0xff00) {
524                 case USB_DT_DEVICE << 8:
525                         switch (hcd->speed) {
526                         case HCD_USB3:
527                                 bufp = usb3_rh_dev_descriptor;
528                                 break;
529                         case HCD_USB2:
530                                 bufp = usb2_rh_dev_descriptor;
531                                 break;
532                         case HCD_USB11:
533                                 bufp = usb11_rh_dev_descriptor;
534                                 break;
535                         default:
536                                 goto error;
537                         }
538                         len = 18;
539                         if (hcd->has_tt)
540                                 patch_protocol = 1;
541                         break;
542                 case USB_DT_CONFIG << 8:
543                         switch (hcd->speed) {
544                         case HCD_USB3:
545                                 bufp = ss_rh_config_descriptor;
546                                 len = sizeof ss_rh_config_descriptor;
547                                 break;
548                         case HCD_USB2:
549                                 bufp = hs_rh_config_descriptor;
550                                 len = sizeof hs_rh_config_descriptor;
551                                 break;
552                         case HCD_USB11:
553                                 bufp = fs_rh_config_descriptor;
554                                 len = sizeof fs_rh_config_descriptor;
555                                 break;
556                         default:
557                                 goto error;
558                         }
559                         if (device_can_wakeup(&hcd->self.root_hub->dev))
560                                 patch_wakeup = 1;
561                         break;
562                 case USB_DT_STRING << 8:
563                         if ((wValue & 0xff) < 4)
564                                 urb->actual_length = rh_string(wValue & 0xff,
565                                                 hcd, ubuf, wLength);
566                         else /* unsupported IDs --> "protocol stall" */
567                                 goto error;
568                         break;
569                 case USB_DT_BOS << 8:
570                         goto nongeneric;
571                 default:
572                         goto error;
573                 }
574                 break;
575         case DeviceRequest | USB_REQ_GET_INTERFACE:
576                 tbuf [0] = 0;
577                 len = 1;
578                         /* FALLTHROUGH */
579         case DeviceOutRequest | USB_REQ_SET_INTERFACE:
580                 break;
581         case DeviceOutRequest | USB_REQ_SET_ADDRESS:
582                 // wValue == urb->dev->devaddr
583                 dev_dbg (hcd->self.controller, "root hub device address %d\n",
584                         wValue);
585                 break;
586
587         /* INTERFACE REQUESTS (no defined feature/status flags) */
588
589         /* ENDPOINT REQUESTS */
590
591         case EndpointRequest | USB_REQ_GET_STATUS:
592                 // ENDPOINT_HALT flag
593                 tbuf [0] = 0;
594                 tbuf [1] = 0;
595                 len = 2;
596                         /* FALLTHROUGH */
597         case EndpointOutRequest | USB_REQ_CLEAR_FEATURE:
598         case EndpointOutRequest | USB_REQ_SET_FEATURE:
599                 dev_dbg (hcd->self.controller, "no endpoint features yet\n");
600                 break;
601
602         /* CLASS REQUESTS (and errors) */
603
604         default:
605 nongeneric:
606                 /* non-generic request */
607                 switch (typeReq) {
608                 case GetHubStatus:
609                 case GetPortStatus:
610                         len = 4;
611                         break;
612                 case GetHubDescriptor:
613                         len = sizeof (struct usb_hub_descriptor);
614                         break;
615                 case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
616                         /* len is returned by hub_control */
617                         break;
618                 }
619                 status = hcd->driver->hub_control (hcd,
620                         typeReq, wValue, wIndex,
621                         tbuf, wLength);
622
623                 if (typeReq == GetHubDescriptor)
624                         usb_hub_adjust_deviceremovable(hcd->self.root_hub,
625                                 (struct usb_hub_descriptor *)tbuf);
626                 break;
627 error:
628                 /* "protocol stall" on error */
629                 status = -EPIPE;
630         }
631
632         if (status < 0) {
633                 len = 0;
634                 if (status != -EPIPE) {
635                         dev_dbg (hcd->self.controller,
636                                 "CTRL: TypeReq=0x%x val=0x%x "
637                                 "idx=0x%x len=%d ==> %d\n",
638                                 typeReq, wValue, wIndex,
639                                 wLength, status);
640                 }
641         } else if (status > 0) {
642                 /* hub_control may return the length of data copied. */
643                 len = status;
644                 status = 0;
645         }
646         if (len) {
647                 if (urb->transfer_buffer_length < len)
648                         len = urb->transfer_buffer_length;
649                 urb->actual_length = len;
650                 // always USB_DIR_IN, toward host
651                 memcpy (ubuf, bufp, len);
652
653                 /* report whether RH hardware supports remote wakeup */
654                 if (patch_wakeup &&
655                                 len > offsetof (struct usb_config_descriptor,
656                                                 bmAttributes))
657                         ((struct usb_config_descriptor *)ubuf)->bmAttributes
658                                 |= USB_CONFIG_ATT_WAKEUP;
659
660                 /* report whether RH hardware has an integrated TT */
661                 if (patch_protocol &&
662                                 len > offsetof(struct usb_device_descriptor,
663                                                 bDeviceProtocol))
664                         ((struct usb_device_descriptor *) ubuf)->
665                                 bDeviceProtocol = USB_HUB_PR_HS_SINGLE_TT;
666         }
667
668         /* any errors get returned through the urb completion */
669         spin_lock_irq(&hcd_root_hub_lock);
670         usb_hcd_unlink_urb_from_ep(hcd, urb);
671
672         /* This peculiar use of spinlocks echoes what real HC drivers do.
673          * Avoiding calls to local_irq_disable/enable makes the code
674          * RT-friendly.
675          */
676         spin_unlock(&hcd_root_hub_lock);
677         usb_hcd_giveback_urb(hcd, urb, status);
678         spin_lock(&hcd_root_hub_lock);
679
680         spin_unlock_irq(&hcd_root_hub_lock);
681         return 0;
682 }
683
684 /*-------------------------------------------------------------------------*/
685
686 /*
687  * Root Hub interrupt transfers are polled using a timer if the
688  * driver requests it; otherwise the driver is responsible for
689  * calling usb_hcd_poll_rh_status() when an event occurs.
690  *
691  * Completions are called in_interrupt(), but they may or may not
692  * be in_irq().
693  */
694 void usb_hcd_poll_rh_status(struct usb_hcd *hcd)
695 {
696         struct urb      *urb;
697         int             length;
698         unsigned long   flags;
699         char            buffer[6];      /* Any root hubs with > 31 ports? */
700
701         if (unlikely(!hcd->rh_pollable))
702                 return;
703         if (!hcd->uses_new_polling && !hcd->status_urb)
704                 return;
705
706         length = hcd->driver->hub_status_data(hcd, buffer);
707         if (length > 0) {
708
709                 /* try to complete the status urb */
710                 spin_lock_irqsave(&hcd_root_hub_lock, flags);
711                 urb = hcd->status_urb;
712                 if (urb) {
713                         clear_bit(HCD_FLAG_POLL_PENDING, &hcd->flags);
714                         hcd->status_urb = NULL;
715                         urb->actual_length = length;
716                         memcpy(urb->transfer_buffer, buffer, length);
717
718                         usb_hcd_unlink_urb_from_ep(hcd, urb);
719                         spin_unlock(&hcd_root_hub_lock);
720                         usb_hcd_giveback_urb(hcd, urb, 0);
721                         spin_lock(&hcd_root_hub_lock);
722                 } else {
723                         length = 0;
724                         set_bit(HCD_FLAG_POLL_PENDING, &hcd->flags);
725                 }
726                 spin_unlock_irqrestore(&hcd_root_hub_lock, flags);
727         }
728
729         /* The USB 2.0 spec says 256 ms.  This is close enough and won't
730          * exceed that limit if HZ is 100. The math is more clunky than
731          * maybe expected, this is to make sure that all timers for USB devices
732          * fire at the same time to give the CPU a break in between */
733         if (hcd->uses_new_polling ? HCD_POLL_RH(hcd) :
734                         (length == 0 && hcd->status_urb != NULL))
735                 mod_timer (&hcd->rh_timer, (jiffies/(HZ/4) + 1) * (HZ/4));
736 }
737 EXPORT_SYMBOL_GPL(usb_hcd_poll_rh_status);
738
739 /* timer callback */
740 static void rh_timer_func (unsigned long _hcd)
741 {
742         usb_hcd_poll_rh_status((struct usb_hcd *) _hcd);
743 }
744
745 /*-------------------------------------------------------------------------*/
746
747 static int rh_queue_status (struct usb_hcd *hcd, struct urb *urb)
748 {
749         int             retval;
750         unsigned long   flags;
751         unsigned        len = 1 + (urb->dev->maxchild / 8);
752
753         spin_lock_irqsave (&hcd_root_hub_lock, flags);
754         if (hcd->status_urb || urb->transfer_buffer_length < len) {
755                 dev_dbg (hcd->self.controller, "not queuing rh status urb\n");
756                 retval = -EINVAL;
757                 goto done;
758         }
759
760         retval = usb_hcd_link_urb_to_ep(hcd, urb);
761         if (retval)
762                 goto done;
763
764         hcd->status_urb = urb;
765         urb->hcpriv = hcd;      /* indicate it's queued */
766         if (!hcd->uses_new_polling)
767                 mod_timer(&hcd->rh_timer, (jiffies/(HZ/4) + 1) * (HZ/4));
768
769         /* If a status change has already occurred, report it ASAP */
770         else if (HCD_POLL_PENDING(hcd))
771                 mod_timer(&hcd->rh_timer, jiffies);
772         retval = 0;
773  done:
774         spin_unlock_irqrestore (&hcd_root_hub_lock, flags);
775         return retval;
776 }
777
778 static int rh_urb_enqueue (struct usb_hcd *hcd, struct urb *urb)
779 {
780         if (usb_endpoint_xfer_int(&urb->ep->desc))
781                 return rh_queue_status (hcd, urb);
782         if (usb_endpoint_xfer_control(&urb->ep->desc))
783                 return rh_call_control (hcd, urb);
784         return -EINVAL;
785 }
786
787 /*-------------------------------------------------------------------------*/
788
789 /* Unlinks of root-hub control URBs are legal, but they don't do anything
790  * since these URBs always execute synchronously.
791  */
792 static int usb_rh_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
793 {
794         unsigned long   flags;
795         int             rc;
796
797         spin_lock_irqsave(&hcd_root_hub_lock, flags);
798         rc = usb_hcd_check_unlink_urb(hcd, urb, status);
799         if (rc)
800                 goto done;
801
802         if (usb_endpoint_num(&urb->ep->desc) == 0) {    /* Control URB */
803                 ;       /* Do nothing */
804
805         } else {                                /* Status URB */
806                 if (!hcd->uses_new_polling)
807                         del_timer (&hcd->rh_timer);
808                 if (urb == hcd->status_urb) {
809                         hcd->status_urb = NULL;
810                         usb_hcd_unlink_urb_from_ep(hcd, urb);
811
812                         spin_unlock(&hcd_root_hub_lock);
813                         usb_hcd_giveback_urb(hcd, urb, status);
814                         spin_lock(&hcd_root_hub_lock);
815                 }
816         }
817  done:
818         spin_unlock_irqrestore(&hcd_root_hub_lock, flags);
819         return rc;
820 }
821
822
823
824 /*
825  * Show & store the current value of authorized_default
826  */
827 static ssize_t usb_host_authorized_default_show(struct device *dev,
828                                                 struct device_attribute *attr,
829                                                 char *buf)
830 {
831         struct usb_device *rh_usb_dev = to_usb_device(dev);
832         struct usb_bus *usb_bus = rh_usb_dev->bus;
833         struct usb_hcd *usb_hcd;
834
835         if (usb_bus == NULL)    /* FIXME: not sure if this case is possible */
836                 return -ENODEV;
837         usb_hcd = bus_to_hcd(usb_bus);
838         return snprintf(buf, PAGE_SIZE, "%u\n", usb_hcd->authorized_default);
839 }
840
841 static ssize_t usb_host_authorized_default_store(struct device *dev,
842                                                  struct device_attribute *attr,
843                                                  const char *buf, size_t size)
844 {
845         ssize_t result;
846         unsigned val;
847         struct usb_device *rh_usb_dev = to_usb_device(dev);
848         struct usb_bus *usb_bus = rh_usb_dev->bus;
849         struct usb_hcd *usb_hcd;
850
851         if (usb_bus == NULL)    /* FIXME: not sure if this case is possible */
852                 return -ENODEV;
853         usb_hcd = bus_to_hcd(usb_bus);
854         result = sscanf(buf, "%u\n", &val);
855         if (result == 1) {
856                 usb_hcd->authorized_default = val? 1 : 0;
857                 result = size;
858         }
859         else
860                 result = -EINVAL;
861         return result;
862 }
863
864 static DEVICE_ATTR(authorized_default, 0644,
865             usb_host_authorized_default_show,
866             usb_host_authorized_default_store);
867
868
869 /* Group all the USB bus attributes */
870 static struct attribute *usb_bus_attrs[] = {
871                 &dev_attr_authorized_default.attr,
872                 NULL,
873 };
874
875 static struct attribute_group usb_bus_attr_group = {
876         .name = NULL,   /* we want them in the same directory */
877         .attrs = usb_bus_attrs,
878 };
879
880
881
882 /*-------------------------------------------------------------------------*/
883
884 /**
885  * usb_bus_init - shared initialization code
886  * @bus: the bus structure being initialized
887  *
888  * This code is used to initialize a usb_bus structure, memory for which is
889  * separately managed.
890  */
891 static void usb_bus_init (struct usb_bus *bus)
892 {
893         memset (&bus->devmap, 0, sizeof(struct usb_devmap));
894
895         bus->devnum_next = 1;
896
897         bus->root_hub = NULL;
898         bus->busnum = -1;
899         bus->bandwidth_allocated = 0;
900         bus->bandwidth_int_reqs  = 0;
901         bus->bandwidth_isoc_reqs = 0;
902
903         INIT_LIST_HEAD (&bus->bus_list);
904 }
905
906 /*-------------------------------------------------------------------------*/
907
908 /**
909  * usb_register_bus - registers the USB host controller with the usb core
910  * @bus: pointer to the bus to register
911  * Context: !in_interrupt()
912  *
913  * Assigns a bus number, and links the controller into usbcore data
914  * structures so that it can be seen by scanning the bus list.
915  */
916 static int usb_register_bus(struct usb_bus *bus)
917 {
918         int result = -E2BIG;
919         int busnum;
920
921         mutex_lock(&usb_bus_list_lock);
922         busnum = find_next_zero_bit (busmap.busmap, USB_MAXBUS, 1);
923         if (busnum >= USB_MAXBUS) {
924                 printk (KERN_ERR "%s: too many buses\n", usbcore_name);
925                 goto error_find_busnum;
926         }
927         set_bit (busnum, busmap.busmap);
928         bus->busnum = busnum;
929
930         /* Add it to the local list of buses */
931         list_add (&bus->bus_list, &usb_bus_list);
932         mutex_unlock(&usb_bus_list_lock);
933
934         usb_notify_add_bus(bus);
935
936         dev_info (bus->controller, "new USB bus registered, assigned bus "
937                   "number %d\n", bus->busnum);
938         return 0;
939
940 error_find_busnum:
941         mutex_unlock(&usb_bus_list_lock);
942         return result;
943 }
944
945 /**
946  * usb_deregister_bus - deregisters the USB host controller
947  * @bus: pointer to the bus to deregister
948  * Context: !in_interrupt()
949  *
950  * Recycles the bus number, and unlinks the controller from usbcore data
951  * structures so that it won't be seen by scanning the bus list.
952  */
953 static void usb_deregister_bus (struct usb_bus *bus)
954 {
955         dev_info (bus->controller, "USB bus %d deregistered\n", bus->busnum);
956
957         /*
958          * NOTE: make sure that all the devices are removed by the
959          * controller code, as well as having it call this when cleaning
960          * itself up
961          */
962         mutex_lock(&usb_bus_list_lock);
963         list_del (&bus->bus_list);
964         mutex_unlock(&usb_bus_list_lock);
965
966         usb_notify_remove_bus(bus);
967
968         clear_bit (bus->busnum, busmap.busmap);
969 }
970
971 /**
972  * register_root_hub - called by usb_add_hcd() to register a root hub
973  * @hcd: host controller for this root hub
974  *
975  * This function registers the root hub with the USB subsystem.  It sets up
976  * the device properly in the device tree and then calls usb_new_device()
977  * to register the usb device.  It also assigns the root hub's USB address
978  * (always 1).
979  */
980 static int register_root_hub(struct usb_hcd *hcd)
981 {
982         struct device *parent_dev = hcd->self.controller;
983         struct usb_device *usb_dev = hcd->self.root_hub;
984         const int devnum = 1;
985         int retval;
986
987         usb_dev->devnum = devnum;
988         usb_dev->bus->devnum_next = devnum + 1;
989         memset (&usb_dev->bus->devmap.devicemap, 0,
990                         sizeof usb_dev->bus->devmap.devicemap);
991         set_bit (devnum, usb_dev->bus->devmap.devicemap);
992         usb_set_device_state(usb_dev, USB_STATE_ADDRESS);
993
994         mutex_lock(&usb_bus_list_lock);
995
996         usb_dev->ep0.desc.wMaxPacketSize = cpu_to_le16(64);
997         retval = usb_get_device_descriptor(usb_dev, USB_DT_DEVICE_SIZE);
998         if (retval != sizeof usb_dev->descriptor) {
999                 mutex_unlock(&usb_bus_list_lock);
1000                 dev_dbg (parent_dev, "can't read %s device descriptor %d\n",
1001                                 dev_name(&usb_dev->dev), retval);
1002                 return (retval < 0) ? retval : -EMSGSIZE;
1003         }
1004         if (usb_dev->speed == USB_SPEED_SUPER) {
1005                 retval = usb_get_bos_descriptor(usb_dev);
1006                 if (retval < 0) {
1007                         mutex_unlock(&usb_bus_list_lock);
1008                         dev_dbg(parent_dev, "can't read %s bos descriptor %d\n",
1009                                         dev_name(&usb_dev->dev), retval);
1010                         return retval;
1011                 }
1012         }
1013
1014         retval = usb_new_device (usb_dev);
1015         if (retval) {
1016                 dev_err (parent_dev, "can't register root hub for %s, %d\n",
1017                                 dev_name(&usb_dev->dev), retval);
1018         } else {
1019                 spin_lock_irq (&hcd_root_hub_lock);
1020                 hcd->rh_registered = 1;
1021                 spin_unlock_irq (&hcd_root_hub_lock);
1022
1023                 /* Did the HC die before the root hub was registered? */
1024                 if (HCD_DEAD(hcd))
1025                         usb_hc_died (hcd);      /* This time clean up */
1026         }
1027         mutex_unlock(&usb_bus_list_lock);
1028
1029         return retval;
1030 }
1031
1032
1033 /*-------------------------------------------------------------------------*/
1034
1035 /**
1036  * usb_calc_bus_time - approximate periodic transaction time in nanoseconds
1037  * @speed: from dev->speed; USB_SPEED_{LOW,FULL,HIGH}
1038  * @is_input: true iff the transaction sends data to the host
1039  * @isoc: true for isochronous transactions, false for interrupt ones
1040  * @bytecount: how many bytes in the transaction.
1041  *
1042  * Returns approximate bus time in nanoseconds for a periodic transaction.
1043  * See USB 2.0 spec section 5.11.3; only periodic transfers need to be
1044  * scheduled in software, this function is only used for such scheduling.
1045  */
1046 long usb_calc_bus_time (int speed, int is_input, int isoc, int bytecount)
1047 {
1048         unsigned long   tmp;
1049
1050         switch (speed) {
1051         case USB_SPEED_LOW:     /* INTR only */
1052                 if (is_input) {
1053                         tmp = (67667L * (31L + 10L * BitTime (bytecount))) / 1000L;
1054                         return (64060L + (2 * BW_HUB_LS_SETUP) + BW_HOST_DELAY + tmp);
1055                 } else {
1056                         tmp = (66700L * (31L + 10L * BitTime (bytecount))) / 1000L;
1057                         return (64107L + (2 * BW_HUB_LS_SETUP) + BW_HOST_DELAY + tmp);
1058                 }
1059         case USB_SPEED_FULL:    /* ISOC or INTR */
1060                 if (isoc) {
1061                         tmp = (8354L * (31L + 10L * BitTime (bytecount))) / 1000L;
1062                         return (((is_input) ? 7268L : 6265L) + BW_HOST_DELAY + tmp);
1063                 } else {
1064                         tmp = (8354L * (31L + 10L * BitTime (bytecount))) / 1000L;
1065                         return (9107L + BW_HOST_DELAY + tmp);
1066                 }
1067         case USB_SPEED_HIGH:    /* ISOC or INTR */
1068                 // FIXME adjust for input vs output
1069                 if (isoc)
1070                         tmp = HS_NSECS_ISO (bytecount);
1071                 else
1072                         tmp = HS_NSECS (bytecount);
1073                 return tmp;
1074         default:
1075                 pr_debug ("%s: bogus device speed!\n", usbcore_name);
1076                 return -1;
1077         }
1078 }
1079 EXPORT_SYMBOL_GPL(usb_calc_bus_time);
1080
1081
1082 /*-------------------------------------------------------------------------*/
1083
1084 /*
1085  * Generic HC operations.
1086  */
1087
1088 /*-------------------------------------------------------------------------*/
1089
1090 /**
1091  * usb_hcd_link_urb_to_ep - add an URB to its endpoint queue
1092  * @hcd: host controller to which @urb was submitted
1093  * @urb: URB being submitted
1094  *
1095  * Host controller drivers should call this routine in their enqueue()
1096  * method.  The HCD's private spinlock must be held and interrupts must
1097  * be disabled.  The actions carried out here are required for URB
1098  * submission, as well as for endpoint shutdown and for usb_kill_urb.
1099  *
1100  * Returns 0 for no error, otherwise a negative error code (in which case
1101  * the enqueue() method must fail).  If no error occurs but enqueue() fails
1102  * anyway, it must call usb_hcd_unlink_urb_from_ep() before releasing
1103  * the private spinlock and returning.
1104  */
1105 int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb)
1106 {
1107         int             rc = 0;
1108
1109         spin_lock(&hcd_urb_list_lock);
1110
1111         /* Check that the URB isn't being killed */
1112         if (unlikely(atomic_read(&urb->reject))) {
1113                 rc = -EPERM;
1114                 goto done;
1115         }
1116
1117         if (unlikely(!urb->ep->enabled)) {
1118                 rc = -ENOENT;
1119                 goto done;
1120         }
1121
1122         if (unlikely(!urb->dev->can_submit)) {
1123                 rc = -EHOSTUNREACH;
1124                 goto done;
1125         }
1126
1127         /*
1128          * Check the host controller's state and add the URB to the
1129          * endpoint's queue.
1130          */
1131         if (HCD_RH_RUNNING(hcd)) {
1132                 urb->unlinked = 0;
1133                 list_add_tail(&urb->urb_list, &urb->ep->urb_list);
1134         } else {
1135                 rc = -ESHUTDOWN;
1136                 goto done;
1137         }
1138  done:
1139         spin_unlock(&hcd_urb_list_lock);
1140         return rc;
1141 }
1142 EXPORT_SYMBOL_GPL(usb_hcd_link_urb_to_ep);
1143
1144 /**
1145  * usb_hcd_check_unlink_urb - check whether an URB may be unlinked
1146  * @hcd: host controller to which @urb was submitted
1147  * @urb: URB being checked for unlinkability
1148  * @status: error code to store in @urb if the unlink succeeds
1149  *
1150  * Host controller drivers should call this routine in their dequeue()
1151  * method.  The HCD's private spinlock must be held and interrupts must
1152  * be disabled.  The actions carried out here are required for making
1153  * sure than an unlink is valid.
1154  *
1155  * Returns 0 for no error, otherwise a negative error code (in which case
1156  * the dequeue() method must fail).  The possible error codes are:
1157  *
1158  *      -EIDRM: @urb was not submitted or has already completed.
1159  *              The completion function may not have been called yet.
1160  *
1161  *      -EBUSY: @urb has already been unlinked.
1162  */
1163 int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb,
1164                 int status)
1165 {
1166         struct list_head        *tmp;
1167
1168         /* insist the urb is still queued */
1169         list_for_each(tmp, &urb->ep->urb_list) {
1170                 if (tmp == &urb->urb_list)
1171                         break;
1172         }
1173         if (tmp != &urb->urb_list)
1174                 return -EIDRM;
1175
1176         /* Any status except -EINPROGRESS means something already started to
1177          * unlink this URB from the hardware.  So there's no more work to do.
1178          */
1179         if (urb->unlinked)
1180                 return -EBUSY;
1181         urb->unlinked = status;
1182         return 0;
1183 }
1184 EXPORT_SYMBOL_GPL(usb_hcd_check_unlink_urb);
1185
1186 /**
1187  * usb_hcd_unlink_urb_from_ep - remove an URB from its endpoint queue
1188  * @hcd: host controller to which @urb was submitted
1189  * @urb: URB being unlinked
1190  *
1191  * Host controller drivers should call this routine before calling
1192  * usb_hcd_giveback_urb().  The HCD's private spinlock must be held and
1193  * interrupts must be disabled.  The actions carried out here are required
1194  * for URB completion.
1195  */
1196 void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb)
1197 {
1198         /* clear all state linking urb to this dev (and hcd) */
1199         spin_lock(&hcd_urb_list_lock);
1200         list_del_init(&urb->urb_list);
1201         spin_unlock(&hcd_urb_list_lock);
1202 }
1203 EXPORT_SYMBOL_GPL(usb_hcd_unlink_urb_from_ep);
1204
1205 /*
1206  * Some usb host controllers can only perform dma using a small SRAM area.
1207  * The usb core itself is however optimized for host controllers that can dma
1208  * using regular system memory - like pci devices doing bus mastering.
1209  *
1210  * To support host controllers with limited dma capabilites we provide dma
1211  * bounce buffers. This feature can be enabled using the HCD_LOCAL_MEM flag.
1212  * For this to work properly the host controller code must first use the
1213  * function dma_declare_coherent_memory() to point out which memory area
1214  * that should be used for dma allocations.
1215  *
1216  * The HCD_LOCAL_MEM flag then tells the usb code to allocate all data for
1217  * dma using dma_alloc_coherent() which in turn allocates from the memory
1218  * area pointed out with dma_declare_coherent_memory().
1219  *
1220  * So, to summarize...
1221  *
1222  * - We need "local" memory, canonical example being
1223  *   a small SRAM on a discrete controller being the
1224  *   only memory that the controller can read ...
1225  *   (a) "normal" kernel memory is no good, and
1226  *   (b) there's not enough to share
1227  *
1228  * - The only *portable* hook for such stuff in the
1229  *   DMA framework is dma_declare_coherent_memory()
1230  *
1231  * - So we use that, even though the primary requirement
1232  *   is that the memory be "local" (hence addressible
1233  *   by that device), not "coherent".
1234  *
1235  */
1236
1237 static int hcd_alloc_coherent(struct usb_bus *bus,
1238                               gfp_t mem_flags, dma_addr_t *dma_handle,
1239                               void **vaddr_handle, size_t size,
1240                               enum dma_data_direction dir)
1241 {
1242         unsigned char *vaddr;
1243
1244         if (*vaddr_handle == NULL) {
1245                 WARN_ON_ONCE(1);
1246                 return -EFAULT;
1247         }
1248
1249         vaddr = hcd_buffer_alloc(bus, size + sizeof(vaddr),
1250                                  mem_flags, dma_handle);
1251         if (!vaddr)
1252                 return -ENOMEM;
1253
1254         /*
1255          * Store the virtual address of the buffer at the end
1256          * of the allocated dma buffer. The size of the buffer
1257          * may be uneven so use unaligned functions instead
1258          * of just rounding up. It makes sense to optimize for
1259          * memory footprint over access speed since the amount
1260          * of memory available for dma may be limited.
1261          */
1262         put_unaligned((unsigned long)*vaddr_handle,
1263                       (unsigned long *)(vaddr + size));
1264
1265         if (dir == DMA_TO_DEVICE)
1266                 memcpy(vaddr, *vaddr_handle, size);
1267
1268         *vaddr_handle = vaddr;
1269         return 0;
1270 }
1271
1272 static void hcd_free_coherent(struct usb_bus *bus, dma_addr_t *dma_handle,
1273                               void **vaddr_handle, size_t size,
1274                               enum dma_data_direction dir)
1275 {
1276         unsigned char *vaddr = *vaddr_handle;
1277
1278         vaddr = (void *)get_unaligned((unsigned long *)(vaddr + size));
1279
1280         if (dir == DMA_FROM_DEVICE)
1281                 memcpy(vaddr, *vaddr_handle, size);
1282
1283         hcd_buffer_free(bus, size + sizeof(vaddr), *vaddr_handle, *dma_handle);
1284
1285         *vaddr_handle = vaddr;
1286         *dma_handle = 0;
1287 }
1288
1289 void usb_hcd_unmap_urb_setup_for_dma(struct usb_hcd *hcd, struct urb *urb)
1290 {
1291         if (urb->transfer_flags & URB_SETUP_MAP_SINGLE)
1292                 dma_unmap_single(hcd->self.controller,
1293                                 urb->setup_dma,
1294                                 sizeof(struct usb_ctrlrequest),
1295                                 DMA_TO_DEVICE);
1296         else if (urb->transfer_flags & URB_SETUP_MAP_LOCAL)
1297                 hcd_free_coherent(urb->dev->bus,
1298                                 &urb->setup_dma,
1299                                 (void **) &urb->setup_packet,
1300                                 sizeof(struct usb_ctrlrequest),
1301                                 DMA_TO_DEVICE);
1302
1303         /* Make it safe to call this routine more than once */
1304         urb->transfer_flags &= ~(URB_SETUP_MAP_SINGLE | URB_SETUP_MAP_LOCAL);
1305 }
1306 EXPORT_SYMBOL_GPL(usb_hcd_unmap_urb_setup_for_dma);
1307
1308 static void unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
1309 {
1310         if (hcd->driver->unmap_urb_for_dma)
1311                 hcd->driver->unmap_urb_for_dma(hcd, urb);
1312         else
1313                 usb_hcd_unmap_urb_for_dma(hcd, urb);
1314 }
1315
1316 void usb_hcd_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
1317 {
1318         enum dma_data_direction dir;
1319
1320         usb_hcd_unmap_urb_setup_for_dma(hcd, urb);
1321
1322         dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
1323         if (urb->transfer_flags & URB_DMA_MAP_SG)
1324                 dma_unmap_sg(hcd->self.controller,
1325                                 urb->sg,
1326                                 urb->num_sgs,
1327                                 dir);
1328         else if (urb->transfer_flags & URB_DMA_MAP_PAGE)
1329                 dma_unmap_page(hcd->self.controller,
1330                                 urb->transfer_dma,
1331                                 urb->transfer_buffer_length,
1332                                 dir);
1333         else if (urb->transfer_flags & URB_DMA_MAP_SINGLE)
1334                 dma_unmap_single(hcd->self.controller,
1335                                 urb->transfer_dma,
1336                                 urb->transfer_buffer_length,
1337                                 dir);
1338         else if (urb->transfer_flags & URB_MAP_LOCAL)
1339                 hcd_free_coherent(urb->dev->bus,
1340                                 &urb->transfer_dma,
1341                                 &urb->transfer_buffer,
1342                                 urb->transfer_buffer_length,
1343                                 dir);
1344
1345         /* Make it safe to call this routine more than once */
1346         urb->transfer_flags &= ~(URB_DMA_MAP_SG | URB_DMA_MAP_PAGE |
1347                         URB_DMA_MAP_SINGLE | URB_MAP_LOCAL);
1348 }
1349 EXPORT_SYMBOL_GPL(usb_hcd_unmap_urb_for_dma);
1350
1351 static int map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
1352                            gfp_t mem_flags)
1353 {
1354         if (hcd->driver->map_urb_for_dma)
1355                 return hcd->driver->map_urb_for_dma(hcd, urb, mem_flags);
1356         else
1357                 return usb_hcd_map_urb_for_dma(hcd, urb, mem_flags);
1358 }
1359
1360 int usb_hcd_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
1361                             gfp_t mem_flags)
1362 {
1363         enum dma_data_direction dir;
1364         int ret = 0;
1365
1366         /* Map the URB's buffers for DMA access.
1367          * Lower level HCD code should use *_dma exclusively,
1368          * unless it uses pio or talks to another transport,
1369          * or uses the provided scatter gather list for bulk.
1370          */
1371
1372         if (usb_endpoint_xfer_control(&urb->ep->desc)) {
1373                 if (hcd->self.uses_pio_for_control)
1374                         return ret;
1375                 if (hcd->self.uses_dma) {
1376                         urb->setup_dma = dma_map_single(
1377                                         hcd->self.controller,
1378                                         urb->setup_packet,
1379                                         sizeof(struct usb_ctrlrequest),
1380                                         DMA_TO_DEVICE);
1381                         if (dma_mapping_error(hcd->self.controller,
1382                                                 urb->setup_dma))
1383                                 return -EAGAIN;
1384                         urb->transfer_flags |= URB_SETUP_MAP_SINGLE;
1385                 } else if (hcd->driver->flags & HCD_LOCAL_MEM) {
1386                         ret = hcd_alloc_coherent(
1387                                         urb->dev->bus, mem_flags,
1388                                         &urb->setup_dma,
1389                                         (void **)&urb->setup_packet,
1390                                         sizeof(struct usb_ctrlrequest),
1391                                         DMA_TO_DEVICE);
1392                         if (ret)
1393                                 return ret;
1394                         urb->transfer_flags |= URB_SETUP_MAP_LOCAL;
1395                 }
1396         }
1397
1398         dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
1399         if (urb->transfer_buffer_length != 0
1400             && !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)) {
1401                 if (hcd->self.uses_dma) {
1402                         if (urb->num_sgs) {
1403                                 int n;
1404
1405                                 /* We don't support sg for isoc transfers ! */
1406                                 if (usb_endpoint_xfer_isoc(&urb->ep->desc)) {
1407                                         WARN_ON(1);
1408                                         return -EINVAL;
1409                                 }
1410
1411                                 n = dma_map_sg(
1412                                                 hcd->self.controller,
1413                                                 urb->sg,
1414                                                 urb->num_sgs,
1415                                                 dir);
1416                                 if (n <= 0)
1417                                         ret = -EAGAIN;
1418                                 else
1419                                         urb->transfer_flags |= URB_DMA_MAP_SG;
1420                                 urb->num_mapped_sgs = n;
1421                                 if (n != urb->num_sgs)
1422                                         urb->transfer_flags |=
1423                                                         URB_DMA_SG_COMBINED;
1424                         } else if (urb->sg) {
1425                                 struct scatterlist *sg = urb->sg;
1426                                 urb->transfer_dma = dma_map_page(
1427                                                 hcd->self.controller,
1428                                                 sg_page(sg),
1429                                                 sg->offset,
1430                                                 urb->transfer_buffer_length,
1431                                                 dir);
1432                                 if (dma_mapping_error(hcd->self.controller,
1433                                                 urb->transfer_dma))
1434                                         ret = -EAGAIN;
1435                                 else
1436                                         urb->transfer_flags |= URB_DMA_MAP_PAGE;
1437                         } else {
1438                                 urb->transfer_dma = dma_map_single(
1439                                                 hcd->self.controller,
1440                                                 urb->transfer_buffer,
1441                                                 urb->transfer_buffer_length,
1442                                                 dir);
1443                                 if (dma_mapping_error(hcd->self.controller,
1444                                                 urb->transfer_dma))
1445                                         ret = -EAGAIN;
1446                                 else
1447                                         urb->transfer_flags |= URB_DMA_MAP_SINGLE;
1448                         }
1449                 } else if (hcd->driver->flags & HCD_LOCAL_MEM) {
1450                         ret = hcd_alloc_coherent(
1451                                         urb->dev->bus, mem_flags,
1452                                         &urb->transfer_dma,
1453                                         &urb->transfer_buffer,
1454                                         urb->transfer_buffer_length,
1455                                         dir);
1456                         if (ret == 0)
1457                                 urb->transfer_flags |= URB_MAP_LOCAL;
1458                 }
1459                 if (ret && (urb->transfer_flags & (URB_SETUP_MAP_SINGLE |
1460                                 URB_SETUP_MAP_LOCAL)))
1461                         usb_hcd_unmap_urb_for_dma(hcd, urb);
1462         }
1463         return ret;
1464 }
1465 EXPORT_SYMBOL_GPL(usb_hcd_map_urb_for_dma);
1466
1467 /*-------------------------------------------------------------------------*/
1468
1469 /* may be called in any context with a valid urb->dev usecount
1470  * caller surrenders "ownership" of urb
1471  * expects usb_submit_urb() to have sanity checked and conditioned all
1472  * inputs in the urb
1473  */
1474 int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
1475 {
1476         int                     status;
1477         struct usb_hcd          *hcd = bus_to_hcd(urb->dev->bus);
1478
1479         /* increment urb's reference count as part of giving it to the HCD
1480          * (which will control it).  HCD guarantees that it either returns
1481          * an error or calls giveback(), but not both.
1482          */
1483         usb_get_urb(urb);
1484         atomic_inc(&urb->use_count);
1485         atomic_inc(&urb->dev->urbnum);
1486         usbmon_urb_submit(&hcd->self, urb);
1487
1488         /* NOTE requirements on root-hub callers (usbfs and the hub
1489          * driver, for now):  URBs' urb->transfer_buffer must be
1490          * valid and usb_buffer_{sync,unmap}() not be needed, since
1491          * they could clobber root hub response data.  Also, control
1492          * URBs must be submitted in process context with interrupts
1493          * enabled.
1494          */
1495
1496         if (is_root_hub(urb->dev)) {
1497                 status = rh_urb_enqueue(hcd, urb);
1498         } else {
1499                 status = map_urb_for_dma(hcd, urb, mem_flags);
1500                 if (likely(status == 0)) {
1501                         status = hcd->driver->urb_enqueue(hcd, urb, mem_flags);
1502                         if (unlikely(status))
1503                                 unmap_urb_for_dma(hcd, urb);
1504                 }
1505         }
1506
1507         if (unlikely(status)) {
1508                 usbmon_urb_submit_error(&hcd->self, urb, status);
1509                 urb->hcpriv = NULL;
1510                 INIT_LIST_HEAD(&urb->urb_list);
1511                 atomic_dec(&urb->use_count);
1512                 atomic_dec(&urb->dev->urbnum);
1513                 if (atomic_read(&urb->reject))
1514                         wake_up(&usb_kill_urb_queue);
1515                 usb_put_urb(urb);
1516         }
1517         return status;
1518 }
1519
1520 /*-------------------------------------------------------------------------*/
1521
1522 /* this makes the hcd giveback() the urb more quickly, by kicking it
1523  * off hardware queues (which may take a while) and returning it as
1524  * soon as practical.  we've already set up the urb's return status,
1525  * but we can't know if the callback completed already.
1526  */
1527 static int unlink1(struct usb_hcd *hcd, struct urb *urb, int status)
1528 {
1529         int             value;
1530
1531         if (is_root_hub(urb->dev))
1532                 value = usb_rh_urb_dequeue(hcd, urb, status);
1533         else {
1534
1535                 /* The only reason an HCD might fail this call is if
1536                  * it has not yet fully queued the urb to begin with.
1537                  * Such failures should be harmless. */
1538                 value = hcd->driver->urb_dequeue(hcd, urb, status);
1539         }
1540         return value;
1541 }
1542
1543 /*
1544  * called in any context
1545  *
1546  * caller guarantees urb won't be recycled till both unlink()
1547  * and the urb's completion function return
1548  */
1549 int usb_hcd_unlink_urb (struct urb *urb, int status)
1550 {
1551         struct usb_hcd          *hcd;
1552         int                     retval = -EIDRM;
1553         unsigned long           flags;
1554
1555         /* Prevent the device and bus from going away while
1556          * the unlink is carried out.  If they are already gone
1557          * then urb->use_count must be 0, since disconnected
1558          * devices can't have any active URBs.
1559          */
1560         spin_lock_irqsave(&hcd_urb_unlink_lock, flags);
1561         if (atomic_read(&urb->use_count) > 0) {
1562                 retval = 0;
1563                 usb_get_dev(urb->dev);
1564         }
1565         spin_unlock_irqrestore(&hcd_urb_unlink_lock, flags);
1566         if (retval == 0) {
1567                 hcd = bus_to_hcd(urb->dev->bus);
1568                 retval = unlink1(hcd, urb, status);
1569                 usb_put_dev(urb->dev);
1570         }
1571
1572         if (retval == 0)
1573                 retval = -EINPROGRESS;
1574         else if (retval != -EIDRM && retval != -EBUSY)
1575                 dev_dbg(&urb->dev->dev, "hcd_unlink_urb %p fail %d\n",
1576                                 urb, retval);
1577         return retval;
1578 }
1579
1580 /*-------------------------------------------------------------------------*/
1581
1582 /**
1583  * usb_hcd_giveback_urb - return URB from HCD to device driver
1584  * @hcd: host controller returning the URB
1585  * @urb: urb being returned to the USB device driver.
1586  * @status: completion status code for the URB.
1587  * Context: in_interrupt()
1588  *
1589  * This hands the URB from HCD to its USB device driver, using its
1590  * completion function.  The HCD has freed all per-urb resources
1591  * (and is done using urb->hcpriv).  It also released all HCD locks;
1592  * the device driver won't cause problems if it frees, modifies,
1593  * or resubmits this URB.
1594  *
1595  * If @urb was unlinked, the value of @status will be overridden by
1596  * @urb->unlinked.  Erroneous short transfers are detected in case
1597  * the HCD hasn't checked for them.
1598  */
1599 void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, int status)
1600 {
1601         urb->hcpriv = NULL;
1602         if (unlikely(urb->unlinked))
1603                 status = urb->unlinked;
1604         else if (unlikely((urb->transfer_flags & URB_SHORT_NOT_OK) &&
1605                         urb->actual_length < urb->transfer_buffer_length &&
1606                         !status))
1607                 status = -EREMOTEIO;
1608
1609         unmap_urb_for_dma(hcd, urb);
1610         usbmon_urb_complete(&hcd->self, urb, status);
1611         usb_unanchor_urb(urb);
1612
1613         /* pass ownership to the completion handler */
1614         urb->status = status;
1615         urb->complete (urb);
1616         atomic_dec (&urb->use_count);
1617         if (unlikely(atomic_read(&urb->reject)))
1618                 wake_up (&usb_kill_urb_queue);
1619         usb_put_urb (urb);
1620 }
1621 EXPORT_SYMBOL_GPL(usb_hcd_giveback_urb);
1622
1623 /*-------------------------------------------------------------------------*/
1624
1625 /* Cancel all URBs pending on this endpoint and wait for the endpoint's
1626  * queue to drain completely.  The caller must first insure that no more
1627  * URBs can be submitted for this endpoint.
1628  */
1629 void usb_hcd_flush_endpoint(struct usb_device *udev,
1630                 struct usb_host_endpoint *ep)
1631 {
1632         struct usb_hcd          *hcd;
1633         struct urb              *urb;
1634
1635         if (!ep)
1636                 return;
1637         might_sleep();
1638         hcd = bus_to_hcd(udev->bus);
1639
1640         /* No more submits can occur */
1641         spin_lock_irq(&hcd_urb_list_lock);
1642 rescan:
1643         list_for_each_entry (urb, &ep->urb_list, urb_list) {
1644                 int     is_in;
1645
1646                 if (urb->unlinked)
1647                         continue;
1648                 usb_get_urb (urb);
1649                 is_in = usb_urb_dir_in(urb);
1650                 spin_unlock(&hcd_urb_list_lock);
1651
1652                 /* kick hcd */
1653                 unlink1(hcd, urb, -ESHUTDOWN);
1654                 dev_dbg (hcd->self.controller,
1655                         "shutdown urb %p ep%d%s%s\n",
1656                         urb, usb_endpoint_num(&ep->desc),
1657                         is_in ? "in" : "out",
1658                         ({      char *s;
1659
1660                                  switch (usb_endpoint_type(&ep->desc)) {
1661                                  case USB_ENDPOINT_XFER_CONTROL:
1662                                         s = ""; break;
1663                                  case USB_ENDPOINT_XFER_BULK:
1664                                         s = "-bulk"; break;
1665                                  case USB_ENDPOINT_XFER_INT:
1666                                         s = "-intr"; break;
1667                                  default:
1668                                         s = "-iso"; break;
1669                                 };
1670                                 s;
1671                         }));
1672                 usb_put_urb (urb);
1673
1674                 /* list contents may have changed */
1675                 spin_lock(&hcd_urb_list_lock);
1676                 goto rescan;
1677         }
1678         spin_unlock_irq(&hcd_urb_list_lock);
1679
1680         /* Wait until the endpoint queue is completely empty */
1681         while (!list_empty (&ep->urb_list)) {
1682                 spin_lock_irq(&hcd_urb_list_lock);
1683
1684                 /* The list may have changed while we acquired the spinlock */
1685                 urb = NULL;
1686                 if (!list_empty (&ep->urb_list)) {
1687                         urb = list_entry (ep->urb_list.prev, struct urb,
1688                                         urb_list);
1689                         usb_get_urb (urb);
1690                 }
1691                 spin_unlock_irq(&hcd_urb_list_lock);
1692
1693                 if (urb) {
1694                         usb_kill_urb (urb);
1695                         usb_put_urb (urb);
1696                 }
1697         }
1698 }
1699
1700 /**
1701  * usb_hcd_alloc_bandwidth - check whether a new bandwidth setting exceeds
1702  *                              the bus bandwidth
1703  * @udev: target &usb_device
1704  * @new_config: new configuration to install
1705  * @cur_alt: the current alternate interface setting
1706  * @new_alt: alternate interface setting that is being installed
1707  *
1708  * To change configurations, pass in the new configuration in new_config,
1709  * and pass NULL for cur_alt and new_alt.
1710  *
1711  * To reset a device's configuration (put the device in the ADDRESSED state),
1712  * pass in NULL for new_config, cur_alt, and new_alt.
1713  *
1714  * To change alternate interface settings, pass in NULL for new_config,
1715  * pass in the current alternate interface setting in cur_alt,
1716  * and pass in the new alternate interface setting in new_alt.
1717  *
1718  * Returns an error if the requested bandwidth change exceeds the
1719  * bus bandwidth or host controller internal resources.
1720  */
1721 int usb_hcd_alloc_bandwidth(struct usb_device *udev,
1722                 struct usb_host_config *new_config,
1723                 struct usb_host_interface *cur_alt,
1724                 struct usb_host_interface *new_alt)
1725 {
1726         int num_intfs, i, j;
1727         struct usb_host_interface *alt = NULL;
1728         int ret = 0;
1729         struct usb_hcd *hcd;
1730         struct usb_host_endpoint *ep;
1731
1732         hcd = bus_to_hcd(udev->bus);
1733         if (!hcd->driver->check_bandwidth)
1734                 return 0;
1735
1736         /* Configuration is being removed - set configuration 0 */
1737         if (!new_config && !cur_alt) {
1738                 for (i = 1; i < 16; ++i) {
1739                         ep = udev->ep_out[i];
1740                         if (ep)
1741                                 hcd->driver->drop_endpoint(hcd, udev, ep);
1742                         ep = udev->ep_in[i];
1743                         if (ep)
1744                                 hcd->driver->drop_endpoint(hcd, udev, ep);
1745                 }
1746                 hcd->driver->check_bandwidth(hcd, udev);
1747                 return 0;
1748         }
1749         /* Check if the HCD says there's enough bandwidth.  Enable all endpoints
1750          * each interface's alt setting 0 and ask the HCD to check the bandwidth
1751          * of the bus.  There will always be bandwidth for endpoint 0, so it's
1752          * ok to exclude it.
1753          */
1754         if (new_config) {
1755                 num_intfs = new_config->desc.bNumInterfaces;
1756                 /* Remove endpoints (except endpoint 0, which is always on the
1757                  * schedule) from the old config from the schedule
1758                  */
1759                 for (i = 1; i < 16; ++i) {
1760                         ep = udev->ep_out[i];
1761                         if (ep) {
1762                                 ret = hcd->driver->drop_endpoint(hcd, udev, ep);
1763                                 if (ret < 0)
1764                                         goto reset;
1765                         }
1766                         ep = udev->ep_in[i];
1767                         if (ep) {
1768                                 ret = hcd->driver->drop_endpoint(hcd, udev, ep);
1769                                 if (ret < 0)
1770                                         goto reset;
1771                         }
1772                 }
1773                 for (i = 0; i < num_intfs; ++i) {
1774                         struct usb_host_interface *first_alt;
1775                         int iface_num;
1776
1777                         first_alt = &new_config->intf_cache[i]->altsetting[0];
1778                         iface_num = first_alt->desc.bInterfaceNumber;
1779                         /* Set up endpoints for alternate interface setting 0 */
1780                         alt = usb_find_alt_setting(new_config, iface_num, 0);
1781                         if (!alt)
1782                                 /* No alt setting 0? Pick the first setting. */
1783                                 alt = first_alt;
1784
1785                         for (j = 0; j < alt->desc.bNumEndpoints; j++) {
1786                                 ret = hcd->driver->add_endpoint(hcd, udev, &alt->endpoint[j]);
1787                                 if (ret < 0)
1788                                         goto reset;
1789                         }
1790                 }
1791         }
1792         if (cur_alt && new_alt) {
1793                 struct usb_interface *iface = usb_ifnum_to_if(udev,
1794                                 cur_alt->desc.bInterfaceNumber);
1795
1796                 if (!iface)
1797                         return -EINVAL;
1798                 if (iface->resetting_device) {
1799                         /*
1800                          * The USB core just reset the device, so the xHCI host
1801                          * and the device will think alt setting 0 is installed.
1802                          * However, the USB core will pass in the alternate
1803                          * setting installed before the reset as cur_alt.  Dig
1804                          * out the alternate setting 0 structure, or the first
1805                          * alternate setting if a broken device doesn't have alt
1806                          * setting 0.
1807                          */
1808                         cur_alt = usb_altnum_to_altsetting(iface, 0);
1809                         if (!cur_alt)
1810                                 cur_alt = &iface->altsetting[0];
1811                 }
1812
1813                 /* Drop all the endpoints in the current alt setting */
1814                 for (i = 0; i < cur_alt->desc.bNumEndpoints; i++) {
1815                         ret = hcd->driver->drop_endpoint(hcd, udev,
1816                                         &cur_alt->endpoint[i]);
1817                         if (ret < 0)
1818                                 goto reset;
1819                 }
1820                 /* Add all the endpoints in the new alt setting */
1821                 for (i = 0; i < new_alt->desc.bNumEndpoints; i++) {
1822                         ret = hcd->driver->add_endpoint(hcd, udev,
1823                                         &new_alt->endpoint[i]);
1824                         if (ret < 0)
1825                                 goto reset;
1826                 }
1827         }
1828         ret = hcd->driver->check_bandwidth(hcd, udev);
1829 reset:
1830         if (ret < 0)
1831                 hcd->driver->reset_bandwidth(hcd, udev);
1832         return ret;
1833 }
1834
1835 /* Disables the endpoint: synchronizes with the hcd to make sure all
1836  * endpoint state is gone from hardware.  usb_hcd_flush_endpoint() must
1837  * have been called previously.  Use for set_configuration, set_interface,
1838  * driver removal, physical disconnect.
1839  *
1840  * example:  a qh stored in ep->hcpriv, holding state related to endpoint
1841  * type, maxpacket size, toggle, halt status, and scheduling.
1842  */
1843 void usb_hcd_disable_endpoint(struct usb_device *udev,
1844                 struct usb_host_endpoint *ep)
1845 {
1846         struct usb_hcd          *hcd;
1847
1848         might_sleep();
1849         hcd = bus_to_hcd(udev->bus);
1850         if (hcd->driver->endpoint_disable)
1851                 hcd->driver->endpoint_disable(hcd, ep);
1852 }
1853
1854 /**
1855  * usb_hcd_reset_endpoint - reset host endpoint state
1856  * @udev: USB device.
1857  * @ep:   the endpoint to reset.
1858  *
1859  * Resets any host endpoint state such as the toggle bit, sequence
1860  * number and current window.
1861  */
1862 void usb_hcd_reset_endpoint(struct usb_device *udev,
1863                             struct usb_host_endpoint *ep)
1864 {
1865         struct usb_hcd *hcd = bus_to_hcd(udev->bus);
1866
1867         if (hcd->driver->endpoint_reset)
1868                 hcd->driver->endpoint_reset(hcd, ep);
1869         else {
1870                 int epnum = usb_endpoint_num(&ep->desc);
1871                 int is_out = usb_endpoint_dir_out(&ep->desc);
1872                 int is_control = usb_endpoint_xfer_control(&ep->desc);
1873
1874                 usb_settoggle(udev, epnum, is_out, 0);
1875                 if (is_control)
1876                         usb_settoggle(udev, epnum, !is_out, 0);
1877         }
1878 }
1879
1880 /**
1881  * usb_alloc_streams - allocate bulk endpoint stream IDs.
1882  * @interface:          alternate setting that includes all endpoints.
1883  * @eps:                array of endpoints that need streams.
1884  * @num_eps:            number of endpoints in the array.
1885  * @num_streams:        number of streams to allocate.
1886  * @mem_flags:          flags hcd should use to allocate memory.
1887  *
1888  * Sets up a group of bulk endpoints to have num_streams stream IDs available.
1889  * Drivers may queue multiple transfers to different stream IDs, which may
1890  * complete in a different order than they were queued.
1891  */
1892 int usb_alloc_streams(struct usb_interface *interface,
1893                 struct usb_host_endpoint **eps, unsigned int num_eps,
1894                 unsigned int num_streams, gfp_t mem_flags)
1895 {
1896         struct usb_hcd *hcd;
1897         struct usb_device *dev;
1898         int i;
1899
1900         dev = interface_to_usbdev(interface);
1901         hcd = bus_to_hcd(dev->bus);
1902         if (!hcd->driver->alloc_streams || !hcd->driver->free_streams)
1903                 return -EINVAL;
1904         if (dev->speed != USB_SPEED_SUPER)
1905                 return -EINVAL;
1906
1907         /* Streams only apply to bulk endpoints. */
1908         for (i = 0; i < num_eps; i++)
1909                 if (!usb_endpoint_xfer_bulk(&eps[i]->desc))
1910                         return -EINVAL;
1911
1912         return hcd->driver->alloc_streams(hcd, dev, eps, num_eps,
1913                         num_streams, mem_flags);
1914 }
1915 EXPORT_SYMBOL_GPL(usb_alloc_streams);
1916
1917 /**
1918  * usb_free_streams - free bulk endpoint stream IDs.
1919  * @interface:  alternate setting that includes all endpoints.
1920  * @eps:        array of endpoints to remove streams from.
1921  * @num_eps:    number of endpoints in the array.
1922  * @mem_flags:  flags hcd should use to allocate memory.
1923  *
1924  * Reverts a group of bulk endpoints back to not using stream IDs.
1925  * Can fail if we are given bad arguments, or HCD is broken.
1926  */
1927 void usb_free_streams(struct usb_interface *interface,
1928                 struct usb_host_endpoint **eps, unsigned int num_eps,
1929                 gfp_t mem_flags)
1930 {
1931         struct usb_hcd *hcd;
1932         struct usb_device *dev;
1933         int i;
1934
1935         dev = interface_to_usbdev(interface);
1936         hcd = bus_to_hcd(dev->bus);
1937         if (dev->speed != USB_SPEED_SUPER)
1938                 return;
1939
1940         /* Streams only apply to bulk endpoints. */
1941         for (i = 0; i < num_eps; i++)
1942                 if (!eps[i] || !usb_endpoint_xfer_bulk(&eps[i]->desc))
1943                         return;
1944
1945         hcd->driver->free_streams(hcd, dev, eps, num_eps, mem_flags);
1946 }
1947 EXPORT_SYMBOL_GPL(usb_free_streams);
1948
1949 /* Protect against drivers that try to unlink URBs after the device
1950  * is gone, by waiting until all unlinks for @udev are finished.
1951  * Since we don't currently track URBs by device, simply wait until
1952  * nothing is running in the locked region of usb_hcd_unlink_urb().
1953  */
1954 void usb_hcd_synchronize_unlinks(struct usb_device *udev)
1955 {
1956         spin_lock_irq(&hcd_urb_unlink_lock);
1957         spin_unlock_irq(&hcd_urb_unlink_lock);
1958 }
1959
1960 /*-------------------------------------------------------------------------*/
1961
1962 /* called in any context */
1963 int usb_hcd_get_frame_number (struct usb_device *udev)
1964 {
1965         struct usb_hcd  *hcd = bus_to_hcd(udev->bus);
1966
1967         if (!HCD_RH_RUNNING(hcd))
1968                 return -ESHUTDOWN;
1969         return hcd->driver->get_frame_number (hcd);
1970 }
1971
1972 /*-------------------------------------------------------------------------*/
1973
1974 #ifdef  CONFIG_PM
1975
1976 int hcd_bus_suspend(struct usb_device *rhdev, pm_message_t msg)
1977 {
1978         struct usb_hcd  *hcd = container_of(rhdev->bus, struct usb_hcd, self);
1979         int             status;
1980         int             old_state = hcd->state;
1981
1982         dev_dbg(&rhdev->dev, "bus %ssuspend, wakeup %d\n",
1983                         (PMSG_IS_AUTO(msg) ? "auto-" : ""),
1984                         rhdev->do_remote_wakeup);
1985         if (HCD_DEAD(hcd)) {
1986                 dev_dbg(&rhdev->dev, "skipped %s of dead bus\n", "suspend");
1987                 return 0;
1988         }
1989
1990         if (!hcd->driver->bus_suspend) {
1991                 status = -ENOENT;
1992         } else {
1993                 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
1994                 hcd->state = HC_STATE_QUIESCING;
1995                 status = hcd->driver->bus_suspend(hcd);
1996         }
1997         if (status == 0) {
1998                 usb_set_device_state(rhdev, USB_STATE_SUSPENDED);
1999                 hcd->state = HC_STATE_SUSPENDED;
2000
2001                 /* Did we race with a root-hub wakeup event? */
2002                 if (rhdev->do_remote_wakeup) {
2003                         char    buffer[6];
2004
2005                         status = hcd->driver->hub_status_data(hcd, buffer);
2006                         if (status != 0) {
2007                                 dev_dbg(&rhdev->dev, "suspend raced with wakeup event\n");
2008                                 hcd_bus_resume(rhdev, PMSG_AUTO_RESUME);
2009                                 status = -EBUSY;
2010                         }
2011                 }
2012         } else {
2013                 spin_lock_irq(&hcd_root_hub_lock);
2014                 if (!HCD_DEAD(hcd)) {
2015                         set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2016                         hcd->state = old_state;
2017                 }
2018                 spin_unlock_irq(&hcd_root_hub_lock);
2019                 dev_dbg(&rhdev->dev, "bus %s fail, err %d\n",
2020                                 "suspend", status);
2021         }
2022         return status;
2023 }
2024
2025 int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg)
2026 {
2027         struct usb_hcd  *hcd = container_of(rhdev->bus, struct usb_hcd, self);
2028         int             status;
2029         int             old_state = hcd->state;
2030
2031         dev_dbg(&rhdev->dev, "usb %sresume\n",
2032                         (PMSG_IS_AUTO(msg) ? "auto-" : ""));
2033         if (HCD_DEAD(hcd)) {
2034                 dev_dbg(&rhdev->dev, "skipped %s of dead bus\n", "resume");
2035                 return 0;
2036         }
2037         if (!hcd->driver->bus_resume)
2038                 return -ENOENT;
2039         if (HCD_RH_RUNNING(hcd))
2040                 return 0;
2041
2042         hcd->state = HC_STATE_RESUMING;
2043         status = hcd->driver->bus_resume(hcd);
2044         clear_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags);
2045         if (status == 0) {
2046                 struct usb_device *udev;
2047                 int port1;
2048
2049                 spin_lock_irq(&hcd_root_hub_lock);
2050                 if (!HCD_DEAD(hcd)) {
2051                         usb_set_device_state(rhdev, rhdev->actconfig
2052                                         ? USB_STATE_CONFIGURED
2053                                         : USB_STATE_ADDRESS);
2054                         set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2055                         hcd->state = HC_STATE_RUNNING;
2056                 }
2057                 spin_unlock_irq(&hcd_root_hub_lock);
2058
2059                 /*
2060                  * Check whether any of the enabled ports on the root hub are
2061                  * unsuspended.  If they are then a TRSMRCY delay is needed
2062                  * (this is what the USB-2 spec calls a "global resume").
2063                  * Otherwise we can skip the delay.
2064                  */
2065                 usb_hub_for_each_child(rhdev, port1, udev) {
2066                         if (udev->state != USB_STATE_NOTATTACHED &&
2067                                         !udev->port_is_suspended) {
2068                                 usleep_range(10000, 11000);     /* TRSMRCY */
2069                                 break;
2070                         }
2071                 }
2072         } else {
2073                 hcd->state = old_state;
2074                 dev_dbg(&rhdev->dev, "bus %s fail, err %d\n",
2075                                 "resume", status);
2076                 if (status != -ESHUTDOWN)
2077                         usb_hc_died(hcd);
2078         }
2079         return status;
2080 }
2081
2082 #endif  /* CONFIG_PM */
2083
2084 #ifdef  CONFIG_USB_SUSPEND
2085
2086 /* Workqueue routine for root-hub remote wakeup */
2087 static void hcd_resume_work(struct work_struct *work)
2088 {
2089         struct usb_hcd *hcd = container_of(work, struct usb_hcd, wakeup_work);
2090         struct usb_device *udev = hcd->self.root_hub;
2091
2092         usb_lock_device(udev);
2093         usb_remote_wakeup(udev);
2094         usb_unlock_device(udev);
2095 }
2096
2097 /**
2098  * usb_hcd_resume_root_hub - called by HCD to resume its root hub 
2099  * @hcd: host controller for this root hub
2100  *
2101  * The USB host controller calls this function when its root hub is
2102  * suspended (with the remote wakeup feature enabled) and a remote
2103  * wakeup request is received.  The routine submits a workqueue request
2104  * to resume the root hub (that is, manage its downstream ports again).
2105  */
2106 void usb_hcd_resume_root_hub (struct usb_hcd *hcd)
2107 {
2108         unsigned long flags;
2109
2110         spin_lock_irqsave (&hcd_root_hub_lock, flags);
2111         if (hcd->rh_registered) {
2112                 set_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags);
2113                 queue_work(pm_wq, &hcd->wakeup_work);
2114         }
2115         spin_unlock_irqrestore (&hcd_root_hub_lock, flags);
2116 }
2117 EXPORT_SYMBOL_GPL(usb_hcd_resume_root_hub);
2118
2119 #endif  /* CONFIG_USB_SUSPEND */
2120
2121 /*-------------------------------------------------------------------------*/
2122
2123 #ifdef  CONFIG_USB_OTG
2124
2125 /**
2126  * usb_bus_start_enum - start immediate enumeration (for OTG)
2127  * @bus: the bus (must use hcd framework)
2128  * @port_num: 1-based number of port; usually bus->otg_port
2129  * Context: in_interrupt()
2130  *
2131  * Starts enumeration, with an immediate reset followed later by
2132  * khubd identifying and possibly configuring the device.
2133  * This is needed by OTG controller drivers, where it helps meet
2134  * HNP protocol timing requirements for starting a port reset.
2135  */
2136 int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num)
2137 {
2138         struct usb_hcd          *hcd;
2139         int                     status = -EOPNOTSUPP;
2140
2141         /* NOTE: since HNP can't start by grabbing the bus's address0_sem,
2142          * boards with root hubs hooked up to internal devices (instead of
2143          * just the OTG port) may need more attention to resetting...
2144          */
2145         hcd = container_of (bus, struct usb_hcd, self);
2146         if (port_num && hcd->driver->start_port_reset)
2147                 status = hcd->driver->start_port_reset(hcd, port_num);
2148
2149         /* run khubd shortly after (first) root port reset finishes;
2150          * it may issue others, until at least 50 msecs have passed.
2151          */
2152         if (status == 0)
2153                 mod_timer(&hcd->rh_timer, jiffies + msecs_to_jiffies(10));
2154         return status;
2155 }
2156 EXPORT_SYMBOL_GPL(usb_bus_start_enum);
2157
2158 #endif
2159
2160 /*-------------------------------------------------------------------------*/
2161
2162 /**
2163  * usb_hcd_irq - hook IRQs to HCD framework (bus glue)
2164  * @irq: the IRQ being raised
2165  * @__hcd: pointer to the HCD whose IRQ is being signaled
2166  *
2167  * If the controller isn't HALTed, calls the driver's irq handler.
2168  * Checks whether the controller is now dead.
2169  */
2170 irqreturn_t usb_hcd_irq (int irq, void *__hcd)
2171 {
2172         struct usb_hcd          *hcd = __hcd;
2173         unsigned long           flags;
2174         irqreturn_t             rc;
2175
2176         /* IRQF_DISABLED doesn't work correctly with shared IRQs
2177          * when the first handler doesn't use it.  So let's just
2178          * assume it's never used.
2179          */
2180         local_irq_save(flags);
2181
2182         if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd)))
2183                 rc = IRQ_NONE;
2184         else if (hcd->driver->irq(hcd) == IRQ_NONE)
2185                 rc = IRQ_NONE;
2186         else
2187                 rc = IRQ_HANDLED;
2188
2189         local_irq_restore(flags);
2190         return rc;
2191 }
2192 EXPORT_SYMBOL_GPL(usb_hcd_irq);
2193
2194 /*-------------------------------------------------------------------------*/
2195
2196 /**
2197  * usb_hc_died - report abnormal shutdown of a host controller (bus glue)
2198  * @hcd: pointer to the HCD representing the controller
2199  *
2200  * This is called by bus glue to report a USB host controller that died
2201  * while operations may still have been pending.  It's called automatically
2202  * by the PCI glue, so only glue for non-PCI busses should need to call it.
2203  *
2204  * Only call this function with the primary HCD.
2205  */
2206 void usb_hc_died (struct usb_hcd *hcd)
2207 {
2208         unsigned long flags;
2209
2210         dev_err (hcd->self.controller, "HC died; cleaning up\n");
2211
2212         spin_lock_irqsave (&hcd_root_hub_lock, flags);
2213         clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2214         set_bit(HCD_FLAG_DEAD, &hcd->flags);
2215         if (hcd->rh_registered) {
2216                 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2217
2218                 /* make khubd clean up old urbs and devices */
2219                 usb_set_device_state (hcd->self.root_hub,
2220                                 USB_STATE_NOTATTACHED);
2221                 usb_kick_khubd (hcd->self.root_hub);
2222         }
2223         if (usb_hcd_is_primary_hcd(hcd) && hcd->shared_hcd) {
2224                 hcd = hcd->shared_hcd;
2225                 if (hcd->rh_registered) {
2226                         clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2227
2228                         /* make khubd clean up old urbs and devices */
2229                         usb_set_device_state(hcd->self.root_hub,
2230                                         USB_STATE_NOTATTACHED);
2231                         usb_kick_khubd(hcd->self.root_hub);
2232                 }
2233         }
2234         spin_unlock_irqrestore (&hcd_root_hub_lock, flags);
2235         /* Make sure that the other roothub is also deallocated. */
2236 }
2237 EXPORT_SYMBOL_GPL (usb_hc_died);
2238
2239 /*-------------------------------------------------------------------------*/
2240
2241 /**
2242  * usb_create_shared_hcd - create and initialize an HCD structure
2243  * @driver: HC driver that will use this hcd
2244  * @dev: device for this HC, stored in hcd->self.controller
2245  * @bus_name: value to store in hcd->self.bus_name
2246  * @primary_hcd: a pointer to the usb_hcd structure that is sharing the
2247  *              PCI device.  Only allocate certain resources for the primary HCD
2248  * Context: !in_interrupt()
2249  *
2250  * Allocate a struct usb_hcd, with extra space at the end for the
2251  * HC driver's private data.  Initialize the generic members of the
2252  * hcd structure.
2253  *
2254  * If memory is unavailable, returns NULL.
2255  */
2256 struct usb_hcd *usb_create_shared_hcd(const struct hc_driver *driver,
2257                 struct device *dev, const char *bus_name,
2258                 struct usb_hcd *primary_hcd)
2259 {
2260         struct usb_hcd *hcd;
2261
2262         hcd = kzalloc(sizeof(*hcd) + driver->hcd_priv_size, GFP_KERNEL);
2263         if (!hcd) {
2264                 dev_dbg (dev, "hcd alloc failed\n");
2265                 return NULL;
2266         }
2267         if (primary_hcd == NULL) {
2268                 hcd->bandwidth_mutex = kmalloc(sizeof(*hcd->bandwidth_mutex),
2269                                 GFP_KERNEL);
2270                 if (!hcd->bandwidth_mutex) {
2271                         kfree(hcd);
2272                         dev_dbg(dev, "hcd bandwidth mutex alloc failed\n");
2273                         return NULL;
2274                 }
2275                 mutex_init(hcd->bandwidth_mutex);
2276                 dev_set_drvdata(dev, hcd);
2277         } else {
2278                 hcd->bandwidth_mutex = primary_hcd->bandwidth_mutex;
2279                 hcd->primary_hcd = primary_hcd;
2280                 primary_hcd->primary_hcd = primary_hcd;
2281                 hcd->shared_hcd = primary_hcd;
2282                 primary_hcd->shared_hcd = hcd;
2283         }
2284
2285         kref_init(&hcd->kref);
2286
2287         usb_bus_init(&hcd->self);
2288         hcd->self.controller = dev;
2289         hcd->self.bus_name = bus_name;
2290         hcd->self.uses_dma = (dev->dma_mask != NULL);
2291
2292         init_timer(&hcd->rh_timer);
2293         hcd->rh_timer.function = rh_timer_func;
2294         hcd->rh_timer.data = (unsigned long) hcd;
2295 #ifdef CONFIG_USB_SUSPEND
2296         INIT_WORK(&hcd->wakeup_work, hcd_resume_work);
2297 #endif
2298
2299         hcd->driver = driver;
2300         hcd->speed = driver->flags & HCD_MASK;
2301         hcd->product_desc = (driver->product_desc) ? driver->product_desc :
2302                         "USB Host Controller";
2303         return hcd;
2304 }
2305 EXPORT_SYMBOL_GPL(usb_create_shared_hcd);
2306
2307 /**
2308  * usb_create_hcd - create and initialize an HCD structure
2309  * @driver: HC driver that will use this hcd
2310  * @dev: device for this HC, stored in hcd->self.controller
2311  * @bus_name: value to store in hcd->self.bus_name
2312  * Context: !in_interrupt()
2313  *
2314  * Allocate a struct usb_hcd, with extra space at the end for the
2315  * HC driver's private data.  Initialize the generic members of the
2316  * hcd structure.
2317  *
2318  * If memory is unavailable, returns NULL.
2319  */
2320 struct usb_hcd *usb_create_hcd(const struct hc_driver *driver,
2321                 struct device *dev, const char *bus_name)
2322 {
2323         return usb_create_shared_hcd(driver, dev, bus_name, NULL);
2324 }
2325 EXPORT_SYMBOL_GPL(usb_create_hcd);
2326
2327 /*
2328  * Roothubs that share one PCI device must also share the bandwidth mutex.
2329  * Don't deallocate the bandwidth_mutex until the last shared usb_hcd is
2330  * deallocated.
2331  *
2332  * Make sure to only deallocate the bandwidth_mutex when the primary HCD is
2333  * freed.  When hcd_release() is called for the non-primary HCD, set the
2334  * primary_hcd's shared_hcd pointer to null (since the non-primary HCD will be
2335  * freed shortly).
2336  */
2337 static void hcd_release (struct kref *kref)
2338 {
2339         struct usb_hcd *hcd = container_of (kref, struct usb_hcd, kref);
2340
2341         if (usb_hcd_is_primary_hcd(hcd))
2342                 kfree(hcd->bandwidth_mutex);
2343         else
2344                 hcd->shared_hcd->shared_hcd = NULL;
2345         kfree(hcd);
2346 }
2347
2348 struct usb_hcd *usb_get_hcd (struct usb_hcd *hcd)
2349 {
2350         if (hcd)
2351                 kref_get (&hcd->kref);
2352         return hcd;
2353 }
2354 EXPORT_SYMBOL_GPL(usb_get_hcd);
2355
2356 void usb_put_hcd (struct usb_hcd *hcd)
2357 {
2358         if (hcd)
2359                 kref_put (&hcd->kref, hcd_release);
2360 }
2361 EXPORT_SYMBOL_GPL(usb_put_hcd);
2362
2363 int usb_hcd_is_primary_hcd(struct usb_hcd *hcd)
2364 {
2365         if (!hcd->primary_hcd)
2366                 return 1;
2367         return hcd == hcd->primary_hcd;
2368 }
2369 EXPORT_SYMBOL_GPL(usb_hcd_is_primary_hcd);
2370
2371 static int usb_hcd_request_irqs(struct usb_hcd *hcd,
2372                 unsigned int irqnum, unsigned long irqflags)
2373 {
2374         int retval;
2375
2376         if (hcd->driver->irq) {
2377
2378                 /* IRQF_DISABLED doesn't work as advertised when used together
2379                  * with IRQF_SHARED. As usb_hcd_irq() will always disable
2380                  * interrupts we can remove it here.
2381                  */
2382                 if (irqflags & IRQF_SHARED)
2383                         irqflags &= ~IRQF_DISABLED;
2384
2385                 snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d",
2386                                 hcd->driver->description, hcd->self.busnum);
2387                 retval = request_irq(irqnum, &usb_hcd_irq, irqflags,
2388                                 hcd->irq_descr, hcd);
2389                 if (retval != 0) {
2390                         dev_err(hcd->self.controller,
2391                                         "request interrupt %d failed\n",
2392                                         irqnum);
2393                         return retval;
2394                 }
2395                 hcd->irq = irqnum;
2396                 dev_info(hcd->self.controller, "irq %d, %s 0x%08llx\n", irqnum,
2397                                 (hcd->driver->flags & HCD_MEMORY) ?
2398                                         "io mem" : "io base",
2399                                         (unsigned long long)hcd->rsrc_start);
2400         } else {
2401                 hcd->irq = 0;
2402                 if (hcd->rsrc_start)
2403                         dev_info(hcd->self.controller, "%s 0x%08llx\n",
2404                                         (hcd->driver->flags & HCD_MEMORY) ?
2405                                         "io mem" : "io base",
2406                                         (unsigned long long)hcd->rsrc_start);
2407         }
2408         return 0;
2409 }
2410
2411 /**
2412  * usb_add_hcd - finish generic HCD structure initialization and register
2413  * @hcd: the usb_hcd structure to initialize
2414  * @irqnum: Interrupt line to allocate
2415  * @irqflags: Interrupt type flags
2416  *
2417  * Finish the remaining parts of generic HCD initialization: allocate the
2418  * buffers of consistent memory, register the bus, request the IRQ line,
2419  * and call the driver's reset() and start() routines.
2420  */
2421 int usb_add_hcd(struct usb_hcd *hcd,
2422                 unsigned int irqnum, unsigned long irqflags)
2423 {
2424         int retval;
2425         struct usb_device *rhdev;
2426
2427         dev_info(hcd->self.controller, "%s\n", hcd->product_desc);
2428
2429         /* Keep old behaviour if authorized_default is not in [0, 1]. */
2430         if (authorized_default < 0 || authorized_default > 1)
2431                 hcd->authorized_default = hcd->wireless? 0 : 1;
2432         else
2433                 hcd->authorized_default = authorized_default;
2434         set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
2435
2436         /* HC is in reset state, but accessible.  Now do the one-time init,
2437          * bottom up so that hcds can customize the root hubs before khubd
2438          * starts talking to them.  (Note, bus id is assigned early too.)
2439          */
2440         if ((retval = hcd_buffer_create(hcd)) != 0) {
2441                 dev_dbg(hcd->self.controller, "pool alloc failed\n");
2442                 return retval;
2443         }
2444
2445         if ((retval = usb_register_bus(&hcd->self)) < 0)
2446                 goto err_register_bus;
2447
2448         if ((rhdev = usb_alloc_dev(NULL, &hcd->self, 0)) == NULL) {
2449                 dev_err(hcd->self.controller, "unable to allocate root hub\n");
2450                 retval = -ENOMEM;
2451                 goto err_allocate_root_hub;
2452         }
2453         hcd->self.root_hub = rhdev;
2454
2455         switch (hcd->speed) {
2456         case HCD_USB11:
2457                 rhdev->speed = USB_SPEED_FULL;
2458                 break;
2459         case HCD_USB2:
2460                 rhdev->speed = USB_SPEED_HIGH;
2461                 break;
2462         case HCD_USB3:
2463                 rhdev->speed = USB_SPEED_SUPER;
2464                 break;
2465         default:
2466                 retval = -EINVAL;
2467                 goto err_set_rh_speed;
2468         }
2469
2470         /* wakeup flag init defaults to "everything works" for root hubs,
2471          * but drivers can override it in reset() if needed, along with
2472          * recording the overall controller's system wakeup capability.
2473          */
2474         device_set_wakeup_capable(&rhdev->dev, 1);
2475
2476         /* HCD_FLAG_RH_RUNNING doesn't matter until the root hub is
2477          * registered.  But since the controller can die at any time,
2478          * let's initialize the flag before touching the hardware.
2479          */
2480         set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2481
2482         /* "reset" is misnamed; its role is now one-time init. the controller
2483          * should already have been reset (and boot firmware kicked off etc).
2484          */
2485         if (hcd->driver->reset && (retval = hcd->driver->reset(hcd)) < 0) {
2486                 dev_err(hcd->self.controller, "can't setup\n");
2487                 goto err_hcd_driver_setup;
2488         }
2489         hcd->rh_pollable = 1;
2490
2491         /* NOTE: root hub and controller capabilities may not be the same */
2492         if (device_can_wakeup(hcd->self.controller)
2493                         && device_can_wakeup(&hcd->self.root_hub->dev))
2494                 dev_dbg(hcd->self.controller, "supports USB remote wakeup\n");
2495
2496         /* enable irqs just before we start the controller,
2497          * if the BIOS provides legacy PCI irqs.
2498          */
2499         if (usb_hcd_is_primary_hcd(hcd) && irqnum) {
2500                 retval = usb_hcd_request_irqs(hcd, irqnum, irqflags);
2501                 if (retval)
2502                         goto err_request_irq;
2503         }
2504
2505         hcd->state = HC_STATE_RUNNING;
2506         retval = hcd->driver->start(hcd);
2507         if (retval < 0) {
2508                 dev_err(hcd->self.controller, "startup error %d\n", retval);
2509                 goto err_hcd_driver_start;
2510         }
2511
2512         /* starting here, usbcore will pay attention to this root hub */
2513         if ((retval = register_root_hub(hcd)) != 0)
2514                 goto err_register_root_hub;
2515
2516         retval = sysfs_create_group(&rhdev->dev.kobj, &usb_bus_attr_group);
2517         if (retval < 0) {
2518                 printk(KERN_ERR "Cannot register USB bus sysfs attributes: %d\n",
2519                        retval);
2520                 goto error_create_attr_group;
2521         }
2522         if (hcd->uses_new_polling && HCD_POLL_RH(hcd))
2523                 usb_hcd_poll_rh_status(hcd);
2524
2525         /*
2526          * Host controllers don't generate their own wakeup requests;
2527          * they only forward requests from the root hub.  Therefore
2528          * controllers should always be enabled for remote wakeup.
2529          */
2530         device_wakeup_enable(hcd->self.controller);
2531         return retval;
2532
2533 error_create_attr_group:
2534         clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2535         if (HC_IS_RUNNING(hcd->state))
2536                 hcd->state = HC_STATE_QUIESCING;
2537         spin_lock_irq(&hcd_root_hub_lock);
2538         hcd->rh_registered = 0;
2539         spin_unlock_irq(&hcd_root_hub_lock);
2540
2541 #ifdef CONFIG_USB_SUSPEND
2542         cancel_work_sync(&hcd->wakeup_work);
2543 #endif
2544         mutex_lock(&usb_bus_list_lock);
2545         usb_disconnect(&rhdev);         /* Sets rhdev to NULL */
2546         mutex_unlock(&usb_bus_list_lock);
2547 err_register_root_hub:
2548         hcd->rh_pollable = 0;
2549         clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2550         del_timer_sync(&hcd->rh_timer);
2551         hcd->driver->stop(hcd);
2552         hcd->state = HC_STATE_HALT;
2553         clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2554         del_timer_sync(&hcd->rh_timer);
2555 err_hcd_driver_start:
2556         if (usb_hcd_is_primary_hcd(hcd) && hcd->irq > 0)
2557                 free_irq(irqnum, hcd);
2558 err_request_irq:
2559 err_hcd_driver_setup:
2560 err_set_rh_speed:
2561         usb_put_dev(hcd->self.root_hub);
2562 err_allocate_root_hub:
2563         usb_deregister_bus(&hcd->self);
2564 err_register_bus:
2565         hcd_buffer_destroy(hcd);
2566         return retval;
2567
2568 EXPORT_SYMBOL_GPL(usb_add_hcd);
2569
2570 /**
2571  * usb_remove_hcd - shutdown processing for generic HCDs
2572  * @hcd: the usb_hcd structure to remove
2573  * Context: !in_interrupt()
2574  *
2575  * Disconnects the root hub, then reverses the effects of usb_add_hcd(),
2576  * invoking the HCD's stop() method.
2577  */
2578 void usb_remove_hcd(struct usb_hcd *hcd)
2579 {
2580         struct usb_device *rhdev = hcd->self.root_hub;
2581
2582         dev_info(hcd->self.controller, "remove, state %x\n", hcd->state);
2583
2584         usb_get_dev(rhdev);
2585         sysfs_remove_group(&rhdev->dev.kobj, &usb_bus_attr_group);
2586
2587         clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2588         if (HC_IS_RUNNING (hcd->state))
2589                 hcd->state = HC_STATE_QUIESCING;
2590
2591         dev_dbg(hcd->self.controller, "roothub graceful disconnect\n");
2592         spin_lock_irq (&hcd_root_hub_lock);
2593         hcd->rh_registered = 0;
2594         spin_unlock_irq (&hcd_root_hub_lock);
2595
2596 #ifdef CONFIG_USB_SUSPEND
2597         cancel_work_sync(&hcd->wakeup_work);
2598 #endif
2599
2600         mutex_lock(&usb_bus_list_lock);
2601         usb_disconnect(&rhdev);         /* Sets rhdev to NULL */
2602         mutex_unlock(&usb_bus_list_lock);
2603
2604         /* Prevent any more root-hub status calls from the timer.
2605          * The HCD might still restart the timer (if a port status change
2606          * interrupt occurs), but usb_hcd_poll_rh_status() won't invoke
2607          * the hub_status_data() callback.
2608          */
2609         hcd->rh_pollable = 0;
2610         clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2611         del_timer_sync(&hcd->rh_timer);
2612
2613         hcd->driver->stop(hcd);
2614         hcd->state = HC_STATE_HALT;
2615
2616         /* In case the HCD restarted the timer, stop it again. */
2617         clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2618         del_timer_sync(&hcd->rh_timer);
2619
2620         if (usb_hcd_is_primary_hcd(hcd)) {
2621                 if (hcd->irq > 0)
2622                         free_irq(hcd->irq, hcd);
2623         }
2624
2625         usb_put_dev(hcd->self.root_hub);
2626         usb_deregister_bus(&hcd->self);
2627         hcd_buffer_destroy(hcd);
2628 }
2629 EXPORT_SYMBOL_GPL(usb_remove_hcd);
2630
2631 void
2632 usb_hcd_platform_shutdown(struct platform_device* dev)
2633 {
2634         struct usb_hcd *hcd = platform_get_drvdata(dev);
2635
2636         if (hcd->driver->shutdown)
2637                 hcd->driver->shutdown(hcd);
2638 }
2639 EXPORT_SYMBOL_GPL(usb_hcd_platform_shutdown);
2640
2641 /*-------------------------------------------------------------------------*/
2642
2643 #if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE)
2644
2645 struct usb_mon_operations *mon_ops;
2646
2647 /*
2648  * The registration is unlocked.
2649  * We do it this way because we do not want to lock in hot paths.
2650  *
2651  * Notice that the code is minimally error-proof. Because usbmon needs
2652  * symbols from usbcore, usbcore gets referenced and cannot be unloaded first.
2653  */
2654  
2655 int usb_mon_register (struct usb_mon_operations *ops)
2656 {
2657
2658         if (mon_ops)
2659                 return -EBUSY;
2660
2661         mon_ops = ops;
2662         mb();
2663         return 0;
2664 }
2665 EXPORT_SYMBOL_GPL (usb_mon_register);
2666
2667 void usb_mon_deregister (void)
2668 {
2669
2670         if (mon_ops == NULL) {
2671                 printk(KERN_ERR "USB: monitor was not registered\n");
2672                 return;
2673         }
2674         mon_ops = NULL;
2675         mb();
2676 }
2677 EXPORT_SYMBOL_GPL (usb_mon_deregister);
2678
2679 #endif /* CONFIG_USB_MON || CONFIG_USB_MON_MODULE */