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