0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include <linux/bcd.h>
0013 #include <linux/module.h>
0014 #include <linux/version.h>
0015 #include <linux/kernel.h>
0016 #include <linux/sched/task_stack.h>
0017 #include <linux/slab.h>
0018 #include <linux/completion.h>
0019 #include <linux/utsname.h>
0020 #include <linux/mm.h>
0021 #include <asm/io.h>
0022 #include <linux/device.h>
0023 #include <linux/dma-mapping.h>
0024 #include <linux/mutex.h>
0025 #include <asm/irq.h>
0026 #include <asm/byteorder.h>
0027 #include <asm/unaligned.h>
0028 #include <linux/platform_device.h>
0029 #include <linux/workqueue.h>
0030 #include <linux/pm_runtime.h>
0031 #include <linux/types.h>
0032 #include <linux/genalloc.h>
0033 #include <linux/io.h>
0034 #include <linux/kcov.h>
0035
0036 #include <linux/phy/phy.h>
0037 #include <linux/usb.h>
0038 #include <linux/usb/hcd.h>
0039 #include <linux/usb/otg.h>
0040
0041 #include "usb.h"
0042 #include "phy.h"
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081 unsigned long usb_hcds_loaded;
0082 EXPORT_SYMBOL_GPL(usb_hcds_loaded);
0083
0084
0085 DEFINE_IDR (usb_bus_idr);
0086 EXPORT_SYMBOL_GPL (usb_bus_idr);
0087
0088
0089 #define USB_MAXBUS 64
0090
0091
0092 DEFINE_MUTEX(usb_bus_idr_lock);
0093 EXPORT_SYMBOL_GPL (usb_bus_idr_lock);
0094
0095
0096 static DEFINE_SPINLOCK(hcd_root_hub_lock);
0097
0098
0099 static DEFINE_SPINLOCK(hcd_urb_list_lock);
0100
0101
0102 static DEFINE_SPINLOCK(hcd_urb_unlink_lock);
0103
0104
0105 DECLARE_WAIT_QUEUE_HEAD(usb_kill_urb_queue);
0106
0107
0108
0109
0110
0111
0112
0113
0114 #define KERNEL_REL bin2bcd(LINUX_VERSION_MAJOR)
0115 #define KERNEL_VER bin2bcd(LINUX_VERSION_PATCHLEVEL)
0116
0117
0118 static const u8 usb31_rh_dev_descriptor[18] = {
0119 0x12,
0120 USB_DT_DEVICE,
0121 0x10, 0x03,
0122
0123 0x09,
0124 0x00,
0125 0x03,
0126 0x09,
0127
0128 0x6b, 0x1d,
0129 0x03, 0x00,
0130 KERNEL_VER, KERNEL_REL,
0131
0132 0x03,
0133 0x02,
0134 0x01,
0135 0x01
0136 };
0137
0138
0139 static const u8 usb3_rh_dev_descriptor[18] = {
0140 0x12,
0141 USB_DT_DEVICE,
0142 0x00, 0x03,
0143
0144 0x09,
0145 0x00,
0146 0x03,
0147 0x09,
0148
0149 0x6b, 0x1d,
0150 0x03, 0x00,
0151 KERNEL_VER, KERNEL_REL,
0152
0153 0x03,
0154 0x02,
0155 0x01,
0156 0x01
0157 };
0158
0159
0160 static const u8 usb25_rh_dev_descriptor[18] = {
0161 0x12,
0162 USB_DT_DEVICE,
0163 0x50, 0x02,
0164
0165 0x09,
0166 0x00,
0167 0x00,
0168 0xFF,
0169
0170 0x6b, 0x1d,
0171 0x02, 0x00,
0172 KERNEL_VER, KERNEL_REL,
0173
0174 0x03,
0175 0x02,
0176 0x01,
0177 0x01
0178 };
0179
0180
0181 static const u8 usb2_rh_dev_descriptor[18] = {
0182 0x12,
0183 USB_DT_DEVICE,
0184 0x00, 0x02,
0185
0186 0x09,
0187 0x00,
0188 0x00,
0189 0x40,
0190
0191 0x6b, 0x1d,
0192 0x02, 0x00,
0193 KERNEL_VER, KERNEL_REL,
0194
0195 0x03,
0196 0x02,
0197 0x01,
0198 0x01
0199 };
0200
0201
0202
0203
0204 static const u8 usb11_rh_dev_descriptor[18] = {
0205 0x12,
0206 USB_DT_DEVICE,
0207 0x10, 0x01,
0208
0209 0x09,
0210 0x00,
0211 0x00,
0212 0x40,
0213
0214 0x6b, 0x1d,
0215 0x01, 0x00,
0216 KERNEL_VER, KERNEL_REL,
0217
0218 0x03,
0219 0x02,
0220 0x01,
0221 0x01
0222 };
0223
0224
0225
0226
0227
0228
0229 static const u8 fs_rh_config_descriptor[] = {
0230
0231
0232 0x09,
0233 USB_DT_CONFIG,
0234 0x19, 0x00,
0235 0x01,
0236 0x01,
0237 0x00,
0238 0xc0,
0239
0240
0241
0242
0243 0x00,
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257 0x09,
0258 USB_DT_INTERFACE,
0259 0x00,
0260 0x00,
0261 0x01,
0262 0x09,
0263 0x00,
0264 0x00,
0265 0x00,
0266
0267
0268 0x07,
0269 USB_DT_ENDPOINT,
0270 0x81,
0271 0x03,
0272 0x02, 0x00,
0273 0xff
0274 };
0275
0276 static const u8 hs_rh_config_descriptor[] = {
0277
0278
0279 0x09,
0280 USB_DT_CONFIG,
0281 0x19, 0x00,
0282 0x01,
0283 0x01,
0284 0x00,
0285 0xc0,
0286
0287
0288
0289
0290 0x00,
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300
0301
0302
0303
0304 0x09,
0305 USB_DT_INTERFACE,
0306 0x00,
0307 0x00,
0308 0x01,
0309 0x09,
0310 0x00,
0311 0x00,
0312 0x00,
0313
0314
0315 0x07,
0316 USB_DT_ENDPOINT,
0317 0x81,
0318 0x03,
0319
0320
0321 (USB_MAXCHILDREN + 1 + 7) / 8, 0x00,
0322 0x0c
0323 };
0324
0325 static const u8 ss_rh_config_descriptor[] = {
0326
0327 0x09,
0328 USB_DT_CONFIG,
0329 0x1f, 0x00,
0330 0x01,
0331 0x01,
0332 0x00,
0333 0xc0,
0334
0335
0336
0337
0338 0x00,
0339
0340
0341 0x09,
0342 USB_DT_INTERFACE,
0343 0x00,
0344 0x00,
0345 0x01,
0346 0x09,
0347 0x00,
0348 0x00,
0349 0x00,
0350
0351
0352 0x07,
0353 USB_DT_ENDPOINT,
0354 0x81,
0355 0x03,
0356
0357
0358 (USB_MAXCHILDREN + 1 + 7) / 8, 0x00,
0359 0x0c,
0360
0361
0362 0x06,
0363 USB_DT_SS_ENDPOINT_COMP,
0364
0365 0x00,
0366 0x00,
0367 0x02, 0x00
0368 };
0369
0370
0371
0372
0373
0374
0375
0376 #define USB_AUTHORIZE_WIRED -1
0377 #define USB_AUTHORIZE_NONE 0
0378 #define USB_AUTHORIZE_ALL 1
0379 #define USB_AUTHORIZE_INTERNAL 2
0380
0381 static int authorized_default = USB_AUTHORIZE_WIRED;
0382 module_param(authorized_default, int, S_IRUGO|S_IWUSR);
0383 MODULE_PARM_DESC(authorized_default,
0384 "Default USB device authorization: 0 is not authorized, 1 is "
0385 "authorized, 2 is authorized for internal devices, -1 is "
0386 "authorized except for wireless USB (default, old behaviour)");
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402 static unsigned
0403 ascii2desc(char const *s, u8 *buf, unsigned len)
0404 {
0405 unsigned n, t = 2 + 2*strlen(s);
0406
0407 if (t > 254)
0408 t = 254;
0409 if (len > t)
0410 len = t;
0411
0412 t += USB_DT_STRING << 8;
0413
0414 n = len;
0415 while (n--) {
0416 *buf++ = t;
0417 if (!n--)
0418 break;
0419 *buf++ = t >> 8;
0420 t = (unsigned char)*s++;
0421 }
0422 return len;
0423 }
0424
0425
0426
0427
0428
0429
0430
0431
0432
0433
0434
0435
0436
0437
0438 static unsigned
0439 rh_string(int id, struct usb_hcd const *hcd, u8 *data, unsigned len)
0440 {
0441 char buf[100];
0442 char const *s;
0443 static char const langids[4] = {4, USB_DT_STRING, 0x09, 0x04};
0444
0445
0446 switch (id) {
0447 case 0:
0448
0449
0450 if (len > 4)
0451 len = 4;
0452 memcpy(data, langids, len);
0453 return len;
0454 case 1:
0455
0456 s = hcd->self.bus_name;
0457 break;
0458 case 2:
0459
0460 s = hcd->product_desc;
0461 break;
0462 case 3:
0463
0464 snprintf (buf, sizeof buf, "%s %s %s", init_utsname()->sysname,
0465 init_utsname()->release, hcd->driver->description);
0466 s = buf;
0467 break;
0468 default:
0469
0470 return 0;
0471 }
0472
0473 return ascii2desc(s, data, len);
0474 }
0475
0476
0477
0478 static int rh_call_control (struct usb_hcd *hcd, struct urb *urb)
0479 {
0480 struct usb_ctrlrequest *cmd;
0481 u16 typeReq, wValue, wIndex, wLength;
0482 u8 *ubuf = urb->transfer_buffer;
0483 unsigned len = 0;
0484 int status;
0485 u8 patch_wakeup = 0;
0486 u8 patch_protocol = 0;
0487 u16 tbuf_size;
0488 u8 *tbuf = NULL;
0489 const u8 *bufp;
0490
0491 might_sleep();
0492
0493 spin_lock_irq(&hcd_root_hub_lock);
0494 status = usb_hcd_link_urb_to_ep(hcd, urb);
0495 spin_unlock_irq(&hcd_root_hub_lock);
0496 if (status)
0497 return status;
0498 urb->hcpriv = hcd;
0499
0500 cmd = (struct usb_ctrlrequest *) urb->setup_packet;
0501 typeReq = (cmd->bRequestType << 8) | cmd->bRequest;
0502 wValue = le16_to_cpu (cmd->wValue);
0503 wIndex = le16_to_cpu (cmd->wIndex);
0504 wLength = le16_to_cpu (cmd->wLength);
0505
0506 if (wLength > urb->transfer_buffer_length)
0507 goto error;
0508
0509
0510
0511
0512
0513 tbuf_size = max_t(u16, sizeof(struct usb_hub_descriptor), wLength);
0514 tbuf = kzalloc(tbuf_size, GFP_KERNEL);
0515 if (!tbuf) {
0516 status = -ENOMEM;
0517 goto err_alloc;
0518 }
0519
0520 bufp = tbuf;
0521
0522
0523 urb->actual_length = 0;
0524 switch (typeReq) {
0525
0526
0527
0528
0529
0530
0531
0532
0533
0534
0535
0536
0537
0538
0539
0540
0541
0542
0543
0544 case DeviceRequest | USB_REQ_GET_STATUS:
0545 tbuf[0] = (device_may_wakeup(&hcd->self.root_hub->dev)
0546 << USB_DEVICE_REMOTE_WAKEUP)
0547 | (1 << USB_DEVICE_SELF_POWERED);
0548 tbuf[1] = 0;
0549 len = 2;
0550 break;
0551 case DeviceOutRequest | USB_REQ_CLEAR_FEATURE:
0552 if (wValue == USB_DEVICE_REMOTE_WAKEUP)
0553 device_set_wakeup_enable(&hcd->self.root_hub->dev, 0);
0554 else
0555 goto error;
0556 break;
0557 case DeviceOutRequest | USB_REQ_SET_FEATURE:
0558 if (device_can_wakeup(&hcd->self.root_hub->dev)
0559 && wValue == USB_DEVICE_REMOTE_WAKEUP)
0560 device_set_wakeup_enable(&hcd->self.root_hub->dev, 1);
0561 else
0562 goto error;
0563 break;
0564 case DeviceRequest | USB_REQ_GET_CONFIGURATION:
0565 tbuf[0] = 1;
0566 len = 1;
0567 fallthrough;
0568 case DeviceOutRequest | USB_REQ_SET_CONFIGURATION:
0569 break;
0570 case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
0571 switch (wValue & 0xff00) {
0572 case USB_DT_DEVICE << 8:
0573 switch (hcd->speed) {
0574 case HCD_USB32:
0575 case HCD_USB31:
0576 bufp = usb31_rh_dev_descriptor;
0577 break;
0578 case HCD_USB3:
0579 bufp = usb3_rh_dev_descriptor;
0580 break;
0581 case HCD_USB25:
0582 bufp = usb25_rh_dev_descriptor;
0583 break;
0584 case HCD_USB2:
0585 bufp = usb2_rh_dev_descriptor;
0586 break;
0587 case HCD_USB11:
0588 bufp = usb11_rh_dev_descriptor;
0589 break;
0590 default:
0591 goto error;
0592 }
0593 len = 18;
0594 if (hcd->has_tt)
0595 patch_protocol = 1;
0596 break;
0597 case USB_DT_CONFIG << 8:
0598 switch (hcd->speed) {
0599 case HCD_USB32:
0600 case HCD_USB31:
0601 case HCD_USB3:
0602 bufp = ss_rh_config_descriptor;
0603 len = sizeof ss_rh_config_descriptor;
0604 break;
0605 case HCD_USB25:
0606 case HCD_USB2:
0607 bufp = hs_rh_config_descriptor;
0608 len = sizeof hs_rh_config_descriptor;
0609 break;
0610 case HCD_USB11:
0611 bufp = fs_rh_config_descriptor;
0612 len = sizeof fs_rh_config_descriptor;
0613 break;
0614 default:
0615 goto error;
0616 }
0617 if (device_can_wakeup(&hcd->self.root_hub->dev))
0618 patch_wakeup = 1;
0619 break;
0620 case USB_DT_STRING << 8:
0621 if ((wValue & 0xff) < 4)
0622 urb->actual_length = rh_string(wValue & 0xff,
0623 hcd, ubuf, wLength);
0624 else
0625 goto error;
0626 break;
0627 case USB_DT_BOS << 8:
0628 goto nongeneric;
0629 default:
0630 goto error;
0631 }
0632 break;
0633 case DeviceRequest | USB_REQ_GET_INTERFACE:
0634 tbuf[0] = 0;
0635 len = 1;
0636 fallthrough;
0637 case DeviceOutRequest | USB_REQ_SET_INTERFACE:
0638 break;
0639 case DeviceOutRequest | USB_REQ_SET_ADDRESS:
0640
0641 dev_dbg (hcd->self.controller, "root hub device address %d\n",
0642 wValue);
0643 break;
0644
0645
0646
0647
0648
0649 case EndpointRequest | USB_REQ_GET_STATUS:
0650
0651 tbuf[0] = 0;
0652 tbuf[1] = 0;
0653 len = 2;
0654 fallthrough;
0655 case EndpointOutRequest | USB_REQ_CLEAR_FEATURE:
0656 case EndpointOutRequest | USB_REQ_SET_FEATURE:
0657 dev_dbg (hcd->self.controller, "no endpoint features yet\n");
0658 break;
0659
0660
0661
0662 default:
0663 nongeneric:
0664
0665 switch (typeReq) {
0666 case GetHubStatus:
0667 len = 4;
0668 break;
0669 case GetPortStatus:
0670 if (wValue == HUB_PORT_STATUS)
0671 len = 4;
0672 else
0673
0674 len = 8;
0675 break;
0676 case GetHubDescriptor:
0677 len = sizeof (struct usb_hub_descriptor);
0678 break;
0679 case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
0680
0681 break;
0682 }
0683 status = hcd->driver->hub_control (hcd,
0684 typeReq, wValue, wIndex,
0685 tbuf, wLength);
0686
0687 if (typeReq == GetHubDescriptor)
0688 usb_hub_adjust_deviceremovable(hcd->self.root_hub,
0689 (struct usb_hub_descriptor *)tbuf);
0690 break;
0691 error:
0692
0693 status = -EPIPE;
0694 }
0695
0696 if (status < 0) {
0697 len = 0;
0698 if (status != -EPIPE) {
0699 dev_dbg (hcd->self.controller,
0700 "CTRL: TypeReq=0x%x val=0x%x "
0701 "idx=0x%x len=%d ==> %d\n",
0702 typeReq, wValue, wIndex,
0703 wLength, status);
0704 }
0705 } else if (status > 0) {
0706
0707 len = status;
0708 status = 0;
0709 }
0710 if (len) {
0711 if (urb->transfer_buffer_length < len)
0712 len = urb->transfer_buffer_length;
0713 urb->actual_length = len;
0714
0715 memcpy (ubuf, bufp, len);
0716
0717
0718 if (patch_wakeup &&
0719 len > offsetof (struct usb_config_descriptor,
0720 bmAttributes))
0721 ((struct usb_config_descriptor *)ubuf)->bmAttributes
0722 |= USB_CONFIG_ATT_WAKEUP;
0723
0724
0725 if (patch_protocol &&
0726 len > offsetof(struct usb_device_descriptor,
0727 bDeviceProtocol))
0728 ((struct usb_device_descriptor *) ubuf)->
0729 bDeviceProtocol = USB_HUB_PR_HS_SINGLE_TT;
0730 }
0731
0732 kfree(tbuf);
0733 err_alloc:
0734
0735
0736 spin_lock_irq(&hcd_root_hub_lock);
0737 usb_hcd_unlink_urb_from_ep(hcd, urb);
0738 usb_hcd_giveback_urb(hcd, urb, status);
0739 spin_unlock_irq(&hcd_root_hub_lock);
0740 return 0;
0741 }
0742
0743
0744
0745
0746
0747
0748
0749
0750
0751
0752 void usb_hcd_poll_rh_status(struct usb_hcd *hcd)
0753 {
0754 struct urb *urb;
0755 int length;
0756 int status;
0757 unsigned long flags;
0758 char buffer[6];
0759
0760 if (unlikely(!hcd->rh_pollable))
0761 return;
0762 if (!hcd->uses_new_polling && !hcd->status_urb)
0763 return;
0764
0765 length = hcd->driver->hub_status_data(hcd, buffer);
0766 if (length > 0) {
0767
0768
0769 spin_lock_irqsave(&hcd_root_hub_lock, flags);
0770 urb = hcd->status_urb;
0771 if (urb) {
0772 clear_bit(HCD_FLAG_POLL_PENDING, &hcd->flags);
0773 hcd->status_urb = NULL;
0774 if (urb->transfer_buffer_length >= length) {
0775 status = 0;
0776 } else {
0777 status = -EOVERFLOW;
0778 length = urb->transfer_buffer_length;
0779 }
0780 urb->actual_length = length;
0781 memcpy(urb->transfer_buffer, buffer, length);
0782
0783 usb_hcd_unlink_urb_from_ep(hcd, urb);
0784 usb_hcd_giveback_urb(hcd, urb, status);
0785 } else {
0786 length = 0;
0787 set_bit(HCD_FLAG_POLL_PENDING, &hcd->flags);
0788 }
0789 spin_unlock_irqrestore(&hcd_root_hub_lock, flags);
0790 }
0791
0792
0793
0794
0795
0796 if (hcd->uses_new_polling ? HCD_POLL_RH(hcd) :
0797 (length == 0 && hcd->status_urb != NULL))
0798 mod_timer (&hcd->rh_timer, (jiffies/(HZ/4) + 1) * (HZ/4));
0799 }
0800 EXPORT_SYMBOL_GPL(usb_hcd_poll_rh_status);
0801
0802
0803 static void rh_timer_func (struct timer_list *t)
0804 {
0805 struct usb_hcd *_hcd = from_timer(_hcd, t, rh_timer);
0806
0807 usb_hcd_poll_rh_status(_hcd);
0808 }
0809
0810
0811
0812 static int rh_queue_status (struct usb_hcd *hcd, struct urb *urb)
0813 {
0814 int retval;
0815 unsigned long flags;
0816 unsigned len = 1 + (urb->dev->maxchild / 8);
0817
0818 spin_lock_irqsave (&hcd_root_hub_lock, flags);
0819 if (hcd->status_urb || urb->transfer_buffer_length < len) {
0820 dev_dbg (hcd->self.controller, "not queuing rh status urb\n");
0821 retval = -EINVAL;
0822 goto done;
0823 }
0824
0825 retval = usb_hcd_link_urb_to_ep(hcd, urb);
0826 if (retval)
0827 goto done;
0828
0829 hcd->status_urb = urb;
0830 urb->hcpriv = hcd;
0831 if (!hcd->uses_new_polling)
0832 mod_timer(&hcd->rh_timer, (jiffies/(HZ/4) + 1) * (HZ/4));
0833
0834
0835 else if (HCD_POLL_PENDING(hcd))
0836 mod_timer(&hcd->rh_timer, jiffies);
0837 retval = 0;
0838 done:
0839 spin_unlock_irqrestore (&hcd_root_hub_lock, flags);
0840 return retval;
0841 }
0842
0843 static int rh_urb_enqueue (struct usb_hcd *hcd, struct urb *urb)
0844 {
0845 if (usb_endpoint_xfer_int(&urb->ep->desc))
0846 return rh_queue_status (hcd, urb);
0847 if (usb_endpoint_xfer_control(&urb->ep->desc))
0848 return rh_call_control (hcd, urb);
0849 return -EINVAL;
0850 }
0851
0852
0853
0854
0855
0856
0857 static int usb_rh_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
0858 {
0859 unsigned long flags;
0860 int rc;
0861
0862 spin_lock_irqsave(&hcd_root_hub_lock, flags);
0863 rc = usb_hcd_check_unlink_urb(hcd, urb, status);
0864 if (rc)
0865 goto done;
0866
0867 if (usb_endpoint_num(&urb->ep->desc) == 0) {
0868 ;
0869
0870 } else {
0871 if (!hcd->uses_new_polling)
0872 del_timer (&hcd->rh_timer);
0873 if (urb == hcd->status_urb) {
0874 hcd->status_urb = NULL;
0875 usb_hcd_unlink_urb_from_ep(hcd, urb);
0876 usb_hcd_giveback_urb(hcd, urb, status);
0877 }
0878 }
0879 done:
0880 spin_unlock_irqrestore(&hcd_root_hub_lock, flags);
0881 return rc;
0882 }
0883
0884
0885
0886
0887
0888
0889
0890
0891
0892
0893
0894 static void usb_bus_init (struct usb_bus *bus)
0895 {
0896 memset (&bus->devmap, 0, sizeof(struct usb_devmap));
0897
0898 bus->devnum_next = 1;
0899
0900 bus->root_hub = NULL;
0901 bus->busnum = -1;
0902 bus->bandwidth_allocated = 0;
0903 bus->bandwidth_int_reqs = 0;
0904 bus->bandwidth_isoc_reqs = 0;
0905 mutex_init(&bus->devnum_next_mutex);
0906 }
0907
0908
0909
0910
0911
0912
0913
0914
0915
0916
0917
0918
0919
0920
0921 static int usb_register_bus(struct usb_bus *bus)
0922 {
0923 int result = -E2BIG;
0924 int busnum;
0925
0926 mutex_lock(&usb_bus_idr_lock);
0927 busnum = idr_alloc(&usb_bus_idr, bus, 1, USB_MAXBUS, GFP_KERNEL);
0928 if (busnum < 0) {
0929 pr_err("%s: failed to get bus number\n", usbcore_name);
0930 goto error_find_busnum;
0931 }
0932 bus->busnum = busnum;
0933 mutex_unlock(&usb_bus_idr_lock);
0934
0935 usb_notify_add_bus(bus);
0936
0937 dev_info (bus->controller, "new USB bus registered, assigned bus "
0938 "number %d\n", bus->busnum);
0939 return 0;
0940
0941 error_find_busnum:
0942 mutex_unlock(&usb_bus_idr_lock);
0943 return result;
0944 }
0945
0946
0947
0948
0949
0950
0951
0952
0953
0954
0955 static void usb_deregister_bus (struct usb_bus *bus)
0956 {
0957 dev_info (bus->controller, "USB bus %d deregistered\n", bus->busnum);
0958
0959
0960
0961
0962
0963
0964 mutex_lock(&usb_bus_idr_lock);
0965 idr_remove(&usb_bus_idr, bus->busnum);
0966 mutex_unlock(&usb_bus_idr_lock);
0967
0968 usb_notify_remove_bus(bus);
0969 }
0970
0971
0972
0973
0974
0975
0976
0977
0978
0979
0980
0981
0982 static int register_root_hub(struct usb_hcd *hcd)
0983 {
0984 struct device *parent_dev = hcd->self.controller;
0985 struct usb_device *usb_dev = hcd->self.root_hub;
0986 const int devnum = 1;
0987 int retval;
0988
0989 usb_dev->devnum = devnum;
0990 usb_dev->bus->devnum_next = devnum + 1;
0991 set_bit (devnum, usb_dev->bus->devmap.devicemap);
0992 usb_set_device_state(usb_dev, USB_STATE_ADDRESS);
0993
0994 mutex_lock(&usb_bus_idr_lock);
0995
0996 usb_dev->ep0.desc.wMaxPacketSize = cpu_to_le16(64);
0997 retval = usb_get_device_descriptor(usb_dev, USB_DT_DEVICE_SIZE);
0998 if (retval != sizeof usb_dev->descriptor) {
0999 mutex_unlock(&usb_bus_idr_lock);
1000 dev_dbg (parent_dev, "can't read %s device descriptor %d\n",
1001 dev_name(&usb_dev->dev), retval);
1002 return (retval < 0) ? retval : -EMSGSIZE;
1003 }
1004
1005 if (le16_to_cpu(usb_dev->descriptor.bcdUSB) >= 0x0201) {
1006 retval = usb_get_bos_descriptor(usb_dev);
1007 if (!retval) {
1008 usb_dev->lpm_capable = usb_device_supports_lpm(usb_dev);
1009 } else if (usb_dev->speed >= USB_SPEED_SUPER) {
1010 mutex_unlock(&usb_bus_idr_lock);
1011 dev_dbg(parent_dev, "can't read %s bos descriptor %d\n",
1012 dev_name(&usb_dev->dev), retval);
1013 return retval;
1014 }
1015 }
1016
1017 retval = usb_new_device (usb_dev);
1018 if (retval) {
1019 dev_err (parent_dev, "can't register root hub for %s, %d\n",
1020 dev_name(&usb_dev->dev), retval);
1021 } else {
1022 spin_lock_irq (&hcd_root_hub_lock);
1023 hcd->rh_registered = 1;
1024 spin_unlock_irq (&hcd_root_hub_lock);
1025
1026
1027 if (HCD_DEAD(hcd))
1028 usb_hc_died (hcd);
1029 }
1030 mutex_unlock(&usb_bus_idr_lock);
1031
1032 return retval;
1033 }
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046 void usb_hcd_start_port_resume(struct usb_bus *bus, int portnum)
1047 {
1048 unsigned bit = 1 << portnum;
1049
1050 if (!(bus->resuming_ports & bit)) {
1051 bus->resuming_ports |= bit;
1052 pm_runtime_get_noresume(&bus->root_hub->dev);
1053 }
1054 }
1055 EXPORT_SYMBOL_GPL(usb_hcd_start_port_resume);
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068 void usb_hcd_end_port_resume(struct usb_bus *bus, int portnum)
1069 {
1070 unsigned bit = 1 << portnum;
1071
1072 if (bus->resuming_ports & bit) {
1073 bus->resuming_ports &= ~bit;
1074 pm_runtime_put_noidle(&bus->root_hub->dev);
1075 }
1076 }
1077 EXPORT_SYMBOL_GPL(usb_hcd_end_port_resume);
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094 long usb_calc_bus_time (int speed, int is_input, int isoc, int bytecount)
1095 {
1096 unsigned long tmp;
1097
1098 switch (speed) {
1099 case USB_SPEED_LOW:
1100 if (is_input) {
1101 tmp = (67667L * (31L + 10L * BitTime (bytecount))) / 1000L;
1102 return 64060L + (2 * BW_HUB_LS_SETUP) + BW_HOST_DELAY + tmp;
1103 } else {
1104 tmp = (66700L * (31L + 10L * BitTime (bytecount))) / 1000L;
1105 return 64107L + (2 * BW_HUB_LS_SETUP) + BW_HOST_DELAY + tmp;
1106 }
1107 case USB_SPEED_FULL:
1108 if (isoc) {
1109 tmp = (8354L * (31L + 10L * BitTime (bytecount))) / 1000L;
1110 return ((is_input) ? 7268L : 6265L) + BW_HOST_DELAY + tmp;
1111 } else {
1112 tmp = (8354L * (31L + 10L * BitTime (bytecount))) / 1000L;
1113 return 9107L + BW_HOST_DELAY + tmp;
1114 }
1115 case USB_SPEED_HIGH:
1116
1117 if (isoc)
1118 tmp = HS_NSECS_ISO (bytecount);
1119 else
1120 tmp = HS_NSECS (bytecount);
1121 return tmp;
1122 default:
1123 pr_debug ("%s: bogus device speed!\n", usbcore_name);
1124 return -1;
1125 }
1126 }
1127 EXPORT_SYMBOL_GPL(usb_calc_bus_time);
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153 int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb)
1154 {
1155 int rc = 0;
1156
1157 spin_lock(&hcd_urb_list_lock);
1158
1159
1160 if (unlikely(atomic_read(&urb->reject))) {
1161 rc = -EPERM;
1162 goto done;
1163 }
1164
1165 if (unlikely(!urb->ep->enabled)) {
1166 rc = -ENOENT;
1167 goto done;
1168 }
1169
1170 if (unlikely(!urb->dev->can_submit)) {
1171 rc = -EHOSTUNREACH;
1172 goto done;
1173 }
1174
1175
1176
1177
1178
1179 if (HCD_RH_RUNNING(hcd)) {
1180 urb->unlinked = 0;
1181 list_add_tail(&urb->urb_list, &urb->ep->urb_list);
1182 } else {
1183 rc = -ESHUTDOWN;
1184 goto done;
1185 }
1186 done:
1187 spin_unlock(&hcd_urb_list_lock);
1188 return rc;
1189 }
1190 EXPORT_SYMBOL_GPL(usb_hcd_link_urb_to_ep);
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211 int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb,
1212 int status)
1213 {
1214 struct list_head *tmp;
1215
1216
1217 list_for_each(tmp, &urb->ep->urb_list) {
1218 if (tmp == &urb->urb_list)
1219 break;
1220 }
1221 if (tmp != &urb->urb_list)
1222 return -EIDRM;
1223
1224
1225
1226
1227 if (urb->unlinked)
1228 return -EBUSY;
1229 urb->unlinked = status;
1230 return 0;
1231 }
1232 EXPORT_SYMBOL_GPL(usb_hcd_check_unlink_urb);
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244 void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb)
1245 {
1246
1247 spin_lock(&hcd_urb_list_lock);
1248 list_del_init(&urb->urb_list);
1249 spin_unlock(&hcd_urb_list_lock);
1250 }
1251 EXPORT_SYMBOL_GPL(usb_hcd_unlink_urb_from_ep);
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280 static int hcd_alloc_coherent(struct usb_bus *bus,
1281 gfp_t mem_flags, dma_addr_t *dma_handle,
1282 void **vaddr_handle, size_t size,
1283 enum dma_data_direction dir)
1284 {
1285 unsigned char *vaddr;
1286
1287 if (*vaddr_handle == NULL) {
1288 WARN_ON_ONCE(1);
1289 return -EFAULT;
1290 }
1291
1292 vaddr = hcd_buffer_alloc(bus, size + sizeof(unsigned long),
1293 mem_flags, dma_handle);
1294 if (!vaddr)
1295 return -ENOMEM;
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305 put_unaligned((unsigned long)*vaddr_handle,
1306 (unsigned long *)(vaddr + size));
1307
1308 if (dir == DMA_TO_DEVICE)
1309 memcpy(vaddr, *vaddr_handle, size);
1310
1311 *vaddr_handle = vaddr;
1312 return 0;
1313 }
1314
1315 static void hcd_free_coherent(struct usb_bus *bus, dma_addr_t *dma_handle,
1316 void **vaddr_handle, size_t size,
1317 enum dma_data_direction dir)
1318 {
1319 unsigned char *vaddr = *vaddr_handle;
1320
1321 vaddr = (void *)get_unaligned((unsigned long *)(vaddr + size));
1322
1323 if (dir == DMA_FROM_DEVICE)
1324 memcpy(vaddr, *vaddr_handle, size);
1325
1326 hcd_buffer_free(bus, size + sizeof(vaddr), *vaddr_handle, *dma_handle);
1327
1328 *vaddr_handle = vaddr;
1329 *dma_handle = 0;
1330 }
1331
1332 void usb_hcd_unmap_urb_setup_for_dma(struct usb_hcd *hcd, struct urb *urb)
1333 {
1334 if (IS_ENABLED(CONFIG_HAS_DMA) &&
1335 (urb->transfer_flags & URB_SETUP_MAP_SINGLE))
1336 dma_unmap_single(hcd->self.sysdev,
1337 urb->setup_dma,
1338 sizeof(struct usb_ctrlrequest),
1339 DMA_TO_DEVICE);
1340 else if (urb->transfer_flags & URB_SETUP_MAP_LOCAL)
1341 hcd_free_coherent(urb->dev->bus,
1342 &urb->setup_dma,
1343 (void **) &urb->setup_packet,
1344 sizeof(struct usb_ctrlrequest),
1345 DMA_TO_DEVICE);
1346
1347
1348 urb->transfer_flags &= ~(URB_SETUP_MAP_SINGLE | URB_SETUP_MAP_LOCAL);
1349 }
1350 EXPORT_SYMBOL_GPL(usb_hcd_unmap_urb_setup_for_dma);
1351
1352 static void unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
1353 {
1354 if (hcd->driver->unmap_urb_for_dma)
1355 hcd->driver->unmap_urb_for_dma(hcd, urb);
1356 else
1357 usb_hcd_unmap_urb_for_dma(hcd, urb);
1358 }
1359
1360 void usb_hcd_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
1361 {
1362 enum dma_data_direction dir;
1363
1364 usb_hcd_unmap_urb_setup_for_dma(hcd, urb);
1365
1366 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
1367 if (IS_ENABLED(CONFIG_HAS_DMA) &&
1368 (urb->transfer_flags & URB_DMA_MAP_SG))
1369 dma_unmap_sg(hcd->self.sysdev,
1370 urb->sg,
1371 urb->num_sgs,
1372 dir);
1373 else if (IS_ENABLED(CONFIG_HAS_DMA) &&
1374 (urb->transfer_flags & URB_DMA_MAP_PAGE))
1375 dma_unmap_page(hcd->self.sysdev,
1376 urb->transfer_dma,
1377 urb->transfer_buffer_length,
1378 dir);
1379 else if (IS_ENABLED(CONFIG_HAS_DMA) &&
1380 (urb->transfer_flags & URB_DMA_MAP_SINGLE))
1381 dma_unmap_single(hcd->self.sysdev,
1382 urb->transfer_dma,
1383 urb->transfer_buffer_length,
1384 dir);
1385 else if (urb->transfer_flags & URB_MAP_LOCAL)
1386 hcd_free_coherent(urb->dev->bus,
1387 &urb->transfer_dma,
1388 &urb->transfer_buffer,
1389 urb->transfer_buffer_length,
1390 dir);
1391
1392
1393 urb->transfer_flags &= ~(URB_DMA_MAP_SG | URB_DMA_MAP_PAGE |
1394 URB_DMA_MAP_SINGLE | URB_MAP_LOCAL);
1395 }
1396 EXPORT_SYMBOL_GPL(usb_hcd_unmap_urb_for_dma);
1397
1398 static int map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
1399 gfp_t mem_flags)
1400 {
1401 if (hcd->driver->map_urb_for_dma)
1402 return hcd->driver->map_urb_for_dma(hcd, urb, mem_flags);
1403 else
1404 return usb_hcd_map_urb_for_dma(hcd, urb, mem_flags);
1405 }
1406
1407 int usb_hcd_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
1408 gfp_t mem_flags)
1409 {
1410 enum dma_data_direction dir;
1411 int ret = 0;
1412
1413
1414
1415
1416
1417
1418
1419 if (usb_endpoint_xfer_control(&urb->ep->desc)) {
1420 if (hcd->self.uses_pio_for_control)
1421 return ret;
1422 if (hcd->localmem_pool) {
1423 ret = hcd_alloc_coherent(
1424 urb->dev->bus, mem_flags,
1425 &urb->setup_dma,
1426 (void **)&urb->setup_packet,
1427 sizeof(struct usb_ctrlrequest),
1428 DMA_TO_DEVICE);
1429 if (ret)
1430 return ret;
1431 urb->transfer_flags |= URB_SETUP_MAP_LOCAL;
1432 } else if (hcd_uses_dma(hcd)) {
1433 if (object_is_on_stack(urb->setup_packet)) {
1434 WARN_ONCE(1, "setup packet is on stack\n");
1435 return -EAGAIN;
1436 }
1437
1438 urb->setup_dma = dma_map_single(
1439 hcd->self.sysdev,
1440 urb->setup_packet,
1441 sizeof(struct usb_ctrlrequest),
1442 DMA_TO_DEVICE);
1443 if (dma_mapping_error(hcd->self.sysdev,
1444 urb->setup_dma))
1445 return -EAGAIN;
1446 urb->transfer_flags |= URB_SETUP_MAP_SINGLE;
1447 }
1448 }
1449
1450 dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
1451 if (urb->transfer_buffer_length != 0
1452 && !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)) {
1453 if (hcd->localmem_pool) {
1454 ret = hcd_alloc_coherent(
1455 urb->dev->bus, mem_flags,
1456 &urb->transfer_dma,
1457 &urb->transfer_buffer,
1458 urb->transfer_buffer_length,
1459 dir);
1460 if (ret == 0)
1461 urb->transfer_flags |= URB_MAP_LOCAL;
1462 } else if (hcd_uses_dma(hcd)) {
1463 if (urb->num_sgs) {
1464 int n;
1465
1466
1467 if (usb_endpoint_xfer_isoc(&urb->ep->desc)) {
1468 WARN_ON(1);
1469 return -EINVAL;
1470 }
1471
1472 n = dma_map_sg(
1473 hcd->self.sysdev,
1474 urb->sg,
1475 urb->num_sgs,
1476 dir);
1477 if (n <= 0)
1478 ret = -EAGAIN;
1479 else
1480 urb->transfer_flags |= URB_DMA_MAP_SG;
1481 urb->num_mapped_sgs = n;
1482 if (n != urb->num_sgs)
1483 urb->transfer_flags |=
1484 URB_DMA_SG_COMBINED;
1485 } else if (urb->sg) {
1486 struct scatterlist *sg = urb->sg;
1487 urb->transfer_dma = dma_map_page(
1488 hcd->self.sysdev,
1489 sg_page(sg),
1490 sg->offset,
1491 urb->transfer_buffer_length,
1492 dir);
1493 if (dma_mapping_error(hcd->self.sysdev,
1494 urb->transfer_dma))
1495 ret = -EAGAIN;
1496 else
1497 urb->transfer_flags |= URB_DMA_MAP_PAGE;
1498 } else if (object_is_on_stack(urb->transfer_buffer)) {
1499 WARN_ONCE(1, "transfer buffer is on stack\n");
1500 ret = -EAGAIN;
1501 } else {
1502 urb->transfer_dma = dma_map_single(
1503 hcd->self.sysdev,
1504 urb->transfer_buffer,
1505 urb->transfer_buffer_length,
1506 dir);
1507 if (dma_mapping_error(hcd->self.sysdev,
1508 urb->transfer_dma))
1509 ret = -EAGAIN;
1510 else
1511 urb->transfer_flags |= URB_DMA_MAP_SINGLE;
1512 }
1513 }
1514 if (ret && (urb->transfer_flags & (URB_SETUP_MAP_SINGLE |
1515 URB_SETUP_MAP_LOCAL)))
1516 usb_hcd_unmap_urb_for_dma(hcd, urb);
1517 }
1518 return ret;
1519 }
1520 EXPORT_SYMBOL_GPL(usb_hcd_map_urb_for_dma);
1521
1522
1523
1524
1525
1526
1527
1528
1529 int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
1530 {
1531 int status;
1532 struct usb_hcd *hcd = bus_to_hcd(urb->dev->bus);
1533
1534
1535
1536
1537
1538 usb_get_urb(urb);
1539 atomic_inc(&urb->use_count);
1540 atomic_inc(&urb->dev->urbnum);
1541 usbmon_urb_submit(&hcd->self, urb);
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551 if (is_root_hub(urb->dev)) {
1552 status = rh_urb_enqueue(hcd, urb);
1553 } else {
1554 status = map_urb_for_dma(hcd, urb, mem_flags);
1555 if (likely(status == 0)) {
1556 status = hcd->driver->urb_enqueue(hcd, urb, mem_flags);
1557 if (unlikely(status))
1558 unmap_urb_for_dma(hcd, urb);
1559 }
1560 }
1561
1562 if (unlikely(status)) {
1563 usbmon_urb_submit_error(&hcd->self, urb, status);
1564 urb->hcpriv = NULL;
1565 INIT_LIST_HEAD(&urb->urb_list);
1566 atomic_dec(&urb->use_count);
1567
1568
1569
1570
1571
1572 smp_mb__after_atomic();
1573
1574 atomic_dec(&urb->dev->urbnum);
1575 if (atomic_read(&urb->reject))
1576 wake_up(&usb_kill_urb_queue);
1577 usb_put_urb(urb);
1578 }
1579 return status;
1580 }
1581
1582
1583
1584
1585
1586
1587
1588
1589 static int unlink1(struct usb_hcd *hcd, struct urb *urb, int status)
1590 {
1591 int value;
1592
1593 if (is_root_hub(urb->dev))
1594 value = usb_rh_urb_dequeue(hcd, urb, status);
1595 else {
1596
1597
1598
1599
1600 value = hcd->driver->urb_dequeue(hcd, urb, status);
1601 }
1602 return value;
1603 }
1604
1605
1606
1607
1608
1609
1610
1611 int usb_hcd_unlink_urb (struct urb *urb, int status)
1612 {
1613 struct usb_hcd *hcd;
1614 struct usb_device *udev = urb->dev;
1615 int retval = -EIDRM;
1616 unsigned long flags;
1617
1618
1619
1620
1621
1622
1623 spin_lock_irqsave(&hcd_urb_unlink_lock, flags);
1624 if (atomic_read(&urb->use_count) > 0) {
1625 retval = 0;
1626 usb_get_dev(udev);
1627 }
1628 spin_unlock_irqrestore(&hcd_urb_unlink_lock, flags);
1629 if (retval == 0) {
1630 hcd = bus_to_hcd(urb->dev->bus);
1631 retval = unlink1(hcd, urb, status);
1632 if (retval == 0)
1633 retval = -EINPROGRESS;
1634 else if (retval != -EIDRM && retval != -EBUSY)
1635 dev_dbg(&udev->dev, "hcd_unlink_urb %pK fail %d\n",
1636 urb, retval);
1637 usb_put_dev(udev);
1638 }
1639 return retval;
1640 }
1641
1642
1643
1644 static void __usb_hcd_giveback_urb(struct urb *urb)
1645 {
1646 struct usb_hcd *hcd = bus_to_hcd(urb->dev->bus);
1647 struct usb_anchor *anchor = urb->anchor;
1648 int status = urb->unlinked;
1649
1650 urb->hcpriv = NULL;
1651 if (unlikely((urb->transfer_flags & URB_SHORT_NOT_OK) &&
1652 urb->actual_length < urb->transfer_buffer_length &&
1653 !status))
1654 status = -EREMOTEIO;
1655
1656 unmap_urb_for_dma(hcd, urb);
1657 usbmon_urb_complete(&hcd->self, urb, status);
1658 usb_anchor_suspend_wakeups(anchor);
1659 usb_unanchor_urb(urb);
1660 if (likely(status == 0))
1661 usb_led_activity(USB_LED_EVENT_HOST);
1662
1663
1664 urb->status = status;
1665
1666
1667
1668
1669
1670 kcov_remote_start_usb_softirq((u64)urb->dev->bus->busnum);
1671 urb->complete(urb);
1672 kcov_remote_stop_softirq();
1673
1674 usb_anchor_resume_wakeups(anchor);
1675 atomic_dec(&urb->use_count);
1676
1677
1678
1679
1680
1681 smp_mb__after_atomic();
1682
1683 if (unlikely(atomic_read(&urb->reject)))
1684 wake_up(&usb_kill_urb_queue);
1685 usb_put_urb(urb);
1686 }
1687
1688 static void usb_giveback_urb_bh(struct tasklet_struct *t)
1689 {
1690 struct giveback_urb_bh *bh = from_tasklet(bh, t, bh);
1691 struct list_head local_list;
1692
1693 spin_lock_irq(&bh->lock);
1694 bh->running = true;
1695 list_replace_init(&bh->head, &local_list);
1696 spin_unlock_irq(&bh->lock);
1697
1698 while (!list_empty(&local_list)) {
1699 struct urb *urb;
1700
1701 urb = list_entry(local_list.next, struct urb, urb_list);
1702 list_del_init(&urb->urb_list);
1703 bh->completing_ep = urb->ep;
1704 __usb_hcd_giveback_urb(urb);
1705 bh->completing_ep = NULL;
1706 }
1707
1708
1709
1710
1711
1712 spin_lock_irq(&bh->lock);
1713 if (!list_empty(&bh->head)) {
1714 if (bh->high_prio)
1715 tasklet_hi_schedule(&bh->bh);
1716 else
1717 tasklet_schedule(&bh->bh);
1718 }
1719 bh->running = false;
1720 spin_unlock_irq(&bh->lock);
1721 }
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744 void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb, int status)
1745 {
1746 struct giveback_urb_bh *bh;
1747 bool running;
1748
1749
1750 if (likely(!urb->unlinked))
1751 urb->unlinked = status;
1752
1753 if (!hcd_giveback_urb_in_bh(hcd) && !is_root_hub(urb->dev)) {
1754 __usb_hcd_giveback_urb(urb);
1755 return;
1756 }
1757
1758 if (usb_pipeisoc(urb->pipe) || usb_pipeint(urb->pipe))
1759 bh = &hcd->high_prio_bh;
1760 else
1761 bh = &hcd->low_prio_bh;
1762
1763 spin_lock(&bh->lock);
1764 list_add_tail(&urb->urb_list, &bh->head);
1765 running = bh->running;
1766 spin_unlock(&bh->lock);
1767
1768 if (running)
1769 ;
1770 else if (bh->high_prio)
1771 tasklet_hi_schedule(&bh->bh);
1772 else
1773 tasklet_schedule(&bh->bh);
1774 }
1775 EXPORT_SYMBOL_GPL(usb_hcd_giveback_urb);
1776
1777
1778
1779
1780
1781
1782
1783 void usb_hcd_flush_endpoint(struct usb_device *udev,
1784 struct usb_host_endpoint *ep)
1785 {
1786 struct usb_hcd *hcd;
1787 struct urb *urb;
1788
1789 if (!ep)
1790 return;
1791 might_sleep();
1792 hcd = bus_to_hcd(udev->bus);
1793
1794
1795 spin_lock_irq(&hcd_urb_list_lock);
1796 rescan:
1797 list_for_each_entry_reverse(urb, &ep->urb_list, urb_list) {
1798 int is_in;
1799
1800 if (urb->unlinked)
1801 continue;
1802 usb_get_urb (urb);
1803 is_in = usb_urb_dir_in(urb);
1804 spin_unlock(&hcd_urb_list_lock);
1805
1806
1807 unlink1(hcd, urb, -ESHUTDOWN);
1808 dev_dbg (hcd->self.controller,
1809 "shutdown urb %pK ep%d%s-%s\n",
1810 urb, usb_endpoint_num(&ep->desc),
1811 is_in ? "in" : "out",
1812 usb_ep_type_string(usb_endpoint_type(&ep->desc)));
1813 usb_put_urb (urb);
1814
1815
1816 spin_lock(&hcd_urb_list_lock);
1817 goto rescan;
1818 }
1819 spin_unlock_irq(&hcd_urb_list_lock);
1820
1821
1822 while (!list_empty (&ep->urb_list)) {
1823 spin_lock_irq(&hcd_urb_list_lock);
1824
1825
1826 urb = NULL;
1827 if (!list_empty (&ep->urb_list)) {
1828 urb = list_entry (ep->urb_list.prev, struct urb,
1829 urb_list);
1830 usb_get_urb (urb);
1831 }
1832 spin_unlock_irq(&hcd_urb_list_lock);
1833
1834 if (urb) {
1835 usb_kill_urb (urb);
1836 usb_put_urb (urb);
1837 }
1838 }
1839 }
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862 int usb_hcd_alloc_bandwidth(struct usb_device *udev,
1863 struct usb_host_config *new_config,
1864 struct usb_host_interface *cur_alt,
1865 struct usb_host_interface *new_alt)
1866 {
1867 int num_intfs, i, j;
1868 struct usb_host_interface *alt = NULL;
1869 int ret = 0;
1870 struct usb_hcd *hcd;
1871 struct usb_host_endpoint *ep;
1872
1873 hcd = bus_to_hcd(udev->bus);
1874 if (!hcd->driver->check_bandwidth)
1875 return 0;
1876
1877
1878 if (!new_config && !cur_alt) {
1879 for (i = 1; i < 16; ++i) {
1880 ep = udev->ep_out[i];
1881 if (ep)
1882 hcd->driver->drop_endpoint(hcd, udev, ep);
1883 ep = udev->ep_in[i];
1884 if (ep)
1885 hcd->driver->drop_endpoint(hcd, udev, ep);
1886 }
1887 hcd->driver->check_bandwidth(hcd, udev);
1888 return 0;
1889 }
1890
1891
1892
1893
1894
1895 if (new_config) {
1896 num_intfs = new_config->desc.bNumInterfaces;
1897
1898
1899
1900 for (i = 1; i < 16; ++i) {
1901 ep = udev->ep_out[i];
1902 if (ep) {
1903 ret = hcd->driver->drop_endpoint(hcd, udev, ep);
1904 if (ret < 0)
1905 goto reset;
1906 }
1907 ep = udev->ep_in[i];
1908 if (ep) {
1909 ret = hcd->driver->drop_endpoint(hcd, udev, ep);
1910 if (ret < 0)
1911 goto reset;
1912 }
1913 }
1914 for (i = 0; i < num_intfs; ++i) {
1915 struct usb_host_interface *first_alt;
1916 int iface_num;
1917
1918 first_alt = &new_config->intf_cache[i]->altsetting[0];
1919 iface_num = first_alt->desc.bInterfaceNumber;
1920
1921 alt = usb_find_alt_setting(new_config, iface_num, 0);
1922 if (!alt)
1923
1924 alt = first_alt;
1925
1926 for (j = 0; j < alt->desc.bNumEndpoints; j++) {
1927 ret = hcd->driver->add_endpoint(hcd, udev, &alt->endpoint[j]);
1928 if (ret < 0)
1929 goto reset;
1930 }
1931 }
1932 }
1933 if (cur_alt && new_alt) {
1934 struct usb_interface *iface = usb_ifnum_to_if(udev,
1935 cur_alt->desc.bInterfaceNumber);
1936
1937 if (!iface)
1938 return -EINVAL;
1939 if (iface->resetting_device) {
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949 cur_alt = usb_altnum_to_altsetting(iface, 0);
1950 if (!cur_alt)
1951 cur_alt = &iface->altsetting[0];
1952 }
1953
1954
1955 for (i = 0; i < cur_alt->desc.bNumEndpoints; i++) {
1956 ret = hcd->driver->drop_endpoint(hcd, udev,
1957 &cur_alt->endpoint[i]);
1958 if (ret < 0)
1959 goto reset;
1960 }
1961
1962 for (i = 0; i < new_alt->desc.bNumEndpoints; i++) {
1963 ret = hcd->driver->add_endpoint(hcd, udev,
1964 &new_alt->endpoint[i]);
1965 if (ret < 0)
1966 goto reset;
1967 }
1968 }
1969 ret = hcd->driver->check_bandwidth(hcd, udev);
1970 reset:
1971 if (ret < 0)
1972 hcd->driver->reset_bandwidth(hcd, udev);
1973 return ret;
1974 }
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984 void usb_hcd_disable_endpoint(struct usb_device *udev,
1985 struct usb_host_endpoint *ep)
1986 {
1987 struct usb_hcd *hcd;
1988
1989 might_sleep();
1990 hcd = bus_to_hcd(udev->bus);
1991 if (hcd->driver->endpoint_disable)
1992 hcd->driver->endpoint_disable(hcd, ep);
1993 }
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003 void usb_hcd_reset_endpoint(struct usb_device *udev,
2004 struct usb_host_endpoint *ep)
2005 {
2006 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2007
2008 if (hcd->driver->endpoint_reset)
2009 hcd->driver->endpoint_reset(hcd, ep);
2010 else {
2011 int epnum = usb_endpoint_num(&ep->desc);
2012 int is_out = usb_endpoint_dir_out(&ep->desc);
2013 int is_control = usb_endpoint_xfer_control(&ep->desc);
2014
2015 usb_settoggle(udev, epnum, is_out, 0);
2016 if (is_control)
2017 usb_settoggle(udev, epnum, !is_out, 0);
2018 }
2019 }
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036 int usb_alloc_streams(struct usb_interface *interface,
2037 struct usb_host_endpoint **eps, unsigned int num_eps,
2038 unsigned int num_streams, gfp_t mem_flags)
2039 {
2040 struct usb_hcd *hcd;
2041 struct usb_device *dev;
2042 int i, ret;
2043
2044 dev = interface_to_usbdev(interface);
2045 hcd = bus_to_hcd(dev->bus);
2046 if (!hcd->driver->alloc_streams || !hcd->driver->free_streams)
2047 return -EINVAL;
2048 if (dev->speed < USB_SPEED_SUPER)
2049 return -EINVAL;
2050 if (dev->state < USB_STATE_CONFIGURED)
2051 return -ENODEV;
2052
2053 for (i = 0; i < num_eps; i++) {
2054
2055 if (!usb_endpoint_xfer_bulk(&eps[i]->desc))
2056 return -EINVAL;
2057
2058 if (eps[i]->streams)
2059 return -EINVAL;
2060 }
2061
2062 ret = hcd->driver->alloc_streams(hcd, dev, eps, num_eps,
2063 num_streams, mem_flags);
2064 if (ret < 0)
2065 return ret;
2066
2067 for (i = 0; i < num_eps; i++)
2068 eps[i]->streams = ret;
2069
2070 return ret;
2071 }
2072 EXPORT_SYMBOL_GPL(usb_alloc_streams);
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086 int usb_free_streams(struct usb_interface *interface,
2087 struct usb_host_endpoint **eps, unsigned int num_eps,
2088 gfp_t mem_flags)
2089 {
2090 struct usb_hcd *hcd;
2091 struct usb_device *dev;
2092 int i, ret;
2093
2094 dev = interface_to_usbdev(interface);
2095 hcd = bus_to_hcd(dev->bus);
2096 if (dev->speed < USB_SPEED_SUPER)
2097 return -EINVAL;
2098
2099
2100 for (i = 0; i < num_eps; i++)
2101 if (!eps[i] || !eps[i]->streams)
2102 return -EINVAL;
2103
2104 ret = hcd->driver->free_streams(hcd, dev, eps, num_eps, mem_flags);
2105 if (ret < 0)
2106 return ret;
2107
2108 for (i = 0; i < num_eps; i++)
2109 eps[i]->streams = 0;
2110
2111 return ret;
2112 }
2113 EXPORT_SYMBOL_GPL(usb_free_streams);
2114
2115
2116
2117
2118
2119
2120 void usb_hcd_synchronize_unlinks(struct usb_device *udev)
2121 {
2122 spin_lock_irq(&hcd_urb_unlink_lock);
2123 spin_unlock_irq(&hcd_urb_unlink_lock);
2124 }
2125
2126
2127
2128
2129 int usb_hcd_get_frame_number (struct usb_device *udev)
2130 {
2131 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2132
2133 if (!HCD_RH_RUNNING(hcd))
2134 return -ESHUTDOWN;
2135 return hcd->driver->get_frame_number (hcd);
2136 }
2137
2138
2139 #ifdef CONFIG_USB_HCD_TEST_MODE
2140
2141 static void usb_ehset_completion(struct urb *urb)
2142 {
2143 struct completion *done = urb->context;
2144
2145 complete(done);
2146 }
2147
2148
2149
2150
2151
2152
2153 static struct urb *request_single_step_set_feature_urb(
2154 struct usb_device *udev,
2155 void *dr,
2156 void *buf,
2157 struct completion *done)
2158 {
2159 struct urb *urb;
2160 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2161 struct usb_host_endpoint *ep;
2162
2163 urb = usb_alloc_urb(0, GFP_KERNEL);
2164 if (!urb)
2165 return NULL;
2166
2167 urb->pipe = usb_rcvctrlpipe(udev, 0);
2168 ep = (usb_pipein(urb->pipe) ? udev->ep_in : udev->ep_out)
2169 [usb_pipeendpoint(urb->pipe)];
2170 if (!ep) {
2171 usb_free_urb(urb);
2172 return NULL;
2173 }
2174
2175 urb->ep = ep;
2176 urb->dev = udev;
2177 urb->setup_packet = (void *)dr;
2178 urb->transfer_buffer = buf;
2179 urb->transfer_buffer_length = USB_DT_DEVICE_SIZE;
2180 urb->complete = usb_ehset_completion;
2181 urb->status = -EINPROGRESS;
2182 urb->actual_length = 0;
2183 urb->transfer_flags = URB_DIR_IN;
2184 usb_get_urb(urb);
2185 atomic_inc(&urb->use_count);
2186 atomic_inc(&urb->dev->urbnum);
2187 if (map_urb_for_dma(hcd, urb, GFP_KERNEL)) {
2188 usb_put_urb(urb);
2189 usb_free_urb(urb);
2190 return NULL;
2191 }
2192
2193 urb->context = done;
2194 return urb;
2195 }
2196
2197 int ehset_single_step_set_feature(struct usb_hcd *hcd, int port)
2198 {
2199 int retval = -ENOMEM;
2200 struct usb_ctrlrequest *dr;
2201 struct urb *urb;
2202 struct usb_device *udev;
2203 struct usb_device_descriptor *buf;
2204 DECLARE_COMPLETION_ONSTACK(done);
2205
2206
2207 udev = usb_hub_find_child(hcd->self.root_hub, port);
2208 if (!udev) {
2209 dev_err(hcd->self.controller, "No device attached to the RootHub\n");
2210 return -ENODEV;
2211 }
2212 buf = kmalloc(USB_DT_DEVICE_SIZE, GFP_KERNEL);
2213 if (!buf)
2214 return -ENOMEM;
2215
2216 dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL);
2217 if (!dr) {
2218 kfree(buf);
2219 return -ENOMEM;
2220 }
2221
2222
2223 dr->bRequestType = USB_DIR_IN;
2224 dr->bRequest = USB_REQ_GET_DESCRIPTOR;
2225 dr->wValue = cpu_to_le16(USB_DT_DEVICE << 8);
2226 dr->wIndex = 0;
2227 dr->wLength = cpu_to_le16(USB_DT_DEVICE_SIZE);
2228 urb = request_single_step_set_feature_urb(udev, dr, buf, &done);
2229 if (!urb)
2230 goto cleanup;
2231
2232
2233 retval = hcd->driver->submit_single_step_set_feature(hcd, urb, 1);
2234 if (retval)
2235 goto out1;
2236 if (!wait_for_completion_timeout(&done, msecs_to_jiffies(2000))) {
2237 usb_kill_urb(urb);
2238 retval = -ETIMEDOUT;
2239 dev_err(hcd->self.controller,
2240 "%s SETUP stage timed out on ep0\n", __func__);
2241 goto out1;
2242 }
2243 msleep(15 * 1000);
2244
2245
2246 urb->status = -EINPROGRESS;
2247 usb_get_urb(urb);
2248 atomic_inc(&urb->use_count);
2249 atomic_inc(&urb->dev->urbnum);
2250 retval = hcd->driver->submit_single_step_set_feature(hcd, urb, 0);
2251 if (!retval && !wait_for_completion_timeout(&done,
2252 msecs_to_jiffies(2000))) {
2253 usb_kill_urb(urb);
2254 retval = -ETIMEDOUT;
2255 dev_err(hcd->self.controller,
2256 "%s IN stage timed out on ep0\n", __func__);
2257 }
2258 out1:
2259 usb_free_urb(urb);
2260 cleanup:
2261 kfree(dr);
2262 kfree(buf);
2263 return retval;
2264 }
2265 EXPORT_SYMBOL_GPL(ehset_single_step_set_feature);
2266 #endif
2267
2268
2269
2270 #ifdef CONFIG_PM
2271
2272 int hcd_bus_suspend(struct usb_device *rhdev, pm_message_t msg)
2273 {
2274 struct usb_hcd *hcd = bus_to_hcd(rhdev->bus);
2275 int status;
2276 int old_state = hcd->state;
2277
2278 dev_dbg(&rhdev->dev, "bus %ssuspend, wakeup %d\n",
2279 (PMSG_IS_AUTO(msg) ? "auto-" : ""),
2280 rhdev->do_remote_wakeup);
2281 if (HCD_DEAD(hcd)) {
2282 dev_dbg(&rhdev->dev, "skipped %s of dead bus\n", "suspend");
2283 return 0;
2284 }
2285
2286 if (!hcd->driver->bus_suspend) {
2287 status = -ENOENT;
2288 } else {
2289 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2290 hcd->state = HC_STATE_QUIESCING;
2291 status = hcd->driver->bus_suspend(hcd);
2292 }
2293 if (status == 0) {
2294 usb_set_device_state(rhdev, USB_STATE_SUSPENDED);
2295 hcd->state = HC_STATE_SUSPENDED;
2296
2297 if (!PMSG_IS_AUTO(msg))
2298 usb_phy_roothub_suspend(hcd->self.sysdev,
2299 hcd->phy_roothub);
2300
2301
2302 if (rhdev->do_remote_wakeup) {
2303 char buffer[6];
2304
2305 status = hcd->driver->hub_status_data(hcd, buffer);
2306 if (status != 0) {
2307 dev_dbg(&rhdev->dev, "suspend raced with wakeup event\n");
2308 hcd_bus_resume(rhdev, PMSG_AUTO_RESUME);
2309 status = -EBUSY;
2310 }
2311 }
2312 } else {
2313 spin_lock_irq(&hcd_root_hub_lock);
2314 if (!HCD_DEAD(hcd)) {
2315 set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2316 hcd->state = old_state;
2317 }
2318 spin_unlock_irq(&hcd_root_hub_lock);
2319 dev_dbg(&rhdev->dev, "bus %s fail, err %d\n",
2320 "suspend", status);
2321 }
2322 return status;
2323 }
2324
2325 int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg)
2326 {
2327 struct usb_hcd *hcd = bus_to_hcd(rhdev->bus);
2328 int status;
2329 int old_state = hcd->state;
2330
2331 dev_dbg(&rhdev->dev, "usb %sresume\n",
2332 (PMSG_IS_AUTO(msg) ? "auto-" : ""));
2333 if (HCD_DEAD(hcd)) {
2334 dev_dbg(&rhdev->dev, "skipped %s of dead bus\n", "resume");
2335 return 0;
2336 }
2337
2338 if (!PMSG_IS_AUTO(msg)) {
2339 status = usb_phy_roothub_resume(hcd->self.sysdev,
2340 hcd->phy_roothub);
2341 if (status)
2342 return status;
2343 }
2344
2345 if (!hcd->driver->bus_resume)
2346 return -ENOENT;
2347 if (HCD_RH_RUNNING(hcd))
2348 return 0;
2349
2350 hcd->state = HC_STATE_RESUMING;
2351 status = hcd->driver->bus_resume(hcd);
2352 clear_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags);
2353 if (status == 0)
2354 status = usb_phy_roothub_calibrate(hcd->phy_roothub);
2355
2356 if (status == 0) {
2357 struct usb_device *udev;
2358 int port1;
2359
2360 spin_lock_irq(&hcd_root_hub_lock);
2361 if (!HCD_DEAD(hcd)) {
2362 usb_set_device_state(rhdev, rhdev->actconfig
2363 ? USB_STATE_CONFIGURED
2364 : USB_STATE_ADDRESS);
2365 set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2366 hcd->state = HC_STATE_RUNNING;
2367 }
2368 spin_unlock_irq(&hcd_root_hub_lock);
2369
2370
2371
2372
2373
2374
2375
2376 usb_hub_for_each_child(rhdev, port1, udev) {
2377 if (udev->state != USB_STATE_NOTATTACHED &&
2378 !udev->port_is_suspended) {
2379 usleep_range(10000, 11000);
2380 break;
2381 }
2382 }
2383 } else {
2384 hcd->state = old_state;
2385 usb_phy_roothub_suspend(hcd->self.sysdev, hcd->phy_roothub);
2386 dev_dbg(&rhdev->dev, "bus %s fail, err %d\n",
2387 "resume", status);
2388 if (status != -ESHUTDOWN)
2389 usb_hc_died(hcd);
2390 }
2391 return status;
2392 }
2393
2394
2395 static void hcd_resume_work(struct work_struct *work)
2396 {
2397 struct usb_hcd *hcd = container_of(work, struct usb_hcd, wakeup_work);
2398 struct usb_device *udev = hcd->self.root_hub;
2399
2400 usb_remote_wakeup(udev);
2401 }
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412 void usb_hcd_resume_root_hub (struct usb_hcd *hcd)
2413 {
2414 unsigned long flags;
2415
2416 spin_lock_irqsave (&hcd_root_hub_lock, flags);
2417 if (hcd->rh_registered) {
2418 pm_wakeup_event(&hcd->self.root_hub->dev, 0);
2419 set_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags);
2420 queue_work(pm_wq, &hcd->wakeup_work);
2421 }
2422 spin_unlock_irqrestore (&hcd_root_hub_lock, flags);
2423 }
2424 EXPORT_SYMBOL_GPL(usb_hcd_resume_root_hub);
2425
2426 #endif
2427
2428
2429
2430 #ifdef CONFIG_USB_OTG
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445 int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num)
2446 {
2447 struct usb_hcd *hcd;
2448 int status = -EOPNOTSUPP;
2449
2450
2451
2452
2453
2454 hcd = bus_to_hcd(bus);
2455 if (port_num && hcd->driver->start_port_reset)
2456 status = hcd->driver->start_port_reset(hcd, port_num);
2457
2458
2459
2460
2461 if (status == 0)
2462 mod_timer(&hcd->rh_timer, jiffies + msecs_to_jiffies(10));
2463 return status;
2464 }
2465 EXPORT_SYMBOL_GPL(usb_bus_start_enum);
2466
2467 #endif
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481 irqreturn_t usb_hcd_irq (int irq, void *__hcd)
2482 {
2483 struct usb_hcd *hcd = __hcd;
2484 irqreturn_t rc;
2485
2486 if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd)))
2487 rc = IRQ_NONE;
2488 else if (hcd->driver->irq(hcd) == IRQ_NONE)
2489 rc = IRQ_NONE;
2490 else
2491 rc = IRQ_HANDLED;
2492
2493 return rc;
2494 }
2495 EXPORT_SYMBOL_GPL(usb_hcd_irq);
2496
2497
2498
2499
2500 static void hcd_died_work(struct work_struct *work)
2501 {
2502 struct usb_hcd *hcd = container_of(work, struct usb_hcd, died_work);
2503 static char *env[] = {
2504 "ERROR=DEAD",
2505 NULL
2506 };
2507
2508
2509 kobject_uevent_env(&hcd->self.root_hub->dev.kobj, KOBJ_OFFLINE, env);
2510 }
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522 void usb_hc_died (struct usb_hcd *hcd)
2523 {
2524 unsigned long flags;
2525
2526 dev_err (hcd->self.controller, "HC died; cleaning up\n");
2527
2528 spin_lock_irqsave (&hcd_root_hub_lock, flags);
2529 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2530 set_bit(HCD_FLAG_DEAD, &hcd->flags);
2531 if (hcd->rh_registered) {
2532 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2533
2534
2535 usb_set_device_state (hcd->self.root_hub,
2536 USB_STATE_NOTATTACHED);
2537 usb_kick_hub_wq(hcd->self.root_hub);
2538 }
2539 if (usb_hcd_is_primary_hcd(hcd) && hcd->shared_hcd) {
2540 hcd = hcd->shared_hcd;
2541 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2542 set_bit(HCD_FLAG_DEAD, &hcd->flags);
2543 if (hcd->rh_registered) {
2544 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2545
2546
2547 usb_set_device_state(hcd->self.root_hub,
2548 USB_STATE_NOTATTACHED);
2549 usb_kick_hub_wq(hcd->self.root_hub);
2550 }
2551 }
2552
2553
2554 if (usb_hcd_is_primary_hcd(hcd))
2555 schedule_work(&hcd->died_work);
2556 else
2557 schedule_work(&hcd->primary_hcd->died_work);
2558
2559 spin_unlock_irqrestore (&hcd_root_hub_lock, flags);
2560
2561 }
2562 EXPORT_SYMBOL_GPL (usb_hc_died);
2563
2564
2565
2566 static void init_giveback_urb_bh(struct giveback_urb_bh *bh)
2567 {
2568
2569 spin_lock_init(&bh->lock);
2570 INIT_LIST_HEAD(&bh->head);
2571 tasklet_setup(&bh->bh, usb_giveback_urb_bh);
2572 }
2573
2574 struct usb_hcd *__usb_create_hcd(const struct hc_driver *driver,
2575 struct device *sysdev, struct device *dev, const char *bus_name,
2576 struct usb_hcd *primary_hcd)
2577 {
2578 struct usb_hcd *hcd;
2579
2580 hcd = kzalloc(sizeof(*hcd) + driver->hcd_priv_size, GFP_KERNEL);
2581 if (!hcd)
2582 return NULL;
2583 if (primary_hcd == NULL) {
2584 hcd->address0_mutex = kmalloc(sizeof(*hcd->address0_mutex),
2585 GFP_KERNEL);
2586 if (!hcd->address0_mutex) {
2587 kfree(hcd);
2588 dev_dbg(dev, "hcd address0 mutex alloc failed\n");
2589 return NULL;
2590 }
2591 mutex_init(hcd->address0_mutex);
2592 hcd->bandwidth_mutex = kmalloc(sizeof(*hcd->bandwidth_mutex),
2593 GFP_KERNEL);
2594 if (!hcd->bandwidth_mutex) {
2595 kfree(hcd->address0_mutex);
2596 kfree(hcd);
2597 dev_dbg(dev, "hcd bandwidth mutex alloc failed\n");
2598 return NULL;
2599 }
2600 mutex_init(hcd->bandwidth_mutex);
2601 dev_set_drvdata(dev, hcd);
2602 } else {
2603 mutex_lock(&usb_port_peer_mutex);
2604 hcd->address0_mutex = primary_hcd->address0_mutex;
2605 hcd->bandwidth_mutex = primary_hcd->bandwidth_mutex;
2606 hcd->primary_hcd = primary_hcd;
2607 primary_hcd->primary_hcd = primary_hcd;
2608 hcd->shared_hcd = primary_hcd;
2609 primary_hcd->shared_hcd = hcd;
2610 mutex_unlock(&usb_port_peer_mutex);
2611 }
2612
2613 kref_init(&hcd->kref);
2614
2615 usb_bus_init(&hcd->self);
2616 hcd->self.controller = dev;
2617 hcd->self.sysdev = sysdev;
2618 hcd->self.bus_name = bus_name;
2619
2620 timer_setup(&hcd->rh_timer, rh_timer_func, 0);
2621 #ifdef CONFIG_PM
2622 INIT_WORK(&hcd->wakeup_work, hcd_resume_work);
2623 #endif
2624
2625 INIT_WORK(&hcd->died_work, hcd_died_work);
2626
2627 hcd->driver = driver;
2628 hcd->speed = driver->flags & HCD_MASK;
2629 hcd->product_desc = (driver->product_desc) ? driver->product_desc :
2630 "USB Host Controller";
2631 return hcd;
2632 }
2633 EXPORT_SYMBOL_GPL(__usb_create_hcd);
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652 struct usb_hcd *usb_create_shared_hcd(const struct hc_driver *driver,
2653 struct device *dev, const char *bus_name,
2654 struct usb_hcd *primary_hcd)
2655 {
2656 return __usb_create_hcd(driver, dev, dev, bus_name, primary_hcd);
2657 }
2658 EXPORT_SYMBOL_GPL(usb_create_shared_hcd);
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675 struct usb_hcd *usb_create_hcd(const struct hc_driver *driver,
2676 struct device *dev, const char *bus_name)
2677 {
2678 return __usb_create_hcd(driver, dev, dev, bus_name, NULL);
2679 }
2680 EXPORT_SYMBOL_GPL(usb_create_hcd);
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691 static void hcd_release(struct kref *kref)
2692 {
2693 struct usb_hcd *hcd = container_of (kref, struct usb_hcd, kref);
2694
2695 mutex_lock(&usb_port_peer_mutex);
2696 if (hcd->shared_hcd) {
2697 struct usb_hcd *peer = hcd->shared_hcd;
2698
2699 peer->shared_hcd = NULL;
2700 peer->primary_hcd = NULL;
2701 } else {
2702 kfree(hcd->address0_mutex);
2703 kfree(hcd->bandwidth_mutex);
2704 }
2705 mutex_unlock(&usb_port_peer_mutex);
2706 kfree(hcd);
2707 }
2708
2709 struct usb_hcd *usb_get_hcd (struct usb_hcd *hcd)
2710 {
2711 if (hcd)
2712 kref_get (&hcd->kref);
2713 return hcd;
2714 }
2715 EXPORT_SYMBOL_GPL(usb_get_hcd);
2716
2717 void usb_put_hcd (struct usb_hcd *hcd)
2718 {
2719 if (hcd)
2720 kref_put (&hcd->kref, hcd_release);
2721 }
2722 EXPORT_SYMBOL_GPL(usb_put_hcd);
2723
2724 int usb_hcd_is_primary_hcd(struct usb_hcd *hcd)
2725 {
2726 if (!hcd->primary_hcd)
2727 return 1;
2728 return hcd == hcd->primary_hcd;
2729 }
2730 EXPORT_SYMBOL_GPL(usb_hcd_is_primary_hcd);
2731
2732 int usb_hcd_find_raw_port_number(struct usb_hcd *hcd, int port1)
2733 {
2734 if (!hcd->driver->find_raw_port_number)
2735 return port1;
2736
2737 return hcd->driver->find_raw_port_number(hcd, port1);
2738 }
2739
2740 static int usb_hcd_request_irqs(struct usb_hcd *hcd,
2741 unsigned int irqnum, unsigned long irqflags)
2742 {
2743 int retval;
2744
2745 if (hcd->driver->irq) {
2746
2747 snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d",
2748 hcd->driver->description, hcd->self.busnum);
2749 retval = request_irq(irqnum, &usb_hcd_irq, irqflags,
2750 hcd->irq_descr, hcd);
2751 if (retval != 0) {
2752 dev_err(hcd->self.controller,
2753 "request interrupt %d failed\n",
2754 irqnum);
2755 return retval;
2756 }
2757 hcd->irq = irqnum;
2758 dev_info(hcd->self.controller, "irq %d, %s 0x%08llx\n", irqnum,
2759 (hcd->driver->flags & HCD_MEMORY) ?
2760 "io mem" : "io port",
2761 (unsigned long long)hcd->rsrc_start);
2762 } else {
2763 hcd->irq = 0;
2764 if (hcd->rsrc_start)
2765 dev_info(hcd->self.controller, "%s 0x%08llx\n",
2766 (hcd->driver->flags & HCD_MEMORY) ?
2767 "io mem" : "io port",
2768 (unsigned long long)hcd->rsrc_start);
2769 }
2770 return 0;
2771 }
2772
2773
2774
2775
2776
2777 static void usb_put_invalidate_rhdev(struct usb_hcd *hcd)
2778 {
2779 struct usb_device *rhdev;
2780
2781 mutex_lock(&usb_port_peer_mutex);
2782 rhdev = hcd->self.root_hub;
2783 hcd->self.root_hub = NULL;
2784 mutex_unlock(&usb_port_peer_mutex);
2785 usb_put_dev(rhdev);
2786 }
2787
2788
2789
2790
2791
2792
2793
2794 static void usb_stop_hcd(struct usb_hcd *hcd)
2795 {
2796 hcd->rh_pollable = 0;
2797 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2798 del_timer_sync(&hcd->rh_timer);
2799
2800 hcd->driver->stop(hcd);
2801 hcd->state = HC_STATE_HALT;
2802
2803
2804 clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
2805 del_timer_sync(&hcd->rh_timer);
2806 }
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818 int usb_add_hcd(struct usb_hcd *hcd,
2819 unsigned int irqnum, unsigned long irqflags)
2820 {
2821 int retval;
2822 struct usb_device *rhdev;
2823 struct usb_hcd *shared_hcd;
2824
2825 if (!hcd->skip_phy_initialization && usb_hcd_is_primary_hcd(hcd)) {
2826 hcd->phy_roothub = usb_phy_roothub_alloc(hcd->self.sysdev);
2827 if (IS_ERR(hcd->phy_roothub))
2828 return PTR_ERR(hcd->phy_roothub);
2829
2830 retval = usb_phy_roothub_init(hcd->phy_roothub);
2831 if (retval)
2832 return retval;
2833
2834 retval = usb_phy_roothub_set_mode(hcd->phy_roothub,
2835 PHY_MODE_USB_HOST_SS);
2836 if (retval)
2837 retval = usb_phy_roothub_set_mode(hcd->phy_roothub,
2838 PHY_MODE_USB_HOST);
2839 if (retval)
2840 goto err_usb_phy_roothub_power_on;
2841
2842 retval = usb_phy_roothub_power_on(hcd->phy_roothub);
2843 if (retval)
2844 goto err_usb_phy_roothub_power_on;
2845 }
2846
2847 dev_info(hcd->self.controller, "%s\n", hcd->product_desc);
2848
2849 switch (authorized_default) {
2850 case USB_AUTHORIZE_NONE:
2851 hcd->dev_policy = USB_DEVICE_AUTHORIZE_NONE;
2852 break;
2853
2854 case USB_AUTHORIZE_ALL:
2855 hcd->dev_policy = USB_DEVICE_AUTHORIZE_ALL;
2856 break;
2857
2858 case USB_AUTHORIZE_INTERNAL:
2859 hcd->dev_policy = USB_DEVICE_AUTHORIZE_INTERNAL;
2860 break;
2861
2862 case USB_AUTHORIZE_WIRED:
2863 default:
2864 hcd->dev_policy = hcd->wireless ?
2865 USB_DEVICE_AUTHORIZE_NONE : USB_DEVICE_AUTHORIZE_ALL;
2866 break;
2867 }
2868
2869 set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
2870
2871
2872 set_bit(HCD_FLAG_INTF_AUTHORIZED, &hcd->flags);
2873
2874
2875
2876
2877
2878 retval = hcd_buffer_create(hcd);
2879 if (retval != 0) {
2880 dev_dbg(hcd->self.sysdev, "pool alloc failed\n");
2881 goto err_create_buf;
2882 }
2883
2884 retval = usb_register_bus(&hcd->self);
2885 if (retval < 0)
2886 goto err_register_bus;
2887
2888 rhdev = usb_alloc_dev(NULL, &hcd->self, 0);
2889 if (rhdev == NULL) {
2890 dev_err(hcd->self.sysdev, "unable to allocate root hub\n");
2891 retval = -ENOMEM;
2892 goto err_allocate_root_hub;
2893 }
2894 mutex_lock(&usb_port_peer_mutex);
2895 hcd->self.root_hub = rhdev;
2896 mutex_unlock(&usb_port_peer_mutex);
2897
2898 rhdev->rx_lanes = 1;
2899 rhdev->tx_lanes = 1;
2900 rhdev->ssp_rate = USB_SSP_GEN_UNKNOWN;
2901
2902 switch (hcd->speed) {
2903 case HCD_USB11:
2904 rhdev->speed = USB_SPEED_FULL;
2905 break;
2906 case HCD_USB2:
2907 rhdev->speed = USB_SPEED_HIGH;
2908 break;
2909 case HCD_USB25:
2910 rhdev->speed = USB_SPEED_WIRELESS;
2911 break;
2912 case HCD_USB3:
2913 rhdev->speed = USB_SPEED_SUPER;
2914 break;
2915 case HCD_USB32:
2916 rhdev->rx_lanes = 2;
2917 rhdev->tx_lanes = 2;
2918 rhdev->ssp_rate = USB_SSP_GEN_2x2;
2919 rhdev->speed = USB_SPEED_SUPER_PLUS;
2920 break;
2921 case HCD_USB31:
2922 rhdev->ssp_rate = USB_SSP_GEN_2x1;
2923 rhdev->speed = USB_SPEED_SUPER_PLUS;
2924 break;
2925 default:
2926 retval = -EINVAL;
2927 goto err_set_rh_speed;
2928 }
2929
2930
2931
2932
2933
2934 device_set_wakeup_capable(&rhdev->dev, 1);
2935
2936
2937
2938
2939
2940 set_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
2941
2942
2943
2944
2945 if (hcd->driver->reset) {
2946 retval = hcd->driver->reset(hcd);
2947 if (retval < 0) {
2948 dev_err(hcd->self.controller, "can't setup: %d\n",
2949 retval);
2950 goto err_hcd_driver_setup;
2951 }
2952 }
2953 hcd->rh_pollable = 1;
2954
2955 retval = usb_phy_roothub_calibrate(hcd->phy_roothub);
2956 if (retval)
2957 goto err_hcd_driver_setup;
2958
2959
2960 if (device_can_wakeup(hcd->self.controller)
2961 && device_can_wakeup(&hcd->self.root_hub->dev))
2962 dev_dbg(hcd->self.controller, "supports USB remote wakeup\n");
2963
2964
2965 init_giveback_urb_bh(&hcd->high_prio_bh);
2966 hcd->high_prio_bh.high_prio = true;
2967 init_giveback_urb_bh(&hcd->low_prio_bh);
2968
2969
2970
2971
2972 if (usb_hcd_is_primary_hcd(hcd) && irqnum) {
2973 retval = usb_hcd_request_irqs(hcd, irqnum, irqflags);
2974 if (retval)
2975 goto err_request_irq;
2976 }
2977
2978 hcd->state = HC_STATE_RUNNING;
2979 retval = hcd->driver->start(hcd);
2980 if (retval < 0) {
2981 dev_err(hcd->self.controller, "startup error %d\n", retval);
2982 goto err_hcd_driver_start;
2983 }
2984
2985
2986 shared_hcd = hcd->shared_hcd;
2987 if (!usb_hcd_is_primary_hcd(hcd) && shared_hcd && HCD_DEFER_RH_REGISTER(shared_hcd)) {
2988 retval = register_root_hub(shared_hcd);
2989 if (retval != 0)
2990 goto err_register_root_hub;
2991
2992 if (shared_hcd->uses_new_polling && HCD_POLL_RH(shared_hcd))
2993 usb_hcd_poll_rh_status(shared_hcd);
2994 }
2995
2996
2997 if (!HCD_DEFER_RH_REGISTER(hcd)) {
2998 retval = register_root_hub(hcd);
2999 if (retval != 0)
3000 goto err_register_root_hub;
3001
3002 if (hcd->uses_new_polling && HCD_POLL_RH(hcd))
3003 usb_hcd_poll_rh_status(hcd);
3004 }
3005
3006 return retval;
3007
3008 err_register_root_hub:
3009 usb_stop_hcd(hcd);
3010 err_hcd_driver_start:
3011 if (usb_hcd_is_primary_hcd(hcd) && hcd->irq > 0)
3012 free_irq(irqnum, hcd);
3013 err_request_irq:
3014 err_hcd_driver_setup:
3015 err_set_rh_speed:
3016 usb_put_invalidate_rhdev(hcd);
3017 err_allocate_root_hub:
3018 usb_deregister_bus(&hcd->self);
3019 err_register_bus:
3020 hcd_buffer_destroy(hcd);
3021 err_create_buf:
3022 usb_phy_roothub_power_off(hcd->phy_roothub);
3023 err_usb_phy_roothub_power_on:
3024 usb_phy_roothub_exit(hcd->phy_roothub);
3025
3026 return retval;
3027 }
3028 EXPORT_SYMBOL_GPL(usb_add_hcd);
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039 void usb_remove_hcd(struct usb_hcd *hcd)
3040 {
3041 struct usb_device *rhdev;
3042 bool rh_registered;
3043
3044 if (!hcd) {
3045 pr_debug("%s: hcd is NULL\n", __func__);
3046 return;
3047 }
3048 rhdev = hcd->self.root_hub;
3049
3050 dev_info(hcd->self.controller, "remove, state %x\n", hcd->state);
3051
3052 usb_get_dev(rhdev);
3053 clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags);
3054 if (HC_IS_RUNNING (hcd->state))
3055 hcd->state = HC_STATE_QUIESCING;
3056
3057 dev_dbg(hcd->self.controller, "roothub graceful disconnect\n");
3058 spin_lock_irq (&hcd_root_hub_lock);
3059 rh_registered = hcd->rh_registered;
3060 hcd->rh_registered = 0;
3061 spin_unlock_irq (&hcd_root_hub_lock);
3062
3063 #ifdef CONFIG_PM
3064 cancel_work_sync(&hcd->wakeup_work);
3065 #endif
3066 cancel_work_sync(&hcd->died_work);
3067
3068 mutex_lock(&usb_bus_idr_lock);
3069 if (rh_registered)
3070 usb_disconnect(&rhdev);
3071 mutex_unlock(&usb_bus_idr_lock);
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088 usb_stop_hcd(hcd);
3089
3090 if (usb_hcd_is_primary_hcd(hcd)) {
3091 if (hcd->irq > 0)
3092 free_irq(hcd->irq, hcd);
3093 }
3094
3095 usb_deregister_bus(&hcd->self);
3096 hcd_buffer_destroy(hcd);
3097
3098 usb_phy_roothub_power_off(hcd->phy_roothub);
3099 usb_phy_roothub_exit(hcd->phy_roothub);
3100
3101 usb_put_invalidate_rhdev(hcd);
3102 hcd->flags = 0;
3103 }
3104 EXPORT_SYMBOL_GPL(usb_remove_hcd);
3105
3106 void
3107 usb_hcd_platform_shutdown(struct platform_device *dev)
3108 {
3109 struct usb_hcd *hcd = platform_get_drvdata(dev);
3110
3111
3112 pm_runtime_get_sync(&dev->dev);
3113
3114 if (hcd->driver->shutdown)
3115 hcd->driver->shutdown(hcd);
3116 }
3117 EXPORT_SYMBOL_GPL(usb_hcd_platform_shutdown);
3118
3119 int usb_hcd_setup_local_mem(struct usb_hcd *hcd, phys_addr_t phys_addr,
3120 dma_addr_t dma, size_t size)
3121 {
3122 int err;
3123 void *local_mem;
3124
3125 hcd->localmem_pool = devm_gen_pool_create(hcd->self.sysdev, 4,
3126 dev_to_node(hcd->self.sysdev),
3127 dev_name(hcd->self.sysdev));
3128 if (IS_ERR(hcd->localmem_pool))
3129 return PTR_ERR(hcd->localmem_pool);
3130
3131
3132
3133
3134
3135 if (phys_addr)
3136 local_mem = devm_memremap(hcd->self.sysdev, phys_addr,
3137 size, MEMREMAP_WC);
3138 else
3139 local_mem = dmam_alloc_attrs(hcd->self.sysdev, size, &dma,
3140 GFP_KERNEL,
3141 DMA_ATTR_WRITE_COMBINE);
3142
3143 if (IS_ERR(local_mem))
3144 return PTR_ERR(local_mem);
3145
3146
3147
3148
3149
3150
3151 err = gen_pool_add_virt(hcd->localmem_pool, (unsigned long)local_mem,
3152 dma, size, dev_to_node(hcd->self.sysdev));
3153 if (err < 0) {
3154 dev_err(hcd->self.sysdev, "gen_pool_add_virt failed with %d\n",
3155 err);
3156 return err;
3157 }
3158
3159 return 0;
3160 }
3161 EXPORT_SYMBOL_GPL(usb_hcd_setup_local_mem);
3162
3163
3164
3165 #if IS_ENABLED(CONFIG_USB_MON)
3166
3167 const struct usb_mon_operations *mon_ops;
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177 int usb_mon_register(const struct usb_mon_operations *ops)
3178 {
3179
3180 if (mon_ops)
3181 return -EBUSY;
3182
3183 mon_ops = ops;
3184 mb();
3185 return 0;
3186 }
3187 EXPORT_SYMBOL_GPL (usb_mon_register);
3188
3189 void usb_mon_deregister (void)
3190 {
3191
3192 if (mon_ops == NULL) {
3193 printk(KERN_ERR "USB: monitor was not registered\n");
3194 return;
3195 }
3196 mon_ops = NULL;
3197 mb();
3198 }
3199 EXPORT_SYMBOL_GPL (usb_mon_deregister);
3200
3201 #endif