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