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