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 fallthrough;
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 fallthrough;
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 fallthrough;
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
752void usb_hcd_poll_rh_status(struct usb_hcd *hcd)
753{
754 struct urb *urb;
755 int length;
756 unsigned long flags;
757 char buffer[6];
758
759 if (unlikely(!hcd->rh_pollable))
760 return;
761 if (!hcd->uses_new_polling && !hcd->status_urb)
762 return;
763
764 length = hcd->driver->hub_status_data(hcd, buffer);
765 if (length > 0) {
766
767
768 spin_lock_irqsave(&hcd_root_hub_lock, flags);
769 urb = hcd->status_urb;
770 if (urb) {
771 clear_bit(HCD_FLAG_POLL_PENDING, &hcd->flags);
772 hcd->status_urb = NULL;
773 urb->actual_length = length;
774 memcpy(urb->transfer_buffer, buffer, length);
775
776 usb_hcd_unlink_urb_from_ep(hcd, urb);
777 usb_hcd_giveback_urb(hcd, urb, 0);
778 } else {
779 length = 0;
780 set_bit(HCD_FLAG_POLL_PENDING, &hcd->flags);
781 }
782 spin_unlock_irqrestore(&hcd_root_hub_lock, flags);
783 }
784
785
786
787
788
789 if (hcd->uses_new_polling ? HCD_POLL_RH(hcd) :
790 (length == 0 && hcd->status_urb != NULL))
791 mod_timer (&hcd->rh_timer, (jiffies/(HZ/4) + 1) * (HZ/4));
792}
793EXPORT_SYMBOL_GPL(usb_hcd_poll_rh_status);
794
795
796static void rh_timer_func (struct timer_list *t)
797{
798 struct usb_hcd *_hcd = from_timer(_hcd, t, rh_timer);
799
800 usb_hcd_poll_rh_status(_hcd);
801}
802
803
804
805static int rh_queue_status (struct usb_hcd *hcd, struct urb *urb)
806{
807 int retval;
808 unsigned long flags;
809 unsigned len = 1 + (urb->dev->maxchild / 8);
810
811 spin_lock_irqsave (&hcd_root_hub_lock, flags);
812 if (hcd->status_urb || urb->transfer_buffer_length < len) {
813 dev_dbg (hcd->self.controller, "not queuing rh status urb\n");
814 retval = -EINVAL;
815 goto done;
816 }
817
818 retval = usb_hcd_link_urb_to_ep(hcd, urb);
819 if (retval)
820 goto done;
821
822 hcd->status_urb = urb;
823 urb->hcpriv = hcd;
824 if (!hcd->uses_new_polling)
825 mod_timer(&hcd->rh_timer, (jiffies/(HZ/4) + 1) * (HZ/4));
826
827
828 else if (HCD_POLL_PENDING(hcd))
829 mod_timer(&hcd->rh_timer, jiffies);
830 retval = 0;
831 done:
832 spin_unlock_irqrestore (&hcd_root_hub_lock, flags);
833 return retval;
834}
835
836static int rh_urb_enqueue (struct usb_hcd *hcd, struct urb *urb)
837{
838 if (usb_endpoint_xfer_int(&urb->ep->desc))
839 return rh_queue_status (hcd, urb);
840 if (usb_endpoint_xfer_control(&urb->ep->desc))
841 return rh_call_control (hcd, urb);
842 return -EINVAL;
843}
844
845
846
847
848
849
850static int usb_rh_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
851{
852 unsigned long flags;
853 int rc;
854
855 spin_lock_irqsave(&hcd_root_hub_lock, flags);
856 rc = usb_hcd_check_unlink_urb(hcd, urb, status);
857 if (rc)
858 goto done;
859
860 if (usb_endpoint_num(&urb->ep->desc) == 0) {
861 ;
862
863 } else {
864 if (!hcd->uses_new_polling)
865 del_timer (&hcd->rh_timer);
866 if (urb == hcd->status_urb) {
867 hcd->status_urb = NULL;
868 usb_hcd_unlink_urb_from_ep(hcd, urb);
869 usb_hcd_giveback_urb(hcd, urb, status);
870 }
871 }
872 done:
873 spin_unlock_irqrestore(&hcd_root_hub_lock, flags);
874 return rc;
875}
876
877
878
879
880
881
882
883
884
885
886
887static void usb_bus_init (struct usb_bus *bus)
888{
889 memset (&bus->devmap, 0, sizeof(struct usb_devmap));
890
891 bus->devnum_next = 1;
892
893 bus->root_hub = NULL;
894 bus->busnum = -1;
895 bus->bandwidth_allocated = 0;
896 bus->bandwidth_int_reqs = 0;
897 bus->bandwidth_isoc_reqs = 0;
898 mutex_init(&bus->devnum_next_mutex);
899}
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
947
948static void usb_deregister_bus (struct usb_bus *bus)
949{
950 dev_info (bus->controller, "USB bus %d deregistered\n", bus->busnum);
951
952
953
954
955
956
957 mutex_lock(&usb_bus_idr_lock);
958 idr_remove(&usb_bus_idr, bus->busnum);
959 mutex_unlock(&usb_bus_idr_lock);
960
961 usb_notify_remove_bus(bus);
962}
963
964
965
966
967
968
969
970
971
972
973
974
975static int register_root_hub(struct usb_hcd *hcd)
976{
977 struct device *parent_dev = hcd->self.controller;
978 struct usb_device *usb_dev = hcd->self.root_hub;
979 const int devnum = 1;
980 int retval;
981
982 usb_dev->devnum = devnum;
983 usb_dev->bus->devnum_next = devnum + 1;
984 set_bit (devnum, usb_dev->bus->devmap.devicemap);
985 usb_set_device_state(usb_dev, USB_STATE_ADDRESS);
986
987 mutex_lock(&usb_bus_idr_lock);
988
989 usb_dev->ep0.desc.wMaxPacketSize = cpu_to_le16(64);
990 retval = usb_get_device_descriptor(usb_dev, USB_DT_DEVICE_SIZE);
991 if (retval != sizeof usb_dev->descriptor) {
992 mutex_unlock(&usb_bus_idr_lock);
993 dev_dbg (parent_dev, "can't read %s device descriptor %d\n",
994 dev_name(&usb_dev->dev), retval);
995 return (retval < 0) ? retval : -EMSGSIZE;
996 }
997
998 if (le16_to_cpu(usb_dev->descriptor.bcdUSB) >= 0x0201) {
999 retval = usb_get_bos_descriptor(usb_dev);
1000 if (!retval) {
1001 usb_dev->lpm_capable = usb_device_supports_lpm(usb_dev);
1002 } else if (usb_dev->speed >= USB_SPEED_SUPER) {
1003 mutex_unlock(&usb_bus_idr_lock);
1004 dev_dbg(parent_dev, "can't read %s bos descriptor %d\n",
1005 dev_name(&usb_dev->dev), retval);
1006 return retval;
1007 }
1008 }
1009
1010 retval = usb_new_device (usb_dev);
1011 if (retval) {
1012 dev_err (parent_dev, "can't register root hub for %s, %d\n",
1013 dev_name(&usb_dev->dev), retval);
1014 } else {
1015 spin_lock_irq (&hcd_root_hub_lock);
1016 hcd->rh_registered = 1;
1017 spin_unlock_irq (&hcd_root_hub_lock);
1018
1019
1020 if (HCD_DEAD(hcd))
1021 usb_hc_died (hcd);
1022 }
1023 mutex_unlock(&usb_bus_idr_lock);
1024
1025 return retval;
1026}
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039void usb_hcd_start_port_resume(struct usb_bus *bus, int portnum)
1040{
1041 unsigned bit = 1 << portnum;
1042
1043 if (!(bus->resuming_ports & bit)) {
1044 bus->resuming_ports |= bit;
1045 pm_runtime_get_noresume(&bus->root_hub->dev);
1046 }
1047}
1048EXPORT_SYMBOL_GPL(usb_hcd_start_port_resume);
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061void usb_hcd_end_port_resume(struct usb_bus *bus, int portnum)
1062{
1063 unsigned bit = 1 << portnum;
1064
1065 if (bus->resuming_ports & bit) {
1066 bus->resuming_ports &= ~bit;
1067 pm_runtime_put_noidle(&bus->root_hub->dev);
1068 }
1069}
1070EXPORT_SYMBOL_GPL(usb_hcd_end_port_resume);
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087long usb_calc_bus_time (int speed, int is_input, int isoc, int bytecount)
1088{
1089 unsigned long tmp;
1090
1091 switch (speed) {
1092 case USB_SPEED_LOW:
1093 if (is_input) {
1094 tmp = (67667L * (31L + 10L * BitTime (bytecount))) / 1000L;
1095 return 64060L + (2 * BW_HUB_LS_SETUP) + BW_HOST_DELAY + tmp;
1096 } else {
1097 tmp = (66700L * (31L + 10L * BitTime (bytecount))) / 1000L;
1098 return 64107L + (2 * BW_HUB_LS_SETUP) + BW_HOST_DELAY + tmp;
1099 }
1100 case USB_SPEED_FULL:
1101 if (isoc) {
1102 tmp = (8354L * (31L + 10L * BitTime (bytecount))) / 1000L;
1103 return ((is_input) ? 7268L : 6265L) + BW_HOST_DELAY + tmp;
1104 } else {
1105 tmp = (8354L * (31L + 10L * BitTime (bytecount))) / 1000L;
1106 return 9107L + BW_HOST_DELAY + tmp;
1107 }
1108 case USB_SPEED_HIGH:
1109
1110 if (isoc)
1111 tmp = HS_NSECS_ISO (bytecount);
1112 else
1113 tmp = HS_NSECS (bytecount);
1114 return tmp;
1115 default:
1116 pr_debug ("%s: bogus device speed!\n", usbcore_name);
1117 return -1;
1118 }
1119}
1120EXPORT_SYMBOL_GPL(usb_calc_bus_time);
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb)
1147{
1148 int rc = 0;
1149
1150 spin_lock(&hcd_urb_list_lock);
1151
1152
1153 if (unlikely(atomic_read(&urb->reject))) {
1154 rc = -EPERM;
1155 goto done;
1156 }
1157
1158 if (unlikely(!urb->ep->enabled)) {
1159 rc = -ENOENT;
1160 goto done;
1161 }
1162
1163 if (unlikely(!urb->dev->can_submit)) {
1164 rc = -EHOSTUNREACH;
1165 goto done;
1166 }
1167
1168
1169
1170
1171
1172 if (HCD_RH_RUNNING(hcd)) {
1173 urb->unlinked = 0;
1174 list_add_tail(&urb->urb_list, &urb->ep->urb_list);
1175 } else {
1176 rc = -ESHUTDOWN;
1177 goto done;
1178 }
1179 done:
1180 spin_unlock(&hcd_urb_list_lock);
1181 return rc;
1182}
1183EXPORT_SYMBOL_GPL(usb_hcd_link_urb_to_ep);
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb,
1205 int status)
1206{
1207 struct list_head *tmp;
1208
1209
1210 list_for_each(tmp, &urb->ep->urb_list) {
1211 if (tmp == &urb->urb_list)
1212 break;
1213 }
1214 if (tmp != &urb->urb_list)
1215 return -EIDRM;
1216
1217
1218
1219
1220 if (urb->unlinked)
1221 return -EBUSY;
1222 urb->unlinked = status;
1223 return 0;
1224}
1225EXPORT_SYMBOL_GPL(usb_hcd_check_unlink_urb);
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb)
1238{
1239
1240 spin_lock(&hcd_urb_list_lock);
1241 list_del_init(&urb->urb_list);
1242 spin_unlock(&hcd_urb_list_lock);
1243}
1244EXPORT_SYMBOL_GPL(usb_hcd_unlink_urb_from_ep);
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
1271
1272static int hcd_alloc_coherent(struct usb_bus *bus,
1273 gfp_t mem_flags, dma_addr_t *dma_handle,
1274 void **vaddr_handle, size_t size,
1275 enum dma_data_direction dir)
1276{
1277 unsigned char *vaddr;
1278
1279 if (*vaddr_handle == NULL) {
1280 WARN_ON_ONCE(1);
1281 return -EFAULT;
1282 }
1283
1284 vaddr = hcd_buffer_alloc(bus, size + sizeof(vaddr),
1285 mem_flags, dma_handle);
1286 if (!vaddr)
1287 return -ENOMEM;
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297 put_unaligned((unsigned long)*vaddr_handle,
1298 (unsigned long *)(vaddr + size));
1299
1300 if (dir == DMA_TO_DEVICE)
1301 memcpy(vaddr, *vaddr_handle, size);
1302
1303 *vaddr_handle = vaddr;
1304 return 0;
1305}
1306
1307static void hcd_free_coherent(struct usb_bus *bus, dma_addr_t *dma_handle,
1308 void **vaddr_handle, size_t size,
1309 enum dma_data_direction dir)
1310{
1311 unsigned char *vaddr = *vaddr_handle;
1312
1313 vaddr = (void *)get_unaligned((unsigned long *)(vaddr + size));
1314
1315 if (dir == DMA_FROM_DEVICE)
1316 memcpy(vaddr, *vaddr_handle, size);
1317
1318 hcd_buffer_free(bus, size + sizeof(vaddr), *vaddr_handle, *dma_handle);
1319
1320 *vaddr_handle = vaddr;
1321 *dma_handle = 0;
1322}
1323
1324void usb_hcd_unmap_urb_setup_for_dma(struct usb_hcd *hcd, struct urb *urb)
1325{
1326 if (IS_ENABLED(CONFIG_HAS_DMA) &&
1327 (urb->transfer_flags & URB_SETUP_MAP_SINGLE))
1328 dma_unmap_single(hcd->self.sysdev,
1329 urb->setup_dma,
1330 sizeof(struct usb_ctrlrequest),
1331 DMA_TO_DEVICE);
1332 else if (urb->transfer_flags & URB_SETUP_MAP_LOCAL)
1333 hcd_free_coherent(urb->dev->bus,
1334 &urb->setup_dma,
1335 (void **) &urb->setup_packet,
1336 sizeof(struct usb_ctrlrequest),
1337 DMA_TO_DEVICE);
1338
1339
1340 urb->transfer_flags &= ~(URB_SETUP_MAP_SINGLE | URB_SETUP_MAP_LOCAL);
1341}
1342EXPORT_SYMBOL_GPL(usb_hcd_unmap_urb_setup_for_dma);
1343
1344static void unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
1345{
1346 if (hcd->driver->unmap_urb_for_dma)
1347 hcd->driver->unmap_urb_for_dma(hcd, urb);
1348 else
1349 usb_hcd_unmap_urb_for_dma(hcd, urb);
1350}
1351
1352void usb_hcd_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
1353{
1354 enum dma_data_direction dir;
1355
1356 usb_hcd_unmap_urb_setup_for_dma(hcd, urb);
1357
1358 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
1359 if (IS_ENABLED(CONFIG_HAS_DMA) &&
1360 (urb->transfer_flags & URB_DMA_MAP_SG))
1361 dma_unmap_sg(hcd->self.sysdev,
1362 urb->sg,
1363 urb->num_sgs,
1364 dir);
1365 else if (IS_ENABLED(CONFIG_HAS_DMA) &&
1366 (urb->transfer_flags & URB_DMA_MAP_PAGE))
1367 dma_unmap_page(hcd->self.sysdev,
1368 urb->transfer_dma,
1369 urb->transfer_buffer_length,
1370 dir);
1371 else if (IS_ENABLED(CONFIG_HAS_DMA) &&
1372 (urb->transfer_flags & URB_DMA_MAP_SINGLE))
1373 dma_unmap_single(hcd->self.sysdev,
1374 urb->transfer_dma,
1375 urb->transfer_buffer_length,
1376 dir);
1377 else if (urb->transfer_flags & URB_MAP_LOCAL)
1378 hcd_free_coherent(urb->dev->bus,
1379 &urb->transfer_dma,
1380 &urb->transfer_buffer,
1381 urb->transfer_buffer_length,
1382 dir);
1383
1384
1385 urb->transfer_flags &= ~(URB_DMA_MAP_SG | URB_DMA_MAP_PAGE |
1386 URB_DMA_MAP_SINGLE | URB_MAP_LOCAL);
1387}
1388EXPORT_SYMBOL_GPL(usb_hcd_unmap_urb_for_dma);
1389
1390static int map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
1391 gfp_t mem_flags)
1392{
1393 if (hcd->driver->map_urb_for_dma)
1394 return hcd->driver->map_urb_for_dma(hcd, urb, mem_flags);
1395 else
1396 return usb_hcd_map_urb_for_dma(hcd, urb, mem_flags);
1397}
1398
1399int usb_hcd_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
1400 gfp_t mem_flags)
1401{
1402 enum dma_data_direction dir;
1403 int ret = 0;
1404
1405
1406
1407
1408
1409
1410
1411 if (usb_endpoint_xfer_control(&urb->ep->desc)) {
1412 if (hcd->self.uses_pio_for_control)
1413 return ret;
1414 if (hcd->localmem_pool) {
1415 ret = hcd_alloc_coherent(
1416 urb->dev->bus, mem_flags,
1417 &urb->setup_dma,
1418 (void **)&urb->setup_packet,
1419 sizeof(struct usb_ctrlrequest),
1420 DMA_TO_DEVICE);
1421 if (ret)
1422 return ret;
1423 urb->transfer_flags |= URB_SETUP_MAP_LOCAL;
1424 } else if (hcd_uses_dma(hcd)) {
1425 if (object_is_on_stack(urb->setup_packet)) {
1426 WARN_ONCE(1, "setup packet is on stack\n");
1427 return -EAGAIN;
1428 }
1429
1430 urb->setup_dma = dma_map_single(
1431 hcd->self.sysdev,
1432 urb->setup_packet,
1433 sizeof(struct usb_ctrlrequest),
1434 DMA_TO_DEVICE);
1435 if (dma_mapping_error(hcd->self.sysdev,
1436 urb->setup_dma))
1437 return -EAGAIN;
1438 urb->transfer_flags |= URB_SETUP_MAP_SINGLE;
1439 }
1440 }
1441
1442 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
1443 if (urb->transfer_buffer_length != 0
1444 && !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)) {
1445 if (hcd->localmem_pool) {
1446 ret = hcd_alloc_coherent(
1447 urb->dev->bus, mem_flags,
1448 &urb->transfer_dma,
1449 &urb->transfer_buffer,
1450 urb->transfer_buffer_length,
1451 dir);
1452 if (ret == 0)
1453 urb->transfer_flags |= URB_MAP_LOCAL;
1454 } else if (hcd_uses_dma(hcd)) {
1455 if (urb->num_sgs) {
1456 int n;
1457
1458
1459 if (usb_endpoint_xfer_isoc(&urb->ep->desc)) {
1460 WARN_ON(1);
1461 return -EINVAL;
1462 }
1463
1464 n = dma_map_sg(
1465 hcd->self.sysdev,
1466 urb->sg,
1467 urb->num_sgs,
1468 dir);
1469 if (n <= 0)
1470 ret = -EAGAIN;
1471 else
1472 urb->transfer_flags |= URB_DMA_MAP_SG;
1473 urb->num_mapped_sgs = n;
1474 if (n != urb->num_sgs)
1475 urb->transfer_flags |=
1476 URB_DMA_SG_COMBINED;
1477 } else if (urb->sg) {
1478 struct scatterlist *sg = urb->sg;
1479 urb->transfer_dma = dma_map_page(
1480 hcd->self.sysdev,
1481 sg_page(sg),
1482 sg->offset,
1483 urb->transfer_buffer_length,
1484 dir);
1485 if (dma_mapping_error(hcd->self.sysdev,
1486 urb->transfer_dma))
1487 ret = -EAGAIN;
1488 else
1489 urb->transfer_flags |= URB_DMA_MAP_PAGE;
1490 } else if (object_is_on_stack(urb->transfer_buffer)) {
1491 WARN_ONCE(1, "transfer buffer is on stack\n");
1492 ret = -EAGAIN;
1493 } else {
1494 urb->transfer_dma = dma_map_single(
1495 hcd->self.sysdev,
1496 urb->transfer_buffer,
1497 urb->transfer_buffer_length,
1498 dir);
1499 if (dma_mapping_error(hcd->self.sysdev,
1500 urb->transfer_dma))
1501 ret = -EAGAIN;
1502 else
1503 urb->transfer_flags |= URB_DMA_MAP_SINGLE;
1504 }
1505 }
1506 if (ret && (urb->transfer_flags & (URB_SETUP_MAP_SINGLE |
1507 URB_SETUP_MAP_LOCAL)))
1508 usb_hcd_unmap_urb_for_dma(hcd, urb);
1509 }
1510 return ret;
1511}
1512EXPORT_SYMBOL_GPL(usb_hcd_map_urb_for_dma);
1513
1514
1515
1516
1517
1518
1519
1520
1521int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
1522{
1523 int status;
1524 struct usb_hcd *hcd = bus_to_hcd(urb->dev->bus);
1525
1526
1527
1528
1529
1530 usb_get_urb(urb);
1531 atomic_inc(&urb->use_count);
1532 atomic_inc(&urb->dev->urbnum);
1533 usbmon_urb_submit(&hcd->self, urb);
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543 if (is_root_hub(urb->dev)) {
1544 status = rh_urb_enqueue(hcd, urb);
1545 } else {
1546 status = map_urb_for_dma(hcd, urb, mem_flags);
1547 if (likely(status == 0)) {
1548 status = hcd->driver->urb_enqueue(hcd, urb, mem_flags);
1549 if (unlikely(status))
1550 unmap_urb_for_dma(hcd, urb);
1551 }
1552 }
1553
1554 if (unlikely(status)) {
1555 usbmon_urb_submit_error(&hcd->self, urb, status);
1556 urb->hcpriv = NULL;
1557 INIT_LIST_HEAD(&urb->urb_list);
1558 atomic_dec(&urb->use_count);
1559 atomic_dec(&urb->dev->urbnum);
1560 if (atomic_read(&urb->reject))
1561 wake_up(&usb_kill_urb_queue);
1562 usb_put_urb(urb);
1563 }
1564 return status;
1565}
1566
1567
1568
1569
1570
1571
1572
1573
1574static int unlink1(struct usb_hcd *hcd, struct urb *urb, int status)
1575{
1576 int value;
1577
1578 if (is_root_hub(urb->dev))
1579 value = usb_rh_urb_dequeue(hcd, urb, status);
1580 else {
1581
1582
1583
1584
1585 value = hcd->driver->urb_dequeue(hcd, urb, status);
1586 }
1587 return value;
1588}
1589
1590
1591
1592
1593
1594
1595
1596int usb_hcd_unlink_urb (struct urb *urb, int status)
1597{
1598 struct usb_hcd *hcd;
1599 struct usb_device *udev = urb->dev;
1600 int retval = -EIDRM;
1601 unsigned long flags;
1602
1603
1604
1605
1606
1607
1608 spin_lock_irqsave(&hcd_urb_unlink_lock, flags);
1609 if (atomic_read(&urb->use_count) > 0) {
1610 retval = 0;
1611 usb_get_dev(udev);
1612 }
1613 spin_unlock_irqrestore(&hcd_urb_unlink_lock, flags);
1614 if (retval == 0) {
1615 hcd = bus_to_hcd(urb->dev->bus);
1616 retval = unlink1(hcd, urb, status);
1617 if (retval == 0)
1618 retval = -EINPROGRESS;
1619 else if (retval != -EIDRM && retval != -EBUSY)
1620 dev_dbg(&udev->dev, "hcd_unlink_urb %pK fail %d\n",
1621 urb, retval);
1622 usb_put_dev(udev);
1623 }
1624 return retval;
1625}
1626
1627
1628
1629static void __usb_hcd_giveback_urb(struct urb *urb)
1630{
1631 struct usb_hcd *hcd = bus_to_hcd(urb->dev->bus);
1632 struct usb_anchor *anchor = urb->anchor;
1633 int status = urb->unlinked;
1634
1635 urb->hcpriv = NULL;
1636 if (unlikely((urb->transfer_flags & URB_SHORT_NOT_OK) &&
1637 urb->actual_length < urb->transfer_buffer_length &&
1638 !status))
1639 status = -EREMOTEIO;
1640
1641 unmap_urb_for_dma(hcd, urb);
1642 usbmon_urb_complete(&hcd->self, urb, status);
1643 usb_anchor_suspend_wakeups(anchor);
1644 usb_unanchor_urb(urb);
1645 if (likely(status == 0))
1646 usb_led_activity(USB_LED_EVENT_HOST);
1647
1648
1649 urb->status = status;
1650
1651
1652
1653
1654
1655 kcov_remote_start_usb_softirq((u64)urb->dev->bus->busnum);
1656 urb->complete(urb);
1657 kcov_remote_stop_softirq();
1658
1659 usb_anchor_resume_wakeups(anchor);
1660 atomic_dec(&urb->use_count);
1661 if (unlikely(atomic_read(&urb->reject)))
1662 wake_up(&usb_kill_urb_queue);
1663 usb_put_urb(urb);
1664}
1665
1666static void usb_giveback_urb_bh(unsigned long param)
1667{
1668 struct giveback_urb_bh *bh = (struct giveback_urb_bh *)param;
1669 struct list_head local_list;
1670
1671 spin_lock_irq(&bh->lock);
1672 bh->running = true;
1673 restart:
1674 list_replace_init(&bh->head, &local_list);
1675 spin_unlock_irq(&bh->lock);
1676
1677 while (!list_empty(&local_list)) {
1678 struct urb *urb;
1679
1680 urb = list_entry(local_list.next, struct urb, urb_list);
1681 list_del_init(&urb->urb_list);
1682 bh->completing_ep = urb->ep;
1683 __usb_hcd_giveback_urb(urb);
1684 bh->completing_ep = NULL;
1685 }
1686
1687
1688 spin_lock_irq(&bh->lock);
1689 if (!list_empty(&bh->head))
1690 goto restart;
1691 bh->running = false;
1692 spin_unlock_irq(&bh->lock);
1693}
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, int status)
1717{
1718 struct giveback_urb_bh *bh;
1719 bool running, high_prio_bh;
1720
1721
1722 if (likely(!urb->unlinked))
1723 urb->unlinked = status;
1724
1725 if (!hcd_giveback_urb_in_bh(hcd) && !is_root_hub(urb->dev)) {
1726 __usb_hcd_giveback_urb(urb);
1727 return;
1728 }
1729
1730 if (usb_pipeisoc(urb->pipe) || usb_pipeint(urb->pipe)) {
1731 bh = &hcd->high_prio_bh;
1732 high_prio_bh = true;
1733 } else {
1734 bh = &hcd->low_prio_bh;
1735 high_prio_bh = false;
1736 }
1737
1738 spin_lock(&bh->lock);
1739 list_add_tail(&urb->urb_list, &bh->head);
1740 running = bh->running;
1741 spin_unlock(&bh->lock);
1742
1743 if (running)
1744 ;
1745 else if (high_prio_bh)
1746 tasklet_hi_schedule(&bh->bh);
1747 else
1748 tasklet_schedule(&bh->bh);
1749}
1750EXPORT_SYMBOL_GPL(usb_hcd_giveback_urb);
1751
1752
1753
1754
1755
1756
1757
1758void usb_hcd_flush_endpoint(struct usb_device *udev,
1759 struct usb_host_endpoint *ep)
1760{
1761 struct usb_hcd *hcd;
1762 struct urb *urb;
1763
1764 if (!ep)
1765 return;
1766 might_sleep();
1767 hcd = bus_to_hcd(udev->bus);
1768
1769
1770 spin_lock_irq(&hcd_urb_list_lock);
1771rescan:
1772 list_for_each_entry_reverse(urb, &ep->urb_list, urb_list) {
1773 int is_in;
1774
1775 if (urb->unlinked)
1776 continue;
1777 usb_get_urb (urb);
1778 is_in = usb_urb_dir_in(urb);
1779 spin_unlock(&hcd_urb_list_lock);
1780
1781
1782 unlink1(hcd, urb, -ESHUTDOWN);
1783 dev_dbg (hcd->self.controller,
1784 "shutdown urb %pK ep%d%s-%s\n",
1785 urb, usb_endpoint_num(&ep->desc),
1786 is_in ? "in" : "out",
1787 usb_ep_type_string(usb_endpoint_type(&ep->desc)));
1788 usb_put_urb (urb);
1789
1790
1791 spin_lock(&hcd_urb_list_lock);
1792 goto rescan;
1793 }
1794 spin_unlock_irq(&hcd_urb_list_lock);
1795
1796
1797 while (!list_empty (&ep->urb_list)) {
1798 spin_lock_irq(&hcd_urb_list_lock);
1799
1800
1801 urb = NULL;
1802 if (!list_empty (&ep->urb_list)) {
1803 urb = list_entry (ep->urb_list.prev, struct urb,
1804 urb_list);
1805 usb_get_urb (urb);
1806 }
1807 spin_unlock_irq(&hcd_urb_list_lock);
1808
1809 if (urb) {
1810 usb_kill_urb (urb);
1811 usb_put_urb (urb);
1812 }
1813 }
1814}
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837int usb_hcd_alloc_bandwidth(struct usb_device *udev,
1838 struct usb_host_config *new_config,
1839 struct usb_host_interface *cur_alt,
1840 struct usb_host_interface *new_alt)
1841{
1842 int num_intfs, i, j;
1843 struct usb_host_interface *alt = NULL;
1844 int ret = 0;
1845 struct usb_hcd *hcd;
1846 struct usb_host_endpoint *ep;
1847
1848 hcd = bus_to_hcd(udev->bus);
1849 if (!hcd->driver->check_bandwidth)
1850 return 0;
1851
1852
1853 if (!new_config && !cur_alt) {
1854 for (i = 1; i < 16; ++i) {
1855 ep = udev->ep_out[i];
1856 if (ep)
1857 hcd->driver->drop_endpoint(hcd, udev, ep);
1858 ep = udev->ep_in[i];
1859 if (ep)
1860 hcd->driver->drop_endpoint(hcd, udev, ep);
1861 }
1862 hcd->driver->check_bandwidth(hcd, udev);
1863 return 0;
1864 }
1865
1866
1867
1868
1869
1870 if (new_config) {
1871 num_intfs = new_config->desc.bNumInterfaces;
1872
1873
1874
1875 for (i = 1; i < 16; ++i) {
1876 ep = udev->ep_out[i];
1877 if (ep) {
1878 ret = hcd->driver->drop_endpoint(hcd, udev, ep);
1879 if (ret < 0)
1880 goto reset;
1881 }
1882 ep = udev->ep_in[i];
1883 if (ep) {
1884 ret = hcd->driver->drop_endpoint(hcd, udev, ep);
1885 if (ret < 0)
1886 goto reset;
1887 }
1888 }
1889 for (i = 0; i < num_intfs; ++i) {
1890 struct usb_host_interface *first_alt;
1891 int iface_num;
1892
1893 first_alt = &new_config->intf_cache[i]->altsetting[0];
1894 iface_num = first_alt->desc.bInterfaceNumber;
1895
1896 alt = usb_find_alt_setting(new_config, iface_num, 0);
1897 if (!alt)
1898
1899 alt = first_alt;
1900
1901 for (j = 0; j < alt->desc.bNumEndpoints; j++) {
1902 ret = hcd->driver->add_endpoint(hcd, udev, &alt->endpoint[j]);
1903 if (ret < 0)
1904 goto reset;
1905 }
1906 }
1907 }
1908 if (cur_alt && new_alt) {
1909 struct usb_interface *iface = usb_ifnum_to_if(udev,
1910 cur_alt->desc.bInterfaceNumber);
1911
1912 if (!iface)
1913 return -EINVAL;
1914 if (iface->resetting_device) {
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924 cur_alt = usb_altnum_to_altsetting(iface, 0);
1925 if (!cur_alt)
1926 cur_alt = &iface->altsetting[0];
1927 }
1928
1929
1930 for (i = 0; i < cur_alt->desc.bNumEndpoints; i++) {
1931 ret = hcd->driver->drop_endpoint(hcd, udev,
1932 &cur_alt->endpoint[i]);
1933 if (ret < 0)
1934 goto reset;
1935 }
1936
1937 for (i = 0; i < new_alt->desc.bNumEndpoints; i++) {
1938 ret = hcd->driver->add_endpoint(hcd, udev,
1939 &new_alt->endpoint[i]);
1940 if (ret < 0)
1941 goto reset;
1942 }
1943 }
1944 ret = hcd->driver->check_bandwidth(hcd, udev);
1945reset:
1946 if (ret < 0)
1947 hcd->driver->reset_bandwidth(hcd, udev);
1948 return ret;
1949}
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959void usb_hcd_disable_endpoint(struct usb_device *udev,
1960 struct usb_host_endpoint *ep)
1961{
1962 struct usb_hcd *hcd;
1963
1964 might_sleep();
1965 hcd = bus_to_hcd(udev->bus);
1966 if (hcd->driver->endpoint_disable)
1967 hcd->driver->endpoint_disable(hcd, ep);
1968}
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978void usb_hcd_reset_endpoint(struct usb_device *udev,
1979 struct usb_host_endpoint *ep)
1980{
1981 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
1982
1983 if (hcd->driver->endpoint_reset)
1984 hcd->driver->endpoint_reset(hcd, ep);
1985 else {
1986 int epnum = usb_endpoint_num(&ep->desc);
1987 int is_out = usb_endpoint_dir_out(&ep->desc);
1988 int is_control = usb_endpoint_xfer_control(&ep->desc);
1989
1990 usb_settoggle(udev, epnum, is_out, 0);
1991 if (is_control)
1992 usb_settoggle(udev, epnum, !is_out, 0);
1993 }
1994}
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011int usb_alloc_streams(struct usb_interface *interface,
2012 struct usb_host_endpoint **eps, unsigned int num_eps,
2013 unsigned int num_streams, gfp_t mem_flags)
2014{
2015 struct usb_hcd *hcd;
2016 struct usb_device *dev;
2017 int i, ret;
2018
2019 dev = interface_to_usbdev(interface);
2020 hcd = bus_to_hcd(dev->bus);
2021 if (!hcd->driver->alloc_streams || !hcd->driver->free_streams)
2022 return -EINVAL;
2023 if (dev->speed < USB_SPEED_SUPER)
2024 return -EINVAL;
2025 if (dev->state < USB_STATE_CONFIGURED)
2026 return -ENODEV;
2027
2028 for (i = 0; i < num_eps; i++) {
2029
2030 if (!usb_endpoint_xfer_bulk(&eps[i]->desc))
2031 return -EINVAL;
2032
2033 if (eps[i]->streams)
2034 return -EINVAL;
2035 }
2036
2037 ret = hcd->driver->alloc_streams(hcd, dev, eps, num_eps,
2038 num_streams, mem_flags);
2039 if (ret < 0)
2040 return ret;
2041
2042 for (i = 0; i < num_eps; i++)
2043 eps[i]->streams = ret;
2044
2045 return ret;
2046}
2047EXPORT_SYMBOL_GPL(usb_alloc_streams);
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061int usb_free_streams(struct usb_interface *interface,
2062 struct usb_host_endpoint **eps, unsigned int num_eps,
2063 gfp_t mem_flags)
2064{
2065 struct usb_hcd *hcd;
2066 struct usb_device *dev;
2067 int i, ret;
2068
2069 dev = interface_to_usbdev(interface);
2070 hcd = bus_to_hcd(dev->bus);
2071 if (dev->speed < USB_SPEED_SUPER)
2072 return -EINVAL;
2073
2074
2075 for (i = 0; i < num_eps; i++)
2076 if (!eps[i] || !eps[i]->streams)
2077 return -EINVAL;
2078
2079 ret = hcd->driver->free_streams(hcd, dev, eps, num_eps, mem_flags);
2080 if (ret < 0)
2081 return ret;
2082
2083 for (i = 0; i < num_eps; i++)
2084 eps[i]->streams = 0;
2085
2086 return ret;
2087}
2088EXPORT_SYMBOL_GPL(usb_free_streams);
2089
2090
2091
2092
2093
2094
2095void usb_hcd_synchronize_unlinks(struct usb_device *udev)
2096{
2097 spin_lock_irq(&hcd_urb_unlink_lock);
2098 spin_unlock_irq(&hcd_urb_unlink_lock);
2099}
2100
2101
2102
2103
2104int usb_hcd_get_frame_number (struct usb_device *udev)
2105{
2106 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2107
2108 if (!HCD_RH_RUNNING(hcd))
2109 return -ESHUTDOWN;
2110 return hcd->driver->get_frame_number (hcd);
2111}
2112
2113
2114#ifdef CONFIG_USB_HCD_TEST_MODE
2115
2116static void usb_ehset_completion(struct urb *urb)
2117{
2118 struct completion *done = urb->context;
2119
2120 complete(done);
2121}
2122
2123
2124
2125
2126
2127
2128static struct urb *request_single_step_set_feature_urb(
2129 struct usb_device *udev,
2130 void *dr,
2131 void *buf,
2132 struct completion *done)
2133{
2134 struct urb *urb;
2135 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2136 struct usb_host_endpoint *ep;
2137
2138 urb = usb_alloc_urb(0, GFP_KERNEL);
2139 if (!urb)
2140 return NULL;
2141
2142 urb->pipe = usb_rcvctrlpipe(udev, 0);
2143 ep = (usb_pipein(urb->pipe) ? udev->ep_in : udev->ep_out)
2144 [usb_pipeendpoint(urb->pipe)];
2145 if (!ep) {
2146 usb_free_urb(urb);
2147 return NULL;
2148 }
2149
2150 urb->ep = ep;
2151 urb->dev = udev;
2152 urb->setup_packet = (void *)dr;
2153 urb->transfer_buffer = buf;
2154 urb->transfer_buffer_length = USB_DT_DEVICE_SIZE;
2155 urb->complete = usb_ehset_completion;
2156 urb->status = -EINPROGRESS;
2157 urb->actual_length = 0;
2158 urb->transfer_flags = URB_DIR_IN;
2159 usb_get_urb(urb);
2160 atomic_inc(&urb->use_count);
2161 atomic_inc(&urb->dev->urbnum);
2162 if (map_urb_for_dma(hcd, urb, GFP_KERNEL)) {
2163 usb_put_urb(urb);
2164 usb_free_urb(urb);
2165 return NULL;
2166 }
2167
2168 urb->context = done;
2169 return urb;
2170}
2171
2172int ehset_single_step_set_feature(struct usb_hcd *hcd, int port)
2173{
2174 int retval = -ENOMEM;
2175 struct usb_ctrlrequest *dr;
2176 struct urb *urb;
2177 struct usb_device *udev;
2178 struct usb_device_descriptor *buf;
2179 DECLARE_COMPLETION_ONSTACK(done);
2180
2181
2182 udev = usb_hub_find_child(hcd->self.root_hub, port);
2183 if (!udev) {
2184 dev_err(hcd->self.controller, "No device attached to the RootHub\n");
2185 return -ENODEV;
2186 }
2187 buf = kmalloc(USB_DT_DEVICE_SIZE, GFP_KERNEL);
2188 if (!buf)
2189 return -ENOMEM;
2190
2191 dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL);
2192 if (!dr) {
2193 kfree(buf);
2194 return -ENOMEM;
2195 }
2196
2197
2198 dr->bRequestType = USB_DIR_IN;
2199 dr->bRequest = USB_REQ_GET_DESCRIPTOR;
2200 dr->wValue = cpu_to_le16(USB_DT_DEVICE << 8);
2201 dr->wIndex = 0;
2202 dr->wLength = cpu_to_le16(USB_DT_DEVICE_SIZE);
2203 urb = request_single_step_set_feature_urb(udev, dr, buf, &done);
2204 if (!urb)
2205 goto cleanup;
2206
2207
2208 retval = hcd->driver->submit_single_step_set_feature(hcd, urb, 1);
2209 if (retval)
2210 goto out1;
2211 if (!wait_for_completion_timeout(&done, msecs_to_jiffies(2000))) {
2212 usb_kill_urb(urb);
2213 retval = -ETIMEDOUT;
2214 dev_err(hcd->self.controller,
2215 "%s SETUP stage timed out on ep0\n", __func__);
2216 goto out1;
2217 }
2218 msleep(15 * 1000);
2219
2220
2221 urb->status = -EINPROGRESS;
2222 usb_get_urb(urb);
2223 atomic_inc(&urb->use_count);
2224 atomic_inc(&urb->dev->urbnum);
2225 retval = hcd->driver->submit_single_step_set_feature(hcd, urb, 0);
2226 if (!retval && !wait_for_completion_timeout(&done,
2227 msecs_to_jiffies(2000))) {
2228 usb_kill_urb(urb);
2229 retval = -ETIMEDOUT;
2230 dev_err(hcd->self.controller,
2231 "%s IN stage timed out on ep0\n", __func__);
2232 }
2233out1:
2234 usb_free_urb(urb);
2235cleanup:
2236 kfree(dr);
2237 kfree(buf);
2238 return retval;
2239}
2240EXPORT_SYMBOL_GPL(ehset_single_step_set_feature);
2241#endif
2242
2243
2244
2245#ifdef CONFIG_PM
2246
2247int hcd_bus_suspend(struct usb_device *rhdev, pm_message_t msg)
2248{
2249 struct usb_hcd *hcd = bus_to_hcd(rhdev->bus);
2250 int status;
2251 int old_state = hcd->state;
2252
2253 dev_dbg(&rhdev->dev, "bus %ssuspend, wakeup %d\n",
2254 (PMSG_IS_AUTO(msg) ? "auto-" : ""),
2255 rhdev->do_remote_wakeup);
2256 if (HCD_DEAD(hcd)) {
2257 dev_dbg(&rhdev->dev, "skipped %s of dead bus\n", "suspend");
2258 return 0;
2259 }
2260
2261 if (!hcd->driver->bus_suspend) {
2262 status = -ENOENT;
2263 } else {
2264 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2265 hcd->state = HC_STATE_QUIESCING;
2266 status = hcd->driver->bus_suspend(hcd);
2267 }
2268 if (status == 0) {
2269 usb_set_device_state(rhdev, USB_STATE_SUSPENDED);
2270 hcd->state = HC_STATE_SUSPENDED;
2271
2272 if (!PMSG_IS_AUTO(msg))
2273 usb_phy_roothub_suspend(hcd->self.sysdev,
2274 hcd->phy_roothub);
2275
2276
2277 if (rhdev->do_remote_wakeup) {
2278 char buffer[6];
2279
2280 status = hcd->driver->hub_status_data(hcd, buffer);
2281 if (status != 0) {
2282 dev_dbg(&rhdev->dev, "suspend raced with wakeup event\n");
2283 hcd_bus_resume(rhdev, PMSG_AUTO_RESUME);
2284 status = -EBUSY;
2285 }
2286 }
2287 } else {
2288 spin_lock_irq(&hcd_root_hub_lock);
2289 if (!HCD_DEAD(hcd)) {
2290 set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2291 hcd->state = old_state;
2292 }
2293 spin_unlock_irq(&hcd_root_hub_lock);
2294 dev_dbg(&rhdev->dev, "bus %s fail, err %d\n",
2295 "suspend", status);
2296 }
2297 return status;
2298}
2299
2300int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg)
2301{
2302 struct usb_hcd *hcd = bus_to_hcd(rhdev->bus);
2303 int status;
2304 int old_state = hcd->state;
2305
2306 dev_dbg(&rhdev->dev, "usb %sresume\n",
2307 (PMSG_IS_AUTO(msg) ? "auto-" : ""));
2308 if (HCD_DEAD(hcd)) {
2309 dev_dbg(&rhdev->dev, "skipped %s of dead bus\n", "resume");
2310 return 0;
2311 }
2312
2313 if (!PMSG_IS_AUTO(msg)) {
2314 status = usb_phy_roothub_resume(hcd->self.sysdev,
2315 hcd->phy_roothub);
2316 if (status)
2317 return status;
2318 }
2319
2320 if (!hcd->driver->bus_resume)
2321 return -ENOENT;
2322 if (HCD_RH_RUNNING(hcd))
2323 return 0;
2324
2325 hcd->state = HC_STATE_RESUMING;
2326 status = hcd->driver->bus_resume(hcd);
2327 clear_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags);
2328 if (status == 0)
2329 status = usb_phy_roothub_calibrate(hcd->phy_roothub);
2330
2331 if (status == 0) {
2332 struct usb_device *udev;
2333 int port1;
2334
2335 spin_lock_irq(&hcd_root_hub_lock);
2336 if (!HCD_DEAD(hcd)) {
2337 usb_set_device_state(rhdev, rhdev->actconfig
2338 ? USB_STATE_CONFIGURED
2339 : USB_STATE_ADDRESS);
2340 set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2341 hcd->state = HC_STATE_RUNNING;
2342 }
2343 spin_unlock_irq(&hcd_root_hub_lock);
2344
2345
2346
2347
2348
2349
2350
2351 usb_hub_for_each_child(rhdev, port1, udev) {
2352 if (udev->state != USB_STATE_NOTATTACHED &&
2353 !udev->port_is_suspended) {
2354 usleep_range(10000, 11000);
2355 break;
2356 }
2357 }
2358 } else {
2359 hcd->state = old_state;
2360 usb_phy_roothub_suspend(hcd->self.sysdev, hcd->phy_roothub);
2361 dev_dbg(&rhdev->dev, "bus %s fail, err %d\n",
2362 "resume", status);
2363 if (status != -ESHUTDOWN)
2364 usb_hc_died(hcd);
2365 }
2366 return status;
2367}
2368
2369
2370static void hcd_resume_work(struct work_struct *work)
2371{
2372 struct usb_hcd *hcd = container_of(work, struct usb_hcd, wakeup_work);
2373 struct usb_device *udev = hcd->self.root_hub;
2374
2375 usb_remote_wakeup(udev);
2376}
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387void usb_hcd_resume_root_hub (struct usb_hcd *hcd)
2388{
2389 unsigned long flags;
2390
2391 spin_lock_irqsave (&hcd_root_hub_lock, flags);
2392 if (hcd->rh_registered) {
2393 pm_wakeup_event(&hcd->self.root_hub->dev, 0);
2394 set_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags);
2395 queue_work(pm_wq, &hcd->wakeup_work);
2396 }
2397 spin_unlock_irqrestore (&hcd_root_hub_lock, flags);
2398}
2399EXPORT_SYMBOL_GPL(usb_hcd_resume_root_hub);
2400
2401#endif
2402
2403
2404
2405#ifdef CONFIG_USB_OTG
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num)
2421{
2422 struct usb_hcd *hcd;
2423 int status = -EOPNOTSUPP;
2424
2425
2426
2427
2428
2429 hcd = bus_to_hcd(bus);
2430 if (port_num && hcd->driver->start_port_reset)
2431 status = hcd->driver->start_port_reset(hcd, port_num);
2432
2433
2434
2435
2436 if (status == 0)
2437 mod_timer(&hcd->rh_timer, jiffies + msecs_to_jiffies(10));
2438 return status;
2439}
2440EXPORT_SYMBOL_GPL(usb_bus_start_enum);
2441
2442#endif
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456irqreturn_t usb_hcd_irq (int irq, void *__hcd)
2457{
2458 struct usb_hcd *hcd = __hcd;
2459 irqreturn_t rc;
2460
2461 if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd)))
2462 rc = IRQ_NONE;
2463 else if (hcd->driver->irq(hcd) == IRQ_NONE)
2464 rc = IRQ_NONE;
2465 else
2466 rc = IRQ_HANDLED;
2467
2468 return rc;
2469}
2470EXPORT_SYMBOL_GPL(usb_hcd_irq);
2471
2472
2473
2474
2475static void hcd_died_work(struct work_struct *work)
2476{
2477 struct usb_hcd *hcd = container_of(work, struct usb_hcd, died_work);
2478 static char *env[] = {
2479 "ERROR=DEAD",
2480 NULL
2481 };
2482
2483
2484 kobject_uevent_env(&hcd->self.root_hub->dev.kobj, KOBJ_OFFLINE, env);
2485}
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497void usb_hc_died (struct usb_hcd *hcd)
2498{
2499 unsigned long flags;
2500
2501 dev_err (hcd->self.controller, "HC died; cleaning up\n");
2502
2503 spin_lock_irqsave (&hcd_root_hub_lock, flags);
2504 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2505 set_bit(HCD_FLAG_DEAD, &hcd->flags);
2506 if (hcd->rh_registered) {
2507 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2508
2509
2510 usb_set_device_state (hcd->self.root_hub,
2511 USB_STATE_NOTATTACHED);
2512 usb_kick_hub_wq(hcd->self.root_hub);
2513 }
2514 if (usb_hcd_is_primary_hcd(hcd) && hcd->shared_hcd) {
2515 hcd = hcd->shared_hcd;
2516 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2517 set_bit(HCD_FLAG_DEAD, &hcd->flags);
2518 if (hcd->rh_registered) {
2519 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2520
2521
2522 usb_set_device_state(hcd->self.root_hub,
2523 USB_STATE_NOTATTACHED);
2524 usb_kick_hub_wq(hcd->self.root_hub);
2525 }
2526 }
2527
2528
2529 if (usb_hcd_is_primary_hcd(hcd))
2530 schedule_work(&hcd->died_work);
2531 else
2532 schedule_work(&hcd->primary_hcd->died_work);
2533
2534 spin_unlock_irqrestore (&hcd_root_hub_lock, flags);
2535
2536}
2537EXPORT_SYMBOL_GPL (usb_hc_died);
2538
2539
2540
2541static void init_giveback_urb_bh(struct giveback_urb_bh *bh)
2542{
2543
2544 spin_lock_init(&bh->lock);
2545 INIT_LIST_HEAD(&bh->head);
2546 tasklet_init(&bh->bh, usb_giveback_urb_bh, (unsigned long)bh);
2547}
2548
2549struct usb_hcd *__usb_create_hcd(const struct hc_driver *driver,
2550 struct device *sysdev, struct device *dev, const char *bus_name,
2551 struct usb_hcd *primary_hcd)
2552{
2553 struct usb_hcd *hcd;
2554
2555 hcd = kzalloc(sizeof(*hcd) + driver->hcd_priv_size, GFP_KERNEL);
2556 if (!hcd)
2557 return NULL;
2558 if (primary_hcd == NULL) {
2559 hcd->address0_mutex = kmalloc(sizeof(*hcd->address0_mutex),
2560 GFP_KERNEL);
2561 if (!hcd->address0_mutex) {
2562 kfree(hcd);
2563 dev_dbg(dev, "hcd address0 mutex alloc failed\n");
2564 return NULL;
2565 }
2566 mutex_init(hcd->address0_mutex);
2567 hcd->bandwidth_mutex = kmalloc(sizeof(*hcd->bandwidth_mutex),
2568 GFP_KERNEL);
2569 if (!hcd->bandwidth_mutex) {
2570 kfree(hcd->address0_mutex);
2571 kfree(hcd);
2572 dev_dbg(dev, "hcd bandwidth mutex alloc failed\n");
2573 return NULL;
2574 }
2575 mutex_init(hcd->bandwidth_mutex);
2576 dev_set_drvdata(dev, hcd);
2577 } else {
2578 mutex_lock(&usb_port_peer_mutex);
2579 hcd->address0_mutex = primary_hcd->address0_mutex;
2580 hcd->bandwidth_mutex = primary_hcd->bandwidth_mutex;
2581 hcd->primary_hcd = primary_hcd;
2582 primary_hcd->primary_hcd = primary_hcd;
2583 hcd->shared_hcd = primary_hcd;
2584 primary_hcd->shared_hcd = hcd;
2585 mutex_unlock(&usb_port_peer_mutex);
2586 }
2587
2588 kref_init(&hcd->kref);
2589
2590 usb_bus_init(&hcd->self);
2591 hcd->self.controller = dev;
2592 hcd->self.sysdev = sysdev;
2593 hcd->self.bus_name = bus_name;
2594
2595 timer_setup(&hcd->rh_timer, rh_timer_func, 0);
2596#ifdef CONFIG_PM
2597 INIT_WORK(&hcd->wakeup_work, hcd_resume_work);
2598#endif
2599
2600 INIT_WORK(&hcd->died_work, hcd_died_work);
2601
2602 hcd->driver = driver;
2603 hcd->speed = driver->flags & HCD_MASK;
2604 hcd->product_desc = (driver->product_desc) ? driver->product_desc :
2605 "USB Host Controller";
2606 return hcd;
2607}
2608EXPORT_SYMBOL_GPL(__usb_create_hcd);
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627struct usb_hcd *usb_create_shared_hcd(const struct hc_driver *driver,
2628 struct device *dev, const char *bus_name,
2629 struct usb_hcd *primary_hcd)
2630{
2631 return __usb_create_hcd(driver, dev, dev, bus_name, primary_hcd);
2632}
2633EXPORT_SYMBOL_GPL(usb_create_shared_hcd);
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650struct usb_hcd *usb_create_hcd(const struct hc_driver *driver,
2651 struct device *dev, const char *bus_name)
2652{
2653 return __usb_create_hcd(driver, dev, dev, bus_name, NULL);
2654}
2655EXPORT_SYMBOL_GPL(usb_create_hcd);
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666static void hcd_release(struct kref *kref)
2667{
2668 struct usb_hcd *hcd = container_of (kref, struct usb_hcd, kref);
2669
2670 mutex_lock(&usb_port_peer_mutex);
2671 if (hcd->shared_hcd) {
2672 struct usb_hcd *peer = hcd->shared_hcd;
2673
2674 peer->shared_hcd = NULL;
2675 peer->primary_hcd = NULL;
2676 } else {
2677 kfree(hcd->address0_mutex);
2678 kfree(hcd->bandwidth_mutex);
2679 }
2680 mutex_unlock(&usb_port_peer_mutex);
2681 kfree(hcd);
2682}
2683
2684struct usb_hcd *usb_get_hcd (struct usb_hcd *hcd)
2685{
2686 if (hcd)
2687 kref_get (&hcd->kref);
2688 return hcd;
2689}
2690EXPORT_SYMBOL_GPL(usb_get_hcd);
2691
2692void usb_put_hcd (struct usb_hcd *hcd)
2693{
2694 if (hcd)
2695 kref_put (&hcd->kref, hcd_release);
2696}
2697EXPORT_SYMBOL_GPL(usb_put_hcd);
2698
2699int usb_hcd_is_primary_hcd(struct usb_hcd *hcd)
2700{
2701 if (!hcd->primary_hcd)
2702 return 1;
2703 return hcd == hcd->primary_hcd;
2704}
2705EXPORT_SYMBOL_GPL(usb_hcd_is_primary_hcd);
2706
2707int usb_hcd_find_raw_port_number(struct usb_hcd *hcd, int port1)
2708{
2709 if (!hcd->driver->find_raw_port_number)
2710 return port1;
2711
2712 return hcd->driver->find_raw_port_number(hcd, port1);
2713}
2714
2715static int usb_hcd_request_irqs(struct usb_hcd *hcd,
2716 unsigned int irqnum, unsigned long irqflags)
2717{
2718 int retval;
2719
2720 if (hcd->driver->irq) {
2721
2722 snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d",
2723 hcd->driver->description, hcd->self.busnum);
2724 retval = request_irq(irqnum, &usb_hcd_irq, irqflags,
2725 hcd->irq_descr, hcd);
2726 if (retval != 0) {
2727 dev_err(hcd->self.controller,
2728 "request interrupt %d failed\n",
2729 irqnum);
2730 return retval;
2731 }
2732 hcd->irq = irqnum;
2733 dev_info(hcd->self.controller, "irq %d, %s 0x%08llx\n", irqnum,
2734 (hcd->driver->flags & HCD_MEMORY) ?
2735 "io mem" : "io base",
2736 (unsigned long long)hcd->rsrc_start);
2737 } else {
2738 hcd->irq = 0;
2739 if (hcd->rsrc_start)
2740 dev_info(hcd->self.controller, "%s 0x%08llx\n",
2741 (hcd->driver->flags & HCD_MEMORY) ?
2742 "io mem" : "io base",
2743 (unsigned long long)hcd->rsrc_start);
2744 }
2745 return 0;
2746}
2747
2748
2749
2750
2751
2752static void usb_put_invalidate_rhdev(struct usb_hcd *hcd)
2753{
2754 struct usb_device *rhdev;
2755
2756 mutex_lock(&usb_port_peer_mutex);
2757 rhdev = hcd->self.root_hub;
2758 hcd->self.root_hub = NULL;
2759 mutex_unlock(&usb_port_peer_mutex);
2760 usb_put_dev(rhdev);
2761}
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773int usb_add_hcd(struct usb_hcd *hcd,
2774 unsigned int irqnum, unsigned long irqflags)
2775{
2776 int retval;
2777 struct usb_device *rhdev;
2778
2779 if (!hcd->skip_phy_initialization && usb_hcd_is_primary_hcd(hcd)) {
2780 hcd->phy_roothub = usb_phy_roothub_alloc(hcd->self.sysdev);
2781 if (IS_ERR(hcd->phy_roothub))
2782 return PTR_ERR(hcd->phy_roothub);
2783
2784 retval = usb_phy_roothub_init(hcd->phy_roothub);
2785 if (retval)
2786 return retval;
2787
2788 retval = usb_phy_roothub_set_mode(hcd->phy_roothub,
2789 PHY_MODE_USB_HOST_SS);
2790 if (retval)
2791 retval = usb_phy_roothub_set_mode(hcd->phy_roothub,
2792 PHY_MODE_USB_HOST);
2793 if (retval)
2794 goto err_usb_phy_roothub_power_on;
2795
2796 retval = usb_phy_roothub_power_on(hcd->phy_roothub);
2797 if (retval)
2798 goto err_usb_phy_roothub_power_on;
2799 }
2800
2801 dev_info(hcd->self.controller, "%s\n", hcd->product_desc);
2802
2803 switch (authorized_default) {
2804 case USB_AUTHORIZE_NONE:
2805 hcd->dev_policy = USB_DEVICE_AUTHORIZE_NONE;
2806 break;
2807
2808 case USB_AUTHORIZE_ALL:
2809 hcd->dev_policy = USB_DEVICE_AUTHORIZE_ALL;
2810 break;
2811
2812 case USB_AUTHORIZE_INTERNAL:
2813 hcd->dev_policy = USB_DEVICE_AUTHORIZE_INTERNAL;
2814 break;
2815
2816 case USB_AUTHORIZE_WIRED:
2817 default:
2818 hcd->dev_policy = hcd->wireless ?
2819 USB_DEVICE_AUTHORIZE_NONE : USB_DEVICE_AUTHORIZE_ALL;
2820 break;
2821 }
2822
2823 set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
2824
2825
2826 set_bit(HCD_FLAG_INTF_AUTHORIZED, &hcd->flags);
2827
2828
2829
2830
2831
2832 retval = hcd_buffer_create(hcd);
2833 if (retval != 0) {
2834 dev_dbg(hcd->self.sysdev, "pool alloc failed\n");
2835 goto err_create_buf;
2836 }
2837
2838 retval = usb_register_bus(&hcd->self);
2839 if (retval < 0)
2840 goto err_register_bus;
2841
2842 rhdev = usb_alloc_dev(NULL, &hcd->self, 0);
2843 if (rhdev == NULL) {
2844 dev_err(hcd->self.sysdev, "unable to allocate root hub\n");
2845 retval = -ENOMEM;
2846 goto err_allocate_root_hub;
2847 }
2848 mutex_lock(&usb_port_peer_mutex);
2849 hcd->self.root_hub = rhdev;
2850 mutex_unlock(&usb_port_peer_mutex);
2851
2852 rhdev->rx_lanes = 1;
2853 rhdev->tx_lanes = 1;
2854 rhdev->ssp_rate = USB_SSP_GEN_UNKNOWN;
2855
2856 switch (hcd->speed) {
2857 case HCD_USB11:
2858 rhdev->speed = USB_SPEED_FULL;
2859 break;
2860 case HCD_USB2:
2861 rhdev->speed = USB_SPEED_HIGH;
2862 break;
2863 case HCD_USB25:
2864 rhdev->speed = USB_SPEED_WIRELESS;
2865 break;
2866 case HCD_USB3:
2867 rhdev->speed = USB_SPEED_SUPER;
2868 break;
2869 case HCD_USB32:
2870 rhdev->rx_lanes = 2;
2871 rhdev->tx_lanes = 2;
2872 rhdev->ssp_rate = USB_SSP_GEN_2x2;
2873 rhdev->speed = USB_SPEED_SUPER_PLUS;
2874 break;
2875 case HCD_USB31:
2876 rhdev->ssp_rate = USB_SSP_GEN_2x1;
2877 rhdev->speed = USB_SPEED_SUPER_PLUS;
2878 break;
2879 default:
2880 retval = -EINVAL;
2881 goto err_set_rh_speed;
2882 }
2883
2884
2885
2886
2887
2888 device_set_wakeup_capable(&rhdev->dev, 1);
2889
2890
2891
2892
2893
2894 set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2895
2896
2897
2898
2899 if (hcd->driver->reset) {
2900 retval = hcd->driver->reset(hcd);
2901 if (retval < 0) {
2902 dev_err(hcd->self.controller, "can't setup: %d\n",
2903 retval);
2904 goto err_hcd_driver_setup;
2905 }
2906 }
2907 hcd->rh_pollable = 1;
2908
2909 retval = usb_phy_roothub_calibrate(hcd->phy_roothub);
2910 if (retval)
2911 goto err_hcd_driver_setup;
2912
2913
2914 if (device_can_wakeup(hcd->self.controller)
2915 && device_can_wakeup(&hcd->self.root_hub->dev))
2916 dev_dbg(hcd->self.controller, "supports USB remote wakeup\n");
2917
2918
2919 init_giveback_urb_bh(&hcd->high_prio_bh);
2920 init_giveback_urb_bh(&hcd->low_prio_bh);
2921
2922
2923
2924
2925 if (usb_hcd_is_primary_hcd(hcd) && irqnum) {
2926 retval = usb_hcd_request_irqs(hcd, irqnum, irqflags);
2927 if (retval)
2928 goto err_request_irq;
2929 }
2930
2931 hcd->state = HC_STATE_RUNNING;
2932 retval = hcd->driver->start(hcd);
2933 if (retval < 0) {
2934 dev_err(hcd->self.controller, "startup error %d\n", retval);
2935 goto err_hcd_driver_start;
2936 }
2937
2938
2939 retval = register_root_hub(hcd);
2940 if (retval != 0)
2941 goto err_register_root_hub;
2942
2943 if (hcd->uses_new_polling && HCD_POLL_RH(hcd))
2944 usb_hcd_poll_rh_status(hcd);
2945
2946 return retval;
2947
2948err_register_root_hub:
2949 hcd->rh_pollable = 0;
2950 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2951 del_timer_sync(&hcd->rh_timer);
2952 hcd->driver->stop(hcd);
2953 hcd->state = HC_STATE_HALT;
2954 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2955 del_timer_sync(&hcd->rh_timer);
2956err_hcd_driver_start:
2957 if (usb_hcd_is_primary_hcd(hcd) && hcd->irq > 0)
2958 free_irq(irqnum, hcd);
2959err_request_irq:
2960err_hcd_driver_setup:
2961err_set_rh_speed:
2962 usb_put_invalidate_rhdev(hcd);
2963err_allocate_root_hub:
2964 usb_deregister_bus(&hcd->self);
2965err_register_bus:
2966 hcd_buffer_destroy(hcd);
2967err_create_buf:
2968 usb_phy_roothub_power_off(hcd->phy_roothub);
2969err_usb_phy_roothub_power_on:
2970 usb_phy_roothub_exit(hcd->phy_roothub);
2971
2972 return retval;
2973}
2974EXPORT_SYMBOL_GPL(usb_add_hcd);
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985void usb_remove_hcd(struct usb_hcd *hcd)
2986{
2987 struct usb_device *rhdev = hcd->self.root_hub;
2988
2989 dev_info(hcd->self.controller, "remove, state %x\n", hcd->state);
2990
2991 usb_get_dev(rhdev);
2992 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2993 if (HC_IS_RUNNING (hcd->state))
2994 hcd->state = HC_STATE_QUIESCING;
2995
2996 dev_dbg(hcd->self.controller, "roothub graceful disconnect\n");
2997 spin_lock_irq (&hcd_root_hub_lock);
2998 hcd->rh_registered = 0;
2999 spin_unlock_irq (&hcd_root_hub_lock);
3000
3001#ifdef CONFIG_PM
3002 cancel_work_sync(&hcd->wakeup_work);
3003#endif
3004 cancel_work_sync(&hcd->died_work);
3005
3006 mutex_lock(&usb_bus_idr_lock);
3007 usb_disconnect(&rhdev);
3008 mutex_unlock(&usb_bus_idr_lock);
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025 hcd->rh_pollable = 0;
3026 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
3027 del_timer_sync(&hcd->rh_timer);
3028
3029 hcd->driver->stop(hcd);
3030 hcd->state = HC_STATE_HALT;
3031
3032
3033 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
3034 del_timer_sync(&hcd->rh_timer);
3035
3036 if (usb_hcd_is_primary_hcd(hcd)) {
3037 if (hcd->irq > 0)
3038 free_irq(hcd->irq, hcd);
3039 }
3040
3041 usb_deregister_bus(&hcd->self);
3042 hcd_buffer_destroy(hcd);
3043
3044 usb_phy_roothub_power_off(hcd->phy_roothub);
3045 usb_phy_roothub_exit(hcd->phy_roothub);
3046
3047 usb_put_invalidate_rhdev(hcd);
3048 hcd->flags = 0;
3049}
3050EXPORT_SYMBOL_GPL(usb_remove_hcd);
3051
3052void
3053usb_hcd_platform_shutdown(struct platform_device *dev)
3054{
3055 struct usb_hcd *hcd = platform_get_drvdata(dev);
3056
3057
3058 pm_runtime_get_sync(&dev->dev);
3059
3060 if (hcd->driver->shutdown)
3061 hcd->driver->shutdown(hcd);
3062}
3063EXPORT_SYMBOL_GPL(usb_hcd_platform_shutdown);
3064
3065int usb_hcd_setup_local_mem(struct usb_hcd *hcd, phys_addr_t phys_addr,
3066 dma_addr_t dma, size_t size)
3067{
3068 int err;
3069 void *local_mem;
3070
3071 hcd->localmem_pool = devm_gen_pool_create(hcd->self.sysdev, 4,
3072 dev_to_node(hcd->self.sysdev),
3073 dev_name(hcd->self.sysdev));
3074 if (IS_ERR(hcd->localmem_pool))
3075 return PTR_ERR(hcd->localmem_pool);
3076
3077 local_mem = devm_memremap(hcd->self.sysdev, phys_addr,
3078 size, MEMREMAP_WC);
3079 if (IS_ERR(local_mem))
3080 return PTR_ERR(local_mem);
3081
3082
3083
3084
3085
3086
3087 err = gen_pool_add_virt(hcd->localmem_pool, (unsigned long)local_mem,
3088 dma, size, dev_to_node(hcd->self.sysdev));
3089 if (err < 0) {
3090 dev_err(hcd->self.sysdev, "gen_pool_add_virt failed with %d\n",
3091 err);
3092 return err;
3093 }
3094
3095 return 0;
3096}
3097EXPORT_SYMBOL_GPL(usb_hcd_setup_local_mem);
3098
3099
3100
3101#if IS_ENABLED(CONFIG_USB_MON)
3102
3103const struct usb_mon_operations *mon_ops;
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113int usb_mon_register(const struct usb_mon_operations *ops)
3114{
3115
3116 if (mon_ops)
3117 return -EBUSY;
3118
3119 mon_ops = ops;
3120 mb();
3121 return 0;
3122}
3123EXPORT_SYMBOL_GPL (usb_mon_register);
3124
3125void usb_mon_deregister (void)
3126{
3127
3128 if (mon_ops == NULL) {
3129 printk(KERN_ERR "USB: monitor was not registered\n");
3130 return;
3131 }
3132 mon_ops = NULL;
3133 mb();
3134}
3135EXPORT_SYMBOL_GPL (usb_mon_deregister);
3136
3137#endif
3138