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