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