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 = 1;
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
1172
1173
1174
1175
1176
1177 if (!HCD_SAW_IRQ(hcd) && !is_root_hub(urb->dev)) {
1178 dev_warn(hcd->self.controller, "Unlink after no-IRQ? "
1179 "Controller is probably using the wrong IRQ.\n");
1180 set_bit(HCD_FLAG_SAW_IRQ, &hcd->flags);
1181 if (hcd->shared_hcd)
1182 set_bit(HCD_FLAG_SAW_IRQ, &hcd->shared_hcd->flags);
1183 }
1184
1185 return 0;
1186}
1187EXPORT_SYMBOL_GPL(usb_hcd_check_unlink_urb);
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb)
1200{
1201
1202 spin_lock(&hcd_urb_list_lock);
1203 list_del_init(&urb->urb_list);
1204 spin_unlock(&hcd_urb_list_lock);
1205}
1206EXPORT_SYMBOL_GPL(usb_hcd_unlink_urb_from_ep);
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240static int hcd_alloc_coherent(struct usb_bus *bus,
1241 gfp_t mem_flags, dma_addr_t *dma_handle,
1242 void **vaddr_handle, size_t size,
1243 enum dma_data_direction dir)
1244{
1245 unsigned char *vaddr;
1246
1247 if (*vaddr_handle == NULL) {
1248 WARN_ON_ONCE(1);
1249 return -EFAULT;
1250 }
1251
1252 vaddr = hcd_buffer_alloc(bus, size + sizeof(vaddr),
1253 mem_flags, dma_handle);
1254 if (!vaddr)
1255 return -ENOMEM;
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265 put_unaligned((unsigned long)*vaddr_handle,
1266 (unsigned long *)(vaddr + size));
1267
1268 if (dir == DMA_TO_DEVICE)
1269 memcpy(vaddr, *vaddr_handle, size);
1270
1271 *vaddr_handle = vaddr;
1272 return 0;
1273}
1274
1275static void hcd_free_coherent(struct usb_bus *bus, dma_addr_t *dma_handle,
1276 void **vaddr_handle, size_t size,
1277 enum dma_data_direction dir)
1278{
1279 unsigned char *vaddr = *vaddr_handle;
1280
1281 vaddr = (void *)get_unaligned((unsigned long *)(vaddr + size));
1282
1283 if (dir == DMA_FROM_DEVICE)
1284 memcpy(vaddr, *vaddr_handle, size);
1285
1286 hcd_buffer_free(bus, size + sizeof(vaddr), *vaddr_handle, *dma_handle);
1287
1288 *vaddr_handle = vaddr;
1289 *dma_handle = 0;
1290}
1291
1292void usb_hcd_unmap_urb_setup_for_dma(struct usb_hcd *hcd, struct urb *urb)
1293{
1294 if (urb->transfer_flags & URB_SETUP_MAP_SINGLE)
1295 dma_unmap_single(hcd->self.controller,
1296 urb->setup_dma,
1297 sizeof(struct usb_ctrlrequest),
1298 DMA_TO_DEVICE);
1299 else if (urb->transfer_flags & URB_SETUP_MAP_LOCAL)
1300 hcd_free_coherent(urb->dev->bus,
1301 &urb->setup_dma,
1302 (void **) &urb->setup_packet,
1303 sizeof(struct usb_ctrlrequest),
1304 DMA_TO_DEVICE);
1305
1306
1307 urb->transfer_flags &= ~(URB_SETUP_MAP_SINGLE | URB_SETUP_MAP_LOCAL);
1308}
1309EXPORT_SYMBOL_GPL(usb_hcd_unmap_urb_setup_for_dma);
1310
1311static void unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
1312{
1313 if (hcd->driver->unmap_urb_for_dma)
1314 hcd->driver->unmap_urb_for_dma(hcd, urb);
1315 else
1316 usb_hcd_unmap_urb_for_dma(hcd, urb);
1317}
1318
1319void usb_hcd_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
1320{
1321 enum dma_data_direction dir;
1322
1323 usb_hcd_unmap_urb_setup_for_dma(hcd, urb);
1324
1325 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
1326 if (urb->transfer_flags & URB_DMA_MAP_SG)
1327 dma_unmap_sg(hcd->self.controller,
1328 urb->sg,
1329 urb->num_sgs,
1330 dir);
1331 else if (urb->transfer_flags & URB_DMA_MAP_PAGE)
1332 dma_unmap_page(hcd->self.controller,
1333 urb->transfer_dma,
1334 urb->transfer_buffer_length,
1335 dir);
1336 else if (urb->transfer_flags & URB_DMA_MAP_SINGLE)
1337 dma_unmap_single(hcd->self.controller,
1338 urb->transfer_dma,
1339 urb->transfer_buffer_length,
1340 dir);
1341 else if (urb->transfer_flags & URB_MAP_LOCAL)
1342 hcd_free_coherent(urb->dev->bus,
1343 &urb->transfer_dma,
1344 &urb->transfer_buffer,
1345 urb->transfer_buffer_length,
1346 dir);
1347
1348
1349 urb->transfer_flags &= ~(URB_DMA_MAP_SG | URB_DMA_MAP_PAGE |
1350 URB_DMA_MAP_SINGLE | URB_MAP_LOCAL);
1351}
1352EXPORT_SYMBOL_GPL(usb_hcd_unmap_urb_for_dma);
1353
1354static int map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
1355 gfp_t mem_flags)
1356{
1357 if (hcd->driver->map_urb_for_dma)
1358 return hcd->driver->map_urb_for_dma(hcd, urb, mem_flags);
1359 else
1360 return usb_hcd_map_urb_for_dma(hcd, urb, mem_flags);
1361}
1362
1363int usb_hcd_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
1364 gfp_t mem_flags)
1365{
1366 enum dma_data_direction dir;
1367 int ret = 0;
1368
1369
1370
1371
1372
1373
1374
1375 if (usb_endpoint_xfer_control(&urb->ep->desc)) {
1376 if (hcd->self.uses_pio_for_control)
1377 return ret;
1378 if (hcd->self.uses_dma) {
1379 urb->setup_dma = dma_map_single(
1380 hcd->self.controller,
1381 urb->setup_packet,
1382 sizeof(struct usb_ctrlrequest),
1383 DMA_TO_DEVICE);
1384 if (dma_mapping_error(hcd->self.controller,
1385 urb->setup_dma))
1386 return -EAGAIN;
1387 urb->transfer_flags |= URB_SETUP_MAP_SINGLE;
1388 } else if (hcd->driver->flags & HCD_LOCAL_MEM) {
1389 ret = hcd_alloc_coherent(
1390 urb->dev->bus, mem_flags,
1391 &urb->setup_dma,
1392 (void **)&urb->setup_packet,
1393 sizeof(struct usb_ctrlrequest),
1394 DMA_TO_DEVICE);
1395 if (ret)
1396 return ret;
1397 urb->transfer_flags |= URB_SETUP_MAP_LOCAL;
1398 }
1399 }
1400
1401 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
1402 if (urb->transfer_buffer_length != 0
1403 && !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)) {
1404 if (hcd->self.uses_dma) {
1405 if (urb->num_sgs) {
1406 int n = dma_map_sg(
1407 hcd->self.controller,
1408 urb->sg,
1409 urb->num_sgs,
1410 dir);
1411 if (n <= 0)
1412 ret = -EAGAIN;
1413 else
1414 urb->transfer_flags |= URB_DMA_MAP_SG;
1415 if (n != urb->num_sgs) {
1416 urb->num_sgs = n;
1417 urb->transfer_flags |=
1418 URB_DMA_SG_COMBINED;
1419 }
1420 } else if (urb->sg) {
1421 struct scatterlist *sg = urb->sg;
1422 urb->transfer_dma = dma_map_page(
1423 hcd->self.controller,
1424 sg_page(sg),
1425 sg->offset,
1426 urb->transfer_buffer_length,
1427 dir);
1428 if (dma_mapping_error(hcd->self.controller,
1429 urb->transfer_dma))
1430 ret = -EAGAIN;
1431 else
1432 urb->transfer_flags |= URB_DMA_MAP_PAGE;
1433 } else {
1434 urb->transfer_dma = dma_map_single(
1435 hcd->self.controller,
1436 urb->transfer_buffer,
1437 urb->transfer_buffer_length,
1438 dir);
1439 if (dma_mapping_error(hcd->self.controller,
1440 urb->transfer_dma))
1441 ret = -EAGAIN;
1442 else
1443 urb->transfer_flags |= URB_DMA_MAP_SINGLE;
1444 }
1445 } else if (hcd->driver->flags & HCD_LOCAL_MEM) {
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 }
1455 if (ret && (urb->transfer_flags & (URB_SETUP_MAP_SINGLE |
1456 URB_SETUP_MAP_LOCAL)))
1457 usb_hcd_unmap_urb_for_dma(hcd, urb);
1458 }
1459 return ret;
1460}
1461EXPORT_SYMBOL_GPL(usb_hcd_map_urb_for_dma);
1462
1463
1464
1465
1466
1467
1468
1469
1470int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
1471{
1472 int status;
1473 struct usb_hcd *hcd = bus_to_hcd(urb->dev->bus);
1474
1475
1476
1477
1478
1479 usb_get_urb(urb);
1480 atomic_inc(&urb->use_count);
1481 atomic_inc(&urb->dev->urbnum);
1482 usbmon_urb_submit(&hcd->self, urb);
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492 if (is_root_hub(urb->dev)) {
1493 status = rh_urb_enqueue(hcd, urb);
1494 } else {
1495 status = map_urb_for_dma(hcd, urb, mem_flags);
1496 if (likely(status == 0)) {
1497 status = hcd->driver->urb_enqueue(hcd, urb, mem_flags);
1498 if (unlikely(status))
1499 unmap_urb_for_dma(hcd, urb);
1500 }
1501 }
1502
1503 if (unlikely(status)) {
1504 usbmon_urb_submit_error(&hcd->self, urb, status);
1505 urb->hcpriv = NULL;
1506 INIT_LIST_HEAD(&urb->urb_list);
1507 atomic_dec(&urb->use_count);
1508 atomic_dec(&urb->dev->urbnum);
1509 if (atomic_read(&urb->reject))
1510 wake_up(&usb_kill_urb_queue);
1511 usb_put_urb(urb);
1512 }
1513 return status;
1514}
1515
1516
1517
1518
1519
1520
1521
1522
1523static int unlink1(struct usb_hcd *hcd, struct urb *urb, int status)
1524{
1525 int value;
1526
1527 if (is_root_hub(urb->dev))
1528 value = usb_rh_urb_dequeue(hcd, urb, status);
1529 else {
1530
1531
1532
1533
1534 value = hcd->driver->urb_dequeue(hcd, urb, status);
1535 }
1536 return value;
1537}
1538
1539
1540
1541
1542
1543
1544
1545int usb_hcd_unlink_urb (struct urb *urb, int status)
1546{
1547 struct usb_hcd *hcd;
1548 int retval = -EIDRM;
1549 unsigned long flags;
1550
1551
1552
1553
1554
1555
1556 spin_lock_irqsave(&hcd_urb_unlink_lock, flags);
1557 if (atomic_read(&urb->use_count) > 0) {
1558 retval = 0;
1559 usb_get_dev(urb->dev);
1560 }
1561 spin_unlock_irqrestore(&hcd_urb_unlink_lock, flags);
1562 if (retval == 0) {
1563 hcd = bus_to_hcd(urb->dev->bus);
1564 retval = unlink1(hcd, urb, status);
1565 usb_put_dev(urb->dev);
1566 }
1567
1568 if (retval == 0)
1569 retval = -EINPROGRESS;
1570 else if (retval != -EIDRM && retval != -EBUSY)
1571 dev_dbg(&urb->dev->dev, "hcd_unlink_urb %p fail %d\n",
1572 urb, retval);
1573 return retval;
1574}
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, int status)
1596{
1597 urb->hcpriv = NULL;
1598 if (unlikely(urb->unlinked))
1599 status = urb->unlinked;
1600 else if (unlikely((urb->transfer_flags & URB_SHORT_NOT_OK) &&
1601 urb->actual_length < urb->transfer_buffer_length &&
1602 !status))
1603 status = -EREMOTEIO;
1604
1605 unmap_urb_for_dma(hcd, urb);
1606 usbmon_urb_complete(&hcd->self, urb, status);
1607 usb_unanchor_urb(urb);
1608
1609
1610 urb->status = status;
1611 urb->complete (urb);
1612 atomic_dec (&urb->use_count);
1613 if (unlikely(atomic_read(&urb->reject)))
1614 wake_up (&usb_kill_urb_queue);
1615 usb_put_urb (urb);
1616}
1617EXPORT_SYMBOL_GPL(usb_hcd_giveback_urb);
1618
1619
1620
1621
1622
1623
1624
1625void usb_hcd_flush_endpoint(struct usb_device *udev,
1626 struct usb_host_endpoint *ep)
1627{
1628 struct usb_hcd *hcd;
1629 struct urb *urb;
1630
1631 if (!ep)
1632 return;
1633 might_sleep();
1634 hcd = bus_to_hcd(udev->bus);
1635
1636
1637 spin_lock_irq(&hcd_urb_list_lock);
1638rescan:
1639 list_for_each_entry (urb, &ep->urb_list, urb_list) {
1640 int is_in;
1641
1642 if (urb->unlinked)
1643 continue;
1644 usb_get_urb (urb);
1645 is_in = usb_urb_dir_in(urb);
1646 spin_unlock(&hcd_urb_list_lock);
1647
1648
1649 unlink1(hcd, urb, -ESHUTDOWN);
1650 dev_dbg (hcd->self.controller,
1651 "shutdown urb %p ep%d%s%s\n",
1652 urb, usb_endpoint_num(&ep->desc),
1653 is_in ? "in" : "out",
1654 ({ char *s;
1655
1656 switch (usb_endpoint_type(&ep->desc)) {
1657 case USB_ENDPOINT_XFER_CONTROL:
1658 s = ""; break;
1659 case USB_ENDPOINT_XFER_BULK:
1660 s = "-bulk"; break;
1661 case USB_ENDPOINT_XFER_INT:
1662 s = "-intr"; break;
1663 default:
1664 s = "-iso"; break;
1665 };
1666 s;
1667 }));
1668 usb_put_urb (urb);
1669
1670
1671 spin_lock(&hcd_urb_list_lock);
1672 goto rescan;
1673 }
1674 spin_unlock_irq(&hcd_urb_list_lock);
1675
1676
1677 while (!list_empty (&ep->urb_list)) {
1678 spin_lock_irq(&hcd_urb_list_lock);
1679
1680
1681 urb = NULL;
1682 if (!list_empty (&ep->urb_list)) {
1683 urb = list_entry (ep->urb_list.prev, struct urb,
1684 urb_list);
1685 usb_get_urb (urb);
1686 }
1687 spin_unlock_irq(&hcd_urb_list_lock);
1688
1689 if (urb) {
1690 usb_kill_urb (urb);
1691 usb_put_urb (urb);
1692 }
1693 }
1694}
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717int usb_hcd_alloc_bandwidth(struct usb_device *udev,
1718 struct usb_host_config *new_config,
1719 struct usb_host_interface *cur_alt,
1720 struct usb_host_interface *new_alt)
1721{
1722 int num_intfs, i, j;
1723 struct usb_host_interface *alt = NULL;
1724 int ret = 0;
1725 struct usb_hcd *hcd;
1726 struct usb_host_endpoint *ep;
1727
1728 hcd = bus_to_hcd(udev->bus);
1729 if (!hcd->driver->check_bandwidth)
1730 return 0;
1731
1732
1733 if (!new_config && !cur_alt) {
1734 for (i = 1; i < 16; ++i) {
1735 ep = udev->ep_out[i];
1736 if (ep)
1737 hcd->driver->drop_endpoint(hcd, udev, ep);
1738 ep = udev->ep_in[i];
1739 if (ep)
1740 hcd->driver->drop_endpoint(hcd, udev, ep);
1741 }
1742 hcd->driver->check_bandwidth(hcd, udev);
1743 return 0;
1744 }
1745
1746
1747
1748
1749
1750 if (new_config) {
1751 num_intfs = new_config->desc.bNumInterfaces;
1752
1753
1754
1755 for (i = 1; i < 16; ++i) {
1756 ep = udev->ep_out[i];
1757 if (ep) {
1758 ret = hcd->driver->drop_endpoint(hcd, udev, ep);
1759 if (ret < 0)
1760 goto reset;
1761 }
1762 ep = udev->ep_in[i];
1763 if (ep) {
1764 ret = hcd->driver->drop_endpoint(hcd, udev, ep);
1765 if (ret < 0)
1766 goto reset;
1767 }
1768 }
1769 for (i = 0; i < num_intfs; ++i) {
1770 struct usb_host_interface *first_alt;
1771 int iface_num;
1772
1773 first_alt = &new_config->intf_cache[i]->altsetting[0];
1774 iface_num = first_alt->desc.bInterfaceNumber;
1775
1776 alt = usb_find_alt_setting(new_config, iface_num, 0);
1777 if (!alt)
1778
1779 alt = first_alt;
1780
1781 for (j = 0; j < alt->desc.bNumEndpoints; j++) {
1782 ret = hcd->driver->add_endpoint(hcd, udev, &alt->endpoint[j]);
1783 if (ret < 0)
1784 goto reset;
1785 }
1786 }
1787 }
1788 if (cur_alt && new_alt) {
1789 struct usb_interface *iface = usb_ifnum_to_if(udev,
1790 cur_alt->desc.bInterfaceNumber);
1791
1792 if (!iface)
1793 return -EINVAL;
1794 if (iface->resetting_device) {
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804 cur_alt = usb_altnum_to_altsetting(iface, 0);
1805 if (!cur_alt)
1806 cur_alt = &iface->altsetting[0];
1807 }
1808
1809
1810 for (i = 0; i < cur_alt->desc.bNumEndpoints; i++) {
1811 ret = hcd->driver->drop_endpoint(hcd, udev,
1812 &cur_alt->endpoint[i]);
1813 if (ret < 0)
1814 goto reset;
1815 }
1816
1817 for (i = 0; i < new_alt->desc.bNumEndpoints; i++) {
1818 ret = hcd->driver->add_endpoint(hcd, udev,
1819 &new_alt->endpoint[i]);
1820 if (ret < 0)
1821 goto reset;
1822 }
1823 }
1824 ret = hcd->driver->check_bandwidth(hcd, udev);
1825reset:
1826 if (ret < 0)
1827 hcd->driver->reset_bandwidth(hcd, udev);
1828 return ret;
1829}
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839void usb_hcd_disable_endpoint(struct usb_device *udev,
1840 struct usb_host_endpoint *ep)
1841{
1842 struct usb_hcd *hcd;
1843
1844 might_sleep();
1845 hcd = bus_to_hcd(udev->bus);
1846 if (hcd->driver->endpoint_disable)
1847 hcd->driver->endpoint_disable(hcd, ep);
1848}
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858void usb_hcd_reset_endpoint(struct usb_device *udev,
1859 struct usb_host_endpoint *ep)
1860{
1861 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
1862
1863 if (hcd->driver->endpoint_reset)
1864 hcd->driver->endpoint_reset(hcd, ep);
1865 else {
1866 int epnum = usb_endpoint_num(&ep->desc);
1867 int is_out = usb_endpoint_dir_out(&ep->desc);
1868 int is_control = usb_endpoint_xfer_control(&ep->desc);
1869
1870 usb_settoggle(udev, epnum, is_out, 0);
1871 if (is_control)
1872 usb_settoggle(udev, epnum, !is_out, 0);
1873 }
1874}
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888int usb_alloc_streams(struct usb_interface *interface,
1889 struct usb_host_endpoint **eps, unsigned int num_eps,
1890 unsigned int num_streams, gfp_t mem_flags)
1891{
1892 struct usb_hcd *hcd;
1893 struct usb_device *dev;
1894 int i;
1895
1896 dev = interface_to_usbdev(interface);
1897 hcd = bus_to_hcd(dev->bus);
1898 if (!hcd->driver->alloc_streams || !hcd->driver->free_streams)
1899 return -EINVAL;
1900 if (dev->speed != USB_SPEED_SUPER)
1901 return -EINVAL;
1902
1903
1904 for (i = 0; i < num_eps; i++)
1905 if (!usb_endpoint_xfer_bulk(&eps[i]->desc))
1906 return -EINVAL;
1907
1908 return hcd->driver->alloc_streams(hcd, dev, eps, num_eps,
1909 num_streams, mem_flags);
1910}
1911EXPORT_SYMBOL_GPL(usb_alloc_streams);
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923void usb_free_streams(struct usb_interface *interface,
1924 struct usb_host_endpoint **eps, unsigned int num_eps,
1925 gfp_t mem_flags)
1926{
1927 struct usb_hcd *hcd;
1928 struct usb_device *dev;
1929 int i;
1930
1931 dev = interface_to_usbdev(interface);
1932 hcd = bus_to_hcd(dev->bus);
1933 if (dev->speed != USB_SPEED_SUPER)
1934 return;
1935
1936
1937 for (i = 0; i < num_eps; i++)
1938 if (!eps[i] || !usb_endpoint_xfer_bulk(&eps[i]->desc))
1939 return;
1940
1941 hcd->driver->free_streams(hcd, dev, eps, num_eps, mem_flags);
1942}
1943EXPORT_SYMBOL_GPL(usb_free_streams);
1944
1945
1946
1947
1948
1949
1950void usb_hcd_synchronize_unlinks(struct usb_device *udev)
1951{
1952 spin_lock_irq(&hcd_urb_unlink_lock);
1953 spin_unlock_irq(&hcd_urb_unlink_lock);
1954}
1955
1956
1957
1958
1959int usb_hcd_get_frame_number (struct usb_device *udev)
1960{
1961 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
1962
1963 if (!HCD_RH_RUNNING(hcd))
1964 return -ESHUTDOWN;
1965 return hcd->driver->get_frame_number (hcd);
1966}
1967
1968
1969
1970#ifdef CONFIG_PM
1971
1972int hcd_bus_suspend(struct usb_device *rhdev, pm_message_t msg)
1973{
1974 struct usb_hcd *hcd = container_of(rhdev->bus, struct usb_hcd, self);
1975 int status;
1976 int old_state = hcd->state;
1977
1978 dev_dbg(&rhdev->dev, "bus %ssuspend, wakeup %d\n",
1979 (PMSG_IS_AUTO(msg) ? "auto-" : ""),
1980 rhdev->do_remote_wakeup);
1981 if (HCD_DEAD(hcd)) {
1982 dev_dbg(&rhdev->dev, "skipped %s of dead bus\n", "suspend");
1983 return 0;
1984 }
1985
1986 if (!hcd->driver->bus_suspend) {
1987 status = -ENOENT;
1988 } else {
1989 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
1990 hcd->state = HC_STATE_QUIESCING;
1991 status = hcd->driver->bus_suspend(hcd);
1992 }
1993 if (status == 0) {
1994 usb_set_device_state(rhdev, USB_STATE_SUSPENDED);
1995 hcd->state = HC_STATE_SUSPENDED;
1996 } else {
1997 spin_lock_irq(&hcd_root_hub_lock);
1998 if (!HCD_DEAD(hcd)) {
1999 set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2000 hcd->state = old_state;
2001 }
2002 spin_unlock_irq(&hcd_root_hub_lock);
2003 dev_dbg(&rhdev->dev, "bus %s fail, err %d\n",
2004 "suspend", status);
2005 }
2006 return status;
2007}
2008
2009int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg)
2010{
2011 struct usb_hcd *hcd = container_of(rhdev->bus, struct usb_hcd, self);
2012 int status;
2013 int old_state = hcd->state;
2014
2015 dev_dbg(&rhdev->dev, "usb %sresume\n",
2016 (PMSG_IS_AUTO(msg) ? "auto-" : ""));
2017 if (HCD_DEAD(hcd)) {
2018 dev_dbg(&rhdev->dev, "skipped %s of dead bus\n", "resume");
2019 return 0;
2020 }
2021 if (!hcd->driver->bus_resume)
2022 return -ENOENT;
2023 if (HCD_RH_RUNNING(hcd))
2024 return 0;
2025
2026 hcd->state = HC_STATE_RESUMING;
2027 status = hcd->driver->bus_resume(hcd);
2028 clear_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags);
2029 if (status == 0) {
2030
2031 msleep(10);
2032 spin_lock_irq(&hcd_root_hub_lock);
2033 if (!HCD_DEAD(hcd)) {
2034 usb_set_device_state(rhdev, rhdev->actconfig
2035 ? USB_STATE_CONFIGURED
2036 : USB_STATE_ADDRESS);
2037 set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2038 hcd->state = HC_STATE_RUNNING;
2039 }
2040 spin_unlock_irq(&hcd_root_hub_lock);
2041 } else {
2042 hcd->state = old_state;
2043 dev_dbg(&rhdev->dev, "bus %s fail, err %d\n",
2044 "resume", status);
2045 if (status != -ESHUTDOWN)
2046 usb_hc_died(hcd);
2047 }
2048 return status;
2049}
2050
2051#endif
2052
2053#ifdef CONFIG_USB_SUSPEND
2054
2055
2056static void hcd_resume_work(struct work_struct *work)
2057{
2058 struct usb_hcd *hcd = container_of(work, struct usb_hcd, wakeup_work);
2059 struct usb_device *udev = hcd->self.root_hub;
2060
2061 usb_lock_device(udev);
2062 usb_remote_wakeup(udev);
2063 usb_unlock_device(udev);
2064}
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075void usb_hcd_resume_root_hub (struct usb_hcd *hcd)
2076{
2077 unsigned long flags;
2078
2079 spin_lock_irqsave (&hcd_root_hub_lock, flags);
2080 if (hcd->rh_registered) {
2081 set_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags);
2082 queue_work(pm_wq, &hcd->wakeup_work);
2083 }
2084 spin_unlock_irqrestore (&hcd_root_hub_lock, flags);
2085}
2086EXPORT_SYMBOL_GPL(usb_hcd_resume_root_hub);
2087
2088#endif
2089
2090
2091
2092#ifdef CONFIG_USB_OTG
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num)
2106{
2107 struct usb_hcd *hcd;
2108 int status = -EOPNOTSUPP;
2109
2110
2111
2112
2113
2114 hcd = container_of (bus, struct usb_hcd, self);
2115 if (port_num && hcd->driver->start_port_reset)
2116 status = hcd->driver->start_port_reset(hcd, port_num);
2117
2118
2119
2120
2121 if (status == 0)
2122 mod_timer(&hcd->rh_timer, jiffies + msecs_to_jiffies(10));
2123 return status;
2124}
2125EXPORT_SYMBOL_GPL(usb_bus_start_enum);
2126
2127#endif
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139irqreturn_t usb_hcd_irq (int irq, void *__hcd)
2140{
2141 struct usb_hcd *hcd = __hcd;
2142 unsigned long flags;
2143 irqreturn_t rc;
2144
2145
2146
2147
2148
2149 local_irq_save(flags);
2150
2151 if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd))) {
2152 rc = IRQ_NONE;
2153 } else if (hcd->driver->irq(hcd) == IRQ_NONE) {
2154 rc = IRQ_NONE;
2155 } else {
2156 set_bit(HCD_FLAG_SAW_IRQ, &hcd->flags);
2157 if (hcd->shared_hcd)
2158 set_bit(HCD_FLAG_SAW_IRQ, &hcd->shared_hcd->flags);
2159 rc = IRQ_HANDLED;
2160 }
2161
2162 local_irq_restore(flags);
2163 return rc;
2164}
2165EXPORT_SYMBOL_GPL(usb_hcd_irq);
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179void usb_hc_died (struct usb_hcd *hcd)
2180{
2181 unsigned long flags;
2182
2183 dev_err (hcd->self.controller, "HC died; cleaning up\n");
2184
2185 spin_lock_irqsave (&hcd_root_hub_lock, flags);
2186 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2187 set_bit(HCD_FLAG_DEAD, &hcd->flags);
2188 if (hcd->rh_registered) {
2189 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2190
2191
2192 usb_set_device_state (hcd->self.root_hub,
2193 USB_STATE_NOTATTACHED);
2194 usb_kick_khubd (hcd->self.root_hub);
2195 }
2196 if (usb_hcd_is_primary_hcd(hcd) && hcd->shared_hcd) {
2197 hcd = hcd->shared_hcd;
2198 if (hcd->rh_registered) {
2199 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2200
2201
2202 usb_set_device_state(hcd->self.root_hub,
2203 USB_STATE_NOTATTACHED);
2204 usb_kick_khubd(hcd->self.root_hub);
2205 }
2206 }
2207 spin_unlock_irqrestore (&hcd_root_hub_lock, flags);
2208
2209}
2210EXPORT_SYMBOL_GPL (usb_hc_died);
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229struct usb_hcd *usb_create_shared_hcd(const struct hc_driver *driver,
2230 struct device *dev, const char *bus_name,
2231 struct usb_hcd *primary_hcd)
2232{
2233 struct usb_hcd *hcd;
2234
2235 hcd = kzalloc(sizeof(*hcd) + driver->hcd_priv_size, GFP_KERNEL);
2236 if (!hcd) {
2237 dev_dbg (dev, "hcd alloc failed\n");
2238 return NULL;
2239 }
2240 if (primary_hcd == NULL) {
2241 hcd->bandwidth_mutex = kmalloc(sizeof(*hcd->bandwidth_mutex),
2242 GFP_KERNEL);
2243 if (!hcd->bandwidth_mutex) {
2244 kfree(hcd);
2245 dev_dbg(dev, "hcd bandwidth mutex alloc failed\n");
2246 return NULL;
2247 }
2248 mutex_init(hcd->bandwidth_mutex);
2249 dev_set_drvdata(dev, hcd);
2250 } else {
2251 hcd->bandwidth_mutex = primary_hcd->bandwidth_mutex;
2252 hcd->primary_hcd = primary_hcd;
2253 primary_hcd->primary_hcd = primary_hcd;
2254 hcd->shared_hcd = primary_hcd;
2255 primary_hcd->shared_hcd = hcd;
2256 }
2257
2258 kref_init(&hcd->kref);
2259
2260 usb_bus_init(&hcd->self);
2261 hcd->self.controller = dev;
2262 hcd->self.bus_name = bus_name;
2263 hcd->self.uses_dma = (dev->dma_mask != NULL);
2264
2265 init_timer(&hcd->rh_timer);
2266 hcd->rh_timer.function = rh_timer_func;
2267 hcd->rh_timer.data = (unsigned long) hcd;
2268#ifdef CONFIG_USB_SUSPEND
2269 INIT_WORK(&hcd->wakeup_work, hcd_resume_work);
2270#endif
2271
2272 hcd->driver = driver;
2273 hcd->speed = driver->flags & HCD_MASK;
2274 hcd->product_desc = (driver->product_desc) ? driver->product_desc :
2275 "USB Host Controller";
2276 return hcd;
2277}
2278EXPORT_SYMBOL_GPL(usb_create_shared_hcd);
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293struct usb_hcd *usb_create_hcd(const struct hc_driver *driver,
2294 struct device *dev, const char *bus_name)
2295{
2296 return usb_create_shared_hcd(driver, dev, bus_name, NULL);
2297}
2298EXPORT_SYMBOL_GPL(usb_create_hcd);
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310static void hcd_release (struct kref *kref)
2311{
2312 struct usb_hcd *hcd = container_of (kref, struct usb_hcd, kref);
2313
2314 if (usb_hcd_is_primary_hcd(hcd))
2315 kfree(hcd->bandwidth_mutex);
2316 else
2317 hcd->shared_hcd->shared_hcd = NULL;
2318 kfree(hcd);
2319}
2320
2321struct usb_hcd *usb_get_hcd (struct usb_hcd *hcd)
2322{
2323 if (hcd)
2324 kref_get (&hcd->kref);
2325 return hcd;
2326}
2327EXPORT_SYMBOL_GPL(usb_get_hcd);
2328
2329void usb_put_hcd (struct usb_hcd *hcd)
2330{
2331 if (hcd)
2332 kref_put (&hcd->kref, hcd_release);
2333}
2334EXPORT_SYMBOL_GPL(usb_put_hcd);
2335
2336int usb_hcd_is_primary_hcd(struct usb_hcd *hcd)
2337{
2338 if (!hcd->primary_hcd)
2339 return 1;
2340 return hcd == hcd->primary_hcd;
2341}
2342EXPORT_SYMBOL_GPL(usb_hcd_is_primary_hcd);
2343
2344static int usb_hcd_request_irqs(struct usb_hcd *hcd,
2345 unsigned int irqnum, unsigned long irqflags)
2346{
2347 int retval;
2348
2349 if (hcd->driver->irq) {
2350
2351
2352
2353
2354
2355 if (irqflags & IRQF_SHARED)
2356 irqflags &= ~IRQF_DISABLED;
2357
2358 snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d",
2359 hcd->driver->description, hcd->self.busnum);
2360 retval = request_irq(irqnum, &usb_hcd_irq, irqflags,
2361 hcd->irq_descr, hcd);
2362 if (retval != 0) {
2363 dev_err(hcd->self.controller,
2364 "request interrupt %d failed\n",
2365 irqnum);
2366 return retval;
2367 }
2368 hcd->irq = irqnum;
2369 dev_info(hcd->self.controller, "irq %d, %s 0x%08llx\n", irqnum,
2370 (hcd->driver->flags & HCD_MEMORY) ?
2371 "io mem" : "io base",
2372 (unsigned long long)hcd->rsrc_start);
2373 } else {
2374 hcd->irq = -1;
2375 if (hcd->rsrc_start)
2376 dev_info(hcd->self.controller, "%s 0x%08llx\n",
2377 (hcd->driver->flags & HCD_MEMORY) ?
2378 "io mem" : "io base",
2379 (unsigned long long)hcd->rsrc_start);
2380 }
2381 return 0;
2382}
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394int usb_add_hcd(struct usb_hcd *hcd,
2395 unsigned int irqnum, unsigned long irqflags)
2396{
2397 int retval;
2398 struct usb_device *rhdev;
2399
2400 dev_info(hcd->self.controller, "%s\n", hcd->product_desc);
2401
2402
2403 if (authorized_default < 0 || authorized_default > 1)
2404 hcd->authorized_default = hcd->wireless? 0 : 1;
2405 else
2406 hcd->authorized_default = authorized_default;
2407 set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
2408
2409
2410
2411
2412
2413 if ((retval = hcd_buffer_create(hcd)) != 0) {
2414 dev_dbg(hcd->self.controller, "pool alloc failed\n");
2415 return retval;
2416 }
2417
2418 if ((retval = usb_register_bus(&hcd->self)) < 0)
2419 goto err_register_bus;
2420
2421 if ((rhdev = usb_alloc_dev(NULL, &hcd->self, 0)) == NULL) {
2422 dev_err(hcd->self.controller, "unable to allocate root hub\n");
2423 retval = -ENOMEM;
2424 goto err_allocate_root_hub;
2425 }
2426 hcd->self.root_hub = rhdev;
2427
2428 switch (hcd->speed) {
2429 case HCD_USB11:
2430 rhdev->speed = USB_SPEED_FULL;
2431 break;
2432 case HCD_USB2:
2433 rhdev->speed = USB_SPEED_HIGH;
2434 break;
2435 case HCD_USB3:
2436 rhdev->speed = USB_SPEED_SUPER;
2437 break;
2438 default:
2439 retval = -EINVAL;
2440 goto err_set_rh_speed;
2441 }
2442
2443
2444
2445
2446
2447 device_set_wakeup_capable(&rhdev->dev, 1);
2448
2449
2450
2451
2452
2453 set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2454
2455
2456
2457
2458 if (hcd->driver->reset && (retval = hcd->driver->reset(hcd)) < 0) {
2459 dev_err(hcd->self.controller, "can't setup\n");
2460 goto err_hcd_driver_setup;
2461 }
2462 hcd->rh_pollable = 1;
2463
2464
2465 if (device_can_wakeup(hcd->self.controller)
2466 && device_can_wakeup(&hcd->self.root_hub->dev))
2467 dev_dbg(hcd->self.controller, "supports USB remote wakeup\n");
2468
2469
2470 if (usb_hcd_is_primary_hcd(hcd)) {
2471 retval = usb_hcd_request_irqs(hcd, irqnum, irqflags);
2472 if (retval)
2473 goto err_request_irq;
2474 }
2475
2476 hcd->state = HC_STATE_RUNNING;
2477 retval = hcd->driver->start(hcd);
2478 if (retval < 0) {
2479 dev_err(hcd->self.controller, "startup error %d\n", retval);
2480 goto err_hcd_driver_start;
2481 }
2482
2483
2484 rhdev->bus_mA = min(500u, hcd->power_budget);
2485 if ((retval = register_root_hub(hcd)) != 0)
2486 goto err_register_root_hub;
2487
2488 retval = sysfs_create_group(&rhdev->dev.kobj, &usb_bus_attr_group);
2489 if (retval < 0) {
2490 printk(KERN_ERR "Cannot register USB bus sysfs attributes: %d\n",
2491 retval);
2492 goto error_create_attr_group;
2493 }
2494 if (hcd->uses_new_polling && HCD_POLL_RH(hcd))
2495 usb_hcd_poll_rh_status(hcd);
2496
2497
2498
2499
2500
2501
2502 device_wakeup_enable(hcd->self.controller);
2503 return retval;
2504
2505error_create_attr_group:
2506 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2507 if (HC_IS_RUNNING(hcd->state))
2508 hcd->state = HC_STATE_QUIESCING;
2509 spin_lock_irq(&hcd_root_hub_lock);
2510 hcd->rh_registered = 0;
2511 spin_unlock_irq(&hcd_root_hub_lock);
2512
2513#ifdef CONFIG_USB_SUSPEND
2514 cancel_work_sync(&hcd->wakeup_work);
2515#endif
2516 mutex_lock(&usb_bus_list_lock);
2517 usb_disconnect(&rhdev);
2518 mutex_unlock(&usb_bus_list_lock);
2519err_register_root_hub:
2520 hcd->rh_pollable = 0;
2521 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2522 del_timer_sync(&hcd->rh_timer);
2523 hcd->driver->stop(hcd);
2524 hcd->state = HC_STATE_HALT;
2525 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2526 del_timer_sync(&hcd->rh_timer);
2527err_hcd_driver_start:
2528 if (usb_hcd_is_primary_hcd(hcd) && hcd->irq >= 0)
2529 free_irq(irqnum, hcd);
2530err_request_irq:
2531err_hcd_driver_setup:
2532err_set_rh_speed:
2533 usb_put_dev(hcd->self.root_hub);
2534err_allocate_root_hub:
2535 usb_deregister_bus(&hcd->self);
2536err_register_bus:
2537 hcd_buffer_destroy(hcd);
2538 return retval;
2539}
2540EXPORT_SYMBOL_GPL(usb_add_hcd);
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550void usb_remove_hcd(struct usb_hcd *hcd)
2551{
2552 struct usb_device *rhdev = hcd->self.root_hub;
2553
2554 dev_info(hcd->self.controller, "remove, state %x\n", hcd->state);
2555
2556 usb_get_dev(rhdev);
2557 sysfs_remove_group(&rhdev->dev.kobj, &usb_bus_attr_group);
2558
2559 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2560 if (HC_IS_RUNNING (hcd->state))
2561 hcd->state = HC_STATE_QUIESCING;
2562
2563 dev_dbg(hcd->self.controller, "roothub graceful disconnect\n");
2564 spin_lock_irq (&hcd_root_hub_lock);
2565 hcd->rh_registered = 0;
2566 spin_unlock_irq (&hcd_root_hub_lock);
2567
2568#ifdef CONFIG_USB_SUSPEND
2569 cancel_work_sync(&hcd->wakeup_work);
2570#endif
2571
2572 mutex_lock(&usb_bus_list_lock);
2573 usb_disconnect(&rhdev);
2574 mutex_unlock(&usb_bus_list_lock);
2575
2576
2577
2578
2579
2580
2581 hcd->rh_pollable = 0;
2582 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2583 del_timer_sync(&hcd->rh_timer);
2584
2585 hcd->driver->stop(hcd);
2586 hcd->state = HC_STATE_HALT;
2587
2588
2589 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2590 del_timer_sync(&hcd->rh_timer);
2591
2592 if (usb_hcd_is_primary_hcd(hcd)) {
2593 if (hcd->irq >= 0)
2594 free_irq(hcd->irq, hcd);
2595 }
2596
2597 usb_put_dev(hcd->self.root_hub);
2598 usb_deregister_bus(&hcd->self);
2599 hcd_buffer_destroy(hcd);
2600}
2601EXPORT_SYMBOL_GPL(usb_remove_hcd);
2602
2603void
2604usb_hcd_platform_shutdown(struct platform_device* dev)
2605{
2606 struct usb_hcd *hcd = platform_get_drvdata(dev);
2607
2608 if (hcd->driver->shutdown)
2609 hcd->driver->shutdown(hcd);
2610}
2611EXPORT_SYMBOL_GPL(usb_hcd_platform_shutdown);
2612
2613
2614
2615#if defined(CONFIG_USB_MON) || defined(CONFIG_USB_MON_MODULE)
2616
2617struct usb_mon_operations *mon_ops;
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627int usb_mon_register (struct usb_mon_operations *ops)
2628{
2629
2630 if (mon_ops)
2631 return -EBUSY;
2632
2633 mon_ops = ops;
2634 mb();
2635 return 0;
2636}
2637EXPORT_SYMBOL_GPL (usb_mon_register);
2638
2639void usb_mon_deregister (void)
2640{
2641
2642 if (mon_ops == NULL) {
2643 printk(KERN_ERR "USB: monitor was not registered\n");
2644 return;
2645 }
2646 mon_ops = NULL;
2647 mb();
2648}
2649EXPORT_SYMBOL_GPL (usb_mon_deregister);
2650
2651#endif
2652