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