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