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