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