1
2
3
4
5#include <linux/pci.h>
6#include <linux/usb.h>
7#include <linux/module.h>
8#include <linux/slab.h>
9#include <linux/init.h>
10#include <linux/mm.h>
11#include <linux/timer.h>
12#include <linux/ctype.h>
13#include <linux/nls.h>
14#include <linux/device.h>
15#include <linux/scatterlist.h>
16#include <linux/usb/quirks.h>
17#include <linux/usb/hcd.h>
18#include <asm/byteorder.h>
19
20#include "usb.h"
21
22static void cancel_async_set_config(struct usb_device *udev);
23
24struct api_context {
25 struct completion done;
26 int status;
27};
28
29static void usb_api_blocking_completion(struct urb *urb)
30{
31 struct api_context *ctx = urb->context;
32
33 ctx->status = urb->status;
34 complete(&ctx->done);
35}
36
37
38
39
40
41
42
43
44static int usb_start_wait_urb(struct urb *urb, int timeout, int *actual_length)
45{
46 struct api_context ctx;
47 unsigned long expire;
48 int retval;
49
50 init_completion(&ctx.done);
51 urb->context = &ctx;
52 urb->actual_length = 0;
53 retval = usb_submit_urb(urb, GFP_NOIO);
54 if (unlikely(retval))
55 goto out;
56
57 expire = timeout ? msecs_to_jiffies(timeout) : MAX_SCHEDULE_TIMEOUT;
58 if (!wait_for_completion_timeout(&ctx.done, expire)) {
59 usb_kill_urb(urb);
60 retval = (ctx.status == -ENOENT ? -ETIMEDOUT : ctx.status);
61
62 dev_dbg(&urb->dev->dev,
63 "%s timed out on ep%d%s len=%u/%u\n",
64 current->comm,
65 usb_endpoint_num(&urb->ep->desc),
66 usb_urb_dir_in(urb) ? "in" : "out",
67 urb->actual_length,
68 urb->transfer_buffer_length);
69 } else
70 retval = ctx.status;
71out:
72 if (actual_length)
73 *actual_length = urb->actual_length;
74
75 usb_free_urb(urb);
76 return retval;
77}
78
79
80
81static int usb_internal_control_msg(struct usb_device *usb_dev,
82 unsigned int pipe,
83 struct usb_ctrlrequest *cmd,
84 void *data, int len, int timeout)
85{
86 struct urb *urb;
87 int retv;
88 int length;
89
90 urb = usb_alloc_urb(0, GFP_NOIO);
91 if (!urb)
92 return -ENOMEM;
93
94 usb_fill_control_urb(urb, usb_dev, pipe, (unsigned char *)cmd, data,
95 len, usb_api_blocking_completion, NULL);
96
97 retv = usb_start_wait_urb(urb, timeout, &length);
98 if (retv < 0)
99 return retv;
100 else
101 return length;
102}
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request,
133 __u8 requesttype, __u16 value, __u16 index, void *data,
134 __u16 size, int timeout)
135{
136 struct usb_ctrlrequest *dr;
137 int ret;
138
139 dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO);
140 if (!dr)
141 return -ENOMEM;
142
143 dr->bRequestType = requesttype;
144 dr->bRequest = request;
145 dr->wValue = cpu_to_le16(value);
146 dr->wIndex = cpu_to_le16(index);
147 dr->wLength = cpu_to_le16(size);
148
149
150
151 ret = usb_internal_control_msg(dev, pipe, dr, data, size, timeout);
152
153 kfree(dr);
154
155 return ret;
156}
157EXPORT_SYMBOL_GPL(usb_control_msg);
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe,
186 void *data, int len, int *actual_length, int timeout)
187{
188 return usb_bulk_msg(usb_dev, pipe, data, len, actual_length, timeout);
189}
190EXPORT_SYMBOL_GPL(usb_interrupt_msg);
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,
224 void *data, int len, int *actual_length, int timeout)
225{
226 struct urb *urb;
227 struct usb_host_endpoint *ep;
228
229 ep = usb_pipe_endpoint(usb_dev, pipe);
230 if (!ep || len < 0)
231 return -EINVAL;
232
233 urb = usb_alloc_urb(0, GFP_KERNEL);
234 if (!urb)
235 return -ENOMEM;
236
237 if ((ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
238 USB_ENDPOINT_XFER_INT) {
239 pipe = (pipe & ~(3 << 30)) | (PIPE_INTERRUPT << 30);
240 usb_fill_int_urb(urb, usb_dev, pipe, data, len,
241 usb_api_blocking_completion, NULL,
242 ep->desc.bInterval);
243 } else
244 usb_fill_bulk_urb(urb, usb_dev, pipe, data, len,
245 usb_api_blocking_completion, NULL);
246
247 return usb_start_wait_urb(urb, timeout, actual_length);
248}
249EXPORT_SYMBOL_GPL(usb_bulk_msg);
250
251
252
253static void sg_clean(struct usb_sg_request *io)
254{
255 if (io->urbs) {
256 while (io->entries--)
257 usb_free_urb(io->urbs [io->entries]);
258 kfree(io->urbs);
259 io->urbs = NULL;
260 }
261 io->dev = NULL;
262}
263
264static void sg_complete(struct urb *urb)
265{
266 struct usb_sg_request *io = urb->context;
267 int status = urb->status;
268
269 spin_lock(&io->lock);
270
271
272
273
274
275
276
277
278
279
280
281 if (io->status
282 && (io->status != -ECONNRESET
283 || status != -ECONNRESET)
284 && urb->actual_length) {
285 dev_err(io->dev->bus->controller,
286 "dev %s ep%d%s scatterlist error %d/%d\n",
287 io->dev->devpath,
288 usb_endpoint_num(&urb->ep->desc),
289 usb_urb_dir_in(urb) ? "in" : "out",
290 status, io->status);
291
292 }
293
294 if (io->status == 0 && status && status != -ECONNRESET) {
295 int i, found, retval;
296
297 io->status = status;
298
299
300
301
302
303 spin_unlock(&io->lock);
304 for (i = 0, found = 0; i < io->entries; i++) {
305 if (!io->urbs [i] || !io->urbs [i]->dev)
306 continue;
307 if (found) {
308 retval = usb_unlink_urb(io->urbs [i]);
309 if (retval != -EINPROGRESS &&
310 retval != -ENODEV &&
311 retval != -EBUSY &&
312 retval != -EIDRM)
313 dev_err(&io->dev->dev,
314 "%s, unlink --> %d\n",
315 __func__, retval);
316 } else if (urb == io->urbs [i])
317 found = 1;
318 }
319 spin_lock(&io->lock);
320 }
321
322
323 io->bytes += urb->actual_length;
324 io->count--;
325 if (!io->count)
326 complete(&io->complete);
327
328 spin_unlock(&io->lock);
329}
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357int usb_sg_init(struct usb_sg_request *io, struct usb_device *dev,
358 unsigned pipe, unsigned period, struct scatterlist *sg,
359 int nents, size_t length, gfp_t mem_flags)
360{
361 int i;
362 int urb_flags;
363 int use_sg;
364
365 if (!io || !dev || !sg
366 || usb_pipecontrol(pipe)
367 || usb_pipeisoc(pipe)
368 || nents <= 0)
369 return -EINVAL;
370
371 spin_lock_init(&io->lock);
372 io->dev = dev;
373 io->pipe = pipe;
374
375 if (dev->bus->sg_tablesize > 0) {
376 use_sg = true;
377 io->entries = 1;
378 } else {
379 use_sg = false;
380 io->entries = nents;
381 }
382
383
384 io->urbs = kmalloc(io->entries * sizeof *io->urbs, mem_flags);
385 if (!io->urbs)
386 goto nomem;
387
388 urb_flags = URB_NO_INTERRUPT;
389 if (usb_pipein(pipe))
390 urb_flags |= URB_SHORT_NOT_OK;
391
392 for_each_sg(sg, sg, io->entries, i) {
393 struct urb *urb;
394 unsigned len;
395
396 urb = usb_alloc_urb(0, mem_flags);
397 if (!urb) {
398 io->entries = i;
399 goto nomem;
400 }
401 io->urbs[i] = urb;
402
403 urb->dev = NULL;
404 urb->pipe = pipe;
405 urb->interval = period;
406 urb->transfer_flags = urb_flags;
407 urb->complete = sg_complete;
408 urb->context = io;
409 urb->sg = sg;
410
411 if (use_sg) {
412
413 urb->transfer_buffer = NULL;
414 urb->num_sgs = nents;
415
416
417 len = length;
418 if (len == 0) {
419 struct scatterlist *sg2;
420 int j;
421
422 for_each_sg(sg, sg2, nents, j)
423 len += sg2->length;
424 }
425 } else {
426
427
428
429
430
431 if (!PageHighMem(sg_page(sg)))
432 urb->transfer_buffer = sg_virt(sg);
433 else
434 urb->transfer_buffer = NULL;
435
436 len = sg->length;
437 if (length) {
438 len = min_t(size_t, len, length);
439 length -= len;
440 if (length == 0)
441 io->entries = i + 1;
442 }
443 }
444 urb->transfer_buffer_length = len;
445 }
446 io->urbs[--i]->transfer_flags &= ~URB_NO_INTERRUPT;
447
448
449 io->count = io->entries;
450 io->status = 0;
451 io->bytes = 0;
452 init_completion(&io->complete);
453 return 0;
454
455nomem:
456 sg_clean(io);
457 return -ENOMEM;
458}
459EXPORT_SYMBOL_GPL(usb_sg_init);
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504void usb_sg_wait(struct usb_sg_request *io)
505{
506 int i;
507 int entries = io->entries;
508
509
510 spin_lock_irq(&io->lock);
511 i = 0;
512 while (i < entries && !io->status) {
513 int retval;
514
515 io->urbs[i]->dev = io->dev;
516 retval = usb_submit_urb(io->urbs [i], GFP_ATOMIC);
517
518
519
520
521 spin_unlock_irq(&io->lock);
522 switch (retval) {
523
524 case -ENXIO:
525 case -EAGAIN:
526 case -ENOMEM:
527 retval = 0;
528 yield();
529 break;
530
531
532
533
534
535
536
537 case 0:
538 ++i;
539 cpu_relax();
540 break;
541
542
543 default:
544 io->urbs[i]->status = retval;
545 dev_dbg(&io->dev->dev, "%s, submit --> %d\n",
546 __func__, retval);
547 usb_sg_cancel(io);
548 }
549 spin_lock_irq(&io->lock);
550 if (retval && (io->status == 0 || io->status == -ECONNRESET))
551 io->status = retval;
552 }
553 io->count -= entries - i;
554 if (io->count == 0)
555 complete(&io->complete);
556 spin_unlock_irq(&io->lock);
557
558
559
560
561
562 wait_for_completion(&io->complete);
563
564 sg_clean(io);
565}
566EXPORT_SYMBOL_GPL(usb_sg_wait);
567
568
569
570
571
572
573
574
575
576void usb_sg_cancel(struct usb_sg_request *io)
577{
578 unsigned long flags;
579
580 spin_lock_irqsave(&io->lock, flags);
581
582
583 if (!io->status) {
584 int i;
585
586 io->status = -ECONNRESET;
587 spin_unlock(&io->lock);
588 for (i = 0; i < io->entries; i++) {
589 int retval;
590
591 if (!io->urbs [i]->dev)
592 continue;
593 retval = usb_unlink_urb(io->urbs [i]);
594 if (retval != -EINPROGRESS
595 && retval != -ENODEV
596 && retval != -EBUSY
597 && retval != -EIDRM)
598 dev_warn(&io->dev->dev, "%s, unlink --> %d\n",
599 __func__, retval);
600 }
601 spin_lock(&io->lock);
602 }
603 spin_unlock_irqrestore(&io->lock, flags);
604}
605EXPORT_SYMBOL_GPL(usb_sg_cancel);
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631int usb_get_descriptor(struct usb_device *dev, unsigned char type,
632 unsigned char index, void *buf, int size)
633{
634 int i;
635 int result;
636
637 memset(buf, 0, size);
638
639 for (i = 0; i < 3; ++i) {
640
641 result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
642 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,
643 (type << 8) + index, 0, buf, size,
644 USB_CTRL_GET_TIMEOUT);
645 if (result <= 0 && result != -ETIMEDOUT)
646 continue;
647 if (result > 1 && ((u8 *)buf)[1] != type) {
648 result = -ENODATA;
649 continue;
650 }
651 break;
652 }
653 return result;
654}
655EXPORT_SYMBOL_GPL(usb_get_descriptor);
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679static int usb_get_string(struct usb_device *dev, unsigned short langid,
680 unsigned char index, void *buf, int size)
681{
682 int i;
683 int result;
684
685 for (i = 0; i < 3; ++i) {
686
687 result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
688 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,
689 (USB_DT_STRING << 8) + index, langid, buf, size,
690 USB_CTRL_GET_TIMEOUT);
691 if (result == 0 || result == -EPIPE)
692 continue;
693 if (result > 1 && ((u8 *) buf)[1] != USB_DT_STRING) {
694 result = -ENODATA;
695 continue;
696 }
697 break;
698 }
699 return result;
700}
701
702static void usb_try_string_workarounds(unsigned char *buf, int *length)
703{
704 int newlength, oldlength = *length;
705
706 for (newlength = 2; newlength + 1 < oldlength; newlength += 2)
707 if (!isprint(buf[newlength]) || buf[newlength + 1])
708 break;
709
710 if (newlength > 2) {
711 buf[0] = newlength;
712 *length = newlength;
713 }
714}
715
716static int usb_string_sub(struct usb_device *dev, unsigned int langid,
717 unsigned int index, unsigned char *buf)
718{
719 int rc;
720
721
722
723 if (dev->quirks & USB_QUIRK_STRING_FETCH_255)
724 rc = -EIO;
725 else
726 rc = usb_get_string(dev, langid, index, buf, 255);
727
728
729
730 if (rc < 2) {
731 rc = usb_get_string(dev, langid, index, buf, 2);
732 if (rc == 2)
733 rc = usb_get_string(dev, langid, index, buf, buf[0]);
734 }
735
736 if (rc >= 2) {
737 if (!buf[0] && !buf[1])
738 usb_try_string_workarounds(buf, &rc);
739
740
741 if (buf[0] < rc)
742 rc = buf[0];
743
744 rc = rc - (rc & 1);
745 }
746
747 if (rc < 2)
748 rc = (rc < 0 ? rc : -EINVAL);
749
750 return rc;
751}
752
753static int usb_get_langid(struct usb_device *dev, unsigned char *tbuf)
754{
755 int err;
756
757 if (dev->have_langid)
758 return 0;
759
760 if (dev->string_langid < 0)
761 return -EPIPE;
762
763 err = usb_string_sub(dev, 0, 0, tbuf);
764
765
766
767 if (err == -ENODATA || (err > 0 && err < 4)) {
768 dev->string_langid = 0x0409;
769 dev->have_langid = 1;
770 dev_err(&dev->dev,
771 "string descriptor 0 malformed (err = %d), "
772 "defaulting to 0x%04x\n",
773 err, dev->string_langid);
774 return 0;
775 }
776
777
778
779
780 if (err < 0) {
781 dev_err(&dev->dev, "string descriptor 0 read error: %d\n",
782 err);
783 dev->string_langid = -1;
784 return -EPIPE;
785 }
786
787
788 dev->string_langid = tbuf[2] | (tbuf[3] << 8);
789 dev->have_langid = 1;
790 dev_dbg(&dev->dev, "default language 0x%04x\n",
791 dev->string_langid);
792 return 0;
793}
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812int usb_string(struct usb_device *dev, int index, char *buf, size_t size)
813{
814 unsigned char *tbuf;
815 int err;
816
817 if (dev->state == USB_STATE_SUSPENDED)
818 return -EHOSTUNREACH;
819 if (size <= 0 || !buf || !index)
820 return -EINVAL;
821 buf[0] = 0;
822 tbuf = kmalloc(256, GFP_NOIO);
823 if (!tbuf)
824 return -ENOMEM;
825
826 err = usb_get_langid(dev, tbuf);
827 if (err < 0)
828 goto errout;
829
830 err = usb_string_sub(dev, dev->string_langid, index, tbuf);
831 if (err < 0)
832 goto errout;
833
834 size--;
835 err = utf16s_to_utf8s((wchar_t *) &tbuf[2], (err - 2) / 2,
836 UTF16_LITTLE_ENDIAN, buf, size);
837 buf[err] = 0;
838
839 if (tbuf[1] != USB_DT_STRING)
840 dev_dbg(&dev->dev,
841 "wrong descriptor type %02x for string %d (\"%s\")\n",
842 tbuf[1], index, buf);
843
844 errout:
845 kfree(tbuf);
846 return err;
847}
848EXPORT_SYMBOL_GPL(usb_string);
849
850
851#define MAX_USB_STRING_SIZE (127 * 3 + 1)
852
853
854
855
856
857
858
859
860
861char *usb_cache_string(struct usb_device *udev, int index)
862{
863 char *buf;
864 char *smallbuf = NULL;
865 int len;
866
867 if (index <= 0)
868 return NULL;
869
870 buf = kmalloc(MAX_USB_STRING_SIZE, GFP_NOIO);
871 if (buf) {
872 len = usb_string(udev, index, buf, MAX_USB_STRING_SIZE);
873 if (len > 0) {
874 smallbuf = kmalloc(++len, GFP_NOIO);
875 if (!smallbuf)
876 return buf;
877 memcpy(smallbuf, buf, len);
878 }
879 kfree(buf);
880 }
881 return smallbuf;
882}
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902int usb_get_device_descriptor(struct usb_device *dev, unsigned int size)
903{
904 struct usb_device_descriptor *desc;
905 int ret;
906
907 if (size > sizeof(*desc))
908 return -EINVAL;
909 desc = kmalloc(sizeof(*desc), GFP_NOIO);
910 if (!desc)
911 return -ENOMEM;
912
913 ret = usb_get_descriptor(dev, USB_DT_DEVICE, 0, desc, size);
914 if (ret >= 0)
915 memcpy(&dev->descriptor, desc, size);
916 kfree(desc);
917 return ret;
918}
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942int usb_get_status(struct usb_device *dev, int type, int target, void *data)
943{
944 int ret;
945 u16 *status = kmalloc(sizeof(*status), GFP_KERNEL);
946
947 if (!status)
948 return -ENOMEM;
949
950 ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
951 USB_REQ_GET_STATUS, USB_DIR_IN | type, 0, target, status,
952 sizeof(*status), USB_CTRL_GET_TIMEOUT);
953
954 *(u16 *)data = *status;
955 kfree(status);
956 return ret;
957}
958EXPORT_SYMBOL_GPL(usb_get_status);
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983int usb_clear_halt(struct usb_device *dev, int pipe)
984{
985 int result;
986 int endp = usb_pipeendpoint(pipe);
987
988 if (usb_pipein(pipe))
989 endp |= USB_DIR_IN;
990
991
992
993
994
995 result = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
996 USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT,
997 USB_ENDPOINT_HALT, endp, NULL, 0,
998 USB_CTRL_SET_TIMEOUT);
999
1000
1001 if (result < 0)
1002 return result;
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012 usb_reset_endpoint(dev, endp);
1013
1014 return 0;
1015}
1016EXPORT_SYMBOL_GPL(usb_clear_halt);
1017
1018static int create_intf_ep_devs(struct usb_interface *intf)
1019{
1020 struct usb_device *udev = interface_to_usbdev(intf);
1021 struct usb_host_interface *alt = intf->cur_altsetting;
1022 int i;
1023
1024 if (intf->ep_devs_created || intf->unregistering)
1025 return 0;
1026
1027 for (i = 0; i < alt->desc.bNumEndpoints; ++i)
1028 (void) usb_create_ep_devs(&intf->dev, &alt->endpoint[i], udev);
1029 intf->ep_devs_created = 1;
1030 return 0;
1031}
1032
1033static void remove_intf_ep_devs(struct usb_interface *intf)
1034{
1035 struct usb_host_interface *alt = intf->cur_altsetting;
1036 int i;
1037
1038 if (!intf->ep_devs_created)
1039 return;
1040
1041 for (i = 0; i < alt->desc.bNumEndpoints; ++i)
1042 usb_remove_ep_devs(&alt->endpoint[i]);
1043 intf->ep_devs_created = 0;
1044}
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058void usb_disable_endpoint(struct usb_device *dev, unsigned int epaddr,
1059 bool reset_hardware)
1060{
1061 unsigned int epnum = epaddr & USB_ENDPOINT_NUMBER_MASK;
1062 struct usb_host_endpoint *ep;
1063
1064 if (!dev)
1065 return;
1066
1067 if (usb_endpoint_out(epaddr)) {
1068 ep = dev->ep_out[epnum];
1069 if (reset_hardware)
1070 dev->ep_out[epnum] = NULL;
1071 } else {
1072 ep = dev->ep_in[epnum];
1073 if (reset_hardware)
1074 dev->ep_in[epnum] = NULL;
1075 }
1076 if (ep) {
1077 ep->enabled = 0;
1078 usb_hcd_flush_endpoint(dev, ep);
1079 if (reset_hardware)
1080 usb_hcd_disable_endpoint(dev, ep);
1081 }
1082}
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093void usb_reset_endpoint(struct usb_device *dev, unsigned int epaddr)
1094{
1095 unsigned int epnum = epaddr & USB_ENDPOINT_NUMBER_MASK;
1096 struct usb_host_endpoint *ep;
1097
1098 if (usb_endpoint_out(epaddr))
1099 ep = dev->ep_out[epnum];
1100 else
1101 ep = dev->ep_in[epnum];
1102 if (ep)
1103 usb_hcd_reset_endpoint(dev, ep);
1104}
1105EXPORT_SYMBOL_GPL(usb_reset_endpoint);
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117void usb_disable_interface(struct usb_device *dev, struct usb_interface *intf,
1118 bool reset_hardware)
1119{
1120 struct usb_host_interface *alt = intf->cur_altsetting;
1121 int i;
1122
1123 for (i = 0; i < alt->desc.bNumEndpoints; ++i) {
1124 usb_disable_endpoint(dev,
1125 alt->endpoint[i].desc.bEndpointAddress,
1126 reset_hardware);
1127 }
1128}
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140void usb_disable_device(struct usb_device *dev, int skip_ep0)
1141{
1142 int i;
1143 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1144
1145
1146
1147
1148 if (dev->actconfig) {
1149
1150
1151
1152
1153
1154 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++)
1155 dev->actconfig->interface[i]->unregistering = 1;
1156
1157 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
1158 struct usb_interface *interface;
1159
1160
1161 interface = dev->actconfig->interface[i];
1162 if (!device_is_registered(&interface->dev))
1163 continue;
1164 dev_dbg(&dev->dev, "unregistering interface %s\n",
1165 dev_name(&interface->dev));
1166 remove_intf_ep_devs(interface);
1167 device_del(&interface->dev);
1168 }
1169
1170
1171
1172
1173 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
1174 put_device(&dev->actconfig->interface[i]->dev);
1175 dev->actconfig->interface[i] = NULL;
1176 }
1177 usb_unlocked_disable_lpm(dev);
1178 usb_disable_ltm(dev);
1179 dev->actconfig = NULL;
1180 if (dev->state == USB_STATE_CONFIGURED)
1181 usb_set_device_state(dev, USB_STATE_ADDRESS);
1182 }
1183
1184 dev_dbg(&dev->dev, "%s nuking %s URBs\n", __func__,
1185 skip_ep0 ? "non-ep0" : "all");
1186 if (hcd->driver->check_bandwidth) {
1187
1188 for (i = skip_ep0; i < 16; ++i) {
1189 usb_disable_endpoint(dev, i, false);
1190 usb_disable_endpoint(dev, i + USB_DIR_IN, false);
1191 }
1192
1193 mutex_lock(hcd->bandwidth_mutex);
1194 usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
1195 mutex_unlock(hcd->bandwidth_mutex);
1196
1197 }
1198 for (i = skip_ep0; i < 16; ++i) {
1199 usb_disable_endpoint(dev, i, true);
1200 usb_disable_endpoint(dev, i + USB_DIR_IN, true);
1201 }
1202}
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213void usb_enable_endpoint(struct usb_device *dev, struct usb_host_endpoint *ep,
1214 bool reset_ep)
1215{
1216 int epnum = usb_endpoint_num(&ep->desc);
1217 int is_out = usb_endpoint_dir_out(&ep->desc);
1218 int is_control = usb_endpoint_xfer_control(&ep->desc);
1219
1220 if (reset_ep)
1221 usb_hcd_reset_endpoint(dev, ep);
1222 if (is_out || is_control)
1223 dev->ep_out[epnum] = ep;
1224 if (!is_out || is_control)
1225 dev->ep_in[epnum] = ep;
1226 ep->enabled = 1;
1227}
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237void usb_enable_interface(struct usb_device *dev,
1238 struct usb_interface *intf, bool reset_eps)
1239{
1240 struct usb_host_interface *alt = intf->cur_altsetting;
1241 int i;
1242
1243 for (i = 0; i < alt->desc.bNumEndpoints; ++i)
1244 usb_enable_endpoint(dev, &alt->endpoint[i], reset_eps);
1245}
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280int usb_set_interface(struct usb_device *dev, int interface, int alternate)
1281{
1282 struct usb_interface *iface;
1283 struct usb_host_interface *alt;
1284 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1285 int ret;
1286 int manual = 0;
1287 unsigned int epaddr;
1288 unsigned int pipe;
1289
1290 if (dev->state == USB_STATE_SUSPENDED)
1291 return -EHOSTUNREACH;
1292
1293 iface = usb_ifnum_to_if(dev, interface);
1294 if (!iface) {
1295 dev_dbg(&dev->dev, "selecting invalid interface %d\n",
1296 interface);
1297 return -EINVAL;
1298 }
1299 if (iface->unregistering)
1300 return -ENODEV;
1301
1302 alt = usb_altnum_to_altsetting(iface, alternate);
1303 if (!alt) {
1304 dev_warn(&dev->dev, "selecting invalid altsetting %d\n",
1305 alternate);
1306 return -EINVAL;
1307 }
1308
1309
1310
1311
1312 mutex_lock(hcd->bandwidth_mutex);
1313
1314
1315
1316 if (usb_disable_lpm(dev)) {
1317 dev_err(&iface->dev, "%s Failed to disable LPM\n.", __func__);
1318 mutex_unlock(hcd->bandwidth_mutex);
1319 return -ENOMEM;
1320 }
1321 ret = usb_hcd_alloc_bandwidth(dev, NULL, iface->cur_altsetting, alt);
1322 if (ret < 0) {
1323 dev_info(&dev->dev, "Not enough bandwidth for altsetting %d\n",
1324 alternate);
1325 usb_enable_lpm(dev);
1326 mutex_unlock(hcd->bandwidth_mutex);
1327 return ret;
1328 }
1329
1330 if (dev->quirks & USB_QUIRK_NO_SET_INTF)
1331 ret = -EPIPE;
1332 else
1333 ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1334 USB_REQ_SET_INTERFACE, USB_RECIP_INTERFACE,
1335 alternate, interface, NULL, 0, 5000);
1336
1337
1338
1339
1340 if (ret == -EPIPE && iface->num_altsetting == 1) {
1341 dev_dbg(&dev->dev,
1342 "manual set_interface for iface %d, alt %d\n",
1343 interface, alternate);
1344 manual = 1;
1345 } else if (ret < 0) {
1346
1347 usb_hcd_alloc_bandwidth(dev, NULL, alt, iface->cur_altsetting);
1348 usb_enable_lpm(dev);
1349 mutex_unlock(hcd->bandwidth_mutex);
1350 return ret;
1351 }
1352 mutex_unlock(hcd->bandwidth_mutex);
1353
1354
1355
1356
1357
1358
1359
1360
1361 if (iface->cur_altsetting != alt) {
1362 remove_intf_ep_devs(iface);
1363 usb_remove_sysfs_intf_files(iface);
1364 }
1365 usb_disable_interface(dev, iface, true);
1366
1367 iface->cur_altsetting = alt;
1368
1369
1370 usb_unlocked_enable_lpm(dev);
1371
1372
1373
1374
1375
1376
1377 if (manual) {
1378 int i;
1379
1380 for (i = 0; i < alt->desc.bNumEndpoints; i++) {
1381 epaddr = alt->endpoint[i].desc.bEndpointAddress;
1382 pipe = __create_pipe(dev,
1383 USB_ENDPOINT_NUMBER_MASK & epaddr) |
1384 (usb_endpoint_out(epaddr) ?
1385 USB_DIR_OUT : USB_DIR_IN);
1386
1387 usb_clear_halt(dev, pipe);
1388 }
1389 }
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402 usb_enable_interface(dev, iface, true);
1403 if (device_is_registered(&iface->dev)) {
1404 usb_create_sysfs_intf_files(iface);
1405 create_intf_ep_devs(iface);
1406 }
1407 return 0;
1408}
1409EXPORT_SYMBOL_GPL(usb_set_interface);
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433int usb_reset_configuration(struct usb_device *dev)
1434{
1435 int i, retval;
1436 struct usb_host_config *config;
1437 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1438
1439 if (dev->state == USB_STATE_SUSPENDED)
1440 return -EHOSTUNREACH;
1441
1442
1443
1444
1445
1446
1447 for (i = 1; i < 16; ++i) {
1448 usb_disable_endpoint(dev, i, true);
1449 usb_disable_endpoint(dev, i + USB_DIR_IN, true);
1450 }
1451
1452 config = dev->actconfig;
1453 retval = 0;
1454 mutex_lock(hcd->bandwidth_mutex);
1455
1456
1457
1458 if (usb_disable_lpm(dev)) {
1459 dev_err(&dev->dev, "%s Failed to disable LPM\n.", __func__);
1460 mutex_unlock(hcd->bandwidth_mutex);
1461 return -ENOMEM;
1462 }
1463
1464 for (i = 0; i < config->desc.bNumInterfaces; i++) {
1465 struct usb_interface *intf = config->interface[i];
1466 struct usb_host_interface *alt;
1467
1468 alt = usb_altnum_to_altsetting(intf, 0);
1469 if (!alt)
1470 alt = &intf->altsetting[0];
1471 if (alt != intf->cur_altsetting)
1472 retval = usb_hcd_alloc_bandwidth(dev, NULL,
1473 intf->cur_altsetting, alt);
1474 if (retval < 0)
1475 break;
1476 }
1477
1478 if (retval < 0) {
1479reset_old_alts:
1480 for (i--; i >= 0; i--) {
1481 struct usb_interface *intf = config->interface[i];
1482 struct usb_host_interface *alt;
1483
1484 alt = usb_altnum_to_altsetting(intf, 0);
1485 if (!alt)
1486 alt = &intf->altsetting[0];
1487 if (alt != intf->cur_altsetting)
1488 usb_hcd_alloc_bandwidth(dev, NULL,
1489 alt, intf->cur_altsetting);
1490 }
1491 usb_enable_lpm(dev);
1492 mutex_unlock(hcd->bandwidth_mutex);
1493 return retval;
1494 }
1495 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1496 USB_REQ_SET_CONFIGURATION, 0,
1497 config->desc.bConfigurationValue, 0,
1498 NULL, 0, USB_CTRL_SET_TIMEOUT);
1499 if (retval < 0)
1500 goto reset_old_alts;
1501 mutex_unlock(hcd->bandwidth_mutex);
1502
1503
1504 for (i = 0; i < config->desc.bNumInterfaces; i++) {
1505 struct usb_interface *intf = config->interface[i];
1506 struct usb_host_interface *alt;
1507
1508 alt = usb_altnum_to_altsetting(intf, 0);
1509
1510
1511
1512
1513
1514
1515 if (!alt)
1516 alt = &intf->altsetting[0];
1517
1518 if (alt != intf->cur_altsetting) {
1519 remove_intf_ep_devs(intf);
1520 usb_remove_sysfs_intf_files(intf);
1521 }
1522 intf->cur_altsetting = alt;
1523 usb_enable_interface(dev, intf, true);
1524 if (device_is_registered(&intf->dev)) {
1525 usb_create_sysfs_intf_files(intf);
1526 create_intf_ep_devs(intf);
1527 }
1528 }
1529
1530 usb_unlocked_enable_lpm(dev);
1531 return 0;
1532}
1533EXPORT_SYMBOL_GPL(usb_reset_configuration);
1534
1535static void usb_release_interface(struct device *dev)
1536{
1537 struct usb_interface *intf = to_usb_interface(dev);
1538 struct usb_interface_cache *intfc =
1539 altsetting_to_usb_interface_cache(intf->altsetting);
1540
1541 kref_put(&intfc->ref, usb_release_interface_cache);
1542 kfree(intf);
1543}
1544
1545#ifdef CONFIG_HOTPLUG
1546static int usb_if_uevent(struct device *dev, struct kobj_uevent_env *env)
1547{
1548 struct usb_device *usb_dev;
1549 struct usb_interface *intf;
1550 struct usb_host_interface *alt;
1551
1552 intf = to_usb_interface(dev);
1553 usb_dev = interface_to_usbdev(intf);
1554 alt = intf->cur_altsetting;
1555
1556 if (add_uevent_var(env, "INTERFACE=%d/%d/%d",
1557 alt->desc.bInterfaceClass,
1558 alt->desc.bInterfaceSubClass,
1559 alt->desc.bInterfaceProtocol))
1560 return -ENOMEM;
1561
1562 if (add_uevent_var(env,
1563 "MODALIAS=usb:"
1564 "v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02Xin%02X",
1565 le16_to_cpu(usb_dev->descriptor.idVendor),
1566 le16_to_cpu(usb_dev->descriptor.idProduct),
1567 le16_to_cpu(usb_dev->descriptor.bcdDevice),
1568 usb_dev->descriptor.bDeviceClass,
1569 usb_dev->descriptor.bDeviceSubClass,
1570 usb_dev->descriptor.bDeviceProtocol,
1571 alt->desc.bInterfaceClass,
1572 alt->desc.bInterfaceSubClass,
1573 alt->desc.bInterfaceProtocol,
1574 alt->desc.bInterfaceNumber))
1575 return -ENOMEM;
1576
1577 return 0;
1578}
1579
1580#else
1581
1582static int usb_if_uevent(struct device *dev, struct kobj_uevent_env *env)
1583{
1584 return -ENODEV;
1585}
1586#endif
1587
1588struct device_type usb_if_device_type = {
1589 .name = "usb_interface",
1590 .release = usb_release_interface,
1591 .uevent = usb_if_uevent,
1592};
1593
1594static struct usb_interface_assoc_descriptor *find_iad(struct usb_device *dev,
1595 struct usb_host_config *config,
1596 u8 inum)
1597{
1598 struct usb_interface_assoc_descriptor *retval = NULL;
1599 struct usb_interface_assoc_descriptor *intf_assoc;
1600 int first_intf;
1601 int last_intf;
1602 int i;
1603
1604 for (i = 0; (i < USB_MAXIADS && config->intf_assoc[i]); i++) {
1605 intf_assoc = config->intf_assoc[i];
1606 if (intf_assoc->bInterfaceCount == 0)
1607 continue;
1608
1609 first_intf = intf_assoc->bFirstInterface;
1610 last_intf = first_intf + (intf_assoc->bInterfaceCount - 1);
1611 if (inum >= first_intf && inum <= last_intf) {
1612 if (!retval)
1613 retval = intf_assoc;
1614 else
1615 dev_err(&dev->dev, "Interface #%d referenced"
1616 " by multiple IADs\n", inum);
1617 }
1618 }
1619
1620 return retval;
1621}
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646static void __usb_queue_reset_device(struct work_struct *ws)
1647{
1648 int rc;
1649 struct usb_interface *iface =
1650 container_of(ws, struct usb_interface, reset_ws);
1651 struct usb_device *udev = interface_to_usbdev(iface);
1652
1653 rc = usb_lock_device_for_reset(udev, iface);
1654 if (rc >= 0) {
1655 iface->reset_running = 1;
1656 usb_reset_device(udev);
1657 iface->reset_running = 0;
1658 usb_unlock_device(udev);
1659 }
1660}
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708int usb_set_configuration(struct usb_device *dev, int configuration)
1709{
1710 int i, ret;
1711 struct usb_host_config *cp = NULL;
1712 struct usb_interface **new_interfaces = NULL;
1713 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1714 int n, nintf;
1715
1716 if (dev->authorized == 0 || configuration == -1)
1717 configuration = 0;
1718 else {
1719 for (i = 0; i < dev->descriptor.bNumConfigurations; i++) {
1720 if (dev->config[i].desc.bConfigurationValue ==
1721 configuration) {
1722 cp = &dev->config[i];
1723 break;
1724 }
1725 }
1726 }
1727 if ((!cp && configuration != 0))
1728 return -EINVAL;
1729
1730
1731
1732
1733
1734
1735 if (cp && configuration == 0)
1736 dev_warn(&dev->dev, "config 0 descriptor??\n");
1737
1738
1739
1740 n = nintf = 0;
1741 if (cp) {
1742 nintf = cp->desc.bNumInterfaces;
1743 new_interfaces = kmalloc(nintf * sizeof(*new_interfaces),
1744 GFP_NOIO);
1745 if (!new_interfaces) {
1746 dev_err(&dev->dev, "Out of memory\n");
1747 return -ENOMEM;
1748 }
1749
1750 for (; n < nintf; ++n) {
1751 new_interfaces[n] = kzalloc(
1752 sizeof(struct usb_interface),
1753 GFP_NOIO);
1754 if (!new_interfaces[n]) {
1755 dev_err(&dev->dev, "Out of memory\n");
1756 ret = -ENOMEM;
1757free_interfaces:
1758 while (--n >= 0)
1759 kfree(new_interfaces[n]);
1760 kfree(new_interfaces);
1761 return ret;
1762 }
1763 }
1764
1765 i = dev->bus_mA - cp->desc.bMaxPower * 2;
1766 if (i < 0)
1767 dev_warn(&dev->dev, "new config #%d exceeds power "
1768 "limit by %dmA\n",
1769 configuration, -i);
1770 }
1771
1772
1773 ret = usb_autoresume_device(dev);
1774 if (ret)
1775 goto free_interfaces;
1776
1777
1778
1779
1780 if (dev->state != USB_STATE_ADDRESS)
1781 usb_disable_device(dev, 1);
1782
1783
1784 cancel_async_set_config(dev);
1785
1786
1787
1788
1789
1790
1791
1792 mutex_lock(hcd->bandwidth_mutex);
1793
1794
1795
1796
1797 if (dev->actconfig && usb_disable_lpm(dev)) {
1798 dev_err(&dev->dev, "%s Failed to disable LPM\n.", __func__);
1799 mutex_unlock(hcd->bandwidth_mutex);
1800 return -ENOMEM;
1801 }
1802 ret = usb_hcd_alloc_bandwidth(dev, cp, NULL, NULL);
1803 if (ret < 0) {
1804 if (dev->actconfig)
1805 usb_enable_lpm(dev);
1806 mutex_unlock(hcd->bandwidth_mutex);
1807 usb_autosuspend_device(dev);
1808 goto free_interfaces;
1809 }
1810
1811 ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1812 USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
1813 NULL, 0, USB_CTRL_SET_TIMEOUT);
1814 if (ret < 0) {
1815
1816
1817
1818 cp = NULL;
1819 }
1820
1821 dev->actconfig = cp;
1822 if (!cp) {
1823 usb_set_device_state(dev, USB_STATE_ADDRESS);
1824 usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
1825
1826 mutex_unlock(hcd->bandwidth_mutex);
1827 usb_autosuspend_device(dev);
1828 goto free_interfaces;
1829 }
1830 mutex_unlock(hcd->bandwidth_mutex);
1831 usb_set_device_state(dev, USB_STATE_CONFIGURED);
1832
1833
1834
1835
1836 for (i = 0; i < nintf; ++i) {
1837 struct usb_interface_cache *intfc;
1838 struct usb_interface *intf;
1839 struct usb_host_interface *alt;
1840
1841 cp->interface[i] = intf = new_interfaces[i];
1842 intfc = cp->intf_cache[i];
1843 intf->altsetting = intfc->altsetting;
1844 intf->num_altsetting = intfc->num_altsetting;
1845 kref_get(&intfc->ref);
1846
1847 alt = usb_altnum_to_altsetting(intf, 0);
1848
1849
1850
1851
1852
1853
1854 if (!alt)
1855 alt = &intf->altsetting[0];
1856
1857 intf->intf_assoc =
1858 find_iad(dev, cp, alt->desc.bInterfaceNumber);
1859 intf->cur_altsetting = alt;
1860 usb_enable_interface(dev, intf, true);
1861 intf->dev.parent = &dev->dev;
1862 intf->dev.driver = NULL;
1863 intf->dev.bus = &usb_bus_type;
1864 intf->dev.type = &usb_if_device_type;
1865 intf->dev.groups = usb_interface_groups;
1866 intf->dev.dma_mask = dev->dev.dma_mask;
1867 INIT_WORK(&intf->reset_ws, __usb_queue_reset_device);
1868 intf->minor = -1;
1869 device_initialize(&intf->dev);
1870 pm_runtime_no_callbacks(&intf->dev);
1871 dev_set_name(&intf->dev, "%d-%s:%d.%d",
1872 dev->bus->busnum, dev->devpath,
1873 configuration, alt->desc.bInterfaceNumber);
1874 }
1875 kfree(new_interfaces);
1876
1877 if (cp->string == NULL &&
1878 !(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
1879 cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
1880
1881
1882 usb_unlocked_enable_lpm(dev);
1883
1884 usb_enable_ltm(dev);
1885
1886
1887
1888
1889
1890
1891
1892 for (i = 0; i < nintf; ++i) {
1893 struct usb_interface *intf = cp->interface[i];
1894
1895 dev_dbg(&dev->dev,
1896 "adding %s (config #%d, interface %d)\n",
1897 dev_name(&intf->dev), configuration,
1898 intf->cur_altsetting->desc.bInterfaceNumber);
1899 device_enable_async_suspend(&intf->dev);
1900 ret = device_add(&intf->dev);
1901 if (ret != 0) {
1902 dev_err(&dev->dev, "device_add(%s) --> %d\n",
1903 dev_name(&intf->dev), ret);
1904 continue;
1905 }
1906 create_intf_ep_devs(intf);
1907 }
1908
1909 usb_autosuspend_device(dev);
1910 return 0;
1911}
1912
1913static LIST_HEAD(set_config_list);
1914static DEFINE_SPINLOCK(set_config_lock);
1915
1916struct set_config_request {
1917 struct usb_device *udev;
1918 int config;
1919 struct work_struct work;
1920 struct list_head node;
1921};
1922
1923
1924static void driver_set_config_work(struct work_struct *work)
1925{
1926 struct set_config_request *req =
1927 container_of(work, struct set_config_request, work);
1928 struct usb_device *udev = req->udev;
1929
1930 usb_lock_device(udev);
1931 spin_lock(&set_config_lock);
1932 list_del(&req->node);
1933 spin_unlock(&set_config_lock);
1934
1935 if (req->config >= -1)
1936 usb_set_configuration(udev, req->config);
1937 usb_unlock_device(udev);
1938 usb_put_dev(udev);
1939 kfree(req);
1940}
1941
1942
1943
1944
1945static void cancel_async_set_config(struct usb_device *udev)
1946{
1947 struct set_config_request *req;
1948
1949 spin_lock(&set_config_lock);
1950 list_for_each_entry(req, &set_config_list, node) {
1951 if (req->udev == udev)
1952 req->config = -999;
1953 }
1954 spin_unlock(&set_config_lock);
1955}
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977int usb_driver_set_configuration(struct usb_device *udev, int config)
1978{
1979 struct set_config_request *req;
1980
1981 req = kmalloc(sizeof(*req), GFP_KERNEL);
1982 if (!req)
1983 return -ENOMEM;
1984 req->udev = udev;
1985 req->config = config;
1986 INIT_WORK(&req->work, driver_set_config_work);
1987
1988 spin_lock(&set_config_lock);
1989 list_add(&req->node, &set_config_list);
1990 spin_unlock(&set_config_lock);
1991
1992 usb_get_dev(udev);
1993 schedule_work(&req->work);
1994 return 0;
1995}
1996EXPORT_SYMBOL_GPL(usb_driver_set_configuration);
1997