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/module.h>
25#include <linux/moduleparam.h>
26#include <linux/string.h>
27#include <linux/bitops.h>
28#include <linux/slab.h>
29#include <linux/interrupt.h>
30#include <linux/kmod.h>
31#include <linux/init.h>
32#include <linux/spinlock.h>
33#include <linux/errno.h>
34#include <linux/usb.h>
35#include <linux/usb/hcd.h>
36#include <linux/mutex.h>
37#include <linux/workqueue.h>
38#include <linux/debugfs.h>
39
40#include <asm/io.h>
41#include <linux/scatterlist.h>
42#include <linux/mm.h>
43#include <linux/dma-mapping.h>
44
45#include "usb.h"
46
47
48const char *usbcore_name = "usbcore";
49
50static int nousb;
51
52#ifdef CONFIG_USB_SUSPEND
53static int usb_autosuspend_delay = 2;
54
55module_param_named(autosuspend, usb_autosuspend_delay, int, 0644);
56MODULE_PARM_DESC(autosuspend, "default autosuspend delay");
57
58#else
59#define usb_autosuspend_delay 0
60#endif
61
62
63
64
65
66
67
68
69
70
71
72struct usb_host_interface *usb_find_alt_setting(
73 struct usb_host_config *config,
74 unsigned int iface_num,
75 unsigned int alt_num)
76{
77 struct usb_interface_cache *intf_cache = NULL;
78 int i;
79
80 for (i = 0; i < config->desc.bNumInterfaces; i++) {
81 if (config->intf_cache[i]->altsetting[0].desc.bInterfaceNumber
82 == iface_num) {
83 intf_cache = config->intf_cache[i];
84 break;
85 }
86 }
87 if (!intf_cache)
88 return NULL;
89 for (i = 0; i < intf_cache->num_altsetting; i++)
90 if (intf_cache->altsetting[i].desc.bAlternateSetting == alt_num)
91 return &intf_cache->altsetting[i];
92
93 printk(KERN_DEBUG "Did not find alt setting %u for intf %u, "
94 "config %u\n", alt_num, iface_num,
95 config->desc.bConfigurationValue);
96 return NULL;
97}
98EXPORT_SYMBOL_GPL(usb_find_alt_setting);
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119struct usb_interface *usb_ifnum_to_if(const struct usb_device *dev,
120 unsigned ifnum)
121{
122 struct usb_host_config *config = dev->actconfig;
123 int i;
124
125 if (!config)
126 return NULL;
127 for (i = 0; i < config->desc.bNumInterfaces; i++)
128 if (config->interface[i]->altsetting[0]
129 .desc.bInterfaceNumber == ifnum)
130 return config->interface[i];
131
132 return NULL;
133}
134EXPORT_SYMBOL_GPL(usb_ifnum_to_if);
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153struct usb_host_interface *usb_altnum_to_altsetting(
154 const struct usb_interface *intf,
155 unsigned int altnum)
156{
157 int i;
158
159 for (i = 0; i < intf->num_altsetting; i++) {
160 if (intf->altsetting[i].desc.bAlternateSetting == altnum)
161 return &intf->altsetting[i];
162 }
163 return NULL;
164}
165EXPORT_SYMBOL_GPL(usb_altnum_to_altsetting);
166
167struct find_interface_arg {
168 int minor;
169 struct device_driver *drv;
170};
171
172static int __find_interface(struct device *dev, void *data)
173{
174 struct find_interface_arg *arg = data;
175 struct usb_interface *intf;
176
177 if (!is_usb_interface(dev))
178 return 0;
179
180 if (dev->driver != arg->drv)
181 return 0;
182 intf = to_usb_interface(dev);
183 return intf->minor == arg->minor;
184}
185
186
187
188
189
190
191
192
193
194
195struct usb_interface *usb_find_interface(struct usb_driver *drv, int minor)
196{
197 struct find_interface_arg argb;
198 struct device *dev;
199
200 argb.minor = minor;
201 argb.drv = &drv->drvwrap.driver;
202
203 dev = bus_find_device(&usb_bus_type, NULL, &argb, __find_interface);
204
205
206 put_device(dev);
207
208 return dev ? to_usb_interface(dev) : NULL;
209}
210EXPORT_SYMBOL_GPL(usb_find_interface);
211
212
213
214
215
216
217
218
219static void usb_release_dev(struct device *dev)
220{
221 struct usb_device *udev;
222 struct usb_hcd *hcd;
223
224 udev = to_usb_device(dev);
225 hcd = bus_to_hcd(udev->bus);
226
227 usb_destroy_configuration(udev);
228 usb_put_hcd(hcd);
229 kfree(udev->product);
230 kfree(udev->manufacturer);
231 kfree(udev->serial);
232 kfree(udev);
233}
234
235#ifdef CONFIG_HOTPLUG
236static int usb_dev_uevent(struct device *dev, struct kobj_uevent_env *env)
237{
238 struct usb_device *usb_dev;
239
240 usb_dev = to_usb_device(dev);
241
242 if (add_uevent_var(env, "BUSNUM=%03d", usb_dev->bus->busnum))
243 return -ENOMEM;
244
245 if (add_uevent_var(env, "DEVNUM=%03d", usb_dev->devnum))
246 return -ENOMEM;
247
248 return 0;
249}
250
251#else
252
253static int usb_dev_uevent(struct device *dev, struct kobj_uevent_env *env)
254{
255 return -ENODEV;
256}
257#endif
258
259#ifdef CONFIG_PM
260
261
262
263
264
265
266
267
268static int usb_dev_prepare(struct device *dev)
269{
270 return 0;
271}
272
273static void usb_dev_complete(struct device *dev)
274{
275
276 usb_resume(dev, PMSG_ON);
277}
278
279static int usb_dev_suspend(struct device *dev)
280{
281 return usb_suspend(dev, PMSG_SUSPEND);
282}
283
284static int usb_dev_resume(struct device *dev)
285{
286 return usb_resume(dev, PMSG_RESUME);
287}
288
289static int usb_dev_freeze(struct device *dev)
290{
291 return usb_suspend(dev, PMSG_FREEZE);
292}
293
294static int usb_dev_thaw(struct device *dev)
295{
296 return usb_resume(dev, PMSG_THAW);
297}
298
299static int usb_dev_poweroff(struct device *dev)
300{
301 return usb_suspend(dev, PMSG_HIBERNATE);
302}
303
304static int usb_dev_restore(struct device *dev)
305{
306 return usb_resume(dev, PMSG_RESTORE);
307}
308
309static const struct dev_pm_ops usb_device_pm_ops = {
310 .prepare = usb_dev_prepare,
311 .complete = usb_dev_complete,
312 .suspend = usb_dev_suspend,
313 .resume = usb_dev_resume,
314 .freeze = usb_dev_freeze,
315 .thaw = usb_dev_thaw,
316 .poweroff = usb_dev_poweroff,
317 .restore = usb_dev_restore,
318};
319
320#else
321
322#define usb_device_pm_ops (*(struct dev_pm_ops *) NULL)
323
324#endif
325
326
327static char *usb_devnode(struct device *dev, mode_t *mode)
328{
329 struct usb_device *usb_dev;
330
331 usb_dev = to_usb_device(dev);
332 return kasprintf(GFP_KERNEL, "bus/usb/%03d/%03d",
333 usb_dev->bus->busnum, usb_dev->devnum);
334}
335
336struct device_type usb_device_type = {
337 .name = "usb_device",
338 .release = usb_release_dev,
339 .uevent = usb_dev_uevent,
340 .devnode = usb_devnode,
341 .pm = &usb_device_pm_ops,
342};
343
344
345
346static unsigned usb_bus_is_wusb(struct usb_bus *bus)
347{
348 struct usb_hcd *hcd = container_of(bus, struct usb_hcd, self);
349 return hcd->wireless;
350}
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365struct usb_device *usb_alloc_dev(struct usb_device *parent,
366 struct usb_bus *bus, unsigned port1)
367{
368 struct usb_device *dev;
369 struct usb_hcd *usb_hcd = container_of(bus, struct usb_hcd, self);
370 unsigned root_hub = 0;
371
372 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
373 if (!dev)
374 return NULL;
375
376 if (!usb_get_hcd(bus_to_hcd(bus))) {
377 kfree(dev);
378 return NULL;
379 }
380
381 if (usb_hcd->driver->alloc_dev && parent &&
382 !usb_hcd->driver->alloc_dev(usb_hcd, dev)) {
383 usb_put_hcd(bus_to_hcd(bus));
384 kfree(dev);
385 return NULL;
386 }
387
388 device_initialize(&dev->dev);
389 dev->dev.bus = &usb_bus_type;
390 dev->dev.type = &usb_device_type;
391 dev->dev.groups = usb_device_groups;
392 dev->dev.dma_mask = bus->controller->dma_mask;
393 set_dev_node(&dev->dev, dev_to_node(bus->controller));
394 dev->state = USB_STATE_ATTACHED;
395 atomic_set(&dev->urbnum, 0);
396
397 INIT_LIST_HEAD(&dev->ep0.urb_list);
398 dev->ep0.desc.bLength = USB_DT_ENDPOINT_SIZE;
399 dev->ep0.desc.bDescriptorType = USB_DT_ENDPOINT;
400
401 usb_enable_endpoint(dev, &dev->ep0, false);
402 dev->can_submit = 1;
403
404
405
406
407
408
409
410
411
412 if (unlikely(!parent)) {
413 dev->devpath[0] = '0';
414 dev->route = 0;
415
416 dev->dev.parent = bus->controller;
417 dev_set_name(&dev->dev, "usb%d", bus->busnum);
418 root_hub = 1;
419 } else {
420
421 if (parent->devpath[0] == '0') {
422 snprintf(dev->devpath, sizeof dev->devpath,
423 "%d", port1);
424
425 dev->route = 0;
426 } else {
427 snprintf(dev->devpath, sizeof dev->devpath,
428 "%s.%d", parent->devpath, port1);
429
430 if (port1 < 15)
431 dev->route = parent->route +
432 (port1 << ((parent->level - 1)*4));
433 else
434 dev->route = parent->route +
435 (15 << ((parent->level - 1)*4));
436 }
437
438 dev->dev.parent = &parent->dev;
439 dev_set_name(&dev->dev, "%d-%s", bus->busnum, dev->devpath);
440
441
442 }
443
444 dev->portnum = port1;
445 dev->bus = bus;
446 dev->parent = parent;
447 INIT_LIST_HEAD(&dev->filelist);
448
449#ifdef CONFIG_PM
450 dev->autosuspend_delay = usb_autosuspend_delay * HZ;
451 dev->connect_time = jiffies;
452 dev->active_duration = -jiffies;
453#endif
454 if (root_hub)
455 dev->authorized = 1;
456 else {
457 dev->authorized = usb_hcd->authorized_default;
458 dev->wusb = usb_bus_is_wusb(bus)? 1 : 0;
459 }
460 return dev;
461}
462
463
464
465
466
467
468
469
470
471
472
473
474
475struct usb_device *usb_get_dev(struct usb_device *dev)
476{
477 if (dev)
478 get_device(&dev->dev);
479 return dev;
480}
481EXPORT_SYMBOL_GPL(usb_get_dev);
482
483
484
485
486
487
488
489
490void usb_put_dev(struct usb_device *dev)
491{
492 if (dev)
493 put_device(&dev->dev);
494}
495EXPORT_SYMBOL_GPL(usb_put_dev);
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510struct usb_interface *usb_get_intf(struct usb_interface *intf)
511{
512 if (intf)
513 get_device(&intf->dev);
514 return intf;
515}
516EXPORT_SYMBOL_GPL(usb_get_intf);
517
518
519
520
521
522
523
524
525
526void usb_put_intf(struct usb_interface *intf)
527{
528 if (intf)
529 put_device(&intf->dev);
530}
531EXPORT_SYMBOL_GPL(usb_put_intf);
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563int usb_lock_device_for_reset(struct usb_device *udev,
564 const struct usb_interface *iface)
565{
566 unsigned long jiffies_expire = jiffies + HZ;
567
568 if (udev->state == USB_STATE_NOTATTACHED)
569 return -ENODEV;
570 if (udev->state == USB_STATE_SUSPENDED)
571 return -EHOSTUNREACH;
572 if (iface && (iface->condition == USB_INTERFACE_UNBINDING ||
573 iface->condition == USB_INTERFACE_UNBOUND))
574 return -EINTR;
575
576 while (!usb_trylock_device(udev)) {
577
578
579
580 if (time_after(jiffies, jiffies_expire))
581 return -EBUSY;
582
583 msleep(15);
584 if (udev->state == USB_STATE_NOTATTACHED)
585 return -ENODEV;
586 if (udev->state == USB_STATE_SUSPENDED)
587 return -EHOSTUNREACH;
588 if (iface && (iface->condition == USB_INTERFACE_UNBINDING ||
589 iface->condition == USB_INTERFACE_UNBOUND))
590 return -EINTR;
591 }
592 return 0;
593}
594EXPORT_SYMBOL_GPL(usb_lock_device_for_reset);
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609int usb_get_current_frame_number(struct usb_device *dev)
610{
611 return usb_hcd_get_frame_number(dev);
612}
613EXPORT_SYMBOL_GPL(usb_get_current_frame_number);
614
615
616
617
618
619
620
621int __usb_get_extra_descriptor(char *buffer, unsigned size,
622 unsigned char type, void **ptr)
623{
624 struct usb_descriptor_header *header;
625
626 while (size >= sizeof(struct usb_descriptor_header)) {
627 header = (struct usb_descriptor_header *)buffer;
628
629 if (header->bLength < 2) {
630 printk(KERN_ERR
631 "%s: bogus descriptor, type %d length %d\n",
632 usbcore_name,
633 header->bDescriptorType,
634 header->bLength);
635 return -1;
636 }
637
638 if (header->bDescriptorType == type) {
639 *ptr = header;
640 return 0;
641 }
642
643 buffer += header->bLength;
644 size -= header->bLength;
645 }
646 return -1;
647}
648EXPORT_SYMBOL_GPL(__usb_get_extra_descriptor);
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672void *usb_alloc_coherent(struct usb_device *dev, size_t size, gfp_t mem_flags,
673 dma_addr_t *dma)
674{
675 if (!dev || !dev->bus)
676 return NULL;
677 return hcd_buffer_alloc(dev->bus, size, mem_flags, dma);
678}
679EXPORT_SYMBOL_GPL(usb_alloc_coherent);
680
681
682
683
684
685
686
687
688
689
690
691
692void usb_free_coherent(struct usb_device *dev, size_t size, void *addr,
693 dma_addr_t dma)
694{
695 if (!dev || !dev->bus)
696 return;
697 if (!addr)
698 return;
699 hcd_buffer_free(dev->bus, size, addr, dma);
700}
701EXPORT_SYMBOL_GPL(usb_free_coherent);
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719#if 0
720struct urb *usb_buffer_map(struct urb *urb)
721{
722 struct usb_bus *bus;
723 struct device *controller;
724
725 if (!urb
726 || !urb->dev
727 || !(bus = urb->dev->bus)
728 || !(controller = bus->controller))
729 return NULL;
730
731 if (controller->dma_mask) {
732 urb->transfer_dma = dma_map_single(controller,
733 urb->transfer_buffer, urb->transfer_buffer_length,
734 usb_pipein(urb->pipe)
735 ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
736
737
738 } else
739 urb->transfer_dma = ~0;
740 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
741 return urb;
742}
743EXPORT_SYMBOL_GPL(usb_buffer_map);
744#endif
745
746
747
748
749
750
751#if 0
752
753
754
755
756
757void usb_buffer_dmasync(struct urb *urb)
758{
759 struct usb_bus *bus;
760 struct device *controller;
761
762 if (!urb
763 || !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)
764 || !urb->dev
765 || !(bus = urb->dev->bus)
766 || !(controller = bus->controller))
767 return;
768
769 if (controller->dma_mask) {
770 dma_sync_single_for_cpu(controller,
771 urb->transfer_dma, urb->transfer_buffer_length,
772 usb_pipein(urb->pipe)
773 ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
774 if (usb_pipecontrol(urb->pipe))
775 dma_sync_single_for_cpu(controller,
776 urb->setup_dma,
777 sizeof(struct usb_ctrlrequest),
778 DMA_TO_DEVICE);
779 }
780}
781EXPORT_SYMBOL_GPL(usb_buffer_dmasync);
782#endif
783
784
785
786
787
788
789
790#if 0
791void usb_buffer_unmap(struct urb *urb)
792{
793 struct usb_bus *bus;
794 struct device *controller;
795
796 if (!urb
797 || !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)
798 || !urb->dev
799 || !(bus = urb->dev->bus)
800 || !(controller = bus->controller))
801 return;
802
803 if (controller->dma_mask) {
804 dma_unmap_single(controller,
805 urb->transfer_dma, urb->transfer_buffer_length,
806 usb_pipein(urb->pipe)
807 ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
808 }
809 urb->transfer_flags &= ~URB_NO_TRANSFER_DMA_MAP;
810}
811EXPORT_SYMBOL_GPL(usb_buffer_unmap);
812#endif
813
814#if 0
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
841int usb_buffer_map_sg(const struct usb_device *dev, int is_in,
842 struct scatterlist *sg, int nents)
843{
844 struct usb_bus *bus;
845 struct device *controller;
846
847 if (!dev
848 || !(bus = dev->bus)
849 || !(controller = bus->controller)
850 || !controller->dma_mask)
851 return -EINVAL;
852
853
854 return dma_map_sg(controller, sg, nents,
855 is_in ? DMA_FROM_DEVICE : DMA_TO_DEVICE) ? : -ENOMEM;
856}
857EXPORT_SYMBOL_GPL(usb_buffer_map_sg);
858#endif
859
860
861
862
863
864
865#if 0
866
867
868
869
870
871
872
873
874
875
876
877void usb_buffer_dmasync_sg(const struct usb_device *dev, int is_in,
878 struct scatterlist *sg, int n_hw_ents)
879{
880 struct usb_bus *bus;
881 struct device *controller;
882
883 if (!dev
884 || !(bus = dev->bus)
885 || !(controller = bus->controller)
886 || !controller->dma_mask)
887 return;
888
889 dma_sync_sg_for_cpu(controller, sg, n_hw_ents,
890 is_in ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
891}
892EXPORT_SYMBOL_GPL(usb_buffer_dmasync_sg);
893#endif
894
895#if 0
896
897
898
899
900
901
902
903
904
905void usb_buffer_unmap_sg(const struct usb_device *dev, int is_in,
906 struct scatterlist *sg, int n_hw_ents)
907{
908 struct usb_bus *bus;
909 struct device *controller;
910
911 if (!dev
912 || !(bus = dev->bus)
913 || !(controller = bus->controller)
914 || !controller->dma_mask)
915 return;
916
917 dma_unmap_sg(controller, sg, n_hw_ents,
918 is_in ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
919}
920EXPORT_SYMBOL_GPL(usb_buffer_unmap_sg);
921#endif
922
923
924#ifdef MODULE
925module_param(nousb, bool, 0444);
926#else
927core_param(nousb, nousb, bool, 0444);
928#endif
929
930
931
932
933int usb_disabled(void)
934{
935 return nousb;
936}
937EXPORT_SYMBOL_GPL(usb_disabled);
938
939
940
941
942static int usb_bus_notify(struct notifier_block *nb, unsigned long action,
943 void *data)
944{
945 struct device *dev = data;
946
947 switch (action) {
948 case BUS_NOTIFY_ADD_DEVICE:
949 if (dev->type == &usb_device_type)
950 (void) usb_create_sysfs_dev_files(to_usb_device(dev));
951 else if (dev->type == &usb_if_device_type)
952 (void) usb_create_sysfs_intf_files(
953 to_usb_interface(dev));
954 break;
955
956 case BUS_NOTIFY_DEL_DEVICE:
957 if (dev->type == &usb_device_type)
958 usb_remove_sysfs_dev_files(to_usb_device(dev));
959 else if (dev->type == &usb_if_device_type)
960 usb_remove_sysfs_intf_files(to_usb_interface(dev));
961 break;
962 }
963 return 0;
964}
965
966static struct notifier_block usb_bus_nb = {
967 .notifier_call = usb_bus_notify,
968};
969
970struct dentry *usb_debug_root;
971EXPORT_SYMBOL_GPL(usb_debug_root);
972
973static struct dentry *usb_debug_devices;
974
975static int usb_debugfs_init(void)
976{
977 usb_debug_root = debugfs_create_dir("usb", NULL);
978 if (!usb_debug_root)
979 return -ENOENT;
980
981 usb_debug_devices = debugfs_create_file("devices", 0444,
982 usb_debug_root, NULL,
983 &usbfs_devices_fops);
984 if (!usb_debug_devices) {
985 debugfs_remove(usb_debug_root);
986 usb_debug_root = NULL;
987 return -ENOENT;
988 }
989
990 return 0;
991}
992
993static void usb_debugfs_cleanup(void)
994{
995 debugfs_remove(usb_debug_devices);
996 debugfs_remove(usb_debug_root);
997}
998
999
1000
1001
1002static int __init usb_init(void)
1003{
1004 int retval;
1005 if (nousb) {
1006 pr_info("%s: USB support disabled\n", usbcore_name);
1007 return 0;
1008 }
1009
1010 retval = usb_debugfs_init();
1011 if (retval)
1012 goto out;
1013
1014 retval = bus_register(&usb_bus_type);
1015 if (retval)
1016 goto bus_register_failed;
1017 retval = bus_register_notifier(&usb_bus_type, &usb_bus_nb);
1018 if (retval)
1019 goto bus_notifier_failed;
1020 retval = usb_major_init();
1021 if (retval)
1022 goto major_init_failed;
1023 retval = usb_register(&usbfs_driver);
1024 if (retval)
1025 goto driver_register_failed;
1026 retval = usb_devio_init();
1027 if (retval)
1028 goto usb_devio_init_failed;
1029 retval = usbfs_init();
1030 if (retval)
1031 goto fs_init_failed;
1032 retval = usb_hub_init();
1033 if (retval)
1034 goto hub_init_failed;
1035 retval = usb_register_device_driver(&usb_generic_driver, THIS_MODULE);
1036 if (!retval)
1037 goto out;
1038
1039 usb_hub_cleanup();
1040hub_init_failed:
1041 usbfs_cleanup();
1042fs_init_failed:
1043 usb_devio_cleanup();
1044usb_devio_init_failed:
1045 usb_deregister(&usbfs_driver);
1046driver_register_failed:
1047 usb_major_cleanup();
1048major_init_failed:
1049 bus_unregister_notifier(&usb_bus_type, &usb_bus_nb);
1050bus_notifier_failed:
1051 bus_unregister(&usb_bus_type);
1052bus_register_failed:
1053 usb_debugfs_cleanup();
1054out:
1055 return retval;
1056}
1057
1058
1059
1060
1061static void __exit usb_exit(void)
1062{
1063
1064 if (nousb)
1065 return;
1066
1067 usb_deregister_device_driver(&usb_generic_driver);
1068 usb_major_cleanup();
1069 usbfs_cleanup();
1070 usb_deregister(&usbfs_driver);
1071 usb_devio_cleanup();
1072 usb_hub_cleanup();
1073 bus_unregister_notifier(&usb_bus_type, &usb_bus_nb);
1074 bus_unregister(&usb_bus_type);
1075 usb_debugfs_cleanup();
1076}
1077
1078subsys_initcall(usb_init);
1079module_exit(usb_exit);
1080MODULE_LICENSE("GPL");
1081