0001
0002
0003
0004
0005
0006
0007
0008 #include <linux/acpi.h>
0009 #include <linux/pci.h> /* for scatterlist macros */
0010 #include <linux/usb.h>
0011 #include <linux/module.h>
0012 #include <linux/slab.h>
0013 #include <linux/mm.h>
0014 #include <linux/timer.h>
0015 #include <linux/ctype.h>
0016 #include <linux/nls.h>
0017 #include <linux/device.h>
0018 #include <linux/scatterlist.h>
0019 #include <linux/usb/cdc.h>
0020 #include <linux/usb/quirks.h>
0021 #include <linux/usb/hcd.h> /* for usbcore internals */
0022 #include <linux/usb/of.h>
0023 #include <asm/byteorder.h>
0024
0025 #include "usb.h"
0026
0027 static void cancel_async_set_config(struct usb_device *udev);
0028
0029 struct api_context {
0030 struct completion done;
0031 int status;
0032 };
0033
0034 static void usb_api_blocking_completion(struct urb *urb)
0035 {
0036 struct api_context *ctx = urb->context;
0037
0038 ctx->status = urb->status;
0039 complete(&ctx->done);
0040 }
0041
0042
0043
0044
0045
0046
0047
0048
0049 static int usb_start_wait_urb(struct urb *urb, int timeout, int *actual_length)
0050 {
0051 struct api_context ctx;
0052 unsigned long expire;
0053 int retval;
0054
0055 init_completion(&ctx.done);
0056 urb->context = &ctx;
0057 urb->actual_length = 0;
0058 retval = usb_submit_urb(urb, GFP_NOIO);
0059 if (unlikely(retval))
0060 goto out;
0061
0062 expire = timeout ? msecs_to_jiffies(timeout) : MAX_SCHEDULE_TIMEOUT;
0063 if (!wait_for_completion_timeout(&ctx.done, expire)) {
0064 usb_kill_urb(urb);
0065 retval = (ctx.status == -ENOENT ? -ETIMEDOUT : ctx.status);
0066
0067 dev_dbg(&urb->dev->dev,
0068 "%s timed out on ep%d%s len=%u/%u\n",
0069 current->comm,
0070 usb_endpoint_num(&urb->ep->desc),
0071 usb_urb_dir_in(urb) ? "in" : "out",
0072 urb->actual_length,
0073 urb->transfer_buffer_length);
0074 } else
0075 retval = ctx.status;
0076 out:
0077 if (actual_length)
0078 *actual_length = urb->actual_length;
0079
0080 usb_free_urb(urb);
0081 return retval;
0082 }
0083
0084
0085
0086 static int usb_internal_control_msg(struct usb_device *usb_dev,
0087 unsigned int pipe,
0088 struct usb_ctrlrequest *cmd,
0089 void *data, int len, int timeout)
0090 {
0091 struct urb *urb;
0092 int retv;
0093 int length;
0094
0095 urb = usb_alloc_urb(0, GFP_NOIO);
0096 if (!urb)
0097 return -ENOMEM;
0098
0099 usb_fill_control_urb(urb, usb_dev, pipe, (unsigned char *)cmd, data,
0100 len, usb_api_blocking_completion, NULL);
0101
0102 retv = usb_start_wait_urb(urb, timeout, &length);
0103 if (retv < 0)
0104 return retv;
0105 else
0106 return length;
0107 }
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136 int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request,
0137 __u8 requesttype, __u16 value, __u16 index, void *data,
0138 __u16 size, int timeout)
0139 {
0140 struct usb_ctrlrequest *dr;
0141 int ret;
0142
0143 dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO);
0144 if (!dr)
0145 return -ENOMEM;
0146
0147 dr->bRequestType = requesttype;
0148 dr->bRequest = request;
0149 dr->wValue = cpu_to_le16(value);
0150 dr->wIndex = cpu_to_le16(index);
0151 dr->wLength = cpu_to_le16(size);
0152
0153 ret = usb_internal_control_msg(dev, pipe, dr, data, size, timeout);
0154
0155
0156 if (dev->quirks & USB_QUIRK_DELAY_CTRL_MSG)
0157 msleep(200);
0158
0159 kfree(dr);
0160
0161 return ret;
0162 }
0163 EXPORT_SYMBOL_GPL(usb_control_msg);
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198 int usb_control_msg_send(struct usb_device *dev, __u8 endpoint, __u8 request,
0199 __u8 requesttype, __u16 value, __u16 index,
0200 const void *driver_data, __u16 size, int timeout,
0201 gfp_t memflags)
0202 {
0203 unsigned int pipe = usb_sndctrlpipe(dev, endpoint);
0204 int ret;
0205 u8 *data = NULL;
0206
0207 if (size) {
0208 data = kmemdup(driver_data, size, memflags);
0209 if (!data)
0210 return -ENOMEM;
0211 }
0212
0213 ret = usb_control_msg(dev, pipe, request, requesttype, value, index,
0214 data, size, timeout);
0215 kfree(data);
0216
0217 if (ret < 0)
0218 return ret;
0219
0220 return 0;
0221 }
0222 EXPORT_SYMBOL_GPL(usb_control_msg_send);
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263 int usb_control_msg_recv(struct usb_device *dev, __u8 endpoint, __u8 request,
0264 __u8 requesttype, __u16 value, __u16 index,
0265 void *driver_data, __u16 size, int timeout,
0266 gfp_t memflags)
0267 {
0268 unsigned int pipe = usb_rcvctrlpipe(dev, endpoint);
0269 int ret;
0270 u8 *data;
0271
0272 if (!size || !driver_data)
0273 return -EINVAL;
0274
0275 data = kmalloc(size, memflags);
0276 if (!data)
0277 return -ENOMEM;
0278
0279 ret = usb_control_msg(dev, pipe, request, requesttype, value, index,
0280 data, size, timeout);
0281
0282 if (ret < 0)
0283 goto exit;
0284
0285 if (ret == size) {
0286 memcpy(driver_data, data, size);
0287 ret = 0;
0288 } else {
0289 ret = -EREMOTEIO;
0290 }
0291
0292 exit:
0293 kfree(data);
0294 return ret;
0295 }
0296 EXPORT_SYMBOL_GPL(usb_control_msg_recv);
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322
0323
0324 int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe,
0325 void *data, int len, int *actual_length, int timeout)
0326 {
0327 return usb_bulk_msg(usb_dev, pipe, data, len, actual_length, timeout);
0328 }
0329 EXPORT_SYMBOL_GPL(usb_interrupt_msg);
0330
0331
0332
0333
0334
0335
0336
0337
0338
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352
0353
0354
0355
0356
0357
0358
0359
0360
0361
0362
0363 int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,
0364 void *data, int len, int *actual_length, int timeout)
0365 {
0366 struct urb *urb;
0367 struct usb_host_endpoint *ep;
0368
0369 ep = usb_pipe_endpoint(usb_dev, pipe);
0370 if (!ep || len < 0)
0371 return -EINVAL;
0372
0373 urb = usb_alloc_urb(0, GFP_KERNEL);
0374 if (!urb)
0375 return -ENOMEM;
0376
0377 if ((ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
0378 USB_ENDPOINT_XFER_INT) {
0379 pipe = (pipe & ~(3 << 30)) | (PIPE_INTERRUPT << 30);
0380 usb_fill_int_urb(urb, usb_dev, pipe, data, len,
0381 usb_api_blocking_completion, NULL,
0382 ep->desc.bInterval);
0383 } else
0384 usb_fill_bulk_urb(urb, usb_dev, pipe, data, len,
0385 usb_api_blocking_completion, NULL);
0386
0387 return usb_start_wait_urb(urb, timeout, actual_length);
0388 }
0389 EXPORT_SYMBOL_GPL(usb_bulk_msg);
0390
0391
0392
0393 static void sg_clean(struct usb_sg_request *io)
0394 {
0395 if (io->urbs) {
0396 while (io->entries--)
0397 usb_free_urb(io->urbs[io->entries]);
0398 kfree(io->urbs);
0399 io->urbs = NULL;
0400 }
0401 io->dev = NULL;
0402 }
0403
0404 static void sg_complete(struct urb *urb)
0405 {
0406 unsigned long flags;
0407 struct usb_sg_request *io = urb->context;
0408 int status = urb->status;
0409
0410 spin_lock_irqsave(&io->lock, flags);
0411
0412
0413
0414
0415
0416
0417
0418
0419
0420
0421
0422 if (io->status
0423 && (io->status != -ECONNRESET
0424 || status != -ECONNRESET)
0425 && urb->actual_length) {
0426 dev_err(io->dev->bus->controller,
0427 "dev %s ep%d%s scatterlist error %d/%d\n",
0428 io->dev->devpath,
0429 usb_endpoint_num(&urb->ep->desc),
0430 usb_urb_dir_in(urb) ? "in" : "out",
0431 status, io->status);
0432
0433 }
0434
0435 if (io->status == 0 && status && status != -ECONNRESET) {
0436 int i, found, retval;
0437
0438 io->status = status;
0439
0440
0441
0442
0443
0444 spin_unlock_irqrestore(&io->lock, flags);
0445 for (i = 0, found = 0; i < io->entries; i++) {
0446 if (!io->urbs[i])
0447 continue;
0448 if (found) {
0449 usb_block_urb(io->urbs[i]);
0450 retval = usb_unlink_urb(io->urbs[i]);
0451 if (retval != -EINPROGRESS &&
0452 retval != -ENODEV &&
0453 retval != -EBUSY &&
0454 retval != -EIDRM)
0455 dev_err(&io->dev->dev,
0456 "%s, unlink --> %d\n",
0457 __func__, retval);
0458 } else if (urb == io->urbs[i])
0459 found = 1;
0460 }
0461 spin_lock_irqsave(&io->lock, flags);
0462 }
0463
0464
0465 io->bytes += urb->actual_length;
0466 io->count--;
0467 if (!io->count)
0468 complete(&io->complete);
0469
0470 spin_unlock_irqrestore(&io->lock, flags);
0471 }
0472
0473
0474
0475
0476
0477
0478
0479
0480
0481
0482
0483
0484
0485
0486
0487
0488
0489
0490
0491
0492
0493
0494
0495
0496
0497
0498
0499
0500
0501 int usb_sg_init(struct usb_sg_request *io, struct usb_device *dev,
0502 unsigned pipe, unsigned period, struct scatterlist *sg,
0503 int nents, size_t length, gfp_t mem_flags)
0504 {
0505 int i;
0506 int urb_flags;
0507 int use_sg;
0508
0509 if (!io || !dev || !sg
0510 || usb_pipecontrol(pipe)
0511 || usb_pipeisoc(pipe)
0512 || nents <= 0)
0513 return -EINVAL;
0514
0515 spin_lock_init(&io->lock);
0516 io->dev = dev;
0517 io->pipe = pipe;
0518
0519 if (dev->bus->sg_tablesize > 0) {
0520 use_sg = true;
0521 io->entries = 1;
0522 } else {
0523 use_sg = false;
0524 io->entries = nents;
0525 }
0526
0527
0528 io->urbs = kmalloc_array(io->entries, sizeof(*io->urbs), mem_flags);
0529 if (!io->urbs)
0530 goto nomem;
0531
0532 urb_flags = URB_NO_INTERRUPT;
0533 if (usb_pipein(pipe))
0534 urb_flags |= URB_SHORT_NOT_OK;
0535
0536 for_each_sg(sg, sg, io->entries, i) {
0537 struct urb *urb;
0538 unsigned len;
0539
0540 urb = usb_alloc_urb(0, mem_flags);
0541 if (!urb) {
0542 io->entries = i;
0543 goto nomem;
0544 }
0545 io->urbs[i] = urb;
0546
0547 urb->dev = NULL;
0548 urb->pipe = pipe;
0549 urb->interval = period;
0550 urb->transfer_flags = urb_flags;
0551 urb->complete = sg_complete;
0552 urb->context = io;
0553 urb->sg = sg;
0554
0555 if (use_sg) {
0556
0557 urb->transfer_buffer = NULL;
0558 urb->num_sgs = nents;
0559
0560
0561 len = length;
0562 if (len == 0) {
0563 struct scatterlist *sg2;
0564 int j;
0565
0566 for_each_sg(sg, sg2, nents, j)
0567 len += sg2->length;
0568 }
0569 } else {
0570
0571
0572
0573
0574
0575 if (!PageHighMem(sg_page(sg)))
0576 urb->transfer_buffer = sg_virt(sg);
0577 else
0578 urb->transfer_buffer = NULL;
0579
0580 len = sg->length;
0581 if (length) {
0582 len = min_t(size_t, len, length);
0583 length -= len;
0584 if (length == 0)
0585 io->entries = i + 1;
0586 }
0587 }
0588 urb->transfer_buffer_length = len;
0589 }
0590 io->urbs[--i]->transfer_flags &= ~URB_NO_INTERRUPT;
0591
0592
0593 io->count = io->entries;
0594 io->status = 0;
0595 io->bytes = 0;
0596 init_completion(&io->complete);
0597 return 0;
0598
0599 nomem:
0600 sg_clean(io);
0601 return -ENOMEM;
0602 }
0603 EXPORT_SYMBOL_GPL(usb_sg_init);
0604
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615
0616
0617
0618
0619
0620
0621
0622
0623
0624
0625
0626
0627
0628
0629
0630
0631
0632
0633
0634
0635
0636
0637
0638
0639
0640
0641
0642
0643
0644
0645
0646
0647
0648
0649
0650 void usb_sg_wait(struct usb_sg_request *io)
0651 {
0652 int i;
0653 int entries = io->entries;
0654
0655
0656 spin_lock_irq(&io->lock);
0657 i = 0;
0658 while (i < entries && !io->status) {
0659 int retval;
0660
0661 io->urbs[i]->dev = io->dev;
0662 spin_unlock_irq(&io->lock);
0663
0664 retval = usb_submit_urb(io->urbs[i], GFP_NOIO);
0665
0666 switch (retval) {
0667
0668 case -ENXIO:
0669 case -EAGAIN:
0670 case -ENOMEM:
0671 retval = 0;
0672 yield();
0673 break;
0674
0675
0676
0677
0678
0679
0680
0681 case 0:
0682 ++i;
0683 cpu_relax();
0684 break;
0685
0686
0687 default:
0688 io->urbs[i]->status = retval;
0689 dev_dbg(&io->dev->dev, "%s, submit --> %d\n",
0690 __func__, retval);
0691 usb_sg_cancel(io);
0692 }
0693 spin_lock_irq(&io->lock);
0694 if (retval && (io->status == 0 || io->status == -ECONNRESET))
0695 io->status = retval;
0696 }
0697 io->count -= entries - i;
0698 if (io->count == 0)
0699 complete(&io->complete);
0700 spin_unlock_irq(&io->lock);
0701
0702
0703
0704
0705
0706 wait_for_completion(&io->complete);
0707
0708 sg_clean(io);
0709 }
0710 EXPORT_SYMBOL_GPL(usb_sg_wait);
0711
0712
0713
0714
0715
0716
0717
0718
0719
0720 void usb_sg_cancel(struct usb_sg_request *io)
0721 {
0722 unsigned long flags;
0723 int i, retval;
0724
0725 spin_lock_irqsave(&io->lock, flags);
0726 if (io->status || io->count == 0) {
0727 spin_unlock_irqrestore(&io->lock, flags);
0728 return;
0729 }
0730
0731 io->status = -ECONNRESET;
0732 io->count++;
0733 spin_unlock_irqrestore(&io->lock, flags);
0734
0735 for (i = io->entries - 1; i >= 0; --i) {
0736 usb_block_urb(io->urbs[i]);
0737
0738 retval = usb_unlink_urb(io->urbs[i]);
0739 if (retval != -EINPROGRESS
0740 && retval != -ENODEV
0741 && retval != -EBUSY
0742 && retval != -EIDRM)
0743 dev_warn(&io->dev->dev, "%s, unlink --> %d\n",
0744 __func__, retval);
0745 }
0746
0747 spin_lock_irqsave(&io->lock, flags);
0748 io->count--;
0749 if (!io->count)
0750 complete(&io->complete);
0751 spin_unlock_irqrestore(&io->lock, flags);
0752 }
0753 EXPORT_SYMBOL_GPL(usb_sg_cancel);
0754
0755
0756
0757
0758
0759
0760
0761
0762
0763
0764
0765
0766
0767
0768
0769
0770
0771
0772
0773
0774
0775
0776
0777
0778
0779
0780 int usb_get_descriptor(struct usb_device *dev, unsigned char type,
0781 unsigned char index, void *buf, int size)
0782 {
0783 int i;
0784 int result;
0785
0786 if (size <= 0)
0787 return -EINVAL;
0788
0789 memset(buf, 0, size);
0790
0791 for (i = 0; i < 3; ++i) {
0792
0793 result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
0794 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,
0795 (type << 8) + index, 0, buf, size,
0796 USB_CTRL_GET_TIMEOUT);
0797 if (result <= 0 && result != -ETIMEDOUT)
0798 continue;
0799 if (result > 1 && ((u8 *)buf)[1] != type) {
0800 result = -ENODATA;
0801 continue;
0802 }
0803 break;
0804 }
0805 return result;
0806 }
0807 EXPORT_SYMBOL_GPL(usb_get_descriptor);
0808
0809
0810
0811
0812
0813
0814
0815
0816
0817
0818
0819
0820
0821
0822
0823
0824
0825
0826
0827
0828
0829
0830
0831
0832 static int usb_get_string(struct usb_device *dev, unsigned short langid,
0833 unsigned char index, void *buf, int size)
0834 {
0835 int i;
0836 int result;
0837
0838 if (size <= 0)
0839 return -EINVAL;
0840
0841 for (i = 0; i < 3; ++i) {
0842
0843 result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
0844 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,
0845 (USB_DT_STRING << 8) + index, langid, buf, size,
0846 USB_CTRL_GET_TIMEOUT);
0847 if (result == 0 || result == -EPIPE)
0848 continue;
0849 if (result > 1 && ((u8 *) buf)[1] != USB_DT_STRING) {
0850 result = -ENODATA;
0851 continue;
0852 }
0853 break;
0854 }
0855 return result;
0856 }
0857
0858 static void usb_try_string_workarounds(unsigned char *buf, int *length)
0859 {
0860 int newlength, oldlength = *length;
0861
0862 for (newlength = 2; newlength + 1 < oldlength; newlength += 2)
0863 if (!isprint(buf[newlength]) || buf[newlength + 1])
0864 break;
0865
0866 if (newlength > 2) {
0867 buf[0] = newlength;
0868 *length = newlength;
0869 }
0870 }
0871
0872 static int usb_string_sub(struct usb_device *dev, unsigned int langid,
0873 unsigned int index, unsigned char *buf)
0874 {
0875 int rc;
0876
0877
0878
0879 if (dev->quirks & USB_QUIRK_STRING_FETCH_255)
0880 rc = -EIO;
0881 else
0882 rc = usb_get_string(dev, langid, index, buf, 255);
0883
0884
0885
0886 if (rc < 2) {
0887 rc = usb_get_string(dev, langid, index, buf, 2);
0888 if (rc == 2)
0889 rc = usb_get_string(dev, langid, index, buf, buf[0]);
0890 }
0891
0892 if (rc >= 2) {
0893 if (!buf[0] && !buf[1])
0894 usb_try_string_workarounds(buf, &rc);
0895
0896
0897 if (buf[0] < rc)
0898 rc = buf[0];
0899
0900 rc = rc - (rc & 1);
0901 }
0902
0903 if (rc < 2)
0904 rc = (rc < 0 ? rc : -EINVAL);
0905
0906 return rc;
0907 }
0908
0909 static int usb_get_langid(struct usb_device *dev, unsigned char *tbuf)
0910 {
0911 int err;
0912
0913 if (dev->have_langid)
0914 return 0;
0915
0916 if (dev->string_langid < 0)
0917 return -EPIPE;
0918
0919 err = usb_string_sub(dev, 0, 0, tbuf);
0920
0921
0922
0923 if (err == -ENODATA || (err > 0 && err < 4)) {
0924 dev->string_langid = 0x0409;
0925 dev->have_langid = 1;
0926 dev_err(&dev->dev,
0927 "language id specifier not provided by device, defaulting to English\n");
0928 return 0;
0929 }
0930
0931
0932
0933
0934 if (err < 0) {
0935 dev_info(&dev->dev, "string descriptor 0 read error: %d\n",
0936 err);
0937 dev->string_langid = -1;
0938 return -EPIPE;
0939 }
0940
0941
0942 dev->string_langid = tbuf[2] | (tbuf[3] << 8);
0943 dev->have_langid = 1;
0944 dev_dbg(&dev->dev, "default language 0x%04x\n",
0945 dev->string_langid);
0946 return 0;
0947 }
0948
0949
0950
0951
0952
0953
0954
0955
0956
0957
0958
0959
0960
0961
0962
0963
0964
0965
0966
0967 int usb_string(struct usb_device *dev, int index, char *buf, size_t size)
0968 {
0969 unsigned char *tbuf;
0970 int err;
0971
0972 if (dev->state == USB_STATE_SUSPENDED)
0973 return -EHOSTUNREACH;
0974 if (size <= 0 || !buf)
0975 return -EINVAL;
0976 buf[0] = 0;
0977 if (index <= 0 || index >= 256)
0978 return -EINVAL;
0979 tbuf = kmalloc(256, GFP_NOIO);
0980 if (!tbuf)
0981 return -ENOMEM;
0982
0983 err = usb_get_langid(dev, tbuf);
0984 if (err < 0)
0985 goto errout;
0986
0987 err = usb_string_sub(dev, dev->string_langid, index, tbuf);
0988 if (err < 0)
0989 goto errout;
0990
0991 size--;
0992 err = utf16s_to_utf8s((wchar_t *) &tbuf[2], (err - 2) / 2,
0993 UTF16_LITTLE_ENDIAN, buf, size);
0994 buf[err] = 0;
0995
0996 if (tbuf[1] != USB_DT_STRING)
0997 dev_dbg(&dev->dev,
0998 "wrong descriptor type %02x for string %d (\"%s\")\n",
0999 tbuf[1], index, buf);
1000
1001 errout:
1002 kfree(tbuf);
1003 return err;
1004 }
1005 EXPORT_SYMBOL_GPL(usb_string);
1006
1007
1008 #define MAX_USB_STRING_SIZE (127 * 3 + 1)
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018 char *usb_cache_string(struct usb_device *udev, int index)
1019 {
1020 char *buf;
1021 char *smallbuf = NULL;
1022 int len;
1023
1024 if (index <= 0)
1025 return NULL;
1026
1027 buf = kmalloc(MAX_USB_STRING_SIZE, GFP_NOIO);
1028 if (buf) {
1029 len = usb_string(udev, index, buf, MAX_USB_STRING_SIZE);
1030 if (len > 0) {
1031 smallbuf = kmalloc(++len, GFP_NOIO);
1032 if (!smallbuf)
1033 return buf;
1034 memcpy(smallbuf, buf, len);
1035 }
1036 kfree(buf);
1037 }
1038 return smallbuf;
1039 }
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060 int usb_get_device_descriptor(struct usb_device *dev, unsigned int size)
1061 {
1062 struct usb_device_descriptor *desc;
1063 int ret;
1064
1065 if (size > sizeof(*desc))
1066 return -EINVAL;
1067 desc = kmalloc(sizeof(*desc), GFP_NOIO);
1068 if (!desc)
1069 return -ENOMEM;
1070
1071 ret = usb_get_descriptor(dev, USB_DT_DEVICE, 0, desc, size);
1072 if (ret >= 0)
1073 memcpy(&dev->descriptor, desc, size);
1074 kfree(desc);
1075 return ret;
1076 }
1077
1078
1079
1080
1081
1082
1083
1084
1085 int usb_set_isoch_delay(struct usb_device *dev)
1086 {
1087
1088 if (dev->descriptor.bDeviceClass == USB_CLASS_HUB)
1089 return 0;
1090
1091
1092 if (dev->speed < USB_SPEED_SUPER)
1093 return 0;
1094
1095 return usb_control_msg_send(dev, 0,
1096 USB_REQ_SET_ISOCH_DELAY,
1097 USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_DEVICE,
1098 dev->hub_delay, 0, NULL, 0,
1099 USB_CTRL_SET_TIMEOUT,
1100 GFP_NOIO);
1101 }
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127 int usb_get_status(struct usb_device *dev, int recip, int type, int target,
1128 void *data)
1129 {
1130 int ret;
1131 void *status;
1132 int length;
1133
1134 switch (type) {
1135 case USB_STATUS_TYPE_STANDARD:
1136 length = 2;
1137 break;
1138 case USB_STATUS_TYPE_PTM:
1139 if (recip != USB_RECIP_DEVICE)
1140 return -EINVAL;
1141
1142 length = 4;
1143 break;
1144 default:
1145 return -EINVAL;
1146 }
1147
1148 status = kmalloc(length, GFP_KERNEL);
1149 if (!status)
1150 return -ENOMEM;
1151
1152 ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
1153 USB_REQ_GET_STATUS, USB_DIR_IN | recip, USB_STATUS_TYPE_STANDARD,
1154 target, status, length, USB_CTRL_GET_TIMEOUT);
1155
1156 switch (ret) {
1157 case 4:
1158 if (type != USB_STATUS_TYPE_PTM) {
1159 ret = -EIO;
1160 break;
1161 }
1162
1163 *(u32 *) data = le32_to_cpu(*(__le32 *) status);
1164 ret = 0;
1165 break;
1166 case 2:
1167 if (type != USB_STATUS_TYPE_STANDARD) {
1168 ret = -EIO;
1169 break;
1170 }
1171
1172 *(u16 *) data = le16_to_cpu(*(__le16 *) status);
1173 ret = 0;
1174 break;
1175 default:
1176 ret = -EIO;
1177 }
1178
1179 kfree(status);
1180 return ret;
1181 }
1182 EXPORT_SYMBOL_GPL(usb_get_status);
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208 int usb_clear_halt(struct usb_device *dev, int pipe)
1209 {
1210 int result;
1211 int endp = usb_pipeendpoint(pipe);
1212
1213 if (usb_pipein(pipe))
1214 endp |= USB_DIR_IN;
1215
1216
1217
1218
1219
1220 result = usb_control_msg_send(dev, 0,
1221 USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT,
1222 USB_ENDPOINT_HALT, endp, NULL, 0,
1223 USB_CTRL_SET_TIMEOUT, GFP_NOIO);
1224
1225
1226 if (result)
1227 return result;
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237 usb_reset_endpoint(dev, endp);
1238
1239 return 0;
1240 }
1241 EXPORT_SYMBOL_GPL(usb_clear_halt);
1242
1243 static int create_intf_ep_devs(struct usb_interface *intf)
1244 {
1245 struct usb_device *udev = interface_to_usbdev(intf);
1246 struct usb_host_interface *alt = intf->cur_altsetting;
1247 int i;
1248
1249 if (intf->ep_devs_created || intf->unregistering)
1250 return 0;
1251
1252 for (i = 0; i < alt->desc.bNumEndpoints; ++i)
1253 (void) usb_create_ep_devs(&intf->dev, &alt->endpoint[i], udev);
1254 intf->ep_devs_created = 1;
1255 return 0;
1256 }
1257
1258 static void remove_intf_ep_devs(struct usb_interface *intf)
1259 {
1260 struct usb_host_interface *alt = intf->cur_altsetting;
1261 int i;
1262
1263 if (!intf->ep_devs_created)
1264 return;
1265
1266 for (i = 0; i < alt->desc.bNumEndpoints; ++i)
1267 usb_remove_ep_devs(&alt->endpoint[i]);
1268 intf->ep_devs_created = 0;
1269 }
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283 void usb_disable_endpoint(struct usb_device *dev, unsigned int epaddr,
1284 bool reset_hardware)
1285 {
1286 unsigned int epnum = epaddr & USB_ENDPOINT_NUMBER_MASK;
1287 struct usb_host_endpoint *ep;
1288
1289 if (!dev)
1290 return;
1291
1292 if (usb_endpoint_out(epaddr)) {
1293 ep = dev->ep_out[epnum];
1294 if (reset_hardware && epnum != 0)
1295 dev->ep_out[epnum] = NULL;
1296 } else {
1297 ep = dev->ep_in[epnum];
1298 if (reset_hardware && epnum != 0)
1299 dev->ep_in[epnum] = NULL;
1300 }
1301 if (ep) {
1302 ep->enabled = 0;
1303 usb_hcd_flush_endpoint(dev, ep);
1304 if (reset_hardware)
1305 usb_hcd_disable_endpoint(dev, ep);
1306 }
1307 }
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318 void usb_reset_endpoint(struct usb_device *dev, unsigned int epaddr)
1319 {
1320 unsigned int epnum = epaddr & USB_ENDPOINT_NUMBER_MASK;
1321 struct usb_host_endpoint *ep;
1322
1323 if (usb_endpoint_out(epaddr))
1324 ep = dev->ep_out[epnum];
1325 else
1326 ep = dev->ep_in[epnum];
1327 if (ep)
1328 usb_hcd_reset_endpoint(dev, ep);
1329 }
1330 EXPORT_SYMBOL_GPL(usb_reset_endpoint);
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342 void usb_disable_interface(struct usb_device *dev, struct usb_interface *intf,
1343 bool reset_hardware)
1344 {
1345 struct usb_host_interface *alt = intf->cur_altsetting;
1346 int i;
1347
1348 for (i = 0; i < alt->desc.bNumEndpoints; ++i) {
1349 usb_disable_endpoint(dev,
1350 alt->endpoint[i].desc.bEndpointAddress,
1351 reset_hardware);
1352 }
1353 }
1354
1355
1356
1357
1358
1359
1360 static void usb_disable_device_endpoints(struct usb_device *dev, int skip_ep0)
1361 {
1362 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1363 int i;
1364
1365 if (hcd->driver->check_bandwidth) {
1366
1367 for (i = skip_ep0; i < 16; ++i) {
1368 usb_disable_endpoint(dev, i, false);
1369 usb_disable_endpoint(dev, i + USB_DIR_IN, false);
1370 }
1371
1372 mutex_lock(hcd->bandwidth_mutex);
1373 usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
1374 mutex_unlock(hcd->bandwidth_mutex);
1375 }
1376
1377 for (i = skip_ep0; i < 16; ++i) {
1378 usb_disable_endpoint(dev, i, true);
1379 usb_disable_endpoint(dev, i + USB_DIR_IN, true);
1380 }
1381 }
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393 void usb_disable_device(struct usb_device *dev, int skip_ep0)
1394 {
1395 int i;
1396
1397
1398
1399
1400 if (dev->actconfig) {
1401
1402
1403
1404
1405
1406 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++)
1407 dev->actconfig->interface[i]->unregistering = 1;
1408
1409 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
1410 struct usb_interface *interface;
1411
1412
1413 interface = dev->actconfig->interface[i];
1414 if (!device_is_registered(&interface->dev))
1415 continue;
1416 dev_dbg(&dev->dev, "unregistering interface %s\n",
1417 dev_name(&interface->dev));
1418 remove_intf_ep_devs(interface);
1419 device_del(&interface->dev);
1420 }
1421
1422
1423
1424
1425 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
1426 put_device(&dev->actconfig->interface[i]->dev);
1427 dev->actconfig->interface[i] = NULL;
1428 }
1429
1430 usb_disable_usb2_hardware_lpm(dev);
1431 usb_unlocked_disable_lpm(dev);
1432 usb_disable_ltm(dev);
1433
1434 dev->actconfig = NULL;
1435 if (dev->state == USB_STATE_CONFIGURED)
1436 usb_set_device_state(dev, USB_STATE_ADDRESS);
1437 }
1438
1439 dev_dbg(&dev->dev, "%s nuking %s URBs\n", __func__,
1440 skip_ep0 ? "non-ep0" : "all");
1441
1442 usb_disable_device_endpoints(dev, skip_ep0);
1443 }
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454 void usb_enable_endpoint(struct usb_device *dev, struct usb_host_endpoint *ep,
1455 bool reset_ep)
1456 {
1457 int epnum = usb_endpoint_num(&ep->desc);
1458 int is_out = usb_endpoint_dir_out(&ep->desc);
1459 int is_control = usb_endpoint_xfer_control(&ep->desc);
1460
1461 if (reset_ep)
1462 usb_hcd_reset_endpoint(dev, ep);
1463 if (is_out || is_control)
1464 dev->ep_out[epnum] = ep;
1465 if (!is_out || is_control)
1466 dev->ep_in[epnum] = ep;
1467 ep->enabled = 1;
1468 }
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478 void usb_enable_interface(struct usb_device *dev,
1479 struct usb_interface *intf, bool reset_eps)
1480 {
1481 struct usb_host_interface *alt = intf->cur_altsetting;
1482 int i;
1483
1484 for (i = 0; i < alt->desc.bNumEndpoints; ++i)
1485 usb_enable_endpoint(dev, &alt->endpoint[i], reset_eps);
1486 }
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527 int usb_set_interface(struct usb_device *dev, int interface, int alternate)
1528 {
1529 struct usb_interface *iface;
1530 struct usb_host_interface *alt;
1531 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1532 int i, ret, manual = 0;
1533 unsigned int epaddr;
1534 unsigned int pipe;
1535
1536 if (dev->state == USB_STATE_SUSPENDED)
1537 return -EHOSTUNREACH;
1538
1539 iface = usb_ifnum_to_if(dev, interface);
1540 if (!iface) {
1541 dev_dbg(&dev->dev, "selecting invalid interface %d\n",
1542 interface);
1543 return -EINVAL;
1544 }
1545 if (iface->unregistering)
1546 return -ENODEV;
1547
1548 alt = usb_altnum_to_altsetting(iface, alternate);
1549 if (!alt) {
1550 dev_warn(&dev->dev, "selecting invalid altsetting %d\n",
1551 alternate);
1552 return -EINVAL;
1553 }
1554
1555
1556
1557
1558
1559 usb_disable_interface(dev, iface, false);
1560
1561
1562
1563
1564 mutex_lock(hcd->bandwidth_mutex);
1565
1566
1567
1568 if (usb_disable_lpm(dev)) {
1569 dev_err(&iface->dev, "%s Failed to disable LPM\n", __func__);
1570 mutex_unlock(hcd->bandwidth_mutex);
1571 return -ENOMEM;
1572 }
1573
1574 for (i = 0; i < iface->cur_altsetting->desc.bNumEndpoints; i++)
1575 iface->cur_altsetting->endpoint[i].streams = 0;
1576
1577 ret = usb_hcd_alloc_bandwidth(dev, NULL, iface->cur_altsetting, alt);
1578 if (ret < 0) {
1579 dev_info(&dev->dev, "Not enough bandwidth for altsetting %d\n",
1580 alternate);
1581 usb_enable_lpm(dev);
1582 mutex_unlock(hcd->bandwidth_mutex);
1583 return ret;
1584 }
1585
1586 if (dev->quirks & USB_QUIRK_NO_SET_INTF)
1587 ret = -EPIPE;
1588 else
1589 ret = usb_control_msg_send(dev, 0,
1590 USB_REQ_SET_INTERFACE,
1591 USB_RECIP_INTERFACE, alternate,
1592 interface, NULL, 0, 5000,
1593 GFP_NOIO);
1594
1595
1596
1597
1598 if (ret == -EPIPE && iface->num_altsetting == 1) {
1599 dev_dbg(&dev->dev,
1600 "manual set_interface for iface %d, alt %d\n",
1601 interface, alternate);
1602 manual = 1;
1603 } else if (ret) {
1604
1605 usb_hcd_alloc_bandwidth(dev, NULL, alt, iface->cur_altsetting);
1606 usb_enable_lpm(dev);
1607 mutex_unlock(hcd->bandwidth_mutex);
1608 return ret;
1609 }
1610 mutex_unlock(hcd->bandwidth_mutex);
1611
1612
1613
1614
1615
1616
1617
1618
1619 if (iface->cur_altsetting != alt) {
1620 remove_intf_ep_devs(iface);
1621 usb_remove_sysfs_intf_files(iface);
1622 }
1623 usb_disable_interface(dev, iface, true);
1624
1625 iface->cur_altsetting = alt;
1626
1627
1628 usb_unlocked_enable_lpm(dev);
1629
1630
1631
1632
1633
1634
1635 if (manual) {
1636 for (i = 0; i < alt->desc.bNumEndpoints; i++) {
1637 epaddr = alt->endpoint[i].desc.bEndpointAddress;
1638 pipe = __create_pipe(dev,
1639 USB_ENDPOINT_NUMBER_MASK & epaddr) |
1640 (usb_endpoint_out(epaddr) ?
1641 USB_DIR_OUT : USB_DIR_IN);
1642
1643 usb_clear_halt(dev, pipe);
1644 }
1645 }
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658 usb_enable_interface(dev, iface, true);
1659 if (device_is_registered(&iface->dev)) {
1660 usb_create_sysfs_intf_files(iface);
1661 create_intf_ep_devs(iface);
1662 }
1663 return 0;
1664 }
1665 EXPORT_SYMBOL_GPL(usb_set_interface);
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692 int usb_reset_configuration(struct usb_device *dev)
1693 {
1694 int i, retval;
1695 struct usb_host_config *config;
1696 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1697
1698 if (dev->state == USB_STATE_SUSPENDED)
1699 return -EHOSTUNREACH;
1700
1701
1702
1703
1704
1705
1706 usb_disable_device_endpoints(dev, 1);
1707
1708 config = dev->actconfig;
1709 retval = 0;
1710 mutex_lock(hcd->bandwidth_mutex);
1711
1712
1713
1714 if (usb_disable_lpm(dev)) {
1715 dev_err(&dev->dev, "%s Failed to disable LPM\n", __func__);
1716 mutex_unlock(hcd->bandwidth_mutex);
1717 return -ENOMEM;
1718 }
1719
1720
1721 retval = usb_hcd_alloc_bandwidth(dev, config, NULL, NULL);
1722 if (retval < 0) {
1723 usb_enable_lpm(dev);
1724 mutex_unlock(hcd->bandwidth_mutex);
1725 return retval;
1726 }
1727 retval = usb_control_msg_send(dev, 0, USB_REQ_SET_CONFIGURATION, 0,
1728 config->desc.bConfigurationValue, 0,
1729 NULL, 0, USB_CTRL_SET_TIMEOUT,
1730 GFP_NOIO);
1731 if (retval) {
1732 usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
1733 usb_enable_lpm(dev);
1734 mutex_unlock(hcd->bandwidth_mutex);
1735 return retval;
1736 }
1737 mutex_unlock(hcd->bandwidth_mutex);
1738
1739
1740 for (i = 0; i < config->desc.bNumInterfaces; i++) {
1741 struct usb_interface *intf = config->interface[i];
1742 struct usb_host_interface *alt;
1743
1744 alt = usb_altnum_to_altsetting(intf, 0);
1745
1746
1747
1748
1749
1750
1751 if (!alt)
1752 alt = &intf->altsetting[0];
1753
1754 if (alt != intf->cur_altsetting) {
1755 remove_intf_ep_devs(intf);
1756 usb_remove_sysfs_intf_files(intf);
1757 }
1758 intf->cur_altsetting = alt;
1759 usb_enable_interface(dev, intf, true);
1760 if (device_is_registered(&intf->dev)) {
1761 usb_create_sysfs_intf_files(intf);
1762 create_intf_ep_devs(intf);
1763 }
1764 }
1765
1766 usb_unlocked_enable_lpm(dev);
1767 return 0;
1768 }
1769 EXPORT_SYMBOL_GPL(usb_reset_configuration);
1770
1771 static void usb_release_interface(struct device *dev)
1772 {
1773 struct usb_interface *intf = to_usb_interface(dev);
1774 struct usb_interface_cache *intfc =
1775 altsetting_to_usb_interface_cache(intf->altsetting);
1776
1777 kref_put(&intfc->ref, usb_release_interface_cache);
1778 usb_put_dev(interface_to_usbdev(intf));
1779 of_node_put(dev->of_node);
1780 kfree(intf);
1781 }
1782
1783
1784
1785
1786
1787
1788 void usb_deauthorize_interface(struct usb_interface *intf)
1789 {
1790 struct device *dev = &intf->dev;
1791
1792 device_lock(dev->parent);
1793
1794 if (intf->authorized) {
1795 device_lock(dev);
1796 intf->authorized = 0;
1797 device_unlock(dev);
1798
1799 usb_forced_unbind_intf(intf);
1800 }
1801
1802 device_unlock(dev->parent);
1803 }
1804
1805
1806
1807
1808
1809
1810 void usb_authorize_interface(struct usb_interface *intf)
1811 {
1812 struct device *dev = &intf->dev;
1813
1814 if (!intf->authorized) {
1815 device_lock(dev);
1816 intf->authorized = 1;
1817 device_unlock(dev);
1818 }
1819 }
1820
1821 static int usb_if_uevent(struct device *dev, struct kobj_uevent_env *env)
1822 {
1823 struct usb_device *usb_dev;
1824 struct usb_interface *intf;
1825 struct usb_host_interface *alt;
1826
1827 intf = to_usb_interface(dev);
1828 usb_dev = interface_to_usbdev(intf);
1829 alt = intf->cur_altsetting;
1830
1831 if (add_uevent_var(env, "INTERFACE=%d/%d/%d",
1832 alt->desc.bInterfaceClass,
1833 alt->desc.bInterfaceSubClass,
1834 alt->desc.bInterfaceProtocol))
1835 return -ENOMEM;
1836
1837 if (add_uevent_var(env,
1838 "MODALIAS=usb:"
1839 "v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02Xin%02X",
1840 le16_to_cpu(usb_dev->descriptor.idVendor),
1841 le16_to_cpu(usb_dev->descriptor.idProduct),
1842 le16_to_cpu(usb_dev->descriptor.bcdDevice),
1843 usb_dev->descriptor.bDeviceClass,
1844 usb_dev->descriptor.bDeviceSubClass,
1845 usb_dev->descriptor.bDeviceProtocol,
1846 alt->desc.bInterfaceClass,
1847 alt->desc.bInterfaceSubClass,
1848 alt->desc.bInterfaceProtocol,
1849 alt->desc.bInterfaceNumber))
1850 return -ENOMEM;
1851
1852 return 0;
1853 }
1854
1855 struct device_type usb_if_device_type = {
1856 .name = "usb_interface",
1857 .release = usb_release_interface,
1858 .uevent = usb_if_uevent,
1859 };
1860
1861 static struct usb_interface_assoc_descriptor *find_iad(struct usb_device *dev,
1862 struct usb_host_config *config,
1863 u8 inum)
1864 {
1865 struct usb_interface_assoc_descriptor *retval = NULL;
1866 struct usb_interface_assoc_descriptor *intf_assoc;
1867 int first_intf;
1868 int last_intf;
1869 int i;
1870
1871 for (i = 0; (i < USB_MAXIADS && config->intf_assoc[i]); i++) {
1872 intf_assoc = config->intf_assoc[i];
1873 if (intf_assoc->bInterfaceCount == 0)
1874 continue;
1875
1876 first_intf = intf_assoc->bFirstInterface;
1877 last_intf = first_intf + (intf_assoc->bInterfaceCount - 1);
1878 if (inum >= first_intf && inum <= last_intf) {
1879 if (!retval)
1880 retval = intf_assoc;
1881 else
1882 dev_err(&dev->dev, "Interface #%d referenced"
1883 " by multiple IADs\n", inum);
1884 }
1885 }
1886
1887 return retval;
1888 }
1889
1890
1891
1892
1893
1894
1895 static void __usb_queue_reset_device(struct work_struct *ws)
1896 {
1897 int rc;
1898 struct usb_interface *iface =
1899 container_of(ws, struct usb_interface, reset_ws);
1900 struct usb_device *udev = interface_to_usbdev(iface);
1901
1902 rc = usb_lock_device_for_reset(udev, iface);
1903 if (rc >= 0) {
1904 usb_reset_device(udev);
1905 usb_unlock_device(udev);
1906 }
1907 usb_put_intf(iface);
1908 }
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957 int usb_set_configuration(struct usb_device *dev, int configuration)
1958 {
1959 int i, ret;
1960 struct usb_host_config *cp = NULL;
1961 struct usb_interface **new_interfaces = NULL;
1962 struct usb_hcd *hcd = bus_to_hcd(dev->bus);
1963 int n, nintf;
1964
1965 if (dev->authorized == 0 || configuration == -1)
1966 configuration = 0;
1967 else {
1968 for (i = 0; i < dev->descriptor.bNumConfigurations; i++) {
1969 if (dev->config[i].desc.bConfigurationValue ==
1970 configuration) {
1971 cp = &dev->config[i];
1972 break;
1973 }
1974 }
1975 }
1976 if ((!cp && configuration != 0))
1977 return -EINVAL;
1978
1979
1980
1981
1982
1983
1984 if (cp && configuration == 0)
1985 dev_warn(&dev->dev, "config 0 descriptor??\n");
1986
1987
1988
1989 n = nintf = 0;
1990 if (cp) {
1991 nintf = cp->desc.bNumInterfaces;
1992 new_interfaces = kmalloc_array(nintf, sizeof(*new_interfaces),
1993 GFP_NOIO);
1994 if (!new_interfaces)
1995 return -ENOMEM;
1996
1997 for (; n < nintf; ++n) {
1998 new_interfaces[n] = kzalloc(
1999 sizeof(struct usb_interface),
2000 GFP_NOIO);
2001 if (!new_interfaces[n]) {
2002 ret = -ENOMEM;
2003 free_interfaces:
2004 while (--n >= 0)
2005 kfree(new_interfaces[n]);
2006 kfree(new_interfaces);
2007 return ret;
2008 }
2009 }
2010
2011 i = dev->bus_mA - usb_get_max_power(dev, cp);
2012 if (i < 0)
2013 dev_warn(&dev->dev, "new config #%d exceeds power "
2014 "limit by %dmA\n",
2015 configuration, -i);
2016 }
2017
2018
2019 ret = usb_autoresume_device(dev);
2020 if (ret)
2021 goto free_interfaces;
2022
2023
2024
2025
2026 if (dev->state != USB_STATE_ADDRESS)
2027 usb_disable_device(dev, 1);
2028
2029
2030 cancel_async_set_config(dev);
2031
2032
2033
2034
2035
2036
2037
2038 mutex_lock(hcd->bandwidth_mutex);
2039
2040
2041
2042
2043 if (dev->actconfig && usb_disable_lpm(dev)) {
2044 dev_err(&dev->dev, "%s Failed to disable LPM\n", __func__);
2045 mutex_unlock(hcd->bandwidth_mutex);
2046 ret = -ENOMEM;
2047 goto free_interfaces;
2048 }
2049 ret = usb_hcd_alloc_bandwidth(dev, cp, NULL, NULL);
2050 if (ret < 0) {
2051 if (dev->actconfig)
2052 usb_enable_lpm(dev);
2053 mutex_unlock(hcd->bandwidth_mutex);
2054 usb_autosuspend_device(dev);
2055 goto free_interfaces;
2056 }
2057
2058
2059
2060
2061
2062 for (i = 0; i < nintf; ++i) {
2063 struct usb_interface_cache *intfc;
2064 struct usb_interface *intf;
2065 struct usb_host_interface *alt;
2066 u8 ifnum;
2067
2068 cp->interface[i] = intf = new_interfaces[i];
2069 intfc = cp->intf_cache[i];
2070 intf->altsetting = intfc->altsetting;
2071 intf->num_altsetting = intfc->num_altsetting;
2072 intf->authorized = !!HCD_INTF_AUTHORIZED(hcd);
2073 kref_get(&intfc->ref);
2074
2075 alt = usb_altnum_to_altsetting(intf, 0);
2076
2077
2078
2079
2080
2081
2082 if (!alt)
2083 alt = &intf->altsetting[0];
2084
2085 ifnum = alt->desc.bInterfaceNumber;
2086 intf->intf_assoc = find_iad(dev, cp, ifnum);
2087 intf->cur_altsetting = alt;
2088 usb_enable_interface(dev, intf, true);
2089 intf->dev.parent = &dev->dev;
2090 if (usb_of_has_combined_node(dev)) {
2091 device_set_of_node_from_dev(&intf->dev, &dev->dev);
2092 } else {
2093 intf->dev.of_node = usb_of_get_interface_node(dev,
2094 configuration, ifnum);
2095 }
2096 ACPI_COMPANION_SET(&intf->dev, ACPI_COMPANION(&dev->dev));
2097 intf->dev.driver = NULL;
2098 intf->dev.bus = &usb_bus_type;
2099 intf->dev.type = &usb_if_device_type;
2100 intf->dev.groups = usb_interface_groups;
2101 INIT_WORK(&intf->reset_ws, __usb_queue_reset_device);
2102 intf->minor = -1;
2103 device_initialize(&intf->dev);
2104 pm_runtime_no_callbacks(&intf->dev);
2105 dev_set_name(&intf->dev, "%d-%s:%d.%d", dev->bus->busnum,
2106 dev->devpath, configuration, ifnum);
2107 usb_get_dev(dev);
2108 }
2109 kfree(new_interfaces);
2110
2111 ret = usb_control_msg_send(dev, 0, USB_REQ_SET_CONFIGURATION, 0,
2112 configuration, 0, NULL, 0,
2113 USB_CTRL_SET_TIMEOUT, GFP_NOIO);
2114 if (ret && cp) {
2115
2116
2117
2118
2119 usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
2120 for (i = 0; i < nintf; ++i) {
2121 usb_disable_interface(dev, cp->interface[i], true);
2122 put_device(&cp->interface[i]->dev);
2123 cp->interface[i] = NULL;
2124 }
2125 cp = NULL;
2126 }
2127
2128 dev->actconfig = cp;
2129 mutex_unlock(hcd->bandwidth_mutex);
2130
2131 if (!cp) {
2132 usb_set_device_state(dev, USB_STATE_ADDRESS);
2133
2134
2135 usb_autosuspend_device(dev);
2136 return ret;
2137 }
2138 usb_set_device_state(dev, USB_STATE_CONFIGURED);
2139
2140 if (cp->string == NULL &&
2141 !(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
2142 cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
2143
2144
2145 usb_unlocked_enable_lpm(dev);
2146
2147 usb_enable_ltm(dev);
2148
2149
2150
2151
2152
2153
2154
2155 for (i = 0; i < nintf; ++i) {
2156 struct usb_interface *intf = cp->interface[i];
2157
2158 if (intf->dev.of_node &&
2159 !of_device_is_available(intf->dev.of_node)) {
2160 dev_info(&dev->dev, "skipping disabled interface %d\n",
2161 intf->cur_altsetting->desc.bInterfaceNumber);
2162 continue;
2163 }
2164
2165 dev_dbg(&dev->dev,
2166 "adding %s (config #%d, interface %d)\n",
2167 dev_name(&intf->dev), configuration,
2168 intf->cur_altsetting->desc.bInterfaceNumber);
2169 device_enable_async_suspend(&intf->dev);
2170 ret = device_add(&intf->dev);
2171 if (ret != 0) {
2172 dev_err(&dev->dev, "device_add(%s) --> %d\n",
2173 dev_name(&intf->dev), ret);
2174 continue;
2175 }
2176 create_intf_ep_devs(intf);
2177 }
2178
2179 usb_autosuspend_device(dev);
2180 return 0;
2181 }
2182 EXPORT_SYMBOL_GPL(usb_set_configuration);
2183
2184 static LIST_HEAD(set_config_list);
2185 static DEFINE_SPINLOCK(set_config_lock);
2186
2187 struct set_config_request {
2188 struct usb_device *udev;
2189 int config;
2190 struct work_struct work;
2191 struct list_head node;
2192 };
2193
2194
2195 static void driver_set_config_work(struct work_struct *work)
2196 {
2197 struct set_config_request *req =
2198 container_of(work, struct set_config_request, work);
2199 struct usb_device *udev = req->udev;
2200
2201 usb_lock_device(udev);
2202 spin_lock(&set_config_lock);
2203 list_del(&req->node);
2204 spin_unlock(&set_config_lock);
2205
2206 if (req->config >= -1)
2207 usb_set_configuration(udev, req->config);
2208 usb_unlock_device(udev);
2209 usb_put_dev(udev);
2210 kfree(req);
2211 }
2212
2213
2214
2215
2216 static void cancel_async_set_config(struct usb_device *udev)
2217 {
2218 struct set_config_request *req;
2219
2220 spin_lock(&set_config_lock);
2221 list_for_each_entry(req, &set_config_list, node) {
2222 if (req->udev == udev)
2223 req->config = -999;
2224 }
2225 spin_unlock(&set_config_lock);
2226 }
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248 int usb_driver_set_configuration(struct usb_device *udev, int config)
2249 {
2250 struct set_config_request *req;
2251
2252 req = kmalloc(sizeof(*req), GFP_KERNEL);
2253 if (!req)
2254 return -ENOMEM;
2255 req->udev = udev;
2256 req->config = config;
2257 INIT_WORK(&req->work, driver_set_config_work);
2258
2259 spin_lock(&set_config_lock);
2260 list_add(&req->node, &set_config_list);
2261 spin_unlock(&set_config_lock);
2262
2263 usb_get_dev(udev);
2264 schedule_work(&req->work);
2265 return 0;
2266 }
2267 EXPORT_SYMBOL_GPL(usb_driver_set_configuration);
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284 int cdc_parse_cdc_header(struct usb_cdc_parsed_header *hdr,
2285 struct usb_interface *intf,
2286 u8 *buffer,
2287 int buflen)
2288 {
2289
2290 struct usb_cdc_union_desc *union_header = NULL;
2291
2292
2293 struct usb_cdc_header_desc *header = NULL;
2294 struct usb_cdc_ether_desc *ether = NULL;
2295 struct usb_cdc_mdlm_detail_desc *detail = NULL;
2296 struct usb_cdc_mdlm_desc *desc = NULL;
2297
2298 unsigned int elength;
2299 int cnt = 0;
2300
2301 memset(hdr, 0x00, sizeof(struct usb_cdc_parsed_header));
2302 hdr->phonet_magic_present = false;
2303 while (buflen > 0) {
2304 elength = buffer[0];
2305 if (!elength) {
2306 dev_err(&intf->dev, "skipping garbage byte\n");
2307 elength = 1;
2308 goto next_desc;
2309 }
2310 if ((buflen < elength) || (elength < 3)) {
2311 dev_err(&intf->dev, "invalid descriptor buffer length\n");
2312 break;
2313 }
2314 if (buffer[1] != USB_DT_CS_INTERFACE) {
2315 dev_err(&intf->dev, "skipping garbage\n");
2316 goto next_desc;
2317 }
2318
2319 switch (buffer[2]) {
2320 case USB_CDC_UNION_TYPE:
2321 if (elength < sizeof(struct usb_cdc_union_desc))
2322 goto next_desc;
2323 if (union_header) {
2324 dev_err(&intf->dev, "More than one union descriptor, skipping ...\n");
2325 goto next_desc;
2326 }
2327 union_header = (struct usb_cdc_union_desc *)buffer;
2328 break;
2329 case USB_CDC_COUNTRY_TYPE:
2330 if (elength < sizeof(struct usb_cdc_country_functional_desc))
2331 goto next_desc;
2332 hdr->usb_cdc_country_functional_desc =
2333 (struct usb_cdc_country_functional_desc *)buffer;
2334 break;
2335 case USB_CDC_HEADER_TYPE:
2336 if (elength != sizeof(struct usb_cdc_header_desc))
2337 goto next_desc;
2338 if (header)
2339 return -EINVAL;
2340 header = (struct usb_cdc_header_desc *)buffer;
2341 break;
2342 case USB_CDC_ACM_TYPE:
2343 if (elength < sizeof(struct usb_cdc_acm_descriptor))
2344 goto next_desc;
2345 hdr->usb_cdc_acm_descriptor =
2346 (struct usb_cdc_acm_descriptor *)buffer;
2347 break;
2348 case USB_CDC_ETHERNET_TYPE:
2349 if (elength != sizeof(struct usb_cdc_ether_desc))
2350 goto next_desc;
2351 if (ether)
2352 return -EINVAL;
2353 ether = (struct usb_cdc_ether_desc *)buffer;
2354 break;
2355 case USB_CDC_CALL_MANAGEMENT_TYPE:
2356 if (elength < sizeof(struct usb_cdc_call_mgmt_descriptor))
2357 goto next_desc;
2358 hdr->usb_cdc_call_mgmt_descriptor =
2359 (struct usb_cdc_call_mgmt_descriptor *)buffer;
2360 break;
2361 case USB_CDC_DMM_TYPE:
2362 if (elength < sizeof(struct usb_cdc_dmm_desc))
2363 goto next_desc;
2364 hdr->usb_cdc_dmm_desc =
2365 (struct usb_cdc_dmm_desc *)buffer;
2366 break;
2367 case USB_CDC_MDLM_TYPE:
2368 if (elength < sizeof(struct usb_cdc_mdlm_desc))
2369 goto next_desc;
2370 if (desc)
2371 return -EINVAL;
2372 desc = (struct usb_cdc_mdlm_desc *)buffer;
2373 break;
2374 case USB_CDC_MDLM_DETAIL_TYPE:
2375 if (elength < sizeof(struct usb_cdc_mdlm_detail_desc))
2376 goto next_desc;
2377 if (detail)
2378 return -EINVAL;
2379 detail = (struct usb_cdc_mdlm_detail_desc *)buffer;
2380 break;
2381 case USB_CDC_NCM_TYPE:
2382 if (elength < sizeof(struct usb_cdc_ncm_desc))
2383 goto next_desc;
2384 hdr->usb_cdc_ncm_desc = (struct usb_cdc_ncm_desc *)buffer;
2385 break;
2386 case USB_CDC_MBIM_TYPE:
2387 if (elength < sizeof(struct usb_cdc_mbim_desc))
2388 goto next_desc;
2389
2390 hdr->usb_cdc_mbim_desc = (struct usb_cdc_mbim_desc *)buffer;
2391 break;
2392 case USB_CDC_MBIM_EXTENDED_TYPE:
2393 if (elength < sizeof(struct usb_cdc_mbim_extended_desc))
2394 break;
2395 hdr->usb_cdc_mbim_extended_desc =
2396 (struct usb_cdc_mbim_extended_desc *)buffer;
2397 break;
2398 case CDC_PHONET_MAGIC_NUMBER:
2399 hdr->phonet_magic_present = true;
2400 break;
2401 default:
2402
2403
2404
2405
2406 dev_dbg(&intf->dev, "Ignoring descriptor: type %02x, length %ud\n",
2407 buffer[2], elength);
2408 goto next_desc;
2409 }
2410 cnt++;
2411 next_desc:
2412 buflen -= elength;
2413 buffer += elength;
2414 }
2415 hdr->usb_cdc_union_desc = union_header;
2416 hdr->usb_cdc_header_desc = header;
2417 hdr->usb_cdc_mdlm_detail_desc = detail;
2418 hdr->usb_cdc_mdlm_desc = desc;
2419 hdr->usb_cdc_ether_desc = ether;
2420 return cnt;
2421 }
2422
2423 EXPORT_SYMBOL(cdc_parse_cdc_header);