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