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