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