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 || !index)
824 return -EINVAL;
825 buf[0] = 0;
826 tbuf = kmalloc(256, GFP_NOIO);
827 if (!tbuf)
828 return -ENOMEM;
829
830 err = usb_get_langid(dev, tbuf);
831 if (err < 0)
832 goto errout;
833
834 err = usb_string_sub(dev, dev->string_langid, index, tbuf);
835 if (err < 0)
836 goto errout;
837
838 size--;
839 err = utf16s_to_utf8s((wchar_t *) &tbuf[2], (err - 2) / 2,
840 UTF16_LITTLE_ENDIAN, buf, size);
841 buf[err] = 0;
842
843 if (tbuf[1] != USB_DT_STRING)
844 dev_dbg(&dev->dev,
845 "wrong descriptor type %02x for string %d (\"%s\")\n",
846 tbuf[1], index, buf);
847
848 errout:
849 kfree(tbuf);
850 return err;
851}
852EXPORT_SYMBOL_GPL(usb_string);
853
854
855#define MAX_USB_STRING_SIZE (127 * 3 + 1)
856
857
858
859
860
861
862
863
864
865char *usb_cache_string(struct usb_device *udev, int index)
866{
867 char *buf;
868 char *smallbuf = NULL;
869 int len;
870
871 if (index <= 0)
872 return NULL;
873
874 buf = kmalloc(MAX_USB_STRING_SIZE, GFP_NOIO);
875 if (buf) {
876 len = usb_string(udev, index, buf, MAX_USB_STRING_SIZE);
877 if (len > 0) {
878 smallbuf = kmalloc(++len, GFP_NOIO);
879 if (!smallbuf)
880 return buf;
881 memcpy(smallbuf, buf, len);
882 }
883 kfree(buf);
884 }
885 return smallbuf;
886}
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906int usb_get_device_descriptor(struct usb_device *dev, unsigned int size)
907{
908 struct usb_device_descriptor *desc;
909 int ret;
910
911 if (size > sizeof(*desc))
912 return -EINVAL;
913 desc = kmalloc(sizeof(*desc), GFP_NOIO);
914 if (!desc)
915 return -ENOMEM;
916
917 ret = usb_get_descriptor(dev, USB_DT_DEVICE, 0, desc, size);
918 if (ret >= 0)
919 memcpy(&dev->descriptor, desc, size);
920 kfree(desc);
921 return ret;
922}
923
924
925
926
927
928
929
930
931int usb_set_isoch_delay(struct usb_device *dev)
932{
933
934 if (dev->descriptor.bDeviceClass == USB_CLASS_HUB)
935 return 0;
936
937
938 if (dev->speed < USB_SPEED_SUPER)
939 return 0;
940
941 return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
942 USB_REQ_SET_ISOCH_DELAY,
943 USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_DEVICE,
944 dev->hub_delay, 0, NULL, 0,
945 USB_CTRL_SET_TIMEOUT);
946}
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971int usb_get_status(struct usb_device *dev, int recip, int type, int target,
972 void *data)
973{
974 int ret;
975 void *status;
976 int length;
977
978 switch (type) {
979 case USB_STATUS_TYPE_STANDARD:
980 length = 2;
981 break;
982 case USB_STATUS_TYPE_PTM:
983 if (recip != USB_RECIP_DEVICE)
984 return -EINVAL;
985
986 length = 4;
987 break;
988 default:
989 return -EINVAL;
990 }
991
992 status = kmalloc(length, GFP_KERNEL);
993 if (!status)
994 return -ENOMEM;
995
996 ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
997 USB_REQ_GET_STATUS, USB_DIR_IN | recip, USB_STATUS_TYPE_STANDARD,
998 target, status, length, USB_CTRL_GET_TIMEOUT);
999
1000 switch (ret) {
1001 case 4:
1002 if (type != USB_STATUS_TYPE_PTM) {
1003 ret = -EIO;
1004 break;
1005 }
1006
1007 *(u32 *) data = le32_to_cpu(*(__le32 *) status);
1008 ret = 0;
1009 break;
1010 case 2:
1011 if (type != USB_STATUS_TYPE_STANDARD) {
1012 ret = -EIO;
1013 break;
1014 }
1015
1016 *(u16 *) data = le16_to_cpu(*(__le16 *) status);
1017 ret = 0;
1018 break;
1019 default:
1020 ret = -EIO;
1021 }
1022
1023 kfree(status);
1024 return ret;
1025}
1026EXPORT_SYMBOL_GPL(usb_get_status);
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051int usb_clear_halt(struct usb_device *dev, int pipe)
1052{
1053 int result;
1054 int endp = usb_pipeendpoint(pipe);
1055
1056 if (usb_pipein(pipe))
1057 endp |= USB_DIR_IN;
1058
1059
1060
1061
1062
1063 result = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1064 USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT,
1065 USB_ENDPOINT_HALT, endp, NULL, 0,
1066 USB_CTRL_SET_TIMEOUT);
1067
1068
1069 if (result < 0)
1070 return result;
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080 usb_reset_endpoint(dev, endp);
1081
1082 return 0;
1083}
1084EXPORT_SYMBOL_GPL(usb_clear_halt);
1085
1086static int create_intf_ep_devs(struct usb_interface *intf)
1087{
1088 struct usb_device *udev = interface_to_usbdev(intf);
1089 struct usb_host_interface *alt = intf->cur_altsetting;
1090 int i;
1091
1092 if (intf->ep_devs_created || intf->unregistering)
1093 return 0;
1094
1095 for (i = 0; i < alt->desc.bNumEndpoints; ++i)
1096 (void) usb_create_ep_devs(&intf->dev, &alt->endpoint[i], udev);
1097 intf->ep_devs_created = 1;
1098 return 0;
1099}
1100
1101static void remove_intf_ep_devs(struct usb_interface *intf)
1102{
1103 struct usb_host_interface *alt = intf->cur_altsetting;
1104 int i;
1105
1106 if (!intf->ep_devs_created)
1107 return;
1108
1109 for (i = 0; i < alt->desc.bNumEndpoints; ++i)
1110 usb_remove_ep_devs(&alt->endpoint[i]);
1111 intf->ep_devs_created = 0;
1112}
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126void usb_disable_endpoint(struct usb_device *dev, unsigned int epaddr,
1127 bool reset_hardware)
1128{
1129 unsigned int epnum = epaddr & USB_ENDPOINT_NUMBER_MASK;
1130 struct usb_host_endpoint *ep;
1131
1132 if (!dev)
1133 return;
1134
1135 if (usb_endpoint_out(epaddr)) {
1136 ep = dev->ep_out[epnum];
1137 if (reset_hardware)
1138 dev->ep_out[epnum] = NULL;
1139 } else {
1140 ep = dev->ep_in[epnum];
1141 if (reset_hardware)
1142 dev->ep_in[epnum] = NULL;
1143 }
1144 if (ep) {
1145 ep->enabled = 0;
1146 usb_hcd_flush_endpoint(dev, ep);
1147 if (reset_hardware)
1148 usb_hcd_disable_endpoint(dev, ep);
1149 }
1150}
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161void usb_reset_endpoint(struct usb_device *dev, unsigned int epaddr)
1162{
1163 unsigned int epnum = epaddr & USB_ENDPOINT_NUMBER_MASK;
1164 struct usb_host_endpoint *ep;
1165
1166 if (usb_endpoint_out(epaddr))
1167 ep = dev->ep_out[epnum];
1168 else
1169 ep = dev->ep_in[epnum];
1170 if (ep)
1171 usb_hcd_reset_endpoint(dev, ep);
1172}
1173EXPORT_SYMBOL_GPL(usb_reset_endpoint);
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185void usb_disable_interface(struct usb_device *dev, struct usb_interface *intf,
1186 bool reset_hardware)
1187{
1188 struct usb_host_interface *alt = intf->cur_altsetting;
1189 int i;
1190
1191 for (i = 0; i < alt->desc.bNumEndpoints; ++i) {
1192 usb_disable_endpoint(dev,
1193 alt->endpoint[i].desc.bEndpointAddress,
1194 reset_hardware);
1195 }
1196}
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208void usb_disable_device(struct usb_device *dev, int skip_ep0)
1209{
1210 int i;
1211 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1212
1213
1214
1215
1216 if (dev->actconfig) {
1217
1218
1219
1220
1221
1222 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++)
1223 dev->actconfig->interface[i]->unregistering = 1;
1224
1225 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
1226 struct usb_interface *interface;
1227
1228
1229 interface = dev->actconfig->interface[i];
1230 if (!device_is_registered(&interface->dev))
1231 continue;
1232 dev_dbg(&dev->dev, "unregistering interface %s\n",
1233 dev_name(&interface->dev));
1234 remove_intf_ep_devs(interface);
1235 device_del(&interface->dev);
1236 }
1237
1238
1239
1240
1241 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
1242 put_device(&dev->actconfig->interface[i]->dev);
1243 dev->actconfig->interface[i] = NULL;
1244 }
1245
1246 if (dev->usb2_hw_lpm_enabled == 1)
1247 usb_set_usb2_hardware_lpm(dev, 0);
1248 usb_unlocked_disable_lpm(dev);
1249 usb_disable_ltm(dev);
1250
1251 dev->actconfig = NULL;
1252 if (dev->state == USB_STATE_CONFIGURED)
1253 usb_set_device_state(dev, USB_STATE_ADDRESS);
1254 }
1255
1256 dev_dbg(&dev->dev, "%s nuking %s URBs\n", __func__,
1257 skip_ep0 ? "non-ep0" : "all");
1258 if (hcd->driver->check_bandwidth) {
1259
1260 for (i = skip_ep0; i < 16; ++i) {
1261 usb_disable_endpoint(dev, i, false);
1262 usb_disable_endpoint(dev, i + USB_DIR_IN, false);
1263 }
1264
1265 mutex_lock(hcd->bandwidth_mutex);
1266 usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
1267 mutex_unlock(hcd->bandwidth_mutex);
1268
1269 }
1270 for (i = skip_ep0; i < 16; ++i) {
1271 usb_disable_endpoint(dev, i, true);
1272 usb_disable_endpoint(dev, i + USB_DIR_IN, true);
1273 }
1274}
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285void usb_enable_endpoint(struct usb_device *dev, struct usb_host_endpoint *ep,
1286 bool reset_ep)
1287{
1288 int epnum = usb_endpoint_num(&ep->desc);
1289 int is_out = usb_endpoint_dir_out(&ep->desc);
1290 int is_control = usb_endpoint_xfer_control(&ep->desc);
1291
1292 if (reset_ep)
1293 usb_hcd_reset_endpoint(dev, ep);
1294 if (is_out || is_control)
1295 dev->ep_out[epnum] = ep;
1296 if (!is_out || is_control)
1297 dev->ep_in[epnum] = ep;
1298 ep->enabled = 1;
1299}
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309void usb_enable_interface(struct usb_device *dev,
1310 struct usb_interface *intf, bool reset_eps)
1311{
1312 struct usb_host_interface *alt = intf->cur_altsetting;
1313 int i;
1314
1315 for (i = 0; i < alt->desc.bNumEndpoints; ++i)
1316 usb_enable_endpoint(dev, &alt->endpoint[i], reset_eps);
1317}
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
1357int usb_set_interface(struct usb_device *dev, int interface, int alternate)
1358{
1359 struct usb_interface *iface;
1360 struct usb_host_interface *alt;
1361 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1362 int i, ret, manual = 0;
1363 unsigned int epaddr;
1364 unsigned int pipe;
1365
1366 if (dev->state == USB_STATE_SUSPENDED)
1367 return -EHOSTUNREACH;
1368
1369 iface = usb_ifnum_to_if(dev, interface);
1370 if (!iface) {
1371 dev_dbg(&dev->dev, "selecting invalid interface %d\n",
1372 interface);
1373 return -EINVAL;
1374 }
1375 if (iface->unregistering)
1376 return -ENODEV;
1377
1378 alt = usb_altnum_to_altsetting(iface, alternate);
1379 if (!alt) {
1380 dev_warn(&dev->dev, "selecting invalid altsetting %d\n",
1381 alternate);
1382 return -EINVAL;
1383 }
1384
1385
1386
1387
1388
1389 usb_disable_interface(dev, iface, false);
1390
1391
1392
1393
1394 mutex_lock(hcd->bandwidth_mutex);
1395
1396
1397
1398 if (usb_disable_lpm(dev)) {
1399 dev_err(&iface->dev, "%s Failed to disable LPM\n", __func__);
1400 mutex_unlock(hcd->bandwidth_mutex);
1401 return -ENOMEM;
1402 }
1403
1404 for (i = 0; i < iface->cur_altsetting->desc.bNumEndpoints; i++)
1405 iface->cur_altsetting->endpoint[i].streams = 0;
1406
1407 ret = usb_hcd_alloc_bandwidth(dev, NULL, iface->cur_altsetting, alt);
1408 if (ret < 0) {
1409 dev_info(&dev->dev, "Not enough bandwidth for altsetting %d\n",
1410 alternate);
1411 usb_enable_lpm(dev);
1412 mutex_unlock(hcd->bandwidth_mutex);
1413 return ret;
1414 }
1415
1416 if (dev->quirks & USB_QUIRK_NO_SET_INTF)
1417 ret = -EPIPE;
1418 else
1419 ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1420 USB_REQ_SET_INTERFACE, USB_RECIP_INTERFACE,
1421 alternate, interface, NULL, 0, 5000);
1422
1423
1424
1425
1426 if (ret == -EPIPE && iface->num_altsetting == 1) {
1427 dev_dbg(&dev->dev,
1428 "manual set_interface for iface %d, alt %d\n",
1429 interface, alternate);
1430 manual = 1;
1431 } else if (ret < 0) {
1432
1433 usb_hcd_alloc_bandwidth(dev, NULL, alt, iface->cur_altsetting);
1434 usb_enable_lpm(dev);
1435 mutex_unlock(hcd->bandwidth_mutex);
1436 return ret;
1437 }
1438 mutex_unlock(hcd->bandwidth_mutex);
1439
1440
1441
1442
1443
1444
1445
1446
1447 if (iface->cur_altsetting != alt) {
1448 remove_intf_ep_devs(iface);
1449 usb_remove_sysfs_intf_files(iface);
1450 }
1451 usb_disable_interface(dev, iface, true);
1452
1453 iface->cur_altsetting = alt;
1454
1455
1456 usb_unlocked_enable_lpm(dev);
1457
1458
1459
1460
1461
1462
1463 if (manual) {
1464 for (i = 0; i < alt->desc.bNumEndpoints; i++) {
1465 epaddr = alt->endpoint[i].desc.bEndpointAddress;
1466 pipe = __create_pipe(dev,
1467 USB_ENDPOINT_NUMBER_MASK & epaddr) |
1468 (usb_endpoint_out(epaddr) ?
1469 USB_DIR_OUT : USB_DIR_IN);
1470
1471 usb_clear_halt(dev, pipe);
1472 }
1473 }
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486 usb_enable_interface(dev, iface, true);
1487 if (device_is_registered(&iface->dev)) {
1488 usb_create_sysfs_intf_files(iface);
1489 create_intf_ep_devs(iface);
1490 }
1491 return 0;
1492}
1493EXPORT_SYMBOL_GPL(usb_set_interface);
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517int usb_reset_configuration(struct usb_device *dev)
1518{
1519 int i, retval;
1520 struct usb_host_config *config;
1521 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1522
1523 if (dev->state == USB_STATE_SUSPENDED)
1524 return -EHOSTUNREACH;
1525
1526
1527
1528
1529
1530
1531 for (i = 1; i < 16; ++i) {
1532 usb_disable_endpoint(dev, i, true);
1533 usb_disable_endpoint(dev, i + USB_DIR_IN, true);
1534 }
1535
1536 config = dev->actconfig;
1537 retval = 0;
1538 mutex_lock(hcd->bandwidth_mutex);
1539
1540
1541
1542 if (usb_disable_lpm(dev)) {
1543 dev_err(&dev->dev, "%s Failed to disable LPM\n", __func__);
1544 mutex_unlock(hcd->bandwidth_mutex);
1545 return -ENOMEM;
1546 }
1547
1548 for (i = 0; i < config->desc.bNumInterfaces; i++) {
1549 struct usb_interface *intf = config->interface[i];
1550 struct usb_host_interface *alt;
1551
1552 alt = usb_altnum_to_altsetting(intf, 0);
1553 if (!alt)
1554 alt = &intf->altsetting[0];
1555 if (alt != intf->cur_altsetting)
1556 retval = usb_hcd_alloc_bandwidth(dev, NULL,
1557 intf->cur_altsetting, alt);
1558 if (retval < 0)
1559 break;
1560 }
1561
1562 if (retval < 0) {
1563reset_old_alts:
1564 for (i--; i >= 0; i--) {
1565 struct usb_interface *intf = config->interface[i];
1566 struct usb_host_interface *alt;
1567
1568 alt = usb_altnum_to_altsetting(intf, 0);
1569 if (!alt)
1570 alt = &intf->altsetting[0];
1571 if (alt != intf->cur_altsetting)
1572 usb_hcd_alloc_bandwidth(dev, NULL,
1573 alt, intf->cur_altsetting);
1574 }
1575 usb_enable_lpm(dev);
1576 mutex_unlock(hcd->bandwidth_mutex);
1577 return retval;
1578 }
1579 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1580 USB_REQ_SET_CONFIGURATION, 0,
1581 config->desc.bConfigurationValue, 0,
1582 NULL, 0, USB_CTRL_SET_TIMEOUT);
1583 if (retval < 0)
1584 goto reset_old_alts;
1585 mutex_unlock(hcd->bandwidth_mutex);
1586
1587
1588 for (i = 0; i < config->desc.bNumInterfaces; i++) {
1589 struct usb_interface *intf = config->interface[i];
1590 struct usb_host_interface *alt;
1591
1592 alt = usb_altnum_to_altsetting(intf, 0);
1593
1594
1595
1596
1597
1598
1599 if (!alt)
1600 alt = &intf->altsetting[0];
1601
1602 if (alt != intf->cur_altsetting) {
1603 remove_intf_ep_devs(intf);
1604 usb_remove_sysfs_intf_files(intf);
1605 }
1606 intf->cur_altsetting = alt;
1607 usb_enable_interface(dev, intf, true);
1608 if (device_is_registered(&intf->dev)) {
1609 usb_create_sysfs_intf_files(intf);
1610 create_intf_ep_devs(intf);
1611 }
1612 }
1613
1614 usb_unlocked_enable_lpm(dev);
1615 return 0;
1616}
1617EXPORT_SYMBOL_GPL(usb_reset_configuration);
1618
1619static void usb_release_interface(struct device *dev)
1620{
1621 struct usb_interface *intf = to_usb_interface(dev);
1622 struct usb_interface_cache *intfc =
1623 altsetting_to_usb_interface_cache(intf->altsetting);
1624
1625 kref_put(&intfc->ref, usb_release_interface_cache);
1626 usb_put_dev(interface_to_usbdev(intf));
1627 of_node_put(dev->of_node);
1628 kfree(intf);
1629}
1630
1631
1632
1633
1634
1635
1636void usb_deauthorize_interface(struct usb_interface *intf)
1637{
1638 struct device *dev = &intf->dev;
1639
1640 device_lock(dev->parent);
1641
1642 if (intf->authorized) {
1643 device_lock(dev);
1644 intf->authorized = 0;
1645 device_unlock(dev);
1646
1647 usb_forced_unbind_intf(intf);
1648 }
1649
1650 device_unlock(dev->parent);
1651}
1652
1653
1654
1655
1656
1657
1658void usb_authorize_interface(struct usb_interface *intf)
1659{
1660 struct device *dev = &intf->dev;
1661
1662 if (!intf->authorized) {
1663 device_lock(dev);
1664 intf->authorized = 1;
1665 device_unlock(dev);
1666 }
1667}
1668
1669static int usb_if_uevent(struct device *dev, struct kobj_uevent_env *env)
1670{
1671 struct usb_device *usb_dev;
1672 struct usb_interface *intf;
1673 struct usb_host_interface *alt;
1674
1675 intf = to_usb_interface(dev);
1676 usb_dev = interface_to_usbdev(intf);
1677 alt = intf->cur_altsetting;
1678
1679 if (add_uevent_var(env, "INTERFACE=%d/%d/%d",
1680 alt->desc.bInterfaceClass,
1681 alt->desc.bInterfaceSubClass,
1682 alt->desc.bInterfaceProtocol))
1683 return -ENOMEM;
1684
1685 if (add_uevent_var(env,
1686 "MODALIAS=usb:"
1687 "v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02Xin%02X",
1688 le16_to_cpu(usb_dev->descriptor.idVendor),
1689 le16_to_cpu(usb_dev->descriptor.idProduct),
1690 le16_to_cpu(usb_dev->descriptor.bcdDevice),
1691 usb_dev->descriptor.bDeviceClass,
1692 usb_dev->descriptor.bDeviceSubClass,
1693 usb_dev->descriptor.bDeviceProtocol,
1694 alt->desc.bInterfaceClass,
1695 alt->desc.bInterfaceSubClass,
1696 alt->desc.bInterfaceProtocol,
1697 alt->desc.bInterfaceNumber))
1698 return -ENOMEM;
1699
1700 return 0;
1701}
1702
1703struct device_type usb_if_device_type = {
1704 .name = "usb_interface",
1705 .release = usb_release_interface,
1706 .uevent = usb_if_uevent,
1707};
1708
1709static struct usb_interface_assoc_descriptor *find_iad(struct usb_device *dev,
1710 struct usb_host_config *config,
1711 u8 inum)
1712{
1713 struct usb_interface_assoc_descriptor *retval = NULL;
1714 struct usb_interface_assoc_descriptor *intf_assoc;
1715 int first_intf;
1716 int last_intf;
1717 int i;
1718
1719 for (i = 0; (i < USB_MAXIADS && config->intf_assoc[i]); i++) {
1720 intf_assoc = config->intf_assoc[i];
1721 if (intf_assoc->bInterfaceCount == 0)
1722 continue;
1723
1724 first_intf = intf_assoc->bFirstInterface;
1725 last_intf = first_intf + (intf_assoc->bInterfaceCount - 1);
1726 if (inum >= first_intf && inum <= last_intf) {
1727 if (!retval)
1728 retval = intf_assoc;
1729 else
1730 dev_err(&dev->dev, "Interface #%d referenced"
1731 " by multiple IADs\n", inum);
1732 }
1733 }
1734
1735 return retval;
1736}
1737
1738
1739
1740
1741
1742
1743static void __usb_queue_reset_device(struct work_struct *ws)
1744{
1745 int rc;
1746 struct usb_interface *iface =
1747 container_of(ws, struct usb_interface, reset_ws);
1748 struct usb_device *udev = interface_to_usbdev(iface);
1749
1750 rc = usb_lock_device_for_reset(udev, iface);
1751 if (rc >= 0) {
1752 usb_reset_device(udev);
1753 usb_unlock_device(udev);
1754 }
1755 usb_put_intf(iface);
1756}
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
1804int usb_set_configuration(struct usb_device *dev, int configuration)
1805{
1806 int i, ret;
1807 struct usb_host_config *cp = NULL;
1808 struct usb_interface **new_interfaces = NULL;
1809 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1810 int n, nintf;
1811
1812 if (dev->authorized == 0 || configuration == -1)
1813 configuration = 0;
1814 else {
1815 for (i = 0; i < dev->descriptor.bNumConfigurations; i++) {
1816 if (dev->config[i].desc.bConfigurationValue ==
1817 configuration) {
1818 cp = &dev->config[i];
1819 break;
1820 }
1821 }
1822 }
1823 if ((!cp && configuration != 0))
1824 return -EINVAL;
1825
1826
1827
1828
1829
1830
1831 if (cp && configuration == 0)
1832 dev_warn(&dev->dev, "config 0 descriptor??\n");
1833
1834
1835
1836 n = nintf = 0;
1837 if (cp) {
1838 nintf = cp->desc.bNumInterfaces;
1839 new_interfaces = kmalloc_array(nintf, sizeof(*new_interfaces),
1840 GFP_NOIO);
1841 if (!new_interfaces)
1842 return -ENOMEM;
1843
1844 for (; n < nintf; ++n) {
1845 new_interfaces[n] = kzalloc(
1846 sizeof(struct usb_interface),
1847 GFP_NOIO);
1848 if (!new_interfaces[n]) {
1849 ret = -ENOMEM;
1850free_interfaces:
1851 while (--n >= 0)
1852 kfree(new_interfaces[n]);
1853 kfree(new_interfaces);
1854 return ret;
1855 }
1856 }
1857
1858 i = dev->bus_mA - usb_get_max_power(dev, cp);
1859 if (i < 0)
1860 dev_warn(&dev->dev, "new config #%d exceeds power "
1861 "limit by %dmA\n",
1862 configuration, -i);
1863 }
1864
1865
1866 ret = usb_autoresume_device(dev);
1867 if (ret)
1868 goto free_interfaces;
1869
1870
1871
1872
1873 if (dev->state != USB_STATE_ADDRESS)
1874 usb_disable_device(dev, 1);
1875
1876
1877 cancel_async_set_config(dev);
1878
1879
1880
1881
1882
1883
1884
1885 mutex_lock(hcd->bandwidth_mutex);
1886
1887
1888
1889
1890 if (dev->actconfig && usb_disable_lpm(dev)) {
1891 dev_err(&dev->dev, "%s Failed to disable LPM\n", __func__);
1892 mutex_unlock(hcd->bandwidth_mutex);
1893 ret = -ENOMEM;
1894 goto free_interfaces;
1895 }
1896 ret = usb_hcd_alloc_bandwidth(dev, cp, NULL, NULL);
1897 if (ret < 0) {
1898 if (dev->actconfig)
1899 usb_enable_lpm(dev);
1900 mutex_unlock(hcd->bandwidth_mutex);
1901 usb_autosuspend_device(dev);
1902 goto free_interfaces;
1903 }
1904
1905
1906
1907
1908
1909 for (i = 0; i < nintf; ++i) {
1910 struct usb_interface_cache *intfc;
1911 struct usb_interface *intf;
1912 struct usb_host_interface *alt;
1913 u8 ifnum;
1914
1915 cp->interface[i] = intf = new_interfaces[i];
1916 intfc = cp->intf_cache[i];
1917 intf->altsetting = intfc->altsetting;
1918 intf->num_altsetting = intfc->num_altsetting;
1919 intf->authorized = !!HCD_INTF_AUTHORIZED(hcd);
1920 kref_get(&intfc->ref);
1921
1922 alt = usb_altnum_to_altsetting(intf, 0);
1923
1924
1925
1926
1927
1928
1929 if (!alt)
1930 alt = &intf->altsetting[0];
1931
1932 ifnum = alt->desc.bInterfaceNumber;
1933 intf->intf_assoc = find_iad(dev, cp, ifnum);
1934 intf->cur_altsetting = alt;
1935 usb_enable_interface(dev, intf, true);
1936 intf->dev.parent = &dev->dev;
1937 if (usb_of_has_combined_node(dev)) {
1938 device_set_of_node_from_dev(&intf->dev, &dev->dev);
1939 } else {
1940 intf->dev.of_node = usb_of_get_interface_node(dev,
1941 configuration, ifnum);
1942 }
1943 intf->dev.driver = NULL;
1944 intf->dev.bus = &usb_bus_type;
1945 intf->dev.type = &usb_if_device_type;
1946 intf->dev.groups = usb_interface_groups;
1947
1948
1949
1950
1951 intf->dev.dma_mask = dev->dev.dma_mask;
1952 intf->dev.dma_pfn_offset = dev->dev.dma_pfn_offset;
1953 INIT_WORK(&intf->reset_ws, __usb_queue_reset_device);
1954 intf->minor = -1;
1955 device_initialize(&intf->dev);
1956 pm_runtime_no_callbacks(&intf->dev);
1957 dev_set_name(&intf->dev, "%d-%s:%d.%d", dev->bus->busnum,
1958 dev->devpath, configuration, ifnum);
1959 usb_get_dev(dev);
1960 }
1961 kfree(new_interfaces);
1962
1963 ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1964 USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
1965 NULL, 0, USB_CTRL_SET_TIMEOUT);
1966 if (ret < 0 && cp) {
1967
1968
1969
1970
1971 usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
1972 for (i = 0; i < nintf; ++i) {
1973 usb_disable_interface(dev, cp->interface[i], true);
1974 put_device(&cp->interface[i]->dev);
1975 cp->interface[i] = NULL;
1976 }
1977 cp = NULL;
1978 }
1979
1980 dev->actconfig = cp;
1981 mutex_unlock(hcd->bandwidth_mutex);
1982
1983 if (!cp) {
1984 usb_set_device_state(dev, USB_STATE_ADDRESS);
1985
1986
1987 usb_autosuspend_device(dev);
1988 return ret;
1989 }
1990 usb_set_device_state(dev, USB_STATE_CONFIGURED);
1991
1992 if (cp->string == NULL &&
1993 !(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
1994 cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
1995
1996
1997 usb_unlocked_enable_lpm(dev);
1998
1999 usb_enable_ltm(dev);
2000
2001
2002
2003
2004
2005
2006
2007 for (i = 0; i < nintf; ++i) {
2008 struct usb_interface *intf = cp->interface[i];
2009
2010 dev_dbg(&dev->dev,
2011 "adding %s (config #%d, interface %d)\n",
2012 dev_name(&intf->dev), configuration,
2013 intf->cur_altsetting->desc.bInterfaceNumber);
2014 device_enable_async_suspend(&intf->dev);
2015 ret = device_add(&intf->dev);
2016 if (ret != 0) {
2017 dev_err(&dev->dev, "device_add(%s) --> %d\n",
2018 dev_name(&intf->dev), ret);
2019 continue;
2020 }
2021 create_intf_ep_devs(intf);
2022 }
2023
2024 usb_autosuspend_device(dev);
2025 return 0;
2026}
2027EXPORT_SYMBOL_GPL(usb_set_configuration);
2028
2029static LIST_HEAD(set_config_list);
2030static DEFINE_SPINLOCK(set_config_lock);
2031
2032struct set_config_request {
2033 struct usb_device *udev;
2034 int config;
2035 struct work_struct work;
2036 struct list_head node;
2037};
2038
2039
2040static void driver_set_config_work(struct work_struct *work)
2041{
2042 struct set_config_request *req =
2043 container_of(work, struct set_config_request, work);
2044 struct usb_device *udev = req->udev;
2045
2046 usb_lock_device(udev);
2047 spin_lock(&set_config_lock);
2048 list_del(&req->node);
2049 spin_unlock(&set_config_lock);
2050
2051 if (req->config >= -1)
2052 usb_set_configuration(udev, req->config);
2053 usb_unlock_device(udev);
2054 usb_put_dev(udev);
2055 kfree(req);
2056}
2057
2058
2059
2060
2061static void cancel_async_set_config(struct usb_device *udev)
2062{
2063 struct set_config_request *req;
2064
2065 spin_lock(&set_config_lock);
2066 list_for_each_entry(req, &set_config_list, node) {
2067 if (req->udev == udev)
2068 req->config = -999;
2069 }
2070 spin_unlock(&set_config_lock);
2071}
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093int usb_driver_set_configuration(struct usb_device *udev, int config)
2094{
2095 struct set_config_request *req;
2096
2097 req = kmalloc(sizeof(*req), GFP_KERNEL);
2098 if (!req)
2099 return -ENOMEM;
2100 req->udev = udev;
2101 req->config = config;
2102 INIT_WORK(&req->work, driver_set_config_work);
2103
2104 spin_lock(&set_config_lock);
2105 list_add(&req->node, &set_config_list);
2106 spin_unlock(&set_config_lock);
2107
2108 usb_get_dev(udev);
2109 schedule_work(&req->work);
2110 return 0;
2111}
2112EXPORT_SYMBOL_GPL(usb_driver_set_configuration);
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129int cdc_parse_cdc_header(struct usb_cdc_parsed_header *hdr,
2130 struct usb_interface *intf,
2131 u8 *buffer,
2132 int buflen)
2133{
2134
2135 struct usb_cdc_union_desc *union_header = NULL;
2136
2137
2138 struct usb_cdc_header_desc *header = NULL;
2139 struct usb_cdc_ether_desc *ether = NULL;
2140 struct usb_cdc_mdlm_detail_desc *detail = NULL;
2141 struct usb_cdc_mdlm_desc *desc = NULL;
2142
2143 unsigned int elength;
2144 int cnt = 0;
2145
2146 memset(hdr, 0x00, sizeof(struct usb_cdc_parsed_header));
2147 hdr->phonet_magic_present = false;
2148 while (buflen > 0) {
2149 elength = buffer[0];
2150 if (!elength) {
2151 dev_err(&intf->dev, "skipping garbage byte\n");
2152 elength = 1;
2153 goto next_desc;
2154 }
2155 if ((buflen < elength) || (elength < 3)) {
2156 dev_err(&intf->dev, "invalid descriptor buffer length\n");
2157 break;
2158 }
2159 if (buffer[1] != USB_DT_CS_INTERFACE) {
2160 dev_err(&intf->dev, "skipping garbage\n");
2161 goto next_desc;
2162 }
2163
2164 switch (buffer[2]) {
2165 case USB_CDC_UNION_TYPE:
2166 if (elength < sizeof(struct usb_cdc_union_desc))
2167 goto next_desc;
2168 if (union_header) {
2169 dev_err(&intf->dev, "More than one union descriptor, skipping ...\n");
2170 goto next_desc;
2171 }
2172 union_header = (struct usb_cdc_union_desc *)buffer;
2173 break;
2174 case USB_CDC_COUNTRY_TYPE:
2175 if (elength < sizeof(struct usb_cdc_country_functional_desc))
2176 goto next_desc;
2177 hdr->usb_cdc_country_functional_desc =
2178 (struct usb_cdc_country_functional_desc *)buffer;
2179 break;
2180 case USB_CDC_HEADER_TYPE:
2181 if (elength != sizeof(struct usb_cdc_header_desc))
2182 goto next_desc;
2183 if (header)
2184 return -EINVAL;
2185 header = (struct usb_cdc_header_desc *)buffer;
2186 break;
2187 case USB_CDC_ACM_TYPE:
2188 if (elength < sizeof(struct usb_cdc_acm_descriptor))
2189 goto next_desc;
2190 hdr->usb_cdc_acm_descriptor =
2191 (struct usb_cdc_acm_descriptor *)buffer;
2192 break;
2193 case USB_CDC_ETHERNET_TYPE:
2194 if (elength != sizeof(struct usb_cdc_ether_desc))
2195 goto next_desc;
2196 if (ether)
2197 return -EINVAL;
2198 ether = (struct usb_cdc_ether_desc *)buffer;
2199 break;
2200 case USB_CDC_CALL_MANAGEMENT_TYPE:
2201 if (elength < sizeof(struct usb_cdc_call_mgmt_descriptor))
2202 goto next_desc;
2203 hdr->usb_cdc_call_mgmt_descriptor =
2204 (struct usb_cdc_call_mgmt_descriptor *)buffer;
2205 break;
2206 case USB_CDC_DMM_TYPE:
2207 if (elength < sizeof(struct usb_cdc_dmm_desc))
2208 goto next_desc;
2209 hdr->usb_cdc_dmm_desc =
2210 (struct usb_cdc_dmm_desc *)buffer;
2211 break;
2212 case USB_CDC_MDLM_TYPE:
2213 if (elength < sizeof(struct usb_cdc_mdlm_desc *))
2214 goto next_desc;
2215 if (desc)
2216 return -EINVAL;
2217 desc = (struct usb_cdc_mdlm_desc *)buffer;
2218 break;
2219 case USB_CDC_MDLM_DETAIL_TYPE:
2220 if (elength < sizeof(struct usb_cdc_mdlm_detail_desc *))
2221 goto next_desc;
2222 if (detail)
2223 return -EINVAL;
2224 detail = (struct usb_cdc_mdlm_detail_desc *)buffer;
2225 break;
2226 case USB_CDC_NCM_TYPE:
2227 if (elength < sizeof(struct usb_cdc_ncm_desc))
2228 goto next_desc;
2229 hdr->usb_cdc_ncm_desc = (struct usb_cdc_ncm_desc *)buffer;
2230 break;
2231 case USB_CDC_MBIM_TYPE:
2232 if (elength < sizeof(struct usb_cdc_mbim_desc))
2233 goto next_desc;
2234
2235 hdr->usb_cdc_mbim_desc = (struct usb_cdc_mbim_desc *)buffer;
2236 break;
2237 case USB_CDC_MBIM_EXTENDED_TYPE:
2238 if (elength < sizeof(struct usb_cdc_mbim_extended_desc))
2239 break;
2240 hdr->usb_cdc_mbim_extended_desc =
2241 (struct usb_cdc_mbim_extended_desc *)buffer;
2242 break;
2243 case CDC_PHONET_MAGIC_NUMBER:
2244 hdr->phonet_magic_present = true;
2245 break;
2246 default:
2247
2248
2249
2250
2251 dev_dbg(&intf->dev, "Ignoring descriptor: type %02x, length %ud\n",
2252 buffer[2], elength);
2253 goto next_desc;
2254 }
2255 cnt++;
2256next_desc:
2257 buflen -= elength;
2258 buffer += elength;
2259 }
2260 hdr->usb_cdc_union_desc = union_header;
2261 hdr->usb_cdc_header_desc = header;
2262 hdr->usb_cdc_mdlm_detail_desc = detail;
2263 hdr->usb_cdc_mdlm_desc = desc;
2264 hdr->usb_cdc_ether_desc = ether;
2265 return cnt;
2266}
2267
2268EXPORT_SYMBOL(cdc_parse_cdc_header);
2269