1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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#include <linux/pm_runtime.h>
43
44#include <linux/usb.h>
45#include <linux/usb/hcd.h>
46
47#include "usb.h"
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86unsigned long usb_hcds_loaded;
87EXPORT_SYMBOL_GPL(usb_hcds_loaded);
88
89
90LIST_HEAD (usb_bus_list);
91EXPORT_SYMBOL_GPL (usb_bus_list);
92
93
94#define USB_MAXBUS 64
95struct usb_busmap {
96 unsigned long busmap [USB_MAXBUS / (8*sizeof (unsigned long))];
97};
98static struct usb_busmap busmap;
99
100
101DEFINE_MUTEX(usb_bus_list_lock);
102EXPORT_SYMBOL_GPL (usb_bus_list_lock);
103
104
105static DEFINE_SPINLOCK(hcd_root_hub_lock);
106
107
108static DEFINE_SPINLOCK(hcd_urb_list_lock);
109
110
111static DEFINE_SPINLOCK(hcd_urb_unlink_lock);
112
113
114DECLARE_WAIT_QUEUE_HEAD(usb_kill_urb_queue);
115
116static inline int is_root_hub(struct usb_device *udev)
117{
118 return (udev->parent == NULL);
119}
120
121
122
123
124
125
126
127
128#define KERNEL_REL bin2bcd(((LINUX_VERSION_CODE >> 16) & 0x0ff))
129#define KERNEL_VER bin2bcd(((LINUX_VERSION_CODE >> 8) & 0x0ff))
130
131
132static const u8 usb3_rh_dev_descriptor[18] = {
133 0x12,
134 0x01,
135 0x00, 0x03,
136
137 0x09,
138 0x00,
139 0x03,
140 0x09,
141
142 0x6b, 0x1d,
143 0x03, 0x00,
144 KERNEL_VER, KERNEL_REL,
145
146 0x03,
147 0x02,
148 0x01,
149 0x01
150};
151
152
153static const u8 usb2_rh_dev_descriptor [18] = {
154 0x12,
155 0x01,
156 0x00, 0x02,
157
158 0x09,
159 0x00,
160 0x00,
161 0x40,
162
163 0x6b, 0x1d,
164 0x02, 0x00,
165 KERNEL_VER, KERNEL_REL,
166
167 0x03,
168 0x02,
169 0x01,
170 0x01
171};
172
173
174
175
176static const u8 usb11_rh_dev_descriptor [18] = {
177 0x12,
178 0x01,
179 0x10, 0x01,
180
181 0x09,
182 0x00,
183 0x00,
184 0x40,
185
186 0x6b, 0x1d,
187 0x01, 0x00,
188 KERNEL_VER, KERNEL_REL,
189
190 0x03,
191 0x02,
192 0x01,
193 0x01
194};
195
196
197
198
199
200
201static const u8 fs_rh_config_descriptor [] = {
202
203
204 0x09,
205 0x02,
206 0x19, 0x00,
207 0x01,
208 0x01,
209 0x00,
210 0xc0,
211
212
213
214
215 0x00,
216
217
218
219
220
221
222
223
224
225
226
227
228
229 0x09,
230 0x04,
231 0x00,
232 0x00,
233 0x01,
234 0x09,
235 0x00,
236 0x00,
237 0x00,
238
239
240 0x07,
241 0x05,
242 0x81,
243 0x03,
244 0x02, 0x00,
245 0xff
246};
247
248static const u8 hs_rh_config_descriptor [] = {
249
250
251 0x09,
252 0x02,
253 0x19, 0x00,
254 0x01,
255 0x01,
256 0x00,
257 0xc0,
258
259
260
261
262 0x00,
263
264
265
266
267
268
269
270
271
272
273
274
275
276 0x09,
277 0x04,
278 0x00,
279 0x00,
280 0x01,
281 0x09,
282 0x00,
283 0x00,
284 0x00,
285
286
287 0x07,
288 0x05,
289 0x81,
290 0x03,
291
292
293 (USB_MAXCHILDREN + 1 + 7) / 8, 0x00,
294 0x0c
295};
296
297static const u8 ss_rh_config_descriptor[] = {
298
299 0x09,
300 0x02,
301 0x1f, 0x00,
302 0x01,
303 0x01,
304 0x00,
305 0xc0,
306
307
308
309
310 0x00,
311
312
313 0x09,
314 0x04,
315 0x00,
316 0x00,
317 0x01,
318 0x09,
319 0x00,
320 0x00,
321 0x00,
322
323
324 0x07,
325 0x05,
326 0x81,
327 0x03,
328
329
330 (USB_MAXCHILDREN + 1 + 7) / 8, 0x00,
331 0x0c,
332
333
334 0x06,
335 0x30,
336 0x00,
337 0x00,
338 0x02, 0x00
339};
340
341
342
343
344
345
346static int authorized_default = -1;
347module_param(authorized_default, int, S_IRUGO|S_IWUSR);
348MODULE_PARM_DESC(authorized_default,
349 "Default USB device authorization: 0 is not authorized, 1 is "
350 "authorized, -1 is authorized except for wireless USB (default, "
351 "old behaviour");
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366static unsigned
367ascii2desc(char const *s, u8 *buf, unsigned len)
368{
369 unsigned n, t = 2 + 2*strlen(s);
370
371 if (t > 254)
372 t = 254;
373 if (len > t)
374 len = t;
375
376 t += USB_DT_STRING << 8;
377
378 n = len;
379 while (n--) {
380 *buf++ = t;
381 if (!n--)
382 break;
383 *buf++ = t >> 8;
384 t = (unsigned char)*s++;
385 }
386 return len;
387}
388
389
390
391
392
393
394
395
396
397
398
399
400
401static unsigned
402rh_string(int id, struct usb_hcd const *hcd, u8 *data, unsigned len)
403{
404 char buf[100];
405 char const *s;
406 static char const langids[4] = {4, USB_DT_STRING, 0x09, 0x04};
407
408
409 switch (id) {
410 case 0:
411
412
413 if (len > 4)
414 len = 4;
415 memcpy(data, langids, len);
416 return len;
417 case 1:
418
419 s = hcd->self.bus_name;
420 break;
421 case 2:
422
423 s = hcd->product_desc;
424 break;
425 case 3:
426
427 snprintf (buf, sizeof buf, "%s %s %s", init_utsname()->sysname,
428 init_utsname()->release, hcd->driver->description);
429 s = buf;
430 break;
431 default:
432
433 return 0;
434 }
435
436 return ascii2desc(s, data, len);
437}
438
439
440
441static int rh_call_control (struct usb_hcd *hcd, struct urb *urb)
442{
443 struct usb_ctrlrequest *cmd;
444 u16 typeReq, wValue, wIndex, wLength;
445 u8 *ubuf = urb->transfer_buffer;
446
447
448
449
450 u8 tbuf[USB_DT_BOS_SIZE + USB_DT_USB_SS_CAP_SIZE]
451 __attribute__((aligned(4)));
452 const u8 *bufp = tbuf;
453 unsigned len = 0;
454 int status;
455 u8 patch_wakeup = 0;
456 u8 patch_protocol = 0;
457
458 might_sleep();
459
460 spin_lock_irq(&hcd_root_hub_lock);
461 status = usb_hcd_link_urb_to_ep(hcd, urb);
462 spin_unlock_irq(&hcd_root_hub_lock);
463 if (status)
464 return status;
465 urb->hcpriv = hcd;
466
467 cmd = (struct usb_ctrlrequest *) urb->setup_packet;
468 typeReq = (cmd->bRequestType << 8) | cmd->bRequest;
469 wValue = le16_to_cpu (cmd->wValue);
470 wIndex = le16_to_cpu (cmd->wIndex);
471 wLength = le16_to_cpu (cmd->wLength);
472
473 if (wLength > urb->transfer_buffer_length)
474 goto error;
475
476 urb->actual_length = 0;
477 switch (typeReq) {
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497 case DeviceRequest | USB_REQ_GET_STATUS:
498 tbuf [0] = (device_may_wakeup(&hcd->self.root_hub->dev)
499 << USB_DEVICE_REMOTE_WAKEUP)
500 | (1 << USB_DEVICE_SELF_POWERED);
501 tbuf [1] = 0;
502 len = 2;
503 break;
504 case DeviceOutRequest | USB_REQ_CLEAR_FEATURE:
505 if (wValue == USB_DEVICE_REMOTE_WAKEUP)
506 device_set_wakeup_enable(&hcd->self.root_hub->dev, 0);
507 else
508 goto error;
509 break;
510 case DeviceOutRequest | USB_REQ_SET_FEATURE:
511 if (device_can_wakeup(&hcd->self.root_hub->dev)
512 && wValue == USB_DEVICE_REMOTE_WAKEUP)
513 device_set_wakeup_enable(&hcd->self.root_hub->dev, 1);
514 else
515 goto error;
516 break;
517 case DeviceRequest | USB_REQ_GET_CONFIGURATION:
518 tbuf [0] = 1;
519 len = 1;
520
521 case DeviceOutRequest | USB_REQ_SET_CONFIGURATION:
522 break;
523 case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
524 switch (wValue & 0xff00) {
525 case USB_DT_DEVICE << 8:
526 switch (hcd->speed) {
527 case HCD_USB3:
528 bufp = usb3_rh_dev_descriptor;
529 break;
530 case HCD_USB2:
531 bufp = usb2_rh_dev_descriptor;
532 break;
533 case HCD_USB11:
534 bufp = usb11_rh_dev_descriptor;
535 break;
536 default:
537 goto error;
538 }
539 len = 18;
540 if (hcd->has_tt)
541 patch_protocol = 1;
542 break;
543 case USB_DT_CONFIG << 8:
544 switch (hcd->speed) {
545 case HCD_USB3:
546 bufp = ss_rh_config_descriptor;
547 len = sizeof ss_rh_config_descriptor;
548 break;
549 case HCD_USB2:
550 bufp = hs_rh_config_descriptor;
551 len = sizeof hs_rh_config_descriptor;
552 break;
553 case HCD_USB11:
554 bufp = fs_rh_config_descriptor;
555 len = sizeof fs_rh_config_descriptor;
556 break;
557 default:
558 goto error;
559 }
560 if (device_can_wakeup(&hcd->self.root_hub->dev))
561 patch_wakeup = 1;
562 break;
563 case USB_DT_STRING << 8:
564 if ((wValue & 0xff) < 4)
565 urb->actual_length = rh_string(wValue & 0xff,
566 hcd, ubuf, wLength);
567 else
568 goto error;
569 break;
570 case USB_DT_BOS << 8:
571 goto nongeneric;
572 default:
573 goto error;
574 }
575 break;
576 case DeviceRequest | USB_REQ_GET_INTERFACE:
577 tbuf [0] = 0;
578 len = 1;
579
580 case DeviceOutRequest | USB_REQ_SET_INTERFACE:
581 break;
582 case DeviceOutRequest | USB_REQ_SET_ADDRESS:
583
584 dev_dbg (hcd->self.controller, "root hub device address %d\n",
585 wValue);
586 break;
587
588
589
590
591
592 case EndpointRequest | USB_REQ_GET_STATUS:
593
594 tbuf [0] = 0;
595 tbuf [1] = 0;
596 len = 2;
597
598 case EndpointOutRequest | USB_REQ_CLEAR_FEATURE:
599 case EndpointOutRequest | USB_REQ_SET_FEATURE:
600 dev_dbg (hcd->self.controller, "no endpoint features yet\n");
601 break;
602
603
604
605 default:
606nongeneric:
607
608 switch (typeReq) {
609 case GetHubStatus:
610 case GetPortStatus:
611 len = 4;
612 break;
613 case GetHubDescriptor:
614 len = sizeof (struct usb_hub_descriptor);
615 break;
616 case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
617
618 break;
619 }
620 status = hcd->driver->hub_control (hcd,
621 typeReq, wValue, wIndex,
622 tbuf, wLength);
623
624 if (typeReq == GetHubDescriptor)
625 usb_hub_adjust_deviceremovable(hcd->self.root_hub,
626 (struct usb_hub_descriptor *)tbuf);
627 break;
628error:
629
630 status = -EPIPE;
631 }
632
633 if (status < 0) {
634 len = 0;
635 if (status != -EPIPE) {
636 dev_dbg (hcd->self.controller,
637 "CTRL: TypeReq=0x%x val=0x%x "
638 "idx=0x%x len=%d ==> %d\n",
639 typeReq, wValue, wIndex,
640 wLength, status);
641 }
642 } else if (status > 0) {
643
644 len = status;
645 status = 0;
646 }
647 if (len) {
648 if (urb->transfer_buffer_length < len)
649 len = urb->transfer_buffer_length;
650 urb->actual_length = len;
651
652 memcpy (ubuf, bufp, len);
653
654
655 if (patch_wakeup &&
656 len > offsetof (struct usb_config_descriptor,
657 bmAttributes))
658 ((struct usb_config_descriptor *)ubuf)->bmAttributes
659 |= USB_CONFIG_ATT_WAKEUP;
660
661
662 if (patch_protocol &&
663 len > offsetof(struct usb_device_descriptor,
664 bDeviceProtocol))
665 ((struct usb_device_descriptor *) ubuf)->
666 bDeviceProtocol = USB_HUB_PR_HS_SINGLE_TT;
667 }
668
669
670 spin_lock_irq(&hcd_root_hub_lock);
671 usb_hcd_unlink_urb_from_ep(hcd, urb);
672
673
674
675
676
677 spin_unlock(&hcd_root_hub_lock);
678 usb_hcd_giveback_urb(hcd, urb, status);
679 spin_lock(&hcd_root_hub_lock);
680
681 spin_unlock_irq(&hcd_root_hub_lock);
682 return 0;
683}
684
685
686
687
688
689
690
691
692
693
694
695void usb_hcd_poll_rh_status(struct usb_hcd *hcd)
696{
697 struct urb *urb;
698 int length;
699 unsigned long flags;
700 char buffer[6];
701
702 if (unlikely(!hcd->rh_pollable))
703 return;
704 if (!hcd->uses_new_polling && !hcd->status_urb)
705 return;
706
707 length = hcd->driver->hub_status_data(hcd, buffer);
708 if (length > 0) {
709
710
711 spin_lock_irqsave(&hcd_root_hub_lock, flags);
712 urb = hcd->status_urb;
713 if (urb) {
714 clear_bit(HCD_FLAG_POLL_PENDING, &hcd->flags);
715 hcd->status_urb = NULL;
716 urb->actual_length = length;
717 memcpy(urb->transfer_buffer, buffer, length);
718
719 usb_hcd_unlink_urb_from_ep(hcd, urb);
720 spin_unlock(&hcd_root_hub_lock);
721 usb_hcd_giveback_urb(hcd, urb, 0);
722 spin_lock(&hcd_root_hub_lock);
723 } else {
724 length = 0;
725 set_bit(HCD_FLAG_POLL_PENDING, &hcd->flags);
726 }
727 spin_unlock_irqrestore(&hcd_root_hub_lock, flags);
728 }
729
730
731
732
733
734 if (hcd->uses_new_polling ? HCD_POLL_RH(hcd) :
735 (length == 0 && hcd->status_urb != NULL))
736 mod_timer (&hcd->rh_timer, (jiffies/(HZ/4) + 1) * (HZ/4));
737}
738EXPORT_SYMBOL_GPL(usb_hcd_poll_rh_status);
739
740
741static void rh_timer_func (unsigned long _hcd)
742{
743 usb_hcd_poll_rh_status((struct usb_hcd *) _hcd);
744}
745
746
747
748static int rh_queue_status (struct usb_hcd *hcd, struct urb *urb)
749{
750 int retval;
751 unsigned long flags;
752 unsigned len = 1 + (urb->dev->maxchild / 8);
753
754 spin_lock_irqsave (&hcd_root_hub_lock, flags);
755 if (hcd->status_urb || urb->transfer_buffer_length < len) {
756 dev_dbg (hcd->self.controller, "not queuing rh status urb\n");
757 retval = -EINVAL;
758 goto done;
759 }
760
761 retval = usb_hcd_link_urb_to_ep(hcd, urb);
762 if (retval)
763 goto done;
764
765 hcd->status_urb = urb;
766 urb->hcpriv = hcd;
767 if (!hcd->uses_new_polling)
768 mod_timer(&hcd->rh_timer, (jiffies/(HZ/4) + 1) * (HZ/4));
769
770
771 else if (HCD_POLL_PENDING(hcd))
772 mod_timer(&hcd->rh_timer, jiffies);
773 retval = 0;
774 done:
775 spin_unlock_irqrestore (&hcd_root_hub_lock, flags);
776 return retval;
777}
778
779static int rh_urb_enqueue (struct usb_hcd *hcd, struct urb *urb)
780{
781 if (usb_endpoint_xfer_int(&urb->ep->desc))
782 return rh_queue_status (hcd, urb);
783 if (usb_endpoint_xfer_control(&urb->ep->desc))
784 return rh_call_control (hcd, urb);
785 return -EINVAL;
786}
787
788
789
790
791
792
793static int usb_rh_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
794{
795 unsigned long flags;
796 int rc;
797
798 spin_lock_irqsave(&hcd_root_hub_lock, flags);
799 rc = usb_hcd_check_unlink_urb(hcd, urb, status);
800 if (rc)
801 goto done;
802
803 if (usb_endpoint_num(&urb->ep->desc) == 0) {
804 ;
805
806 } else {
807 if (!hcd->uses_new_polling)
808 del_timer (&hcd->rh_timer);
809 if (urb == hcd->status_urb) {
810 hcd->status_urb = NULL;
811 usb_hcd_unlink_urb_from_ep(hcd, urb);
812
813 spin_unlock(&hcd_root_hub_lock);
814 usb_hcd_giveback_urb(hcd, urb, status);
815 spin_lock(&hcd_root_hub_lock);
816 }
817 }
818 done:
819 spin_unlock_irqrestore(&hcd_root_hub_lock, flags);
820 return rc;
821}
822
823
824
825
826
827
828static ssize_t usb_host_authorized_default_show(struct device *dev,
829 struct device_attribute *attr,
830 char *buf)
831{
832 struct usb_device *rh_usb_dev = to_usb_device(dev);
833 struct usb_bus *usb_bus = rh_usb_dev->bus;
834 struct usb_hcd *usb_hcd;
835
836 if (usb_bus == NULL)
837 return -ENODEV;
838 usb_hcd = bus_to_hcd(usb_bus);
839 return snprintf(buf, PAGE_SIZE, "%u\n", usb_hcd->authorized_default);
840}
841
842static ssize_t usb_host_authorized_default_store(struct device *dev,
843 struct device_attribute *attr,
844 const char *buf, size_t size)
845{
846 ssize_t result;
847 unsigned val;
848 struct usb_device *rh_usb_dev = to_usb_device(dev);
849 struct usb_bus *usb_bus = rh_usb_dev->bus;
850 struct usb_hcd *usb_hcd;
851
852 if (usb_bus == NULL)
853 return -ENODEV;
854 usb_hcd = bus_to_hcd(usb_bus);
855 result = sscanf(buf, "%u\n", &val);
856 if (result == 1) {
857 usb_hcd->authorized_default = val? 1 : 0;
858 result = size;
859 }
860 else
861 result = -EINVAL;
862 return result;
863}
864
865static DEVICE_ATTR(authorized_default, 0644,
866 usb_host_authorized_default_show,
867 usb_host_authorized_default_store);
868
869
870
871static struct attribute *usb_bus_attrs[] = {
872 &dev_attr_authorized_default.attr,
873 NULL,
874};
875
876static struct attribute_group usb_bus_attr_group = {
877 .name = NULL,
878 .attrs = usb_bus_attrs,
879};
880
881
882
883
884
885
886
887
888
889
890
891
892static void usb_bus_init (struct usb_bus *bus)
893{
894 memset (&bus->devmap, 0, sizeof(struct usb_devmap));
895
896 bus->devnum_next = 1;
897
898 bus->root_hub = NULL;
899 bus->busnum = -1;
900 bus->bandwidth_allocated = 0;
901 bus->bandwidth_int_reqs = 0;
902 bus->bandwidth_isoc_reqs = 0;
903
904 INIT_LIST_HEAD (&bus->bus_list);
905}
906
907
908
909
910
911
912
913
914
915
916
917static int usb_register_bus(struct usb_bus *bus)
918{
919 int result = -E2BIG;
920 int busnum;
921
922 mutex_lock(&usb_bus_list_lock);
923 busnum = find_next_zero_bit (busmap.busmap, USB_MAXBUS, 1);
924 if (busnum >= USB_MAXBUS) {
925 printk (KERN_ERR "%s: too many buses\n", usbcore_name);
926 goto error_find_busnum;
927 }
928 set_bit (busnum, busmap.busmap);
929 bus->busnum = busnum;
930
931
932 list_add (&bus->bus_list, &usb_bus_list);
933 mutex_unlock(&usb_bus_list_lock);
934
935 usb_notify_add_bus(bus);
936
937 dev_info (bus->controller, "new USB bus registered, assigned bus "
938 "number %d\n", bus->busnum);
939 return 0;
940
941error_find_busnum:
942 mutex_unlock(&usb_bus_list_lock);
943 return result;
944}
945
946
947
948
949
950
951
952
953
954static void usb_deregister_bus (struct usb_bus *bus)
955{
956 dev_info (bus->controller, "USB bus %d deregistered\n", bus->busnum);
957
958
959
960
961
962
963 mutex_lock(&usb_bus_list_lock);
964 list_del (&bus->bus_list);
965 mutex_unlock(&usb_bus_list_lock);
966
967 usb_notify_remove_bus(bus);
968
969 clear_bit (bus->busnum, busmap.busmap);
970}
971
972
973
974
975
976
977
978
979
980
981static int register_root_hub(struct usb_hcd *hcd)
982{
983 struct device *parent_dev = hcd->self.controller;
984 struct usb_device *usb_dev = hcd->self.root_hub;
985 const int devnum = 1;
986 int retval;
987
988 usb_dev->devnum = devnum;
989 usb_dev->bus->devnum_next = devnum + 1;
990 memset (&usb_dev->bus->devmap.devicemap, 0,
991 sizeof usb_dev->bus->devmap.devicemap);
992 set_bit (devnum, usb_dev->bus->devmap.devicemap);
993 usb_set_device_state(usb_dev, USB_STATE_ADDRESS);
994
995 mutex_lock(&usb_bus_list_lock);
996
997 usb_dev->ep0.desc.wMaxPacketSize = cpu_to_le16(64);
998 retval = usb_get_device_descriptor(usb_dev, USB_DT_DEVICE_SIZE);
999 if (retval != sizeof usb_dev->descriptor) {
1000 mutex_unlock(&usb_bus_list_lock);
1001 dev_dbg (parent_dev, "can't read %s device descriptor %d\n",
1002 dev_name(&usb_dev->dev), retval);
1003 return (retval < 0) ? retval : -EMSGSIZE;
1004 }
1005 if (usb_dev->speed == USB_SPEED_SUPER) {
1006 retval = usb_get_bos_descriptor(usb_dev);
1007 if (retval < 0) {
1008 mutex_unlock(&usb_bus_list_lock);
1009 dev_dbg(parent_dev, "can't read %s bos descriptor %d\n",
1010 dev_name(&usb_dev->dev), retval);
1011 return retval;
1012 }
1013 }
1014
1015 retval = usb_new_device (usb_dev);
1016 if (retval) {
1017 dev_err (parent_dev, "can't register root hub for %s, %d\n",
1018 dev_name(&usb_dev->dev), retval);
1019 } else {
1020 spin_lock_irq (&hcd_root_hub_lock);
1021 hcd->rh_registered = 1;
1022 spin_unlock_irq (&hcd_root_hub_lock);
1023
1024
1025 if (HCD_DEAD(hcd))
1026 usb_hc_died (hcd);
1027 }
1028 mutex_unlock(&usb_bus_list_lock);
1029
1030 return retval;
1031}
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044void usb_hcd_start_port_resume(struct usb_bus *bus, int portnum)
1045{
1046 unsigned bit = 1 << portnum;
1047
1048 if (!(bus->resuming_ports & bit)) {
1049 bus->resuming_ports |= bit;
1050 pm_runtime_get_noresume(&bus->root_hub->dev);
1051 }
1052}
1053EXPORT_SYMBOL_GPL(usb_hcd_start_port_resume);
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066void usb_hcd_end_port_resume(struct usb_bus *bus, int portnum)
1067{
1068 unsigned bit = 1 << portnum;
1069
1070 if (bus->resuming_ports & bit) {
1071 bus->resuming_ports &= ~bit;
1072 pm_runtime_put_noidle(&bus->root_hub->dev);
1073 }
1074}
1075EXPORT_SYMBOL_GPL(usb_hcd_end_port_resume);
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090long usb_calc_bus_time (int speed, int is_input, int isoc, int bytecount)
1091{
1092 unsigned long tmp;
1093
1094 switch (speed) {
1095 case USB_SPEED_LOW:
1096 if (is_input) {
1097 tmp = (67667L * (31L + 10L * BitTime (bytecount))) / 1000L;
1098 return (64060L + (2 * BW_HUB_LS_SETUP) + BW_HOST_DELAY + tmp);
1099 } else {
1100 tmp = (66700L * (31L + 10L * BitTime (bytecount))) / 1000L;
1101 return (64107L + (2 * BW_HUB_LS_SETUP) + BW_HOST_DELAY + tmp);
1102 }
1103 case USB_SPEED_FULL:
1104 if (isoc) {
1105 tmp = (8354L * (31L + 10L * BitTime (bytecount))) / 1000L;
1106 return (((is_input) ? 7268L : 6265L) + BW_HOST_DELAY + tmp);
1107 } else {
1108 tmp = (8354L * (31L + 10L * BitTime (bytecount))) / 1000L;
1109 return (9107L + BW_HOST_DELAY + tmp);
1110 }
1111 case USB_SPEED_HIGH:
1112
1113 if (isoc)
1114 tmp = HS_NSECS_ISO (bytecount);
1115 else
1116 tmp = HS_NSECS (bytecount);
1117 return tmp;
1118 default:
1119 pr_debug ("%s: bogus device speed!\n", usbcore_name);
1120 return -1;
1121 }
1122}
1123EXPORT_SYMBOL_GPL(usb_calc_bus_time);
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb)
1150{
1151 int rc = 0;
1152
1153 spin_lock(&hcd_urb_list_lock);
1154
1155
1156 if (unlikely(atomic_read(&urb->reject))) {
1157 rc = -EPERM;
1158 goto done;
1159 }
1160
1161 if (unlikely(!urb->ep->enabled)) {
1162 rc = -ENOENT;
1163 goto done;
1164 }
1165
1166 if (unlikely(!urb->dev->can_submit)) {
1167 rc = -EHOSTUNREACH;
1168 goto done;
1169 }
1170
1171
1172
1173
1174
1175 if (HCD_RH_RUNNING(hcd)) {
1176 urb->unlinked = 0;
1177 list_add_tail(&urb->urb_list, &urb->ep->urb_list);
1178 } else {
1179 rc = -ESHUTDOWN;
1180 goto done;
1181 }
1182 done:
1183 spin_unlock(&hcd_urb_list_lock);
1184 return rc;
1185}
1186EXPORT_SYMBOL_GPL(usb_hcd_link_urb_to_ep);
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb,
1208 int status)
1209{
1210 struct list_head *tmp;
1211
1212
1213 list_for_each(tmp, &urb->ep->urb_list) {
1214 if (tmp == &urb->urb_list)
1215 break;
1216 }
1217 if (tmp != &urb->urb_list)
1218 return -EIDRM;
1219
1220
1221
1222
1223 if (urb->unlinked)
1224 return -EBUSY;
1225 urb->unlinked = status;
1226 return 0;
1227}
1228EXPORT_SYMBOL_GPL(usb_hcd_check_unlink_urb);
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb)
1241{
1242
1243 spin_lock(&hcd_urb_list_lock);
1244 list_del_init(&urb->urb_list);
1245 spin_unlock(&hcd_urb_list_lock);
1246}
1247EXPORT_SYMBOL_GPL(usb_hcd_unlink_urb_from_ep);
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281static int hcd_alloc_coherent(struct usb_bus *bus,
1282 gfp_t mem_flags, dma_addr_t *dma_handle,
1283 void **vaddr_handle, size_t size,
1284 enum dma_data_direction dir)
1285{
1286 unsigned char *vaddr;
1287
1288 if (*vaddr_handle == NULL) {
1289 WARN_ON_ONCE(1);
1290 return -EFAULT;
1291 }
1292
1293 vaddr = hcd_buffer_alloc(bus, size + sizeof(vaddr),
1294 mem_flags, dma_handle);
1295 if (!vaddr)
1296 return -ENOMEM;
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306 put_unaligned((unsigned long)*vaddr_handle,
1307 (unsigned long *)(vaddr + size));
1308
1309 if (dir == DMA_TO_DEVICE)
1310 memcpy(vaddr, *vaddr_handle, size);
1311
1312 *vaddr_handle = vaddr;
1313 return 0;
1314}
1315
1316static void hcd_free_coherent(struct usb_bus *bus, dma_addr_t *dma_handle,
1317 void **vaddr_handle, size_t size,
1318 enum dma_data_direction dir)
1319{
1320 unsigned char *vaddr = *vaddr_handle;
1321
1322 vaddr = (void *)get_unaligned((unsigned long *)(vaddr + size));
1323
1324 if (dir == DMA_FROM_DEVICE)
1325 memcpy(vaddr, *vaddr_handle, size);
1326
1327 hcd_buffer_free(bus, size + sizeof(vaddr), *vaddr_handle, *dma_handle);
1328
1329 *vaddr_handle = vaddr;
1330 *dma_handle = 0;
1331}
1332
1333void usb_hcd_unmap_urb_setup_for_dma(struct usb_hcd *hcd, struct urb *urb)
1334{
1335 if (urb->transfer_flags & URB_SETUP_MAP_SINGLE)
1336 dma_unmap_single(hcd->self.controller,
1337 urb->setup_dma,
1338 sizeof(struct usb_ctrlrequest),
1339 DMA_TO_DEVICE);
1340 else if (urb->transfer_flags & URB_SETUP_MAP_LOCAL)
1341 hcd_free_coherent(urb->dev->bus,
1342 &urb->setup_dma,
1343 (void **) &urb->setup_packet,
1344 sizeof(struct usb_ctrlrequest),
1345 DMA_TO_DEVICE);
1346
1347
1348 urb->transfer_flags &= ~(URB_SETUP_MAP_SINGLE | URB_SETUP_MAP_LOCAL);
1349}
1350EXPORT_SYMBOL_GPL(usb_hcd_unmap_urb_setup_for_dma);
1351
1352static void unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
1353{
1354 if (hcd->driver->unmap_urb_for_dma)
1355 hcd->driver->unmap_urb_for_dma(hcd, urb);
1356 else
1357 usb_hcd_unmap_urb_for_dma(hcd, urb);
1358}
1359
1360void usb_hcd_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
1361{
1362 enum dma_data_direction dir;
1363
1364 usb_hcd_unmap_urb_setup_for_dma(hcd, urb);
1365
1366 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
1367 if (urb->transfer_flags & URB_DMA_MAP_SG)
1368 dma_unmap_sg(hcd->self.controller,
1369 urb->sg,
1370 urb->num_sgs,
1371 dir);
1372 else if (urb->transfer_flags & URB_DMA_MAP_PAGE)
1373 dma_unmap_page(hcd->self.controller,
1374 urb->transfer_dma,
1375 urb->transfer_buffer_length,
1376 dir);
1377 else if (urb->transfer_flags & URB_DMA_MAP_SINGLE)
1378 dma_unmap_single(hcd->self.controller,
1379 urb->transfer_dma,
1380 urb->transfer_buffer_length,
1381 dir);
1382 else if (urb->transfer_flags & URB_MAP_LOCAL)
1383 hcd_free_coherent(urb->dev->bus,
1384 &urb->transfer_dma,
1385 &urb->transfer_buffer,
1386 urb->transfer_buffer_length,
1387 dir);
1388
1389
1390 urb->transfer_flags &= ~(URB_DMA_MAP_SG | URB_DMA_MAP_PAGE |
1391 URB_DMA_MAP_SINGLE | URB_MAP_LOCAL);
1392}
1393EXPORT_SYMBOL_GPL(usb_hcd_unmap_urb_for_dma);
1394
1395static int map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
1396 gfp_t mem_flags)
1397{
1398 if (hcd->driver->map_urb_for_dma)
1399 return hcd->driver->map_urb_for_dma(hcd, urb, mem_flags);
1400 else
1401 return usb_hcd_map_urb_for_dma(hcd, urb, mem_flags);
1402}
1403
1404int usb_hcd_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
1405 gfp_t mem_flags)
1406{
1407 enum dma_data_direction dir;
1408 int ret = 0;
1409
1410
1411
1412
1413
1414
1415
1416 if (usb_endpoint_xfer_control(&urb->ep->desc)) {
1417 if (hcd->self.uses_pio_for_control)
1418 return ret;
1419 if (hcd->self.uses_dma) {
1420 urb->setup_dma = dma_map_single(
1421 hcd->self.controller,
1422 urb->setup_packet,
1423 sizeof(struct usb_ctrlrequest),
1424 DMA_TO_DEVICE);
1425 if (dma_mapping_error(hcd->self.controller,
1426 urb->setup_dma))
1427 return -EAGAIN;
1428 urb->transfer_flags |= URB_SETUP_MAP_SINGLE;
1429 } else if (hcd->driver->flags & HCD_LOCAL_MEM) {
1430 ret = hcd_alloc_coherent(
1431 urb->dev->bus, mem_flags,
1432 &urb->setup_dma,
1433 (void **)&urb->setup_packet,
1434 sizeof(struct usb_ctrlrequest),
1435 DMA_TO_DEVICE);
1436 if (ret)
1437 return ret;
1438 urb->transfer_flags |= URB_SETUP_MAP_LOCAL;
1439 }
1440 }
1441
1442 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
1443 if (urb->transfer_buffer_length != 0
1444 && !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)) {
1445 if (hcd->self.uses_dma) {
1446 if (urb->num_sgs) {
1447 int n;
1448
1449
1450 if (usb_endpoint_xfer_isoc(&urb->ep->desc)) {
1451 WARN_ON(1);
1452 return -EINVAL;
1453 }
1454
1455 n = dma_map_sg(
1456 hcd->self.controller,
1457 urb->sg,
1458 urb->num_sgs,
1459 dir);
1460 if (n <= 0)
1461 ret = -EAGAIN;
1462 else
1463 urb->transfer_flags |= URB_DMA_MAP_SG;
1464 urb->num_mapped_sgs = n;
1465 if (n != urb->num_sgs)
1466 urb->transfer_flags |=
1467 URB_DMA_SG_COMBINED;
1468 } else if (urb->sg) {
1469 struct scatterlist *sg = urb->sg;
1470 urb->transfer_dma = dma_map_page(
1471 hcd->self.controller,
1472 sg_page(sg),
1473 sg->offset,
1474 urb->transfer_buffer_length,
1475 dir);
1476 if (dma_mapping_error(hcd->self.controller,
1477 urb->transfer_dma))
1478 ret = -EAGAIN;
1479 else
1480 urb->transfer_flags |= URB_DMA_MAP_PAGE;
1481 } else {
1482 urb->transfer_dma = dma_map_single(
1483 hcd->self.controller,
1484 urb->transfer_buffer,
1485 urb->transfer_buffer_length,
1486 dir);
1487 if (dma_mapping_error(hcd->self.controller,
1488 urb->transfer_dma))
1489 ret = -EAGAIN;
1490 else
1491 urb->transfer_flags |= URB_DMA_MAP_SINGLE;
1492 }
1493 } else if (hcd->driver->flags & HCD_LOCAL_MEM) {
1494 ret = hcd_alloc_coherent(
1495 urb->dev->bus, mem_flags,
1496 &urb->transfer_dma,
1497 &urb->transfer_buffer,
1498 urb->transfer_buffer_length,
1499 dir);
1500 if (ret == 0)
1501 urb->transfer_flags |= URB_MAP_LOCAL;
1502 }
1503 if (ret && (urb->transfer_flags & (URB_SETUP_MAP_SINGLE |
1504 URB_SETUP_MAP_LOCAL)))
1505 usb_hcd_unmap_urb_for_dma(hcd, urb);
1506 }
1507 return ret;
1508}
1509EXPORT_SYMBOL_GPL(usb_hcd_map_urb_for_dma);
1510
1511
1512
1513
1514
1515
1516
1517
1518int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
1519{
1520 int status;
1521 struct usb_hcd *hcd = bus_to_hcd(urb->dev->bus);
1522
1523
1524
1525
1526
1527 usb_get_urb(urb);
1528 atomic_inc(&urb->use_count);
1529 atomic_inc(&urb->dev->urbnum);
1530 usbmon_urb_submit(&hcd->self, urb);
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540 if (is_root_hub(urb->dev)) {
1541 status = rh_urb_enqueue(hcd, urb);
1542 } else {
1543 status = map_urb_for_dma(hcd, urb, mem_flags);
1544 if (likely(status == 0)) {
1545 status = hcd->driver->urb_enqueue(hcd, urb, mem_flags);
1546 if (unlikely(status))
1547 unmap_urb_for_dma(hcd, urb);
1548 }
1549 }
1550
1551 if (unlikely(status)) {
1552 usbmon_urb_submit_error(&hcd->self, urb, status);
1553 urb->hcpriv = NULL;
1554 INIT_LIST_HEAD(&urb->urb_list);
1555 atomic_dec(&urb->use_count);
1556 atomic_dec(&urb->dev->urbnum);
1557 if (atomic_read(&urb->reject))
1558 wake_up(&usb_kill_urb_queue);
1559 usb_put_urb(urb);
1560 }
1561 return status;
1562}
1563
1564
1565
1566
1567
1568
1569
1570
1571static int unlink1(struct usb_hcd *hcd, struct urb *urb, int status)
1572{
1573 int value;
1574
1575 if (is_root_hub(urb->dev))
1576 value = usb_rh_urb_dequeue(hcd, urb, status);
1577 else {
1578
1579
1580
1581
1582 value = hcd->driver->urb_dequeue(hcd, urb, status);
1583 }
1584 return value;
1585}
1586
1587
1588
1589
1590
1591
1592
1593int usb_hcd_unlink_urb (struct urb *urb, int status)
1594{
1595 struct usb_hcd *hcd;
1596 int retval = -EIDRM;
1597 unsigned long flags;
1598
1599
1600
1601
1602
1603
1604 spin_lock_irqsave(&hcd_urb_unlink_lock, flags);
1605 if (atomic_read(&urb->use_count) > 0) {
1606 retval = 0;
1607 usb_get_dev(urb->dev);
1608 }
1609 spin_unlock_irqrestore(&hcd_urb_unlink_lock, flags);
1610 if (retval == 0) {
1611 hcd = bus_to_hcd(urb->dev->bus);
1612 retval = unlink1(hcd, urb, status);
1613 usb_put_dev(urb->dev);
1614 }
1615
1616 if (retval == 0)
1617 retval = -EINPROGRESS;
1618 else if (retval != -EIDRM && retval != -EBUSY)
1619 dev_dbg(&urb->dev->dev, "hcd_unlink_urb %p fail %d\n",
1620 urb, retval);
1621 return retval;
1622}
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, int status)
1644{
1645 urb->hcpriv = NULL;
1646 if (unlikely(urb->unlinked))
1647 status = urb->unlinked;
1648 else if (unlikely((urb->transfer_flags & URB_SHORT_NOT_OK) &&
1649 urb->actual_length < urb->transfer_buffer_length &&
1650 !status))
1651 status = -EREMOTEIO;
1652
1653 unmap_urb_for_dma(hcd, urb);
1654 usbmon_urb_complete(&hcd->self, urb, status);
1655 usb_unanchor_urb(urb);
1656
1657
1658 urb->status = status;
1659 urb->complete (urb);
1660 atomic_dec (&urb->use_count);
1661 if (unlikely(atomic_read(&urb->reject)))
1662 wake_up (&usb_kill_urb_queue);
1663 usb_put_urb (urb);
1664}
1665EXPORT_SYMBOL_GPL(usb_hcd_giveback_urb);
1666
1667
1668
1669
1670
1671
1672
1673void usb_hcd_flush_endpoint(struct usb_device *udev,
1674 struct usb_host_endpoint *ep)
1675{
1676 struct usb_hcd *hcd;
1677 struct urb *urb;
1678
1679 if (!ep)
1680 return;
1681 might_sleep();
1682 hcd = bus_to_hcd(udev->bus);
1683
1684
1685 spin_lock_irq(&hcd_urb_list_lock);
1686rescan:
1687 list_for_each_entry (urb, &ep->urb_list, urb_list) {
1688 int is_in;
1689
1690 if (urb->unlinked)
1691 continue;
1692 usb_get_urb (urb);
1693 is_in = usb_urb_dir_in(urb);
1694 spin_unlock(&hcd_urb_list_lock);
1695
1696
1697 unlink1(hcd, urb, -ESHUTDOWN);
1698 dev_dbg (hcd->self.controller,
1699 "shutdown urb %p ep%d%s%s\n",
1700 urb, usb_endpoint_num(&ep->desc),
1701 is_in ? "in" : "out",
1702 ({ char *s;
1703
1704 switch (usb_endpoint_type(&ep->desc)) {
1705 case USB_ENDPOINT_XFER_CONTROL:
1706 s = ""; break;
1707 case USB_ENDPOINT_XFER_BULK:
1708 s = "-bulk"; break;
1709 case USB_ENDPOINT_XFER_INT:
1710 s = "-intr"; break;
1711 default:
1712 s = "-iso"; break;
1713 };
1714 s;
1715 }));
1716 usb_put_urb (urb);
1717
1718
1719 spin_lock(&hcd_urb_list_lock);
1720 goto rescan;
1721 }
1722 spin_unlock_irq(&hcd_urb_list_lock);
1723
1724
1725 while (!list_empty (&ep->urb_list)) {
1726 spin_lock_irq(&hcd_urb_list_lock);
1727
1728
1729 urb = NULL;
1730 if (!list_empty (&ep->urb_list)) {
1731 urb = list_entry (ep->urb_list.prev, struct urb,
1732 urb_list);
1733 usb_get_urb (urb);
1734 }
1735 spin_unlock_irq(&hcd_urb_list_lock);
1736
1737 if (urb) {
1738 usb_kill_urb (urb);
1739 usb_put_urb (urb);
1740 }
1741 }
1742}
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765int usb_hcd_alloc_bandwidth(struct usb_device *udev,
1766 struct usb_host_config *new_config,
1767 struct usb_host_interface *cur_alt,
1768 struct usb_host_interface *new_alt)
1769{
1770 int num_intfs, i, j;
1771 struct usb_host_interface *alt = NULL;
1772 int ret = 0;
1773 struct usb_hcd *hcd;
1774 struct usb_host_endpoint *ep;
1775
1776 hcd = bus_to_hcd(udev->bus);
1777 if (!hcd->driver->check_bandwidth)
1778 return 0;
1779
1780
1781 if (!new_config && !cur_alt) {
1782 for (i = 1; i < 16; ++i) {
1783 ep = udev->ep_out[i];
1784 if (ep)
1785 hcd->driver->drop_endpoint(hcd, udev, ep);
1786 ep = udev->ep_in[i];
1787 if (ep)
1788 hcd->driver->drop_endpoint(hcd, udev, ep);
1789 }
1790 hcd->driver->check_bandwidth(hcd, udev);
1791 return 0;
1792 }
1793
1794
1795
1796
1797
1798 if (new_config) {
1799 num_intfs = new_config->desc.bNumInterfaces;
1800
1801
1802
1803 for (i = 1; i < 16; ++i) {
1804 ep = udev->ep_out[i];
1805 if (ep) {
1806 ret = hcd->driver->drop_endpoint(hcd, udev, ep);
1807 if (ret < 0)
1808 goto reset;
1809 }
1810 ep = udev->ep_in[i];
1811 if (ep) {
1812 ret = hcd->driver->drop_endpoint(hcd, udev, ep);
1813 if (ret < 0)
1814 goto reset;
1815 }
1816 }
1817 for (i = 0; i < num_intfs; ++i) {
1818 struct usb_host_interface *first_alt;
1819 int iface_num;
1820
1821 first_alt = &new_config->intf_cache[i]->altsetting[0];
1822 iface_num = first_alt->desc.bInterfaceNumber;
1823
1824 alt = usb_find_alt_setting(new_config, iface_num, 0);
1825 if (!alt)
1826
1827 alt = first_alt;
1828
1829 for (j = 0; j < alt->desc.bNumEndpoints; j++) {
1830 ret = hcd->driver->add_endpoint(hcd, udev, &alt->endpoint[j]);
1831 if (ret < 0)
1832 goto reset;
1833 }
1834 }
1835 }
1836 if (cur_alt && new_alt) {
1837 struct usb_interface *iface = usb_ifnum_to_if(udev,
1838 cur_alt->desc.bInterfaceNumber);
1839
1840 if (!iface)
1841 return -EINVAL;
1842 if (iface->resetting_device) {
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852 cur_alt = usb_altnum_to_altsetting(iface, 0);
1853 if (!cur_alt)
1854 cur_alt = &iface->altsetting[0];
1855 }
1856
1857
1858 for (i = 0; i < cur_alt->desc.bNumEndpoints; i++) {
1859 ret = hcd->driver->drop_endpoint(hcd, udev,
1860 &cur_alt->endpoint[i]);
1861 if (ret < 0)
1862 goto reset;
1863 }
1864
1865 for (i = 0; i < new_alt->desc.bNumEndpoints; i++) {
1866 ret = hcd->driver->add_endpoint(hcd, udev,
1867 &new_alt->endpoint[i]);
1868 if (ret < 0)
1869 goto reset;
1870 }
1871 }
1872 ret = hcd->driver->check_bandwidth(hcd, udev);
1873reset:
1874 if (ret < 0)
1875 hcd->driver->reset_bandwidth(hcd, udev);
1876 return ret;
1877}
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887void usb_hcd_disable_endpoint(struct usb_device *udev,
1888 struct usb_host_endpoint *ep)
1889{
1890 struct usb_hcd *hcd;
1891
1892 might_sleep();
1893 hcd = bus_to_hcd(udev->bus);
1894 if (hcd->driver->endpoint_disable)
1895 hcd->driver->endpoint_disable(hcd, ep);
1896}
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906void usb_hcd_reset_endpoint(struct usb_device *udev,
1907 struct usb_host_endpoint *ep)
1908{
1909 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
1910
1911 if (hcd->driver->endpoint_reset)
1912 hcd->driver->endpoint_reset(hcd, ep);
1913 else {
1914 int epnum = usb_endpoint_num(&ep->desc);
1915 int is_out = usb_endpoint_dir_out(&ep->desc);
1916 int is_control = usb_endpoint_xfer_control(&ep->desc);
1917
1918 usb_settoggle(udev, epnum, is_out, 0);
1919 if (is_control)
1920 usb_settoggle(udev, epnum, !is_out, 0);
1921 }
1922}
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936int usb_alloc_streams(struct usb_interface *interface,
1937 struct usb_host_endpoint **eps, unsigned int num_eps,
1938 unsigned int num_streams, gfp_t mem_flags)
1939{
1940 struct usb_hcd *hcd;
1941 struct usb_device *dev;
1942 int i;
1943
1944 dev = interface_to_usbdev(interface);
1945 hcd = bus_to_hcd(dev->bus);
1946 if (!hcd->driver->alloc_streams || !hcd->driver->free_streams)
1947 return -EINVAL;
1948 if (dev->speed != USB_SPEED_SUPER)
1949 return -EINVAL;
1950
1951
1952 for (i = 0; i < num_eps; i++)
1953 if (!usb_endpoint_xfer_bulk(&eps[i]->desc))
1954 return -EINVAL;
1955
1956 return hcd->driver->alloc_streams(hcd, dev, eps, num_eps,
1957 num_streams, mem_flags);
1958}
1959EXPORT_SYMBOL_GPL(usb_alloc_streams);
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971void usb_free_streams(struct usb_interface *interface,
1972 struct usb_host_endpoint **eps, unsigned int num_eps,
1973 gfp_t mem_flags)
1974{
1975 struct usb_hcd *hcd;
1976 struct usb_device *dev;
1977 int i;
1978
1979 dev = interface_to_usbdev(interface);
1980 hcd = bus_to_hcd(dev->bus);
1981 if (dev->speed != USB_SPEED_SUPER)
1982 return;
1983
1984
1985 for (i = 0; i < num_eps; i++)
1986 if (!eps[i] || !usb_endpoint_xfer_bulk(&eps[i]->desc))
1987 return;
1988
1989 hcd->driver->free_streams(hcd, dev, eps, num_eps, mem_flags);
1990}
1991EXPORT_SYMBOL_GPL(usb_free_streams);
1992
1993
1994
1995
1996
1997
1998void usb_hcd_synchronize_unlinks(struct usb_device *udev)
1999{
2000 spin_lock_irq(&hcd_urb_unlink_lock);
2001 spin_unlock_irq(&hcd_urb_unlink_lock);
2002}
2003
2004
2005
2006
2007int usb_hcd_get_frame_number (struct usb_device *udev)
2008{
2009 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2010
2011 if (!HCD_RH_RUNNING(hcd))
2012 return -ESHUTDOWN;
2013 return hcd->driver->get_frame_number (hcd);
2014}
2015
2016
2017
2018#ifdef CONFIG_PM
2019
2020int hcd_bus_suspend(struct usb_device *rhdev, pm_message_t msg)
2021{
2022 struct usb_hcd *hcd = container_of(rhdev->bus, struct usb_hcd, self);
2023 int status;
2024 int old_state = hcd->state;
2025
2026 dev_dbg(&rhdev->dev, "bus %ssuspend, wakeup %d\n",
2027 (PMSG_IS_AUTO(msg) ? "auto-" : ""),
2028 rhdev->do_remote_wakeup);
2029 if (HCD_DEAD(hcd)) {
2030 dev_dbg(&rhdev->dev, "skipped %s of dead bus\n", "suspend");
2031 return 0;
2032 }
2033
2034 if (!hcd->driver->bus_suspend) {
2035 status = -ENOENT;
2036 } else {
2037 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2038 hcd->state = HC_STATE_QUIESCING;
2039 status = hcd->driver->bus_suspend(hcd);
2040 }
2041 if (status == 0) {
2042 usb_set_device_state(rhdev, USB_STATE_SUSPENDED);
2043 hcd->state = HC_STATE_SUSPENDED;
2044
2045
2046 if (rhdev->do_remote_wakeup) {
2047 char buffer[6];
2048
2049 status = hcd->driver->hub_status_data(hcd, buffer);
2050 if (status != 0) {
2051 dev_dbg(&rhdev->dev, "suspend raced with wakeup event\n");
2052 hcd_bus_resume(rhdev, PMSG_AUTO_RESUME);
2053 status = -EBUSY;
2054 }
2055 }
2056 } else {
2057 spin_lock_irq(&hcd_root_hub_lock);
2058 if (!HCD_DEAD(hcd)) {
2059 set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2060 hcd->state = old_state;
2061 }
2062 spin_unlock_irq(&hcd_root_hub_lock);
2063 dev_dbg(&rhdev->dev, "bus %s fail, err %d\n",
2064 "suspend", status);
2065 }
2066 return status;
2067}
2068
2069int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg)
2070{
2071 struct usb_hcd *hcd = container_of(rhdev->bus, struct usb_hcd, self);
2072 int status;
2073 int old_state = hcd->state;
2074
2075 dev_dbg(&rhdev->dev, "usb %sresume\n",
2076 (PMSG_IS_AUTO(msg) ? "auto-" : ""));
2077 if (HCD_DEAD(hcd)) {
2078 dev_dbg(&rhdev->dev, "skipped %s of dead bus\n", "resume");
2079 return 0;
2080 }
2081 if (!hcd->driver->bus_resume)
2082 return -ENOENT;
2083 if (HCD_RH_RUNNING(hcd))
2084 return 0;
2085
2086 hcd->state = HC_STATE_RESUMING;
2087 status = hcd->driver->bus_resume(hcd);
2088 clear_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags);
2089 if (status == 0) {
2090 struct usb_device *udev;
2091 int port1;
2092
2093 spin_lock_irq(&hcd_root_hub_lock);
2094 if (!HCD_DEAD(hcd)) {
2095 usb_set_device_state(rhdev, rhdev->actconfig
2096 ? USB_STATE_CONFIGURED
2097 : USB_STATE_ADDRESS);
2098 set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2099 hcd->state = HC_STATE_RUNNING;
2100 }
2101 spin_unlock_irq(&hcd_root_hub_lock);
2102
2103
2104
2105
2106
2107
2108
2109 usb_hub_for_each_child(rhdev, port1, udev) {
2110 if (udev->state != USB_STATE_NOTATTACHED &&
2111 !udev->port_is_suspended) {
2112 usleep_range(10000, 11000);
2113 break;
2114 }
2115 }
2116 } else {
2117 hcd->state = old_state;
2118 dev_dbg(&rhdev->dev, "bus %s fail, err %d\n",
2119 "resume", status);
2120 if (status != -ESHUTDOWN)
2121 usb_hc_died(hcd);
2122 }
2123 return status;
2124}
2125
2126#endif
2127
2128#ifdef CONFIG_USB_SUSPEND
2129
2130
2131static void hcd_resume_work(struct work_struct *work)
2132{
2133 struct usb_hcd *hcd = container_of(work, struct usb_hcd, wakeup_work);
2134 struct usb_device *udev = hcd->self.root_hub;
2135
2136 usb_lock_device(udev);
2137 usb_remote_wakeup(udev);
2138 usb_unlock_device(udev);
2139}
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150void usb_hcd_resume_root_hub (struct usb_hcd *hcd)
2151{
2152 unsigned long flags;
2153
2154 spin_lock_irqsave (&hcd_root_hub_lock, flags);
2155 if (hcd->rh_registered) {
2156 set_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags);
2157 queue_work(pm_wq, &hcd->wakeup_work);
2158 }
2159 spin_unlock_irqrestore (&hcd_root_hub_lock, flags);
2160}
2161EXPORT_SYMBOL_GPL(usb_hcd_resume_root_hub);
2162
2163#endif
2164
2165
2166
2167#ifdef CONFIG_USB_OTG
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num)
2181{
2182 struct usb_hcd *hcd;
2183 int status = -EOPNOTSUPP;
2184
2185
2186
2187
2188
2189 hcd = container_of (bus, struct usb_hcd, self);
2190 if (port_num && hcd->driver->start_port_reset)
2191 status = hcd->driver->start_port_reset(hcd, port_num);
2192
2193
2194
2195
2196 if (status == 0)
2197 mod_timer(&hcd->rh_timer, jiffies + msecs_to_jiffies(10));
2198 return status;
2199}
2200EXPORT_SYMBOL_GPL(usb_bus_start_enum);
2201
2202#endif
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214irqreturn_t usb_hcd_irq (int irq, void *__hcd)
2215{
2216 struct usb_hcd *hcd = __hcd;
2217 unsigned long flags;
2218 irqreturn_t rc;
2219
2220
2221
2222
2223
2224 local_irq_save(flags);
2225
2226 if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd)))
2227 rc = IRQ_NONE;
2228 else if (hcd->driver->irq(hcd) == IRQ_NONE)
2229 rc = IRQ_NONE;
2230 else
2231 rc = IRQ_HANDLED;
2232
2233 local_irq_restore(flags);
2234 return rc;
2235}
2236EXPORT_SYMBOL_GPL(usb_hcd_irq);
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250void usb_hc_died (struct usb_hcd *hcd)
2251{
2252 unsigned long flags;
2253
2254 dev_err (hcd->self.controller, "HC died; cleaning up\n");
2255
2256 spin_lock_irqsave (&hcd_root_hub_lock, flags);
2257 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2258 set_bit(HCD_FLAG_DEAD, &hcd->flags);
2259 if (hcd->rh_registered) {
2260 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2261
2262
2263 usb_set_device_state (hcd->self.root_hub,
2264 USB_STATE_NOTATTACHED);
2265 usb_kick_khubd (hcd->self.root_hub);
2266 }
2267 if (usb_hcd_is_primary_hcd(hcd) && hcd->shared_hcd) {
2268 hcd = hcd->shared_hcd;
2269 if (hcd->rh_registered) {
2270 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2271
2272
2273 usb_set_device_state(hcd->self.root_hub,
2274 USB_STATE_NOTATTACHED);
2275 usb_kick_khubd(hcd->self.root_hub);
2276 }
2277 }
2278 spin_unlock_irqrestore (&hcd_root_hub_lock, flags);
2279
2280}
2281EXPORT_SYMBOL_GPL (usb_hc_died);
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300struct usb_hcd *usb_create_shared_hcd(const struct hc_driver *driver,
2301 struct device *dev, const char *bus_name,
2302 struct usb_hcd *primary_hcd)
2303{
2304 struct usb_hcd *hcd;
2305
2306 hcd = kzalloc(sizeof(*hcd) + driver->hcd_priv_size, GFP_KERNEL);
2307 if (!hcd) {
2308 dev_dbg (dev, "hcd alloc failed\n");
2309 return NULL;
2310 }
2311 if (primary_hcd == NULL) {
2312 hcd->bandwidth_mutex = kmalloc(sizeof(*hcd->bandwidth_mutex),
2313 GFP_KERNEL);
2314 if (!hcd->bandwidth_mutex) {
2315 kfree(hcd);
2316 dev_dbg(dev, "hcd bandwidth mutex alloc failed\n");
2317 return NULL;
2318 }
2319 mutex_init(hcd->bandwidth_mutex);
2320 dev_set_drvdata(dev, hcd);
2321 } else {
2322 hcd->bandwidth_mutex = primary_hcd->bandwidth_mutex;
2323 hcd->primary_hcd = primary_hcd;
2324 primary_hcd->primary_hcd = primary_hcd;
2325 hcd->shared_hcd = primary_hcd;
2326 primary_hcd->shared_hcd = hcd;
2327 }
2328
2329 kref_init(&hcd->kref);
2330
2331 usb_bus_init(&hcd->self);
2332 hcd->self.controller = dev;
2333 hcd->self.bus_name = bus_name;
2334 hcd->self.uses_dma = (dev->dma_mask != NULL);
2335
2336 init_timer(&hcd->rh_timer);
2337 hcd->rh_timer.function = rh_timer_func;
2338 hcd->rh_timer.data = (unsigned long) hcd;
2339#ifdef CONFIG_USB_SUSPEND
2340 INIT_WORK(&hcd->wakeup_work, hcd_resume_work);
2341#endif
2342
2343 hcd->driver = driver;
2344 hcd->speed = driver->flags & HCD_MASK;
2345 hcd->product_desc = (driver->product_desc) ? driver->product_desc :
2346 "USB Host Controller";
2347 return hcd;
2348}
2349EXPORT_SYMBOL_GPL(usb_create_shared_hcd);
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364struct usb_hcd *usb_create_hcd(const struct hc_driver *driver,
2365 struct device *dev, const char *bus_name)
2366{
2367 return usb_create_shared_hcd(driver, dev, bus_name, NULL);
2368}
2369EXPORT_SYMBOL_GPL(usb_create_hcd);
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381static void hcd_release (struct kref *kref)
2382{
2383 struct usb_hcd *hcd = container_of (kref, struct usb_hcd, kref);
2384
2385 if (usb_hcd_is_primary_hcd(hcd))
2386 kfree(hcd->bandwidth_mutex);
2387 else
2388 hcd->shared_hcd->shared_hcd = NULL;
2389 kfree(hcd);
2390}
2391
2392struct usb_hcd *usb_get_hcd (struct usb_hcd *hcd)
2393{
2394 if (hcd)
2395 kref_get (&hcd->kref);
2396 return hcd;
2397}
2398EXPORT_SYMBOL_GPL(usb_get_hcd);
2399
2400void usb_put_hcd (struct usb_hcd *hcd)
2401{
2402 if (hcd)
2403 kref_put (&hcd->kref, hcd_release);
2404}
2405EXPORT_SYMBOL_GPL(usb_put_hcd);
2406
2407int usb_hcd_is_primary_hcd(struct usb_hcd *hcd)
2408{
2409 if (!hcd->primary_hcd)
2410 return 1;
2411 return hcd == hcd->primary_hcd;
2412}
2413EXPORT_SYMBOL_GPL(usb_hcd_is_primary_hcd);
2414
2415int usb_hcd_find_raw_port_number(struct usb_hcd *hcd, int port1)
2416{
2417 if (!hcd->driver->find_raw_port_number)
2418 return port1;
2419
2420 return hcd->driver->find_raw_port_number(hcd, port1);
2421}
2422
2423static int usb_hcd_request_irqs(struct usb_hcd *hcd,
2424 unsigned int irqnum, unsigned long irqflags)
2425{
2426 int retval;
2427
2428 if (hcd->driver->irq) {
2429
2430
2431
2432
2433
2434 if (irqflags & IRQF_SHARED)
2435 irqflags &= ~IRQF_DISABLED;
2436
2437 snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d",
2438 hcd->driver->description, hcd->self.busnum);
2439 retval = request_irq(irqnum, &usb_hcd_irq, irqflags,
2440 hcd->irq_descr, hcd);
2441 if (retval != 0) {
2442 dev_err(hcd->self.controller,
2443 "request interrupt %d failed\n",
2444 irqnum);
2445 return retval;
2446 }
2447 hcd->irq = irqnum;
2448 dev_info(hcd->self.controller, "irq %d, %s 0x%08llx\n", irqnum,
2449 (hcd->driver->flags & HCD_MEMORY) ?
2450 "io mem" : "io base",
2451 (unsigned long long)hcd->rsrc_start);
2452 } else {
2453 hcd->irq = 0;
2454 if (hcd->rsrc_start)
2455 dev_info(hcd->self.controller, "%s 0x%08llx\n",
2456 (hcd->driver->flags & HCD_MEMORY) ?
2457 "io mem" : "io base",
2458 (unsigned long long)hcd->rsrc_start);
2459 }
2460 return 0;
2461}
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473int usb_add_hcd(struct usb_hcd *hcd,
2474 unsigned int irqnum, unsigned long irqflags)
2475{
2476 int retval;
2477 struct usb_device *rhdev;
2478
2479 dev_info(hcd->self.controller, "%s\n", hcd->product_desc);
2480
2481
2482 if (authorized_default < 0 || authorized_default > 1)
2483 hcd->authorized_default = hcd->wireless? 0 : 1;
2484 else
2485 hcd->authorized_default = authorized_default;
2486 set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
2487
2488
2489
2490
2491
2492 if ((retval = hcd_buffer_create(hcd)) != 0) {
2493 dev_dbg(hcd->self.controller, "pool alloc failed\n");
2494 return retval;
2495 }
2496
2497 if ((retval = usb_register_bus(&hcd->self)) < 0)
2498 goto err_register_bus;
2499
2500 if ((rhdev = usb_alloc_dev(NULL, &hcd->self, 0)) == NULL) {
2501 dev_err(hcd->self.controller, "unable to allocate root hub\n");
2502 retval = -ENOMEM;
2503 goto err_allocate_root_hub;
2504 }
2505 hcd->self.root_hub = rhdev;
2506
2507 switch (hcd->speed) {
2508 case HCD_USB11:
2509 rhdev->speed = USB_SPEED_FULL;
2510 break;
2511 case HCD_USB2:
2512 rhdev->speed = USB_SPEED_HIGH;
2513 break;
2514 case HCD_USB3:
2515 rhdev->speed = USB_SPEED_SUPER;
2516 break;
2517 default:
2518 retval = -EINVAL;
2519 goto err_set_rh_speed;
2520 }
2521
2522
2523
2524
2525
2526 device_set_wakeup_capable(&rhdev->dev, 1);
2527
2528
2529
2530
2531
2532 set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2533
2534
2535
2536
2537 if (hcd->driver->reset && (retval = hcd->driver->reset(hcd)) < 0) {
2538 dev_err(hcd->self.controller, "can't setup\n");
2539 goto err_hcd_driver_setup;
2540 }
2541 hcd->rh_pollable = 1;
2542
2543
2544 if (device_can_wakeup(hcd->self.controller)
2545 && device_can_wakeup(&hcd->self.root_hub->dev))
2546 dev_dbg(hcd->self.controller, "supports USB remote wakeup\n");
2547
2548
2549
2550
2551 if (usb_hcd_is_primary_hcd(hcd) && irqnum) {
2552 retval = usb_hcd_request_irqs(hcd, irqnum, irqflags);
2553 if (retval)
2554 goto err_request_irq;
2555 }
2556
2557 hcd->state = HC_STATE_RUNNING;
2558 retval = hcd->driver->start(hcd);
2559 if (retval < 0) {
2560 dev_err(hcd->self.controller, "startup error %d\n", retval);
2561 goto err_hcd_driver_start;
2562 }
2563
2564
2565 if ((retval = register_root_hub(hcd)) != 0)
2566 goto err_register_root_hub;
2567
2568 retval = sysfs_create_group(&rhdev->dev.kobj, &usb_bus_attr_group);
2569 if (retval < 0) {
2570 printk(KERN_ERR "Cannot register USB bus sysfs attributes: %d\n",
2571 retval);
2572 goto error_create_attr_group;
2573 }
2574 if (hcd->uses_new_polling && HCD_POLL_RH(hcd))
2575 usb_hcd_poll_rh_status(hcd);
2576
2577
2578
2579
2580
2581
2582 device_wakeup_enable(hcd->self.controller);
2583 return retval;
2584
2585error_create_attr_group:
2586 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2587 if (HC_IS_RUNNING(hcd->state))
2588 hcd->state = HC_STATE_QUIESCING;
2589 spin_lock_irq(&hcd_root_hub_lock);
2590 hcd->rh_registered = 0;
2591 spin_unlock_irq(&hcd_root_hub_lock);
2592
2593#ifdef CONFIG_USB_SUSPEND
2594 cancel_work_sync(&hcd->wakeup_work);
2595#endif
2596 mutex_lock(&usb_bus_list_lock);
2597 usb_disconnect(&rhdev);
2598 mutex_unlock(&usb_bus_list_lock);
2599err_register_root_hub:
2600 hcd->rh_pollable = 0;
2601 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2602 del_timer_sync(&hcd->rh_timer);
2603 hcd->driver->stop(hcd);
2604 hcd->state = HC_STATE_HALT;
2605 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2606 del_timer_sync(&hcd->rh_timer);
2607err_hcd_driver_start:
2608 if (usb_hcd_is_primary_hcd(hcd) && hcd->irq > 0)
2609 free_irq(irqnum, hcd);
2610err_request_irq:
2611err_hcd_driver_setup:
2612err_set_rh_speed:
2613 usb_put_dev(hcd->self.root_hub);
2614err_allocate_root_hub:
2615 usb_deregister_bus(&hcd->self);
2616err_register_bus:
2617 hcd_buffer_destroy(hcd);
2618 return retval;
2619}
2620EXPORT_SYMBOL_GPL(usb_add_hcd);
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630void usb_remove_hcd(struct usb_hcd *hcd)
2631{
2632 struct usb_device *rhdev = hcd->self.root_hub;
2633
2634 dev_info(hcd->self.controller, "remove, state %x\n", hcd->state);
2635
2636 usb_get_dev(rhdev);
2637 sysfs_remove_group(&rhdev->dev.kobj, &usb_bus_attr_group);
2638
2639 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2640 if (HC_IS_RUNNING (hcd->state))
2641 hcd->state = HC_STATE_QUIESCING;
2642
2643 dev_dbg(hcd->self.controller, "roothub graceful disconnect\n");
2644 spin_lock_irq (&hcd_root_hub_lock);
2645 hcd->rh_registered = 0;
2646 spin_unlock_irq (&hcd_root_hub_lock);
2647
2648#ifdef CONFIG_USB_SUSPEND
2649 cancel_work_sync(&hcd->wakeup_work);
2650#endif
2651
2652 mutex_lock(&usb_bus_list_lock);
2653 usb_disconnect(&rhdev);
2654 mutex_unlock(&usb_bus_list_lock);
2655
2656
2657
2658
2659
2660
2661 hcd->rh_pollable = 0;
2662 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2663 del_timer_sync(&hcd->rh_timer);
2664
2665 hcd->driver->stop(hcd);
2666 hcd->state = HC_STATE_HALT;
2667
2668
2669 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2670 del_timer_sync(&hcd->rh_timer);
2671
2672 if (usb_hcd_is_primary_hcd(hcd)) {
2673 if (hcd->irq > 0)
2674 free_irq(hcd->irq, hcd);
2675 }
2676
2677 usb_put_dev(hcd->self.root_hub);
2678 usb_deregister_bus(&hcd->self);
2679 hcd_buffer_destroy(hcd);
2680}
2681EXPORT_SYMBOL_GPL(usb_remove_hcd);
2682
2683void
2684usb_hcd_platform_shutdown(struct platform_device* dev)
2685{
2686 struct usb_hcd *hcd = platform_get_drvdata(dev);
2687
2688 if (hcd->driver->shutdown)
2689 hcd->driver->shutdown(hcd);
2690}
2691EXPORT_SYMBOL_GPL(usb_hcd_platform_shutdown);
2692
2693
2694
2695#if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE)
2696
2697struct usb_mon_operations *mon_ops;
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707int usb_mon_register (struct usb_mon_operations *ops)
2708{
2709
2710 if (mon_ops)
2711 return -EBUSY;
2712
2713 mon_ops = ops;
2714 mb();
2715 return 0;
2716}
2717EXPORT_SYMBOL_GPL (usb_mon_register);
2718
2719void usb_mon_deregister (void)
2720{
2721
2722 if (mon_ops == NULL) {
2723 printk(KERN_ERR "USB: monitor was not registered\n");
2724 return;
2725 }
2726 mon_ops = NULL;
2727 mb();
2728}
2729EXPORT_SYMBOL_GPL (usb_mon_deregister);
2730
2731#endif
2732