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