1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#include <linux/config.h>
25
26#ifdef CONFIG_USB_DEBUG
27 #define DEBUG
28#else
29 #undef DEBUG
30#endif
31
32#include <linux/module.h>
33#include <linux/string.h>
34#include <linux/bitops.h>
35#include <linux/slab.h>
36#include <linux/interrupt.h>
37#include <linux/kmod.h>
38#include <linux/init.h>
39#include <linux/spinlock.h>
40#include <linux/errno.h>
41#include <linux/smp_lock.h>
42#include <linux/rwsem.h>
43#include <linux/usb.h>
44
45#include <asm/io.h>
46#include <asm/scatterlist.h>
47#include <linux/mm.h>
48#include <linux/dma-mapping.h>
49
50#include "hcd.h"
51#include "usb.h"
52
53extern int usb_hub_init(void);
54extern void usb_hub_cleanup(void);
55extern int usb_major_init(void);
56extern void usb_major_cleanup(void);
57extern int usb_host_init(void);
58extern void usb_host_cleanup(void);
59
60
61const char *usbcore_name = "usbcore";
62
63int nousb;
64
65
66static DECLARE_RWSEM(usb_all_devices_rwsem);
67
68
69static int generic_probe (struct device *dev)
70{
71 return 0;
72}
73static int generic_remove (struct device *dev)
74{
75 return 0;
76}
77
78static struct device_driver usb_generic_driver = {
79 .owner = THIS_MODULE,
80 .name = "usb",
81 .bus = &usb_bus_type,
82 .probe = generic_probe,
83 .remove = generic_remove,
84};
85
86static int usb_generic_driver_data;
87
88
89int usb_probe_interface(struct device *dev)
90{
91 struct usb_interface * intf = to_usb_interface(dev);
92 struct usb_driver * driver = to_usb_driver(dev->driver);
93 const struct usb_device_id *id;
94 int error = -ENODEV;
95
96 dev_dbg(dev, "%s\n", __FUNCTION__);
97
98 if (!driver->probe)
99 return error;
100
101 if (interface_to_usbdev(intf)->state == USB_STATE_SUSPENDED)
102 return -EHOSTUNREACH;
103
104 id = usb_match_id (intf, driver->id_table);
105 if (id) {
106 dev_dbg (dev, "%s - got id\n", __FUNCTION__);
107 intf->condition = USB_INTERFACE_BINDING;
108 error = driver->probe (intf, id);
109 intf->condition = error ? USB_INTERFACE_UNBOUND :
110 USB_INTERFACE_BOUND;
111 }
112
113 return error;
114}
115
116
117int usb_unbind_interface(struct device *dev)
118{
119 struct usb_interface *intf = to_usb_interface(dev);
120 struct usb_driver *driver = to_usb_driver(intf->dev.driver);
121
122 intf->condition = USB_INTERFACE_UNBINDING;
123
124
125 usb_disable_interface(interface_to_usbdev(intf), intf);
126
127 if (driver && driver->disconnect)
128 driver->disconnect(intf);
129
130
131 usb_set_interface(interface_to_usbdev(intf),
132 intf->altsetting[0].desc.bInterfaceNumber,
133 0);
134 usb_set_intfdata(intf, NULL);
135 intf->condition = USB_INTERFACE_UNBOUND;
136
137 return 0;
138}
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153int usb_register(struct usb_driver *new_driver)
154{
155 int retval = 0;
156
157 if (nousb)
158 return -ENODEV;
159
160 new_driver->driver.name = (char *)new_driver->name;
161 new_driver->driver.bus = &usb_bus_type;
162 new_driver->driver.probe = usb_probe_interface;
163 new_driver->driver.remove = usb_unbind_interface;
164 new_driver->driver.owner = new_driver->owner;
165
166 usb_lock_all_devices();
167 retval = driver_register(&new_driver->driver);
168 usb_unlock_all_devices();
169
170 if (!retval) {
171 pr_info("%s: registered new driver %s\n",
172 usbcore_name, new_driver->name);
173 usbfs_update_special();
174 } else {
175 printk(KERN_ERR "%s: error %d registering driver %s\n",
176 usbcore_name, retval, new_driver->name);
177 }
178
179 return retval;
180}
181
182
183
184
185
186
187
188
189
190
191
192
193void usb_deregister(struct usb_driver *driver)
194{
195 pr_info("%s: deregistering driver %s\n", usbcore_name, driver->name);
196
197 usb_lock_all_devices();
198 driver_unregister (&driver->driver);
199 usb_unlock_all_devices();
200
201 usbfs_update_special();
202}
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223struct usb_interface *usb_ifnum_to_if(struct usb_device *dev, unsigned ifnum)
224{
225 struct usb_host_config *config = dev->actconfig;
226 int i;
227
228 if (!config)
229 return NULL;
230 for (i = 0; i < config->desc.bNumInterfaces; i++)
231 if (config->interface[i]->altsetting[0]
232 .desc.bInterfaceNumber == ifnum)
233 return config->interface[i];
234
235 return NULL;
236}
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256struct usb_host_interface *usb_altnum_to_altsetting(struct usb_interface *intf,
257 unsigned int altnum)
258{
259 int i;
260
261 for (i = 0; i < intf->num_altsetting; i++) {
262 if (intf->altsetting[i].desc.bAlternateSetting == altnum)
263 return &intf->altsetting[i];
264 }
265 return NULL;
266}
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288int usb_driver_claim_interface(struct usb_driver *driver,
289 struct usb_interface *iface, void* priv)
290{
291 struct device *dev = &iface->dev;
292
293 if (dev->driver)
294 return -EBUSY;
295
296 dev->driver = &driver->driver;
297 usb_set_intfdata(iface, priv);
298 iface->condition = USB_INTERFACE_BOUND;
299
300
301
302
303 if (!list_empty (&dev->bus_list))
304 device_bind_driver(dev);
305
306 return 0;
307}
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323void usb_driver_release_interface(struct usb_driver *driver,
324 struct usb_interface *iface)
325{
326 struct device *dev = &iface->dev;
327
328
329 if (!dev->driver || dev->driver != &driver->driver)
330 return;
331
332
333 if (!list_empty (&dev->driver_list) && !list_empty (&dev->bus_list))
334 device_release_driver(dev);
335
336 dev->driver = NULL;
337 usb_set_intfdata(iface, NULL);
338 iface->condition = USB_INTERFACE_UNBOUND;
339}
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403const struct usb_device_id *
404usb_match_id(struct usb_interface *interface, const struct usb_device_id *id)
405{
406 struct usb_host_interface *intf;
407 struct usb_device *dev;
408
409
410 if (id == NULL)
411 return NULL;
412
413 intf = interface->cur_altsetting;
414 dev = interface_to_usbdev(interface);
415
416
417
418
419
420
421 for (; id->idVendor || id->bDeviceClass || id->bInterfaceClass ||
422 id->driver_info; id++) {
423
424 if ((id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) &&
425 id->idVendor != le16_to_cpu(dev->descriptor.idVendor))
426 continue;
427
428 if ((id->match_flags & USB_DEVICE_ID_MATCH_PRODUCT) &&
429 id->idProduct != le16_to_cpu(dev->descriptor.idProduct))
430 continue;
431
432
433
434 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO) &&
435 (id->bcdDevice_lo > le16_to_cpu(dev->descriptor.bcdDevice)))
436 continue;
437
438 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_HI) &&
439 (id->bcdDevice_hi < le16_to_cpu(dev->descriptor.bcdDevice)))
440 continue;
441
442 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_CLASS) &&
443 (id->bDeviceClass != dev->descriptor.bDeviceClass))
444 continue;
445
446 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_SUBCLASS) &&
447 (id->bDeviceSubClass!= dev->descriptor.bDeviceSubClass))
448 continue;
449
450 if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_PROTOCOL) &&
451 (id->bDeviceProtocol != dev->descriptor.bDeviceProtocol))
452 continue;
453
454 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_CLASS) &&
455 (id->bInterfaceClass != intf->desc.bInterfaceClass))
456 continue;
457
458 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_SUBCLASS) &&
459 (id->bInterfaceSubClass != intf->desc.bInterfaceSubClass))
460 continue;
461
462 if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_PROTOCOL) &&
463 (id->bInterfaceProtocol != intf->desc.bInterfaceProtocol))
464 continue;
465
466 return id;
467 }
468
469 return NULL;
470}
471
472
473
474
475
476
477
478
479
480
481struct usb_interface *usb_find_interface(struct usb_driver *drv, int minor)
482{
483 struct list_head *entry;
484 struct device *dev;
485 struct usb_interface *intf;
486
487 list_for_each(entry, &drv->driver.devices) {
488 dev = container_of(entry, struct device, driver_list);
489
490
491 if (dev->driver == &usb_generic_driver)
492 continue;
493
494 intf = to_usb_interface(dev);
495 if (intf->minor == -1)
496 continue;
497 if (intf->minor == minor)
498 return intf;
499 }
500
501
502 return NULL;
503}
504
505static int usb_device_match (struct device *dev, struct device_driver *drv)
506{
507 struct usb_interface *intf;
508 struct usb_driver *usb_drv;
509 const struct usb_device_id *id;
510
511
512 if (drv == &usb_generic_driver)
513 return 0;
514
515 intf = to_usb_interface(dev);
516 usb_drv = to_usb_driver(drv);
517
518 id = usb_match_id (intf, usb_drv->id_table);
519 if (id)
520 return 1;
521
522 return 0;
523}
524
525
526#ifdef CONFIG_HOTPLUG
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541static int usb_hotplug (struct device *dev, char **envp, int num_envp,
542 char *buffer, int buffer_size)
543{
544 struct usb_interface *intf;
545 struct usb_device *usb_dev;
546 int i = 0;
547 int length = 0;
548
549 if (!dev)
550 return -ENODEV;
551
552
553 pr_debug ("usb %s: hotplug\n", dev->bus_id);
554
555
556 if ((dev->driver == &usb_generic_driver) ||
557 (dev->driver_data == &usb_generic_driver_data))
558 return 0;
559
560 intf = to_usb_interface(dev);
561 usb_dev = interface_to_usbdev (intf);
562
563 if (usb_dev->devnum < 0) {
564 pr_debug ("usb %s: already deleted?\n", dev->bus_id);
565 return -ENODEV;
566 }
567 if (!usb_dev->bus) {
568 pr_debug ("usb %s: bus removed?\n", dev->bus_id);
569 return -ENODEV;
570 }
571
572#ifdef CONFIG_USB_DEVICEFS
573
574
575
576
577
578
579 if (add_hotplug_env_var(envp, num_envp, &i,
580 buffer, buffer_size, &length,
581 "DEVICE=/proc/bus/usb/%03d/%03d",
582 usb_dev->bus->busnum, usb_dev->devnum))
583 return -ENOMEM;
584#endif
585
586
587 if (add_hotplug_env_var(envp, num_envp, &i,
588 buffer, buffer_size, &length,
589 "PRODUCT=%x/%x/%x",
590 le16_to_cpu(usb_dev->descriptor.idVendor),
591 le16_to_cpu(usb_dev->descriptor.idProduct),
592 le16_to_cpu(usb_dev->descriptor.bcdDevice)))
593 return -ENOMEM;
594
595
596 if (add_hotplug_env_var(envp, num_envp, &i,
597 buffer, buffer_size, &length,
598 "TYPE=%d/%d/%d",
599 usb_dev->descriptor.bDeviceClass,
600 usb_dev->descriptor.bDeviceSubClass,
601 usb_dev->descriptor.bDeviceProtocol))
602 return -ENOMEM;
603
604 if (usb_dev->descriptor.bDeviceClass == 0) {
605 struct usb_host_interface *alt = intf->cur_altsetting;
606
607
608
609
610
611 if (add_hotplug_env_var(envp, num_envp, &i,
612 buffer, buffer_size, &length,
613 "INTERFACE=%d/%d/%d",
614 alt->desc.bInterfaceClass,
615 alt->desc.bInterfaceSubClass,
616 alt->desc.bInterfaceProtocol))
617 return -ENOMEM;
618 }
619
620 envp[i] = NULL;
621
622 return 0;
623}
624
625#else
626
627static int usb_hotplug (struct device *dev, char **envp,
628 int num_envp, char *buffer, int buffer_size)
629{
630 return -ENODEV;
631}
632
633#endif
634
635
636
637
638
639
640
641
642static void usb_release_dev(struct device *dev)
643{
644 struct usb_device *udev;
645
646 udev = to_usb_device(dev);
647
648 usb_destroy_configuration(udev);
649 usb_bus_put(udev->bus);
650 kfree (udev);
651}
652
653
654
655
656
657
658
659
660
661
662
663
664
665struct usb_device *
666usb_alloc_dev(struct usb_device *parent, struct usb_bus *bus, unsigned port1)
667{
668 struct usb_device *dev;
669
670 dev = kmalloc(sizeof(*dev), GFP_KERNEL);
671 if (!dev)
672 return NULL;
673
674 memset(dev, 0, sizeof(*dev));
675
676 bus = usb_bus_get(bus);
677 if (!bus) {
678 kfree(dev);
679 return NULL;
680 }
681
682 device_initialize(&dev->dev);
683 dev->dev.bus = &usb_bus_type;
684 dev->dev.dma_mask = bus->controller->dma_mask;
685 dev->dev.driver_data = &usb_generic_driver_data;
686 dev->dev.driver = &usb_generic_driver;
687 dev->dev.release = usb_release_dev;
688 dev->state = USB_STATE_ATTACHED;
689
690 INIT_LIST_HEAD(&dev->ep0.urb_list);
691 dev->ep0.desc.bLength = USB_DT_ENDPOINT_SIZE;
692 dev->ep0.desc.bDescriptorType = USB_DT_ENDPOINT;
693
694 dev->ep_in[0] = dev->ep_out[0] = &dev->ep0;
695
696
697
698
699
700
701
702
703
704 if (unlikely (!parent)) {
705 dev->devpath [0] = '0';
706
707 dev->dev.parent = bus->controller;
708 sprintf (&dev->dev.bus_id[0], "usb%d", bus->busnum);
709 } else {
710
711 if (parent->devpath [0] == '0')
712 snprintf (dev->devpath, sizeof dev->devpath,
713 "%d", port1);
714 else
715 snprintf (dev->devpath, sizeof dev->devpath,
716 "%s.%d", parent->devpath, port1);
717
718 dev->dev.parent = &parent->dev;
719 sprintf (&dev->dev.bus_id[0], "%d-%s",
720 bus->busnum, dev->devpath);
721
722
723 }
724
725 dev->bus = bus;
726 dev->parent = parent;
727 INIT_LIST_HEAD(&dev->filelist);
728
729 init_MUTEX(&dev->serialize);
730
731 return dev;
732}
733
734
735
736
737
738
739
740
741
742
743
744
745
746struct usb_device *usb_get_dev(struct usb_device *dev)
747{
748 if (dev)
749 get_device(&dev->dev);
750 return dev;
751}
752
753
754
755
756
757
758
759
760void usb_put_dev(struct usb_device *dev)
761{
762 if (dev)
763 put_device(&dev->dev);
764}
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779struct usb_interface *usb_get_intf(struct usb_interface *intf)
780{
781 if (intf)
782 get_device(&intf->dev);
783 return intf;
784}
785
786
787
788
789
790
791
792
793
794void usb_put_intf(struct usb_interface *intf)
795{
796 if (intf)
797 put_device(&intf->dev);
798}
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845void usb_lock_device(struct usb_device *udev)
846{
847 down_read(&usb_all_devices_rwsem);
848 down(&udev->serialize);
849}
850
851
852
853
854
855
856
857
858
859
860
861int usb_trylock_device(struct usb_device *udev)
862{
863 if (!down_read_trylock(&usb_all_devices_rwsem))
864 return 0;
865 if (down_trylock(&udev->serialize)) {
866 up_read(&usb_all_devices_rwsem);
867 return 0;
868 }
869 return 1;
870}
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890int usb_lock_device_for_reset(struct usb_device *udev,
891 struct usb_interface *iface)
892{
893 if (udev->state == USB_STATE_NOTATTACHED)
894 return -ENODEV;
895 if (udev->state == USB_STATE_SUSPENDED)
896 return -EHOSTUNREACH;
897 if (iface) {
898 switch (iface->condition) {
899 case USB_INTERFACE_BINDING:
900 return 0;
901 case USB_INTERFACE_BOUND:
902 break;
903 default:
904 return -EINTR;
905 }
906 }
907
908 while (!usb_trylock_device(udev)) {
909 msleep(15);
910 if (udev->state == USB_STATE_NOTATTACHED)
911 return -ENODEV;
912 if (udev->state == USB_STATE_SUSPENDED)
913 return -EHOSTUNREACH;
914 if (iface && iface->condition != USB_INTERFACE_BOUND)
915 return -EINTR;
916 }
917 return 1;
918}
919
920
921
922
923
924
925
926
927
928void usb_unlock_device(struct usb_device *udev)
929{
930 up(&udev->serialize);
931 up_read(&usb_all_devices_rwsem);
932}
933
934
935
936
937
938
939
940void usb_lock_all_devices(void)
941{
942 down_write(&usb_all_devices_rwsem);
943}
944
945
946
947
948void usb_unlock_all_devices(void)
949{
950 up_write(&usb_all_devices_rwsem);
951}
952
953
954static struct usb_device *match_device(struct usb_device *dev,
955 u16 vendor_id, u16 product_id)
956{
957 struct usb_device *ret_dev = NULL;
958 int child;
959
960 dev_dbg(&dev->dev, "check for vendor %04x, product %04x ...\n",
961 le16_to_cpu(dev->descriptor.idVendor),
962 le16_to_cpu(dev->descriptor.idProduct));
963
964
965 if ((vendor_id == le16_to_cpu(dev->descriptor.idVendor)) &&
966 (product_id == le16_to_cpu(dev->descriptor.idProduct))) {
967 dev_dbg (&dev->dev, "matched this device!\n");
968 ret_dev = usb_get_dev(dev);
969 goto exit;
970 }
971
972
973 for (child = 0; child < dev->maxchild; ++child) {
974 if (dev->children[child]) {
975 down(&dev->children[child]->serialize);
976 ret_dev = match_device(dev->children[child],
977 vendor_id, product_id);
978 up(&dev->children[child]->serialize);
979 if (ret_dev)
980 goto exit;
981 }
982 }
983exit:
984 return ret_dev;
985}
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000struct usb_device *usb_find_device(u16 vendor_id, u16 product_id)
1001{
1002 struct list_head *buslist;
1003 struct usb_bus *bus;
1004 struct usb_device *dev = NULL;
1005
1006 down(&usb_bus_list_lock);
1007 for (buslist = usb_bus_list.next;
1008 buslist != &usb_bus_list;
1009 buslist = buslist->next) {
1010 bus = container_of(buslist, struct usb_bus, bus_list);
1011 if (!bus->root_hub)
1012 continue;
1013 usb_lock_device(bus->root_hub);
1014 dev = match_device(bus->root_hub, vendor_id, product_id);
1015 usb_unlock_device(bus->root_hub);
1016 if (dev)
1017 goto exit;
1018 }
1019exit:
1020 up(&usb_bus_list_lock);
1021 return dev;
1022}
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037int usb_get_current_frame_number(struct usb_device *dev)
1038{
1039 return dev->bus->op->get_frame_number (dev);
1040}
1041
1042
1043
1044
1045
1046
1047
1048int __usb_get_extra_descriptor(char *buffer, unsigned size,
1049 unsigned char type, void **ptr)
1050{
1051 struct usb_descriptor_header *header;
1052
1053 while (size >= sizeof(struct usb_descriptor_header)) {
1054 header = (struct usb_descriptor_header *)buffer;
1055
1056 if (header->bLength < 2) {
1057 printk(KERN_ERR
1058 "%s: bogus descriptor, type %d length %d\n",
1059 usbcore_name,
1060 header->bDescriptorType,
1061 header->bLength);
1062 return -1;
1063 }
1064
1065 if (header->bDescriptorType == type) {
1066 *ptr = header;
1067 return 0;
1068 }
1069
1070 buffer += header->bLength;
1071 size -= header->bLength;
1072 }
1073 return -1;
1074}
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097void *usb_buffer_alloc (
1098 struct usb_device *dev,
1099 size_t size,
1100 int mem_flags,
1101 dma_addr_t *dma
1102)
1103{
1104 if (!dev || !dev->bus || !dev->bus->op || !dev->bus->op->buffer_alloc)
1105 return NULL;
1106 return dev->bus->op->buffer_alloc (dev->bus, size, mem_flags, dma);
1107}
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120void usb_buffer_free (
1121 struct usb_device *dev,
1122 size_t size,
1123 void *addr,
1124 dma_addr_t dma
1125)
1126{
1127 if (!dev || !dev->bus || !dev->bus->op || !dev->bus->op->buffer_free)
1128 return;
1129 dev->bus->op->buffer_free (dev->bus, size, addr, dma);
1130}
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148struct urb *usb_buffer_map (struct urb *urb)
1149{
1150 struct usb_bus *bus;
1151 struct device *controller;
1152
1153 if (!urb
1154 || !urb->dev
1155 || !(bus = urb->dev->bus)
1156 || !(controller = bus->controller))
1157 return NULL;
1158
1159 if (controller->dma_mask) {
1160 urb->transfer_dma = dma_map_single (controller,
1161 urb->transfer_buffer, urb->transfer_buffer_length,
1162 usb_pipein (urb->pipe)
1163 ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
1164 if (usb_pipecontrol (urb->pipe))
1165 urb->setup_dma = dma_map_single (controller,
1166 urb->setup_packet,
1167 sizeof (struct usb_ctrlrequest),
1168 DMA_TO_DEVICE);
1169
1170
1171 } else
1172 urb->transfer_dma = ~0;
1173 urb->transfer_flags |= (URB_NO_TRANSFER_DMA_MAP
1174 | URB_NO_SETUP_DMA_MAP);
1175 return urb;
1176}
1177
1178
1179
1180
1181
1182
1183#if 0
1184
1185
1186
1187
1188
1189void usb_buffer_dmasync (struct urb *urb)
1190{
1191 struct usb_bus *bus;
1192 struct device *controller;
1193
1194 if (!urb
1195 || !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)
1196 || !urb->dev
1197 || !(bus = urb->dev->bus)
1198 || !(controller = bus->controller))
1199 return;
1200
1201 if (controller->dma_mask) {
1202 dma_sync_single (controller,
1203 urb->transfer_dma, urb->transfer_buffer_length,
1204 usb_pipein (urb->pipe)
1205 ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
1206 if (usb_pipecontrol (urb->pipe))
1207 dma_sync_single (controller,
1208 urb->setup_dma,
1209 sizeof (struct usb_ctrlrequest),
1210 DMA_TO_DEVICE);
1211 }
1212}
1213#endif
1214
1215
1216
1217
1218
1219
1220
1221void usb_buffer_unmap (struct urb *urb)
1222{
1223 struct usb_bus *bus;
1224 struct device *controller;
1225
1226 if (!urb
1227 || !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)
1228 || !urb->dev
1229 || !(bus = urb->dev->bus)
1230 || !(controller = bus->controller))
1231 return;
1232
1233 if (controller->dma_mask) {
1234 dma_unmap_single (controller,
1235 urb->transfer_dma, urb->transfer_buffer_length,
1236 usb_pipein (urb->pipe)
1237 ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
1238 if (usb_pipecontrol (urb->pipe))
1239 dma_unmap_single (controller,
1240 urb->setup_dma,
1241 sizeof (struct usb_ctrlrequest),
1242 DMA_TO_DEVICE);
1243 }
1244 urb->transfer_flags &= ~(URB_NO_TRANSFER_DMA_MAP
1245 | URB_NO_SETUP_DMA_MAP);
1246}
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274int usb_buffer_map_sg (struct usb_device *dev, unsigned pipe,
1275 struct scatterlist *sg, int nents)
1276{
1277 struct usb_bus *bus;
1278 struct device *controller;
1279
1280 if (!dev
1281 || usb_pipecontrol (pipe)
1282 || !(bus = dev->bus)
1283 || !(controller = bus->controller)
1284 || !controller->dma_mask)
1285 return -1;
1286
1287
1288 return dma_map_sg (controller, sg, nents,
1289 usb_pipein (pipe) ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
1290}
1291
1292
1293
1294
1295
1296
1297#if 0
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309void usb_buffer_dmasync_sg (struct usb_device *dev, unsigned pipe,
1310 struct scatterlist *sg, int n_hw_ents)
1311{
1312 struct usb_bus *bus;
1313 struct device *controller;
1314
1315 if (!dev
1316 || !(bus = dev->bus)
1317 || !(controller = bus->controller)
1318 || !controller->dma_mask)
1319 return;
1320
1321 dma_sync_sg (controller, sg, n_hw_ents,
1322 usb_pipein (pipe) ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
1323}
1324#endif
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335void usb_buffer_unmap_sg (struct usb_device *dev, unsigned pipe,
1336 struct scatterlist *sg, int n_hw_ents)
1337{
1338 struct usb_bus *bus;
1339 struct device *controller;
1340
1341 if (!dev
1342 || !(bus = dev->bus)
1343 || !(controller = bus->controller)
1344 || !controller->dma_mask)
1345 return;
1346
1347 dma_unmap_sg (controller, sg, n_hw_ents,
1348 usb_pipein (pipe) ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
1349}
1350
1351static int usb_generic_suspend(struct device *dev, u32 state)
1352{
1353 struct usb_interface *intf;
1354 struct usb_driver *driver;
1355
1356 if (dev->driver == &usb_generic_driver)
1357 return usb_suspend_device (to_usb_device(dev), state);
1358
1359 if ((dev->driver == NULL) ||
1360 (dev->driver_data == &usb_generic_driver_data))
1361 return 0;
1362
1363 intf = to_usb_interface(dev);
1364 driver = to_usb_driver(dev->driver);
1365
1366
1367 if (intf->dev.power.power_state)
1368 return 0;
1369
1370 if (driver->suspend)
1371 return driver->suspend(intf, state);
1372 return 0;
1373}
1374
1375static int usb_generic_resume(struct device *dev)
1376{
1377 struct usb_interface *intf;
1378 struct usb_driver *driver;
1379
1380
1381 if (dev->driver == &usb_generic_driver)
1382 return usb_resume_device (to_usb_device(dev));
1383
1384 if ((dev->driver == NULL) ||
1385 (dev->driver_data == &usb_generic_driver_data))
1386 return 0;
1387
1388 intf = to_usb_interface(dev);
1389 driver = to_usb_driver(dev->driver);
1390
1391 if (driver->resume)
1392 return driver->resume(intf);
1393 return 0;
1394}
1395
1396struct bus_type usb_bus_type = {
1397 .name = "usb",
1398 .match = usb_device_match,
1399 .hotplug = usb_hotplug,
1400 .suspend = usb_generic_suspend,
1401 .resume = usb_generic_resume,
1402};
1403
1404#ifndef MODULE
1405
1406static int __init usb_setup_disable(char *str)
1407{
1408 nousb = 1;
1409 return 1;
1410}
1411
1412
1413__setup("nousb", usb_setup_disable);
1414
1415#endif
1416
1417
1418
1419
1420int usb_disabled(void)
1421{
1422 return nousb;
1423}
1424
1425
1426
1427
1428static int __init usb_init(void)
1429{
1430 int retval;
1431 if (nousb) {
1432 pr_info ("%s: USB support disabled\n", usbcore_name);
1433 return 0;
1434 }
1435
1436 retval = bus_register(&usb_bus_type);
1437 if (retval)
1438 goto out;
1439 retval = usb_host_init();
1440 if (retval)
1441 goto host_init_failed;
1442 retval = usb_major_init();
1443 if (retval)
1444 goto major_init_failed;
1445 retval = usbfs_init();
1446 if (retval)
1447 goto fs_init_failed;
1448 retval = usb_hub_init();
1449 if (retval)
1450 goto hub_init_failed;
1451
1452 retval = driver_register(&usb_generic_driver);
1453 if (!retval)
1454 goto out;
1455
1456 usb_hub_cleanup();
1457hub_init_failed:
1458 usbfs_cleanup();
1459fs_init_failed:
1460 usb_major_cleanup();
1461major_init_failed:
1462 usb_host_cleanup();
1463host_init_failed:
1464 bus_unregister(&usb_bus_type);
1465out:
1466 return retval;
1467}
1468
1469
1470
1471
1472static void __exit usb_exit(void)
1473{
1474
1475 if (nousb)
1476 return;
1477
1478 driver_unregister(&usb_generic_driver);
1479 usb_major_cleanup();
1480 usbfs_cleanup();
1481 usb_hub_cleanup();
1482 usb_host_cleanup();
1483 bus_unregister(&usb_bus_type);
1484}
1485
1486subsys_initcall(usb_init);
1487module_exit(usb_exit);
1488
1489
1490
1491
1492
1493
1494
1495EXPORT_SYMBOL(usb_register);
1496EXPORT_SYMBOL(usb_deregister);
1497EXPORT_SYMBOL(usb_disabled);
1498
1499EXPORT_SYMBOL(usb_alloc_dev);
1500EXPORT_SYMBOL(usb_put_dev);
1501EXPORT_SYMBOL(usb_get_dev);
1502EXPORT_SYMBOL(usb_hub_tt_clear_buffer);
1503
1504EXPORT_SYMBOL(usb_lock_device);
1505EXPORT_SYMBOL(usb_trylock_device);
1506EXPORT_SYMBOL(usb_lock_device_for_reset);
1507EXPORT_SYMBOL(usb_unlock_device);
1508
1509EXPORT_SYMBOL(usb_driver_claim_interface);
1510EXPORT_SYMBOL(usb_driver_release_interface);
1511EXPORT_SYMBOL(usb_match_id);
1512EXPORT_SYMBOL(usb_find_interface);
1513EXPORT_SYMBOL(usb_ifnum_to_if);
1514EXPORT_SYMBOL(usb_altnum_to_altsetting);
1515
1516EXPORT_SYMBOL(usb_reset_device);
1517EXPORT_SYMBOL(usb_disconnect);
1518
1519EXPORT_SYMBOL(__usb_get_extra_descriptor);
1520
1521EXPORT_SYMBOL(usb_find_device);
1522EXPORT_SYMBOL(usb_get_current_frame_number);
1523
1524EXPORT_SYMBOL (usb_buffer_alloc);
1525EXPORT_SYMBOL (usb_buffer_free);
1526
1527EXPORT_SYMBOL (usb_buffer_map);
1528#if 0
1529EXPORT_SYMBOL (usb_buffer_dmasync);
1530#endif
1531EXPORT_SYMBOL (usb_buffer_unmap);
1532
1533EXPORT_SYMBOL (usb_buffer_map_sg);
1534#if 0
1535EXPORT_SYMBOL (usb_buffer_dmasync_sg);
1536#endif
1537EXPORT_SYMBOL (usb_buffer_unmap_sg);
1538
1539MODULE_LICENSE("GPL");
1540