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