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