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