1
2
3
4
5
6
7
8#include <linux/acpi.h>
9#include <linux/pci.h>
10#include <linux/usb.h>
11#include <linux/module.h>
12#include <linux/slab.h>
13#include <linux/mm.h>
14#include <linux/timer.h>
15#include <linux/ctype.h>
16#include <linux/nls.h>
17#include <linux/device.h>
18#include <linux/scatterlist.h>
19#include <linux/usb/cdc.h>
20#include <linux/usb/quirks.h>
21#include <linux/usb/hcd.h>
22#include <linux/usb/of.h>
23#include <asm/byteorder.h>
24
25#include "usb.h"
26
27static void cancel_async_set_config(struct usb_device *udev);
28
29struct api_context {
30 struct completion done;
31 int status;
32};
33
34static void usb_api_blocking_completion(struct urb *urb)
35{
36 struct api_context *ctx = urb->context;
37
38 ctx->status = urb->status;
39 complete(&ctx->done);
40}
41
42
43
44
45
46
47
48
49static int usb_start_wait_urb(struct urb *urb, int timeout, int *actual_length)
50{
51 struct api_context ctx;
52 unsigned long expire;
53 int retval;
54
55 init_completion(&ctx.done);
56 urb->context = &ctx;
57 urb->actual_length = 0;
58 retval = usb_submit_urb(urb, GFP_NOIO);
59 if (unlikely(retval))
60 goto out;
61
62 expire = timeout ? msecs_to_jiffies(timeout) : MAX_SCHEDULE_TIMEOUT;
63 if (!wait_for_completion_timeout(&ctx.done, expire)) {
64 usb_kill_urb(urb);
65 retval = (ctx.status == -ENOENT ? -ETIMEDOUT : ctx.status);
66
67 dev_dbg(&urb->dev->dev,
68 "%s timed out on ep%d%s len=%u/%u\n",
69 current->comm,
70 usb_endpoint_num(&urb->ep->desc),
71 usb_urb_dir_in(urb) ? "in" : "out",
72 urb->actual_length,
73 urb->transfer_buffer_length);
74 } else
75 retval = ctx.status;
76out:
77 if (actual_length)
78 *actual_length = urb->actual_length;
79
80 usb_free_urb(urb);
81 return retval;
82}
83
84
85
86static int usb_internal_control_msg(struct usb_device *usb_dev,
87 unsigned int pipe,
88 struct usb_ctrlrequest *cmd,
89 void *data, int len, int timeout)
90{
91 struct urb *urb;
92 int retv;
93 int length;
94
95 urb = usb_alloc_urb(0, GFP_NOIO);
96 if (!urb)
97 return -ENOMEM;
98
99 usb_fill_control_urb(urb, usb_dev, pipe, (unsigned char *)cmd, data,
100 len, usb_api_blocking_completion, NULL);
101
102 retv = usb_start_wait_urb(urb, timeout, &length);
103 if (retv < 0)
104 return retv;
105 else
106 return length;
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
132
133
134
135
136int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request,
137 __u8 requesttype, __u16 value, __u16 index, void *data,
138 __u16 size, int timeout)
139{
140 struct usb_ctrlrequest *dr;
141 int ret;
142
143 dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO);
144 if (!dr)
145 return -ENOMEM;
146
147 dr->bRequestType = requesttype;
148 dr->bRequest = request;
149 dr->wValue = cpu_to_le16(value);
150 dr->wIndex = cpu_to_le16(index);
151 dr->wLength = cpu_to_le16(size);
152
153 ret = usb_internal_control_msg(dev, pipe, dr, data, size, timeout);
154
155
156 if (dev->quirks & USB_QUIRK_DELAY_CTRL_MSG)
157 msleep(200);
158
159 kfree(dr);
160
161 return ret;
162}
163EXPORT_SYMBOL_GPL(usb_control_msg);
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198int usb_control_msg_send(struct usb_device *dev, __u8 endpoint, __u8 request,
199 __u8 requesttype, __u16 value, __u16 index,
200 const void *driver_data, __u16 size, int timeout,
201 gfp_t memflags)
202{
203 unsigned int pipe = usb_sndctrlpipe(dev, endpoint);
204 int ret;
205 u8 *data = NULL;
206
207 if (size) {
208 data = kmemdup(driver_data, size, memflags);
209 if (!data)
210 return -ENOMEM;
211 }
212
213 ret = usb_control_msg(dev, pipe, request, requesttype, value, index,
214 data, size, timeout);
215 kfree(data);
216
217 if (ret < 0)
218 return ret;
219
220 return 0;
221}
222EXPORT_SYMBOL_GPL(usb_control_msg_send);
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263int usb_control_msg_recv(struct usb_device *dev, __u8 endpoint, __u8 request,
264 __u8 requesttype, __u16 value, __u16 index,
265 void *driver_data, __u16 size, int timeout,
266 gfp_t memflags)
267{
268 unsigned int pipe = usb_rcvctrlpipe(dev, endpoint);
269 int ret;
270 u8 *data;
271
272 if (!size || !driver_data)
273 return -EINVAL;
274
275 data = kmalloc(size, memflags);
276 if (!data)
277 return -ENOMEM;
278
279 ret = usb_control_msg(dev, pipe, request, requesttype, value, index,
280 data, size, timeout);
281
282 if (ret < 0)
283 goto exit;
284
285 if (ret == size) {
286 memcpy(driver_data, data, size);
287 ret = 0;
288 } else {
289 ret = -EREMOTEIO;
290 }
291
292exit:
293 kfree(data);
294 return ret;
295}
296EXPORT_SYMBOL_GPL(usb_control_msg_recv);
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe,
325 void *data, int len, int *actual_length, int timeout)
326{
327 return usb_bulk_msg(usb_dev, pipe, data, len, actual_length, timeout);
328}
329EXPORT_SYMBOL_GPL(usb_interrupt_msg);
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
357
358
359
360
361
362
363int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,
364 void *data, int len, int *actual_length, int timeout)
365{
366 struct urb *urb;
367 struct usb_host_endpoint *ep;
368
369 ep = usb_pipe_endpoint(usb_dev, pipe);
370 if (!ep || len < 0)
371 return -EINVAL;
372
373 urb = usb_alloc_urb(0, GFP_KERNEL);
374 if (!urb)
375 return -ENOMEM;
376
377 if ((ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
378 USB_ENDPOINT_XFER_INT) {
379 pipe = (pipe & ~(3 << 30)) | (PIPE_INTERRUPT << 30);
380 usb_fill_int_urb(urb, usb_dev, pipe, data, len,
381 usb_api_blocking_completion, NULL,
382 ep->desc.bInterval);
383 } else
384 usb_fill_bulk_urb(urb, usb_dev, pipe, data, len,
385 usb_api_blocking_completion, NULL);
386
387 return usb_start_wait_urb(urb, timeout, actual_length);
388}
389EXPORT_SYMBOL_GPL(usb_bulk_msg);
390
391
392
393static void sg_clean(struct usb_sg_request *io)
394{
395 if (io->urbs) {
396 while (io->entries--)
397 usb_free_urb(io->urbs[io->entries]);
398 kfree(io->urbs);
399 io->urbs = NULL;
400 }
401 io->dev = NULL;
402}
403
404static void sg_complete(struct urb *urb)
405{
406 unsigned long flags;
407 struct usb_sg_request *io = urb->context;
408 int status = urb->status;
409
410 spin_lock_irqsave(&io->lock, flags);
411
412
413
414
415
416
417
418
419
420
421
422 if (io->status
423 && (io->status != -ECONNRESET
424 || status != -ECONNRESET)
425 && urb->actual_length) {
426 dev_err(io->dev->bus->controller,
427 "dev %s ep%d%s scatterlist error %d/%d\n",
428 io->dev->devpath,
429 usb_endpoint_num(&urb->ep->desc),
430 usb_urb_dir_in(urb) ? "in" : "out",
431 status, io->status);
432
433 }
434
435 if (io->status == 0 && status && status != -ECONNRESET) {
436 int i, found, retval;
437
438 io->status = status;
439
440
441
442
443
444 spin_unlock_irqrestore(&io->lock, flags);
445 for (i = 0, found = 0; i < io->entries; i++) {
446 if (!io->urbs[i])
447 continue;
448 if (found) {
449 usb_block_urb(io->urbs[i]);
450 retval = usb_unlink_urb(io->urbs[i]);
451 if (retval != -EINPROGRESS &&
452 retval != -ENODEV &&
453 retval != -EBUSY &&
454 retval != -EIDRM)
455 dev_err(&io->dev->dev,
456 "%s, unlink --> %d\n",
457 __func__, retval);
458 } else if (urb == io->urbs[i])
459 found = 1;
460 }
461 spin_lock_irqsave(&io->lock, flags);
462 }
463
464
465 io->bytes += urb->actual_length;
466 io->count--;
467 if (!io->count)
468 complete(&io->complete);
469
470 spin_unlock_irqrestore(&io->lock, flags);
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
501int usb_sg_init(struct usb_sg_request *io, struct usb_device *dev,
502 unsigned pipe, unsigned period, struct scatterlist *sg,
503 int nents, size_t length, gfp_t mem_flags)
504{
505 int i;
506 int urb_flags;
507 int use_sg;
508
509 if (!io || !dev || !sg
510 || usb_pipecontrol(pipe)
511 || usb_pipeisoc(pipe)
512 || nents <= 0)
513 return -EINVAL;
514
515 spin_lock_init(&io->lock);
516 io->dev = dev;
517 io->pipe = pipe;
518
519 if (dev->bus->sg_tablesize > 0) {
520 use_sg = true;
521 io->entries = 1;
522 } else {
523 use_sg = false;
524 io->entries = nents;
525 }
526
527
528 io->urbs = kmalloc_array(io->entries, sizeof(*io->urbs), mem_flags);
529 if (!io->urbs)
530 goto nomem;
531
532 urb_flags = URB_NO_INTERRUPT;
533 if (usb_pipein(pipe))
534 urb_flags |= URB_SHORT_NOT_OK;
535
536 for_each_sg(sg, sg, io->entries, i) {
537 struct urb *urb;
538 unsigned len;
539
540 urb = usb_alloc_urb(0, mem_flags);
541 if (!urb) {
542 io->entries = i;
543 goto nomem;
544 }
545 io->urbs[i] = urb;
546
547 urb->dev = NULL;
548 urb->pipe = pipe;
549 urb->interval = period;
550 urb->transfer_flags = urb_flags;
551 urb->complete = sg_complete;
552 urb->context = io;
553 urb->sg = sg;
554
555 if (use_sg) {
556
557 urb->transfer_buffer = NULL;
558 urb->num_sgs = nents;
559
560
561 len = length;
562 if (len == 0) {
563 struct scatterlist *sg2;
564 int j;
565
566 for_each_sg(sg, sg2, nents, j)
567 len += sg2->length;
568 }
569 } else {
570
571
572
573
574
575 if (!PageHighMem(sg_page(sg)))
576 urb->transfer_buffer = sg_virt(sg);
577 else
578 urb->transfer_buffer = NULL;
579
580 len = sg->length;
581 if (length) {
582 len = min_t(size_t, len, length);
583 length -= len;
584 if (length == 0)
585 io->entries = i + 1;
586 }
587 }
588 urb->transfer_buffer_length = len;
589 }
590 io->urbs[--i]->transfer_flags &= ~URB_NO_INTERRUPT;
591
592
593 io->count = io->entries;
594 io->status = 0;
595 io->bytes = 0;
596 init_completion(&io->complete);
597 return 0;
598
599nomem:
600 sg_clean(io);
601 return -ENOMEM;
602}
603EXPORT_SYMBOL_GPL(usb_sg_init);
604
605
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
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650void usb_sg_wait(struct usb_sg_request *io)
651{
652 int i;
653 int entries = io->entries;
654
655
656 spin_lock_irq(&io->lock);
657 i = 0;
658 while (i < entries && !io->status) {
659 int retval;
660
661 io->urbs[i]->dev = io->dev;
662 spin_unlock_irq(&io->lock);
663
664 retval = usb_submit_urb(io->urbs[i], GFP_NOIO);
665
666 switch (retval) {
667
668 case -ENXIO:
669 case -EAGAIN:
670 case -ENOMEM:
671 retval = 0;
672 yield();
673 break;
674
675
676
677
678
679
680
681 case 0:
682 ++i;
683 cpu_relax();
684 break;
685
686
687 default:
688 io->urbs[i]->status = retval;
689 dev_dbg(&io->dev->dev, "%s, submit --> %d\n",
690 __func__, retval);
691 usb_sg_cancel(io);
692 }
693 spin_lock_irq(&io->lock);
694 if (retval && (io->status == 0 || io->status == -ECONNRESET))
695 io->status = retval;
696 }
697 io->count -= entries - i;
698 if (io->count == 0)
699 complete(&io->complete);
700 spin_unlock_irq(&io->lock);
701
702
703
704
705
706 wait_for_completion(&io->complete);
707
708 sg_clean(io);
709}
710EXPORT_SYMBOL_GPL(usb_sg_wait);
711
712
713
714
715
716
717
718
719
720void usb_sg_cancel(struct usb_sg_request *io)
721{
722 unsigned long flags;
723 int i, retval;
724
725 spin_lock_irqsave(&io->lock, flags);
726 if (io->status || io->count == 0) {
727 spin_unlock_irqrestore(&io->lock, flags);
728 return;
729 }
730
731 io->status = -ECONNRESET;
732 io->count++;
733 spin_unlock_irqrestore(&io->lock, flags);
734
735 for (i = io->entries - 1; i >= 0; --i) {
736 usb_block_urb(io->urbs[i]);
737
738 retval = usb_unlink_urb(io->urbs[i]);
739 if (retval != -EINPROGRESS
740 && retval != -ENODEV
741 && retval != -EBUSY
742 && retval != -EIDRM)
743 dev_warn(&io->dev->dev, "%s, unlink --> %d\n",
744 __func__, retval);
745 }
746
747 spin_lock_irqsave(&io->lock, flags);
748 io->count--;
749 if (!io->count)
750 complete(&io->complete);
751 spin_unlock_irqrestore(&io->lock, flags);
752}
753EXPORT_SYMBOL_GPL(usb_sg_cancel);
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780int usb_get_descriptor(struct usb_device *dev, unsigned char type,
781 unsigned char index, void *buf, int size)
782{
783 int i;
784 int result;
785
786 if (size <= 0)
787 return -EINVAL;
788
789 memset(buf, 0, size);
790
791 for (i = 0; i < 3; ++i) {
792
793 result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
794 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,
795 (type << 8) + index, 0, buf, size,
796 USB_CTRL_GET_TIMEOUT);
797 if (result <= 0 && result != -ETIMEDOUT)
798 continue;
799 if (result > 1 && ((u8 *)buf)[1] != type) {
800 result = -ENODATA;
801 continue;
802 }
803 break;
804 }
805 return result;
806}
807EXPORT_SYMBOL_GPL(usb_get_descriptor);
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832static int usb_get_string(struct usb_device *dev, unsigned short langid,
833 unsigned char index, void *buf, int size)
834{
835 int i;
836 int result;
837
838 if (size <= 0)
839 return -EINVAL;
840
841 for (i = 0; i < 3; ++i) {
842
843 result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
844 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,
845 (USB_DT_STRING << 8) + index, langid, buf, size,
846 USB_CTRL_GET_TIMEOUT);
847 if (result == 0 || result == -EPIPE)
848 continue;
849 if (result > 1 && ((u8 *) buf)[1] != USB_DT_STRING) {
850 result = -ENODATA;
851 continue;
852 }
853 break;
854 }
855 return result;
856}
857
858static void usb_try_string_workarounds(unsigned char *buf, int *length)
859{
860 int newlength, oldlength = *length;
861
862 for (newlength = 2; newlength + 1 < oldlength; newlength += 2)
863 if (!isprint(buf[newlength]) || buf[newlength + 1])
864 break;
865
866 if (newlength > 2) {
867 buf[0] = newlength;
868 *length = newlength;
869 }
870}
871
872static int usb_string_sub(struct usb_device *dev, unsigned int langid,
873 unsigned int index, unsigned char *buf)
874{
875 int rc;
876
877
878
879 if (dev->quirks & USB_QUIRK_STRING_FETCH_255)
880 rc = -EIO;
881 else
882 rc = usb_get_string(dev, langid, index, buf, 255);
883
884
885
886 if (rc < 2) {
887 rc = usb_get_string(dev, langid, index, buf, 2);
888 if (rc == 2)
889 rc = usb_get_string(dev, langid, index, buf, buf[0]);
890 }
891
892 if (rc >= 2) {
893 if (!buf[0] && !buf[1])
894 usb_try_string_workarounds(buf, &rc);
895
896
897 if (buf[0] < rc)
898 rc = buf[0];
899
900 rc = rc - (rc & 1);
901 }
902
903 if (rc < 2)
904 rc = (rc < 0 ? rc : -EINVAL);
905
906 return rc;
907}
908
909static int usb_get_langid(struct usb_device *dev, unsigned char *tbuf)
910{
911 int err;
912
913 if (dev->have_langid)
914 return 0;
915
916 if (dev->string_langid < 0)
917 return -EPIPE;
918
919 err = usb_string_sub(dev, 0, 0, tbuf);
920
921
922
923 if (err == -ENODATA || (err > 0 && err < 4)) {
924 dev->string_langid = 0x0409;
925 dev->have_langid = 1;
926 dev_err(&dev->dev,
927 "language id specifier not provided by device, defaulting to English\n");
928 return 0;
929 }
930
931
932
933
934 if (err < 0) {
935 dev_info(&dev->dev, "string descriptor 0 read error: %d\n",
936 err);
937 dev->string_langid = -1;
938 return -EPIPE;
939 }
940
941
942 dev->string_langid = tbuf[2] | (tbuf[3] << 8);
943 dev->have_langid = 1;
944 dev_dbg(&dev->dev, "default language 0x%04x\n",
945 dev->string_langid);
946 return 0;
947}
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967int usb_string(struct usb_device *dev, int index, char *buf, size_t size)
968{
969 unsigned char *tbuf;
970 int err;
971
972 if (dev->state == USB_STATE_SUSPENDED)
973 return -EHOSTUNREACH;
974 if (size <= 0 || !buf)
975 return -EINVAL;
976 buf[0] = 0;
977 if (index <= 0 || index >= 256)
978 return -EINVAL;
979 tbuf = kmalloc(256, GFP_NOIO);
980 if (!tbuf)
981 return -ENOMEM;
982
983 err = usb_get_langid(dev, tbuf);
984 if (err < 0)
985 goto errout;
986
987 err = usb_string_sub(dev, dev->string_langid, index, tbuf);
988 if (err < 0)
989 goto errout;
990
991 size--;
992 err = utf16s_to_utf8s((wchar_t *) &tbuf[2], (err - 2) / 2,
993 UTF16_LITTLE_ENDIAN, buf, size);
994 buf[err] = 0;
995
996 if (tbuf[1] != USB_DT_STRING)
997 dev_dbg(&dev->dev,
998 "wrong descriptor type %02x for string %d (\"%s\")\n",
999 tbuf[1], index, buf);
1000
1001 errout:
1002 kfree(tbuf);
1003 return err;
1004}
1005EXPORT_SYMBOL_GPL(usb_string);
1006
1007
1008#define MAX_USB_STRING_SIZE (127 * 3 + 1)
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018char *usb_cache_string(struct usb_device *udev, int index)
1019{
1020 char *buf;
1021 char *smallbuf = NULL;
1022 int len;
1023
1024 if (index <= 0)
1025 return NULL;
1026
1027 buf = kmalloc(MAX_USB_STRING_SIZE, GFP_NOIO);
1028 if (buf) {
1029 len = usb_string(udev, index, buf, MAX_USB_STRING_SIZE);
1030 if (len > 0) {
1031 smallbuf = kmalloc(++len, GFP_NOIO);
1032 if (!smallbuf)
1033 return buf;
1034 memcpy(smallbuf, buf, len);
1035 }
1036 kfree(buf);
1037 }
1038 return smallbuf;
1039}
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060int usb_get_device_descriptor(struct usb_device *dev, unsigned int size)
1061{
1062 struct usb_device_descriptor *desc;
1063 int ret;
1064
1065 if (size > sizeof(*desc))
1066 return -EINVAL;
1067 desc = kmalloc(sizeof(*desc), GFP_NOIO);
1068 if (!desc)
1069 return -ENOMEM;
1070
1071 ret = usb_get_descriptor(dev, USB_DT_DEVICE, 0, desc, size);
1072 if (ret >= 0)
1073 memcpy(&dev->descriptor, desc, size);
1074 kfree(desc);
1075 return ret;
1076}
1077
1078
1079
1080
1081
1082
1083
1084
1085int usb_set_isoch_delay(struct usb_device *dev)
1086{
1087
1088 if (dev->descriptor.bDeviceClass == USB_CLASS_HUB)
1089 return 0;
1090
1091
1092 if (dev->speed < USB_SPEED_SUPER)
1093 return 0;
1094
1095 return usb_control_msg_send(dev, 0,
1096 USB_REQ_SET_ISOCH_DELAY,
1097 USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_DEVICE,
1098 dev->hub_delay, 0, NULL, 0,
1099 USB_CTRL_SET_TIMEOUT,
1100 GFP_NOIO);
1101}
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127int usb_get_status(struct usb_device *dev, int recip, int type, int target,
1128 void *data)
1129{
1130 int ret;
1131 void *status;
1132 int length;
1133
1134 switch (type) {
1135 case USB_STATUS_TYPE_STANDARD:
1136 length = 2;
1137 break;
1138 case USB_STATUS_TYPE_PTM:
1139 if (recip != USB_RECIP_DEVICE)
1140 return -EINVAL;
1141
1142 length = 4;
1143 break;
1144 default:
1145 return -EINVAL;
1146 }
1147
1148 status = kmalloc(length, GFP_KERNEL);
1149 if (!status)
1150 return -ENOMEM;
1151
1152 ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
1153 USB_REQ_GET_STATUS, USB_DIR_IN | recip, USB_STATUS_TYPE_STANDARD,
1154 target, status, length, USB_CTRL_GET_TIMEOUT);
1155
1156 switch (ret) {
1157 case 4:
1158 if (type != USB_STATUS_TYPE_PTM) {
1159 ret = -EIO;
1160 break;
1161 }
1162
1163 *(u32 *) data = le32_to_cpu(*(__le32 *) status);
1164 ret = 0;
1165 break;
1166 case 2:
1167 if (type != USB_STATUS_TYPE_STANDARD) {
1168 ret = -EIO;
1169 break;
1170 }
1171
1172 *(u16 *) data = le16_to_cpu(*(__le16 *) status);
1173 ret = 0;
1174 break;
1175 default:
1176 ret = -EIO;
1177 }
1178
1179 kfree(status);
1180 return ret;
1181}
1182EXPORT_SYMBOL_GPL(usb_get_status);
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208int usb_clear_halt(struct usb_device *dev, int pipe)
1209{
1210 int result;
1211 int endp = usb_pipeendpoint(pipe);
1212
1213 if (usb_pipein(pipe))
1214 endp |= USB_DIR_IN;
1215
1216
1217
1218
1219
1220 result = usb_control_msg_send(dev, 0,
1221 USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT,
1222 USB_ENDPOINT_HALT, endp, NULL, 0,
1223 USB_CTRL_SET_TIMEOUT, GFP_NOIO);
1224
1225
1226 if (result)
1227 return result;
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237 usb_reset_endpoint(dev, endp);
1238
1239 return 0;
1240}
1241EXPORT_SYMBOL_GPL(usb_clear_halt);
1242
1243static int create_intf_ep_devs(struct usb_interface *intf)
1244{
1245 struct usb_device *udev = interface_to_usbdev(intf);
1246 struct usb_host_interface *alt = intf->cur_altsetting;
1247 int i;
1248
1249 if (intf->ep_devs_created || intf->unregistering)
1250 return 0;
1251
1252 for (i = 0; i < alt->desc.bNumEndpoints; ++i)
1253 (void) usb_create_ep_devs(&intf->dev, &alt->endpoint[i], udev);
1254 intf->ep_devs_created = 1;
1255 return 0;
1256}
1257
1258static void remove_intf_ep_devs(struct usb_interface *intf)
1259{
1260 struct usb_host_interface *alt = intf->cur_altsetting;
1261 int i;
1262
1263 if (!intf->ep_devs_created)
1264 return;
1265
1266 for (i = 0; i < alt->desc.bNumEndpoints; ++i)
1267 usb_remove_ep_devs(&alt->endpoint[i]);
1268 intf->ep_devs_created = 0;
1269}
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283void usb_disable_endpoint(struct usb_device *dev, unsigned int epaddr,
1284 bool reset_hardware)
1285{
1286 unsigned int epnum = epaddr & USB_ENDPOINT_NUMBER_MASK;
1287 struct usb_host_endpoint *ep;
1288
1289 if (!dev)
1290 return;
1291
1292 if (usb_endpoint_out(epaddr)) {
1293 ep = dev->ep_out[epnum];
1294 if (reset_hardware && epnum != 0)
1295 dev->ep_out[epnum] = NULL;
1296 } else {
1297 ep = dev->ep_in[epnum];
1298 if (reset_hardware && epnum != 0)
1299 dev->ep_in[epnum] = NULL;
1300 }
1301 if (ep) {
1302 ep->enabled = 0;
1303 usb_hcd_flush_endpoint(dev, ep);
1304 if (reset_hardware)
1305 usb_hcd_disable_endpoint(dev, ep);
1306 }
1307}
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318void usb_reset_endpoint(struct usb_device *dev, unsigned int epaddr)
1319{
1320 unsigned int epnum = epaddr & USB_ENDPOINT_NUMBER_MASK;
1321 struct usb_host_endpoint *ep;
1322
1323 if (usb_endpoint_out(epaddr))
1324 ep = dev->ep_out[epnum];
1325 else
1326 ep = dev->ep_in[epnum];
1327 if (ep)
1328 usb_hcd_reset_endpoint(dev, ep);
1329}
1330EXPORT_SYMBOL_GPL(usb_reset_endpoint);
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342void usb_disable_interface(struct usb_device *dev, struct usb_interface *intf,
1343 bool reset_hardware)
1344{
1345 struct usb_host_interface *alt = intf->cur_altsetting;
1346 int i;
1347
1348 for (i = 0; i < alt->desc.bNumEndpoints; ++i) {
1349 usb_disable_endpoint(dev,
1350 alt->endpoint[i].desc.bEndpointAddress,
1351 reset_hardware);
1352 }
1353}
1354
1355
1356
1357
1358
1359
1360static void usb_disable_device_endpoints(struct usb_device *dev, int skip_ep0)
1361{
1362 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1363 int i;
1364
1365 if (hcd->driver->check_bandwidth) {
1366
1367 for (i = skip_ep0; i < 16; ++i) {
1368 usb_disable_endpoint(dev, i, false);
1369 usb_disable_endpoint(dev, i + USB_DIR_IN, false);
1370 }
1371
1372 mutex_lock(hcd->bandwidth_mutex);
1373 usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
1374 mutex_unlock(hcd->bandwidth_mutex);
1375 }
1376
1377 for (i = skip_ep0; i < 16; ++i) {
1378 usb_disable_endpoint(dev, i, true);
1379 usb_disable_endpoint(dev, i + USB_DIR_IN, true);
1380 }
1381}
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393void usb_disable_device(struct usb_device *dev, int skip_ep0)
1394{
1395 int i;
1396
1397
1398
1399
1400 if (dev->actconfig) {
1401
1402
1403
1404
1405
1406 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++)
1407 dev->actconfig->interface[i]->unregistering = 1;
1408
1409 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
1410 struct usb_interface *interface;
1411
1412
1413 interface = dev->actconfig->interface[i];
1414 if (!device_is_registered(&interface->dev))
1415 continue;
1416 dev_dbg(&dev->dev, "unregistering interface %s\n",
1417 dev_name(&interface->dev));
1418 remove_intf_ep_devs(interface);
1419 device_del(&interface->dev);
1420 }
1421
1422
1423
1424
1425 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
1426 put_device(&dev->actconfig->interface[i]->dev);
1427 dev->actconfig->interface[i] = NULL;
1428 }
1429
1430 usb_disable_usb2_hardware_lpm(dev);
1431 usb_unlocked_disable_lpm(dev);
1432 usb_disable_ltm(dev);
1433
1434 dev->actconfig = NULL;
1435 if (dev->state == USB_STATE_CONFIGURED)
1436 usb_set_device_state(dev, USB_STATE_ADDRESS);
1437 }
1438
1439 dev_dbg(&dev->dev, "%s nuking %s URBs\n", __func__,
1440 skip_ep0 ? "non-ep0" : "all");
1441
1442 usb_disable_device_endpoints(dev, skip_ep0);
1443}
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454void usb_enable_endpoint(struct usb_device *dev, struct usb_host_endpoint *ep,
1455 bool reset_ep)
1456{
1457 int epnum = usb_endpoint_num(&ep->desc);
1458 int is_out = usb_endpoint_dir_out(&ep->desc);
1459 int is_control = usb_endpoint_xfer_control(&ep->desc);
1460
1461 if (reset_ep)
1462 usb_hcd_reset_endpoint(dev, ep);
1463 if (is_out || is_control)
1464 dev->ep_out[epnum] = ep;
1465 if (!is_out || is_control)
1466 dev->ep_in[epnum] = ep;
1467 ep->enabled = 1;
1468}
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478void usb_enable_interface(struct usb_device *dev,
1479 struct usb_interface *intf, bool reset_eps)
1480{
1481 struct usb_host_interface *alt = intf->cur_altsetting;
1482 int i;
1483
1484 for (i = 0; i < alt->desc.bNumEndpoints; ++i)
1485 usb_enable_endpoint(dev, &alt->endpoint[i], reset_eps);
1486}
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527int usb_set_interface(struct usb_device *dev, int interface, int alternate)
1528{
1529 struct usb_interface *iface;
1530 struct usb_host_interface *alt;
1531 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1532 int i, ret, manual = 0;
1533 unsigned int epaddr;
1534 unsigned int pipe;
1535
1536 if (dev->state == USB_STATE_SUSPENDED)
1537 return -EHOSTUNREACH;
1538
1539 iface = usb_ifnum_to_if(dev, interface);
1540 if (!iface) {
1541 dev_dbg(&dev->dev, "selecting invalid interface %d\n",
1542 interface);
1543 return -EINVAL;
1544 }
1545 if (iface->unregistering)
1546 return -ENODEV;
1547
1548 alt = usb_altnum_to_altsetting(iface, alternate);
1549 if (!alt) {
1550 dev_warn(&dev->dev, "selecting invalid altsetting %d\n",
1551 alternate);
1552 return -EINVAL;
1553 }
1554
1555
1556
1557
1558
1559 usb_disable_interface(dev, iface, false);
1560
1561
1562
1563
1564 mutex_lock(hcd->bandwidth_mutex);
1565
1566
1567
1568 if (usb_disable_lpm(dev)) {
1569 dev_err(&iface->dev, "%s Failed to disable LPM\n", __func__);
1570 mutex_unlock(hcd->bandwidth_mutex);
1571 return -ENOMEM;
1572 }
1573
1574 for (i = 0; i < iface->cur_altsetting->desc.bNumEndpoints; i++)
1575 iface->cur_altsetting->endpoint[i].streams = 0;
1576
1577 ret = usb_hcd_alloc_bandwidth(dev, NULL, iface->cur_altsetting, alt);
1578 if (ret < 0) {
1579 dev_info(&dev->dev, "Not enough bandwidth for altsetting %d\n",
1580 alternate);
1581 usb_enable_lpm(dev);
1582 mutex_unlock(hcd->bandwidth_mutex);
1583 return ret;
1584 }
1585
1586 if (dev->quirks & USB_QUIRK_NO_SET_INTF)
1587 ret = -EPIPE;
1588 else
1589 ret = usb_control_msg_send(dev, 0,
1590 USB_REQ_SET_INTERFACE,
1591 USB_RECIP_INTERFACE, alternate,
1592 interface, NULL, 0, 5000,
1593 GFP_NOIO);
1594
1595
1596
1597
1598 if (ret == -EPIPE && iface->num_altsetting == 1) {
1599 dev_dbg(&dev->dev,
1600 "manual set_interface for iface %d, alt %d\n",
1601 interface, alternate);
1602 manual = 1;
1603 } else if (ret) {
1604
1605 usb_hcd_alloc_bandwidth(dev, NULL, alt, iface->cur_altsetting);
1606 usb_enable_lpm(dev);
1607 mutex_unlock(hcd->bandwidth_mutex);
1608 return ret;
1609 }
1610 mutex_unlock(hcd->bandwidth_mutex);
1611
1612
1613
1614
1615
1616
1617
1618
1619 if (iface->cur_altsetting != alt) {
1620 remove_intf_ep_devs(iface);
1621 usb_remove_sysfs_intf_files(iface);
1622 }
1623 usb_disable_interface(dev, iface, true);
1624
1625 iface->cur_altsetting = alt;
1626
1627
1628 usb_unlocked_enable_lpm(dev);
1629
1630
1631
1632
1633
1634
1635 if (manual) {
1636 for (i = 0; i < alt->desc.bNumEndpoints; i++) {
1637 epaddr = alt->endpoint[i].desc.bEndpointAddress;
1638 pipe = __create_pipe(dev,
1639 USB_ENDPOINT_NUMBER_MASK & epaddr) |
1640 (usb_endpoint_out(epaddr) ?
1641 USB_DIR_OUT : USB_DIR_IN);
1642
1643 usb_clear_halt(dev, pipe);
1644 }
1645 }
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658 usb_enable_interface(dev, iface, true);
1659 if (device_is_registered(&iface->dev)) {
1660 usb_create_sysfs_intf_files(iface);
1661 create_intf_ep_devs(iface);
1662 }
1663 return 0;
1664}
1665EXPORT_SYMBOL_GPL(usb_set_interface);
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
1692int usb_reset_configuration(struct usb_device *dev)
1693{
1694 int i, retval;
1695 struct usb_host_config *config;
1696 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1697
1698 if (dev->state == USB_STATE_SUSPENDED)
1699 return -EHOSTUNREACH;
1700
1701
1702
1703
1704
1705
1706 usb_disable_device_endpoints(dev, 1);
1707
1708 config = dev->actconfig;
1709 retval = 0;
1710 mutex_lock(hcd->bandwidth_mutex);
1711
1712
1713
1714 if (usb_disable_lpm(dev)) {
1715 dev_err(&dev->dev, "%s Failed to disable LPM\n", __func__);
1716 mutex_unlock(hcd->bandwidth_mutex);
1717 return -ENOMEM;
1718 }
1719
1720
1721 retval = usb_hcd_alloc_bandwidth(dev, config, NULL, NULL);
1722 if (retval < 0) {
1723 usb_enable_lpm(dev);
1724 mutex_unlock(hcd->bandwidth_mutex);
1725 return retval;
1726 }
1727 retval = usb_control_msg_send(dev, 0, USB_REQ_SET_CONFIGURATION, 0,
1728 config->desc.bConfigurationValue, 0,
1729 NULL, 0, USB_CTRL_SET_TIMEOUT,
1730 GFP_NOIO);
1731 if (retval) {
1732 usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
1733 usb_enable_lpm(dev);
1734 mutex_unlock(hcd->bandwidth_mutex);
1735 return retval;
1736 }
1737 mutex_unlock(hcd->bandwidth_mutex);
1738
1739
1740 for (i = 0; i < config->desc.bNumInterfaces; i++) {
1741 struct usb_interface *intf = config->interface[i];
1742 struct usb_host_interface *alt;
1743
1744 alt = usb_altnum_to_altsetting(intf, 0);
1745
1746
1747
1748
1749
1750
1751 if (!alt)
1752 alt = &intf->altsetting[0];
1753
1754 if (alt != intf->cur_altsetting) {
1755 remove_intf_ep_devs(intf);
1756 usb_remove_sysfs_intf_files(intf);
1757 }
1758 intf->cur_altsetting = alt;
1759 usb_enable_interface(dev, intf, true);
1760 if (device_is_registered(&intf->dev)) {
1761 usb_create_sysfs_intf_files(intf);
1762 create_intf_ep_devs(intf);
1763 }
1764 }
1765
1766 usb_unlocked_enable_lpm(dev);
1767 return 0;
1768}
1769EXPORT_SYMBOL_GPL(usb_reset_configuration);
1770
1771static void usb_release_interface(struct device *dev)
1772{
1773 struct usb_interface *intf = to_usb_interface(dev);
1774 struct usb_interface_cache *intfc =
1775 altsetting_to_usb_interface_cache(intf->altsetting);
1776
1777 kref_put(&intfc->ref, usb_release_interface_cache);
1778 usb_put_dev(interface_to_usbdev(intf));
1779 of_node_put(dev->of_node);
1780 kfree(intf);
1781}
1782
1783
1784
1785
1786
1787
1788void usb_deauthorize_interface(struct usb_interface *intf)
1789{
1790 struct device *dev = &intf->dev;
1791
1792 device_lock(dev->parent);
1793
1794 if (intf->authorized) {
1795 device_lock(dev);
1796 intf->authorized = 0;
1797 device_unlock(dev);
1798
1799 usb_forced_unbind_intf(intf);
1800 }
1801
1802 device_unlock(dev->parent);
1803}
1804
1805
1806
1807
1808
1809
1810void usb_authorize_interface(struct usb_interface *intf)
1811{
1812 struct device *dev = &intf->dev;
1813
1814 if (!intf->authorized) {
1815 device_lock(dev);
1816 intf->authorized = 1;
1817 device_unlock(dev);
1818 }
1819}
1820
1821static int usb_if_uevent(struct device *dev, struct kobj_uevent_env *env)
1822{
1823 struct usb_device *usb_dev;
1824 struct usb_interface *intf;
1825 struct usb_host_interface *alt;
1826
1827 intf = to_usb_interface(dev);
1828 usb_dev = interface_to_usbdev(intf);
1829 alt = intf->cur_altsetting;
1830
1831 if (add_uevent_var(env, "INTERFACE=%d/%d/%d",
1832 alt->desc.bInterfaceClass,
1833 alt->desc.bInterfaceSubClass,
1834 alt->desc.bInterfaceProtocol))
1835 return -ENOMEM;
1836
1837 if (add_uevent_var(env,
1838 "MODALIAS=usb:"
1839 "v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02Xin%02X",
1840 le16_to_cpu(usb_dev->descriptor.idVendor),
1841 le16_to_cpu(usb_dev->descriptor.idProduct),
1842 le16_to_cpu(usb_dev->descriptor.bcdDevice),
1843 usb_dev->descriptor.bDeviceClass,
1844 usb_dev->descriptor.bDeviceSubClass,
1845 usb_dev->descriptor.bDeviceProtocol,
1846 alt->desc.bInterfaceClass,
1847 alt->desc.bInterfaceSubClass,
1848 alt->desc.bInterfaceProtocol,
1849 alt->desc.bInterfaceNumber))
1850 return -ENOMEM;
1851
1852 return 0;
1853}
1854
1855struct device_type usb_if_device_type = {
1856 .name = "usb_interface",
1857 .release = usb_release_interface,
1858 .uevent = usb_if_uevent,
1859};
1860
1861static struct usb_interface_assoc_descriptor *find_iad(struct usb_device *dev,
1862 struct usb_host_config *config,
1863 u8 inum)
1864{
1865 struct usb_interface_assoc_descriptor *retval = NULL;
1866 struct usb_interface_assoc_descriptor *intf_assoc;
1867 int first_intf;
1868 int last_intf;
1869 int i;
1870
1871 for (i = 0; (i < USB_MAXIADS && config->intf_assoc[i]); i++) {
1872 intf_assoc = config->intf_assoc[i];
1873 if (intf_assoc->bInterfaceCount == 0)
1874 continue;
1875
1876 first_intf = intf_assoc->bFirstInterface;
1877 last_intf = first_intf + (intf_assoc->bInterfaceCount - 1);
1878 if (inum >= first_intf && inum <= last_intf) {
1879 if (!retval)
1880 retval = intf_assoc;
1881 else
1882 dev_err(&dev->dev, "Interface #%d referenced"
1883 " by multiple IADs\n", inum);
1884 }
1885 }
1886
1887 return retval;
1888}
1889
1890
1891
1892
1893
1894
1895static void __usb_queue_reset_device(struct work_struct *ws)
1896{
1897 int rc;
1898 struct usb_interface *iface =
1899 container_of(ws, struct usb_interface, reset_ws);
1900 struct usb_device *udev = interface_to_usbdev(iface);
1901
1902 rc = usb_lock_device_for_reset(udev, iface);
1903 if (rc >= 0) {
1904 usb_reset_device(udev);
1905 usb_unlock_device(udev);
1906 }
1907 usb_put_intf(iface);
1908}
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957int usb_set_configuration(struct usb_device *dev, int configuration)
1958{
1959 int i, ret;
1960 struct usb_host_config *cp = NULL;
1961 struct usb_interface **new_interfaces = NULL;
1962 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1963 int n, nintf;
1964
1965 if (dev->authorized == 0 || configuration == -1)
1966 configuration = 0;
1967 else {
1968 for (i = 0; i < dev->descriptor.bNumConfigurations; i++) {
1969 if (dev->config[i].desc.bConfigurationValue ==
1970 configuration) {
1971 cp = &dev->config[i];
1972 break;
1973 }
1974 }
1975 }
1976 if ((!cp && configuration != 0))
1977 return -EINVAL;
1978
1979
1980
1981
1982
1983
1984 if (cp && configuration == 0)
1985 dev_warn(&dev->dev, "config 0 descriptor??\n");
1986
1987
1988
1989 n = nintf = 0;
1990 if (cp) {
1991 nintf = cp->desc.bNumInterfaces;
1992 new_interfaces = kmalloc_array(nintf, sizeof(*new_interfaces),
1993 GFP_NOIO);
1994 if (!new_interfaces)
1995 return -ENOMEM;
1996
1997 for (; n < nintf; ++n) {
1998 new_interfaces[n] = kzalloc(
1999 sizeof(struct usb_interface),
2000 GFP_NOIO);
2001 if (!new_interfaces[n]) {
2002 ret = -ENOMEM;
2003free_interfaces:
2004 while (--n >= 0)
2005 kfree(new_interfaces[n]);
2006 kfree(new_interfaces);
2007 return ret;
2008 }
2009 }
2010
2011 i = dev->bus_mA - usb_get_max_power(dev, cp);
2012 if (i < 0)
2013 dev_warn(&dev->dev, "new config #%d exceeds power "
2014 "limit by %dmA\n",
2015 configuration, -i);
2016 }
2017
2018
2019 ret = usb_autoresume_device(dev);
2020 if (ret)
2021 goto free_interfaces;
2022
2023
2024
2025
2026 if (dev->state != USB_STATE_ADDRESS)
2027 usb_disable_device(dev, 1);
2028
2029
2030 cancel_async_set_config(dev);
2031
2032
2033
2034
2035
2036
2037
2038 mutex_lock(hcd->bandwidth_mutex);
2039
2040
2041
2042
2043 if (dev->actconfig && usb_disable_lpm(dev)) {
2044 dev_err(&dev->dev, "%s Failed to disable LPM\n", __func__);
2045 mutex_unlock(hcd->bandwidth_mutex);
2046 ret = -ENOMEM;
2047 goto free_interfaces;
2048 }
2049 ret = usb_hcd_alloc_bandwidth(dev, cp, NULL, NULL);
2050 if (ret < 0) {
2051 if (dev->actconfig)
2052 usb_enable_lpm(dev);
2053 mutex_unlock(hcd->bandwidth_mutex);
2054 usb_autosuspend_device(dev);
2055 goto free_interfaces;
2056 }
2057
2058
2059
2060
2061
2062 for (i = 0; i < nintf; ++i) {
2063 struct usb_interface_cache *intfc;
2064 struct usb_interface *intf;
2065 struct usb_host_interface *alt;
2066 u8 ifnum;
2067
2068 cp->interface[i] = intf = new_interfaces[i];
2069 intfc = cp->intf_cache[i];
2070 intf->altsetting = intfc->altsetting;
2071 intf->num_altsetting = intfc->num_altsetting;
2072 intf->authorized = !!HCD_INTF_AUTHORIZED(hcd);
2073 kref_get(&intfc->ref);
2074
2075 alt = usb_altnum_to_altsetting(intf, 0);
2076
2077
2078
2079
2080
2081
2082 if (!alt)
2083 alt = &intf->altsetting[0];
2084
2085 ifnum = alt->desc.bInterfaceNumber;
2086 intf->intf_assoc = find_iad(dev, cp, ifnum);
2087 intf->cur_altsetting = alt;
2088 usb_enable_interface(dev, intf, true);
2089 intf->dev.parent = &dev->dev;
2090 if (usb_of_has_combined_node(dev)) {
2091 device_set_of_node_from_dev(&intf->dev, &dev->dev);
2092 } else {
2093 intf->dev.of_node = usb_of_get_interface_node(dev,
2094 configuration, ifnum);
2095 }
2096 ACPI_COMPANION_SET(&intf->dev, ACPI_COMPANION(&dev->dev));
2097 intf->dev.driver = NULL;
2098 intf->dev.bus = &usb_bus_type;
2099 intf->dev.type = &usb_if_device_type;
2100 intf->dev.groups = usb_interface_groups;
2101 INIT_WORK(&intf->reset_ws, __usb_queue_reset_device);
2102 intf->minor = -1;
2103 device_initialize(&intf->dev);
2104 pm_runtime_no_callbacks(&intf->dev);
2105 dev_set_name(&intf->dev, "%d-%s:%d.%d", dev->bus->busnum,
2106 dev->devpath, configuration, ifnum);
2107 usb_get_dev(dev);
2108 }
2109 kfree(new_interfaces);
2110
2111 ret = usb_control_msg_send(dev, 0, USB_REQ_SET_CONFIGURATION, 0,
2112 configuration, 0, NULL, 0,
2113 USB_CTRL_SET_TIMEOUT, GFP_NOIO);
2114 if (ret && cp) {
2115
2116
2117
2118
2119 usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
2120 for (i = 0; i < nintf; ++i) {
2121 usb_disable_interface(dev, cp->interface[i], true);
2122 put_device(&cp->interface[i]->dev);
2123 cp->interface[i] = NULL;
2124 }
2125 cp = NULL;
2126 }
2127
2128 dev->actconfig = cp;
2129 mutex_unlock(hcd->bandwidth_mutex);
2130
2131 if (!cp) {
2132 usb_set_device_state(dev, USB_STATE_ADDRESS);
2133
2134
2135 usb_autosuspend_device(dev);
2136 return ret;
2137 }
2138 usb_set_device_state(dev, USB_STATE_CONFIGURED);
2139
2140 if (cp->string == NULL &&
2141 !(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
2142 cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
2143
2144
2145 usb_unlocked_enable_lpm(dev);
2146
2147 usb_enable_ltm(dev);
2148
2149
2150
2151
2152
2153
2154
2155 for (i = 0; i < nintf; ++i) {
2156 struct usb_interface *intf = cp->interface[i];
2157
2158 if (intf->dev.of_node &&
2159 !of_device_is_available(intf->dev.of_node)) {
2160 dev_info(&dev->dev, "skipping disabled interface %d\n",
2161 intf->cur_altsetting->desc.bInterfaceNumber);
2162 continue;
2163 }
2164
2165 dev_dbg(&dev->dev,
2166 "adding %s (config #%d, interface %d)\n",
2167 dev_name(&intf->dev), configuration,
2168 intf->cur_altsetting->desc.bInterfaceNumber);
2169 device_enable_async_suspend(&intf->dev);
2170 ret = device_add(&intf->dev);
2171 if (ret != 0) {
2172 dev_err(&dev->dev, "device_add(%s) --> %d\n",
2173 dev_name(&intf->dev), ret);
2174 continue;
2175 }
2176 create_intf_ep_devs(intf);
2177 }
2178
2179 usb_autosuspend_device(dev);
2180 return 0;
2181}
2182EXPORT_SYMBOL_GPL(usb_set_configuration);
2183
2184static LIST_HEAD(set_config_list);
2185static DEFINE_SPINLOCK(set_config_lock);
2186
2187struct set_config_request {
2188 struct usb_device *udev;
2189 int config;
2190 struct work_struct work;
2191 struct list_head node;
2192};
2193
2194
2195static void driver_set_config_work(struct work_struct *work)
2196{
2197 struct set_config_request *req =
2198 container_of(work, struct set_config_request, work);
2199 struct usb_device *udev = req->udev;
2200
2201 usb_lock_device(udev);
2202 spin_lock(&set_config_lock);
2203 list_del(&req->node);
2204 spin_unlock(&set_config_lock);
2205
2206 if (req->config >= -1)
2207 usb_set_configuration(udev, req->config);
2208 usb_unlock_device(udev);
2209 usb_put_dev(udev);
2210 kfree(req);
2211}
2212
2213
2214
2215
2216static void cancel_async_set_config(struct usb_device *udev)
2217{
2218 struct set_config_request *req;
2219
2220 spin_lock(&set_config_lock);
2221 list_for_each_entry(req, &set_config_list, node) {
2222 if (req->udev == udev)
2223 req->config = -999;
2224 }
2225 spin_unlock(&set_config_lock);
2226}
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248int usb_driver_set_configuration(struct usb_device *udev, int config)
2249{
2250 struct set_config_request *req;
2251
2252 req = kmalloc(sizeof(*req), GFP_KERNEL);
2253 if (!req)
2254 return -ENOMEM;
2255 req->udev = udev;
2256 req->config = config;
2257 INIT_WORK(&req->work, driver_set_config_work);
2258
2259 spin_lock(&set_config_lock);
2260 list_add(&req->node, &set_config_list);
2261 spin_unlock(&set_config_lock);
2262
2263 usb_get_dev(udev);
2264 schedule_work(&req->work);
2265 return 0;
2266}
2267EXPORT_SYMBOL_GPL(usb_driver_set_configuration);
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284int cdc_parse_cdc_header(struct usb_cdc_parsed_header *hdr,
2285 struct usb_interface *intf,
2286 u8 *buffer,
2287 int buflen)
2288{
2289
2290 struct usb_cdc_union_desc *union_header = NULL;
2291
2292
2293 struct usb_cdc_header_desc *header = NULL;
2294 struct usb_cdc_ether_desc *ether = NULL;
2295 struct usb_cdc_mdlm_detail_desc *detail = NULL;
2296 struct usb_cdc_mdlm_desc *desc = NULL;
2297
2298 unsigned int elength;
2299 int cnt = 0;
2300
2301 memset(hdr, 0x00, sizeof(struct usb_cdc_parsed_header));
2302 hdr->phonet_magic_present = false;
2303 while (buflen > 0) {
2304 elength = buffer[0];
2305 if (!elength) {
2306 dev_err(&intf->dev, "skipping garbage byte\n");
2307 elength = 1;
2308 goto next_desc;
2309 }
2310 if ((buflen < elength) || (elength < 3)) {
2311 dev_err(&intf->dev, "invalid descriptor buffer length\n");
2312 break;
2313 }
2314 if (buffer[1] != USB_DT_CS_INTERFACE) {
2315 dev_err(&intf->dev, "skipping garbage\n");
2316 goto next_desc;
2317 }
2318
2319 switch (buffer[2]) {
2320 case USB_CDC_UNION_TYPE:
2321 if (elength < sizeof(struct usb_cdc_union_desc))
2322 goto next_desc;
2323 if (union_header) {
2324 dev_err(&intf->dev, "More than one union descriptor, skipping ...\n");
2325 goto next_desc;
2326 }
2327 union_header = (struct usb_cdc_union_desc *)buffer;
2328 break;
2329 case USB_CDC_COUNTRY_TYPE:
2330 if (elength < sizeof(struct usb_cdc_country_functional_desc))
2331 goto next_desc;
2332 hdr->usb_cdc_country_functional_desc =
2333 (struct usb_cdc_country_functional_desc *)buffer;
2334 break;
2335 case USB_CDC_HEADER_TYPE:
2336 if (elength != sizeof(struct usb_cdc_header_desc))
2337 goto next_desc;
2338 if (header)
2339 return -EINVAL;
2340 header = (struct usb_cdc_header_desc *)buffer;
2341 break;
2342 case USB_CDC_ACM_TYPE:
2343 if (elength < sizeof(struct usb_cdc_acm_descriptor))
2344 goto next_desc;
2345 hdr->usb_cdc_acm_descriptor =
2346 (struct usb_cdc_acm_descriptor *)buffer;
2347 break;
2348 case USB_CDC_ETHERNET_TYPE:
2349 if (elength != sizeof(struct usb_cdc_ether_desc))
2350 goto next_desc;
2351 if (ether)
2352 return -EINVAL;
2353 ether = (struct usb_cdc_ether_desc *)buffer;
2354 break;
2355 case USB_CDC_CALL_MANAGEMENT_TYPE:
2356 if (elength < sizeof(struct usb_cdc_call_mgmt_descriptor))
2357 goto next_desc;
2358 hdr->usb_cdc_call_mgmt_descriptor =
2359 (struct usb_cdc_call_mgmt_descriptor *)buffer;
2360 break;
2361 case USB_CDC_DMM_TYPE:
2362 if (elength < sizeof(struct usb_cdc_dmm_desc))
2363 goto next_desc;
2364 hdr->usb_cdc_dmm_desc =
2365 (struct usb_cdc_dmm_desc *)buffer;
2366 break;
2367 case USB_CDC_MDLM_TYPE:
2368 if (elength < sizeof(struct usb_cdc_mdlm_desc))
2369 goto next_desc;
2370 if (desc)
2371 return -EINVAL;
2372 desc = (struct usb_cdc_mdlm_desc *)buffer;
2373 break;
2374 case USB_CDC_MDLM_DETAIL_TYPE:
2375 if (elength < sizeof(struct usb_cdc_mdlm_detail_desc))
2376 goto next_desc;
2377 if (detail)
2378 return -EINVAL;
2379 detail = (struct usb_cdc_mdlm_detail_desc *)buffer;
2380 break;
2381 case USB_CDC_NCM_TYPE:
2382 if (elength < sizeof(struct usb_cdc_ncm_desc))
2383 goto next_desc;
2384 hdr->usb_cdc_ncm_desc = (struct usb_cdc_ncm_desc *)buffer;
2385 break;
2386 case USB_CDC_MBIM_TYPE:
2387 if (elength < sizeof(struct usb_cdc_mbim_desc))
2388 goto next_desc;
2389
2390 hdr->usb_cdc_mbim_desc = (struct usb_cdc_mbim_desc *)buffer;
2391 break;
2392 case USB_CDC_MBIM_EXTENDED_TYPE:
2393 if (elength < sizeof(struct usb_cdc_mbim_extended_desc))
2394 break;
2395 hdr->usb_cdc_mbim_extended_desc =
2396 (struct usb_cdc_mbim_extended_desc *)buffer;
2397 break;
2398 case CDC_PHONET_MAGIC_NUMBER:
2399 hdr->phonet_magic_present = true;
2400 break;
2401 default:
2402
2403
2404
2405
2406 dev_dbg(&intf->dev, "Ignoring descriptor: type %02x, length %ud\n",
2407 buffer[2], elength);
2408 goto next_desc;
2409 }
2410 cnt++;
2411next_desc:
2412 buflen -= elength;
2413 buffer += elength;
2414 }
2415 hdr->usb_cdc_union_desc = union_header;
2416 hdr->usb_cdc_header_desc = header;
2417 hdr->usb_cdc_mdlm_detail_desc = detail;
2418 hdr->usb_cdc_mdlm_desc = desc;
2419 hdr->usb_cdc_ether_desc = ether;
2420 return cnt;
2421}
2422
2423EXPORT_SYMBOL(cdc_parse_cdc_header);
2424