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