0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include <linux/kernel.h>
0014 #include <linux/errno.h>
0015 #include <linux/module.h>
0016 #include <linux/moduleparam.h>
0017 #include <linux/completion.h>
0018 #include <linux/sched/mm.h>
0019 #include <linux/list.h>
0020 #include <linux/slab.h>
0021 #include <linux/kcov.h>
0022 #include <linux/ioctl.h>
0023 #include <linux/usb.h>
0024 #include <linux/usbdevice_fs.h>
0025 #include <linux/usb/hcd.h>
0026 #include <linux/usb/onboard_hub.h>
0027 #include <linux/usb/otg.h>
0028 #include <linux/usb/quirks.h>
0029 #include <linux/workqueue.h>
0030 #include <linux/mutex.h>
0031 #include <linux/random.h>
0032 #include <linux/pm_qos.h>
0033 #include <linux/kobject.h>
0034
0035 #include <linux/bitfield.h>
0036 #include <linux/uaccess.h>
0037 #include <asm/byteorder.h>
0038
0039 #include "hub.h"
0040 #include "otg_productlist.h"
0041
0042 #define USB_VENDOR_GENESYS_LOGIC 0x05e3
0043 #define USB_VENDOR_SMSC 0x0424
0044 #define USB_PRODUCT_USB5534B 0x5534
0045 #define USB_VENDOR_CYPRESS 0x04b4
0046 #define USB_PRODUCT_CY7C65632 0x6570
0047 #define HUB_QUIRK_CHECK_PORT_AUTOSUSPEND 0x01
0048 #define HUB_QUIRK_DISABLE_AUTOSUSPEND 0x02
0049
0050 #define USB_TP_TRANSMISSION_DELAY 40
0051 #define USB_TP_TRANSMISSION_DELAY_MAX 65535
0052 #define USB_PING_RESPONSE_TIME 400
0053
0054
0055
0056
0057 static DEFINE_SPINLOCK(device_state_lock);
0058
0059
0060 static struct workqueue_struct *hub_wq;
0061 static void hub_event(struct work_struct *work);
0062
0063
0064 DEFINE_MUTEX(usb_port_peer_mutex);
0065
0066
0067 static bool blinkenlights;
0068 module_param(blinkenlights, bool, S_IRUGO);
0069 MODULE_PARM_DESC(blinkenlights, "true to cycle leds on hubs");
0070
0071
0072
0073
0074
0075
0076 static int initial_descriptor_timeout = USB_CTRL_GET_TIMEOUT;
0077 module_param(initial_descriptor_timeout, int, S_IRUGO|S_IWUSR);
0078 MODULE_PARM_DESC(initial_descriptor_timeout,
0079 "initial 64-byte descriptor request timeout in milliseconds "
0080 "(default 5000 - 5.0 seconds)");
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096 static bool old_scheme_first;
0097 module_param(old_scheme_first, bool, S_IRUGO | S_IWUSR);
0098 MODULE_PARM_DESC(old_scheme_first,
0099 "start with the old device initialization scheme");
0100
0101 static bool use_both_schemes = true;
0102 module_param(use_both_schemes, bool, S_IRUGO | S_IWUSR);
0103 MODULE_PARM_DESC(use_both_schemes,
0104 "try the other device initialization scheme if the "
0105 "first one fails");
0106
0107
0108
0109
0110 DECLARE_RWSEM(ehci_cf_port_reset_rwsem);
0111 EXPORT_SYMBOL_GPL(ehci_cf_port_reset_rwsem);
0112
0113 #define HUB_DEBOUNCE_TIMEOUT 2000
0114 #define HUB_DEBOUNCE_STEP 25
0115 #define HUB_DEBOUNCE_STABLE 100
0116
0117 static void hub_release(struct kref *kref);
0118 static int usb_reset_and_verify_device(struct usb_device *udev);
0119 static int hub_port_disable(struct usb_hub *hub, int port1, int set_state);
0120 static bool hub_port_warm_reset_required(struct usb_hub *hub, int port1,
0121 u16 portstatus);
0122
0123 static inline char *portspeed(struct usb_hub *hub, int portstatus)
0124 {
0125 if (hub_is_superspeedplus(hub->hdev))
0126 return "10.0 Gb/s";
0127 if (hub_is_superspeed(hub->hdev))
0128 return "5.0 Gb/s";
0129 if (portstatus & USB_PORT_STAT_HIGH_SPEED)
0130 return "480 Mb/s";
0131 else if (portstatus & USB_PORT_STAT_LOW_SPEED)
0132 return "1.5 Mb/s";
0133 else
0134 return "12 Mb/s";
0135 }
0136
0137
0138 struct usb_hub *usb_hub_to_struct_hub(struct usb_device *hdev)
0139 {
0140 if (!hdev || !hdev->actconfig || !hdev->maxchild)
0141 return NULL;
0142 return usb_get_intfdata(hdev->actconfig->interface[0]);
0143 }
0144
0145 int usb_device_supports_lpm(struct usb_device *udev)
0146 {
0147
0148 if (udev->quirks & USB_QUIRK_NO_LPM)
0149 return 0;
0150
0151
0152
0153
0154 if (udev->speed == USB_SPEED_HIGH || udev->speed == USB_SPEED_FULL) {
0155 if (udev->bos->ext_cap &&
0156 (USB_LPM_SUPPORT &
0157 le32_to_cpu(udev->bos->ext_cap->bmAttributes)))
0158 return 1;
0159 return 0;
0160 }
0161
0162
0163
0164
0165
0166
0167 if (!udev->bos->ss_cap) {
0168 dev_info(&udev->dev, "No LPM exit latency info found, disabling LPM.\n");
0169 return 0;
0170 }
0171
0172 if (udev->bos->ss_cap->bU1devExitLat == 0 &&
0173 udev->bos->ss_cap->bU2DevExitLat == 0) {
0174 if (udev->parent)
0175 dev_info(&udev->dev, "LPM exit latency is zeroed, disabling LPM.\n");
0176 else
0177 dev_info(&udev->dev, "We don't know the algorithms for LPM for this host, disabling LPM.\n");
0178 return 0;
0179 }
0180
0181 if (!udev->parent || udev->parent->lpm_capable)
0182 return 1;
0183 return 0;
0184 }
0185
0186
0187
0188
0189
0190
0191 static void usb_set_lpm_mel(struct usb_device *udev,
0192 struct usb3_lpm_parameters *udev_lpm_params,
0193 unsigned int udev_exit_latency,
0194 struct usb_hub *hub,
0195 struct usb3_lpm_parameters *hub_lpm_params,
0196 unsigned int hub_exit_latency)
0197 {
0198 unsigned int total_mel;
0199
0200
0201
0202
0203
0204
0205
0206
0207 total_mel = hub_lpm_params->mel +
0208 max(udev_exit_latency, hub_exit_latency) * 1000 +
0209 hub->descriptor->u.ss.bHubHdrDecLat * 100;
0210
0211
0212
0213
0214
0215
0216
0217 total_mel += (__le16_to_cpu(hub->descriptor->u.ss.wHubDelay) +
0218 USB_TP_TRANSMISSION_DELAY) * 2;
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228 if (!hub->hdev->parent)
0229 total_mel += USB_PING_RESPONSE_TIME + 2100;
0230
0231 udev_lpm_params->mel = total_mel;
0232 }
0233
0234
0235
0236
0237
0238 static void usb_set_lpm_pel(struct usb_device *udev,
0239 struct usb3_lpm_parameters *udev_lpm_params,
0240 unsigned int udev_exit_latency,
0241 struct usb_hub *hub,
0242 struct usb3_lpm_parameters *hub_lpm_params,
0243 unsigned int hub_exit_latency,
0244 unsigned int port_to_port_exit_latency)
0245 {
0246 unsigned int first_link_pel;
0247 unsigned int hub_pel;
0248
0249
0250
0251
0252
0253
0254 if (udev_exit_latency > hub_exit_latency)
0255 first_link_pel = udev_exit_latency * 1000;
0256 else
0257 first_link_pel = hub_exit_latency * 1000;
0258
0259
0260
0261
0262
0263
0264
0265 hub_pel = port_to_port_exit_latency * 1000 + hub_lpm_params->pel;
0266
0267
0268
0269
0270
0271 if (first_link_pel > hub_pel)
0272 udev_lpm_params->pel = first_link_pel;
0273 else
0274 udev_lpm_params->pel = hub_pel;
0275 }
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292 static void usb_set_lpm_sel(struct usb_device *udev,
0293 struct usb3_lpm_parameters *udev_lpm_params)
0294 {
0295 struct usb_device *parent;
0296 unsigned int num_hubs;
0297 unsigned int total_sel;
0298
0299
0300 total_sel = udev_lpm_params->pel;
0301
0302 for (parent = udev->parent, num_hubs = 0; parent->parent;
0303 parent = parent->parent)
0304 num_hubs++;
0305
0306 if (num_hubs > 0)
0307 total_sel += 2100 + 250 * (num_hubs - 1);
0308
0309
0310 total_sel += 250 * num_hubs;
0311
0312 udev_lpm_params->sel = total_sel;
0313 }
0314
0315 static void usb_set_lpm_parameters(struct usb_device *udev)
0316 {
0317 struct usb_hub *hub;
0318 unsigned int port_to_port_delay;
0319 unsigned int udev_u1_del;
0320 unsigned int udev_u2_del;
0321 unsigned int hub_u1_del;
0322 unsigned int hub_u2_del;
0323
0324 if (!udev->lpm_capable || udev->speed < USB_SPEED_SUPER)
0325 return;
0326
0327 hub = usb_hub_to_struct_hub(udev->parent);
0328
0329
0330
0331 if (!hub)
0332 return;
0333
0334 udev_u1_del = udev->bos->ss_cap->bU1devExitLat;
0335 udev_u2_del = le16_to_cpu(udev->bos->ss_cap->bU2DevExitLat);
0336 hub_u1_del = udev->parent->bos->ss_cap->bU1devExitLat;
0337 hub_u2_del = le16_to_cpu(udev->parent->bos->ss_cap->bU2DevExitLat);
0338
0339 usb_set_lpm_mel(udev, &udev->u1_params, udev_u1_del,
0340 hub, &udev->parent->u1_params, hub_u1_del);
0341
0342 usb_set_lpm_mel(udev, &udev->u2_params, udev_u2_del,
0343 hub, &udev->parent->u2_params, hub_u2_del);
0344
0345
0346
0347
0348
0349
0350
0351
0352
0353
0354
0355
0356
0357
0358
0359
0360
0361
0362 port_to_port_delay = 1;
0363
0364 usb_set_lpm_pel(udev, &udev->u1_params, udev_u1_del,
0365 hub, &udev->parent->u1_params, hub_u1_del,
0366 port_to_port_delay);
0367
0368 if (hub_u2_del > hub_u1_del)
0369 port_to_port_delay = 1 + hub_u2_del - hub_u1_del;
0370 else
0371 port_to_port_delay = 1 + hub_u1_del;
0372
0373 usb_set_lpm_pel(udev, &udev->u2_params, udev_u2_del,
0374 hub, &udev->parent->u2_params, hub_u2_del,
0375 port_to_port_delay);
0376
0377
0378 usb_set_lpm_sel(udev, &udev->u1_params);
0379 usb_set_lpm_sel(udev, &udev->u2_params);
0380 }
0381
0382
0383 static int get_hub_descriptor(struct usb_device *hdev,
0384 struct usb_hub_descriptor *desc)
0385 {
0386 int i, ret, size;
0387 unsigned dtype;
0388
0389 if (hub_is_superspeed(hdev)) {
0390 dtype = USB_DT_SS_HUB;
0391 size = USB_DT_SS_HUB_SIZE;
0392 } else {
0393 dtype = USB_DT_HUB;
0394 size = sizeof(struct usb_hub_descriptor);
0395 }
0396
0397 for (i = 0; i < 3; i++) {
0398 ret = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
0399 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN | USB_RT_HUB,
0400 dtype << 8, 0, desc, size,
0401 USB_CTRL_GET_TIMEOUT);
0402 if (hub_is_superspeed(hdev)) {
0403 if (ret == size)
0404 return ret;
0405 } else if (ret >= USB_DT_HUB_NONVAR_SIZE + 2) {
0406
0407 size = USB_DT_HUB_NONVAR_SIZE + desc->bNbrPorts / 8 + 1;
0408 if (ret < size)
0409 return -EMSGSIZE;
0410 return ret;
0411 }
0412 }
0413 return -EINVAL;
0414 }
0415
0416
0417
0418
0419 static int clear_hub_feature(struct usb_device *hdev, int feature)
0420 {
0421 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
0422 USB_REQ_CLEAR_FEATURE, USB_RT_HUB, feature, 0, NULL, 0, 1000);
0423 }
0424
0425
0426
0427
0428 int usb_clear_port_feature(struct usb_device *hdev, int port1, int feature)
0429 {
0430 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
0431 USB_REQ_CLEAR_FEATURE, USB_RT_PORT, feature, port1,
0432 NULL, 0, 1000);
0433 }
0434
0435
0436
0437
0438 static int set_port_feature(struct usb_device *hdev, int port1, int feature)
0439 {
0440 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
0441 USB_REQ_SET_FEATURE, USB_RT_PORT, feature, port1,
0442 NULL, 0, 1000);
0443 }
0444
0445 static char *to_led_name(int selector)
0446 {
0447 switch (selector) {
0448 case HUB_LED_AMBER:
0449 return "amber";
0450 case HUB_LED_GREEN:
0451 return "green";
0452 case HUB_LED_OFF:
0453 return "off";
0454 case HUB_LED_AUTO:
0455 return "auto";
0456 default:
0457 return "??";
0458 }
0459 }
0460
0461
0462
0463
0464
0465 static void set_port_led(struct usb_hub *hub, int port1, int selector)
0466 {
0467 struct usb_port *port_dev = hub->ports[port1 - 1];
0468 int status;
0469
0470 status = set_port_feature(hub->hdev, (selector << 8) | port1,
0471 USB_PORT_FEAT_INDICATOR);
0472 dev_dbg(&port_dev->dev, "indicator %s status %d\n",
0473 to_led_name(selector), status);
0474 }
0475
0476 #define LED_CYCLE_PERIOD ((2*HZ)/3)
0477
0478 static void led_work(struct work_struct *work)
0479 {
0480 struct usb_hub *hub =
0481 container_of(work, struct usb_hub, leds.work);
0482 struct usb_device *hdev = hub->hdev;
0483 unsigned i;
0484 unsigned changed = 0;
0485 int cursor = -1;
0486
0487 if (hdev->state != USB_STATE_CONFIGURED || hub->quiescing)
0488 return;
0489
0490 for (i = 0; i < hdev->maxchild; i++) {
0491 unsigned selector, mode;
0492
0493
0494
0495 switch (hub->indicator[i]) {
0496
0497 case INDICATOR_CYCLE:
0498 cursor = i;
0499 selector = HUB_LED_AUTO;
0500 mode = INDICATOR_AUTO;
0501 break;
0502
0503 case INDICATOR_GREEN_BLINK:
0504 selector = HUB_LED_GREEN;
0505 mode = INDICATOR_GREEN_BLINK_OFF;
0506 break;
0507 case INDICATOR_GREEN_BLINK_OFF:
0508 selector = HUB_LED_OFF;
0509 mode = INDICATOR_GREEN_BLINK;
0510 break;
0511
0512 case INDICATOR_AMBER_BLINK:
0513 selector = HUB_LED_AMBER;
0514 mode = INDICATOR_AMBER_BLINK_OFF;
0515 break;
0516 case INDICATOR_AMBER_BLINK_OFF:
0517 selector = HUB_LED_OFF;
0518 mode = INDICATOR_AMBER_BLINK;
0519 break;
0520
0521 case INDICATOR_ALT_BLINK:
0522 selector = HUB_LED_GREEN;
0523 mode = INDICATOR_ALT_BLINK_OFF;
0524 break;
0525 case INDICATOR_ALT_BLINK_OFF:
0526 selector = HUB_LED_AMBER;
0527 mode = INDICATOR_ALT_BLINK;
0528 break;
0529 default:
0530 continue;
0531 }
0532 if (selector != HUB_LED_AUTO)
0533 changed = 1;
0534 set_port_led(hub, i + 1, selector);
0535 hub->indicator[i] = mode;
0536 }
0537 if (!changed && blinkenlights) {
0538 cursor++;
0539 cursor %= hdev->maxchild;
0540 set_port_led(hub, cursor + 1, HUB_LED_GREEN);
0541 hub->indicator[cursor] = INDICATOR_CYCLE;
0542 changed++;
0543 }
0544 if (changed)
0545 queue_delayed_work(system_power_efficient_wq,
0546 &hub->leds, LED_CYCLE_PERIOD);
0547 }
0548
0549
0550 #define USB_STS_TIMEOUT 1000
0551 #define USB_STS_RETRIES 5
0552
0553
0554
0555
0556 static int get_hub_status(struct usb_device *hdev,
0557 struct usb_hub_status *data)
0558 {
0559 int i, status = -ETIMEDOUT;
0560
0561 for (i = 0; i < USB_STS_RETRIES &&
0562 (status == -ETIMEDOUT || status == -EPIPE); i++) {
0563 status = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
0564 USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_HUB, 0, 0,
0565 data, sizeof(*data), USB_STS_TIMEOUT);
0566 }
0567 return status;
0568 }
0569
0570
0571
0572
0573
0574 static int get_port_status(struct usb_device *hdev, int port1,
0575 void *data, u16 value, u16 length)
0576 {
0577 int i, status = -ETIMEDOUT;
0578
0579 for (i = 0; i < USB_STS_RETRIES &&
0580 (status == -ETIMEDOUT || status == -EPIPE); i++) {
0581 status = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
0582 USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_PORT, value,
0583 port1, data, length, USB_STS_TIMEOUT);
0584 }
0585 return status;
0586 }
0587
0588 static int hub_ext_port_status(struct usb_hub *hub, int port1, int type,
0589 u16 *status, u16 *change, u32 *ext_status)
0590 {
0591 int ret;
0592 int len = 4;
0593
0594 if (type != HUB_PORT_STATUS)
0595 len = 8;
0596
0597 mutex_lock(&hub->status_mutex);
0598 ret = get_port_status(hub->hdev, port1, &hub->status->port, type, len);
0599 if (ret < len) {
0600 if (ret != -ENODEV)
0601 dev_err(hub->intfdev,
0602 "%s failed (err = %d)\n", __func__, ret);
0603 if (ret >= 0)
0604 ret = -EIO;
0605 } else {
0606 *status = le16_to_cpu(hub->status->port.wPortStatus);
0607 *change = le16_to_cpu(hub->status->port.wPortChange);
0608 if (type != HUB_PORT_STATUS && ext_status)
0609 *ext_status = le32_to_cpu(
0610 hub->status->port.dwExtPortStatus);
0611 ret = 0;
0612 }
0613 mutex_unlock(&hub->status_mutex);
0614 return ret;
0615 }
0616
0617 int usb_hub_port_status(struct usb_hub *hub, int port1,
0618 u16 *status, u16 *change)
0619 {
0620 return hub_ext_port_status(hub, port1, HUB_PORT_STATUS,
0621 status, change, NULL);
0622 }
0623
0624 static void hub_resubmit_irq_urb(struct usb_hub *hub)
0625 {
0626 unsigned long flags;
0627 int status;
0628
0629 spin_lock_irqsave(&hub->irq_urb_lock, flags);
0630
0631 if (hub->quiescing) {
0632 spin_unlock_irqrestore(&hub->irq_urb_lock, flags);
0633 return;
0634 }
0635
0636 status = usb_submit_urb(hub->urb, GFP_ATOMIC);
0637 if (status && status != -ENODEV && status != -EPERM &&
0638 status != -ESHUTDOWN) {
0639 dev_err(hub->intfdev, "resubmit --> %d\n", status);
0640 mod_timer(&hub->irq_urb_retry, jiffies + HZ);
0641 }
0642
0643 spin_unlock_irqrestore(&hub->irq_urb_lock, flags);
0644 }
0645
0646 static void hub_retry_irq_urb(struct timer_list *t)
0647 {
0648 struct usb_hub *hub = from_timer(hub, t, irq_urb_retry);
0649
0650 hub_resubmit_irq_urb(hub);
0651 }
0652
0653
0654 static void kick_hub_wq(struct usb_hub *hub)
0655 {
0656 struct usb_interface *intf;
0657
0658 if (hub->disconnected || work_pending(&hub->events))
0659 return;
0660
0661
0662
0663
0664
0665
0666
0667
0668
0669 intf = to_usb_interface(hub->intfdev);
0670 usb_autopm_get_interface_no_resume(intf);
0671 kref_get(&hub->kref);
0672
0673 if (queue_work(hub_wq, &hub->events))
0674 return;
0675
0676
0677 usb_autopm_put_interface_async(intf);
0678 kref_put(&hub->kref, hub_release);
0679 }
0680
0681 void usb_kick_hub_wq(struct usb_device *hdev)
0682 {
0683 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
0684
0685 if (hub)
0686 kick_hub_wq(hub);
0687 }
0688
0689
0690
0691
0692
0693
0694
0695
0696
0697 void usb_wakeup_notification(struct usb_device *hdev,
0698 unsigned int portnum)
0699 {
0700 struct usb_hub *hub;
0701 struct usb_port *port_dev;
0702
0703 if (!hdev)
0704 return;
0705
0706 hub = usb_hub_to_struct_hub(hdev);
0707 if (hub) {
0708 port_dev = hub->ports[portnum - 1];
0709 if (port_dev && port_dev->child)
0710 pm_wakeup_event(&port_dev->child->dev, 0);
0711
0712 set_bit(portnum, hub->wakeup_bits);
0713 kick_hub_wq(hub);
0714 }
0715 }
0716 EXPORT_SYMBOL_GPL(usb_wakeup_notification);
0717
0718
0719 static void hub_irq(struct urb *urb)
0720 {
0721 struct usb_hub *hub = urb->context;
0722 int status = urb->status;
0723 unsigned i;
0724 unsigned long bits;
0725
0726 switch (status) {
0727 case -ENOENT:
0728 case -ECONNRESET:
0729 case -ESHUTDOWN:
0730 return;
0731
0732 default:
0733
0734 dev_dbg(hub->intfdev, "transfer --> %d\n", status);
0735 if ((++hub->nerrors < 10) || hub->error)
0736 goto resubmit;
0737 hub->error = status;
0738 fallthrough;
0739
0740
0741 case 0:
0742 bits = 0;
0743 for (i = 0; i < urb->actual_length; ++i)
0744 bits |= ((unsigned long) ((*hub->buffer)[i]))
0745 << (i*8);
0746 hub->event_bits[0] = bits;
0747 break;
0748 }
0749
0750 hub->nerrors = 0;
0751
0752
0753 kick_hub_wq(hub);
0754
0755 resubmit:
0756 hub_resubmit_irq_urb(hub);
0757 }
0758
0759
0760 static inline int
0761 hub_clear_tt_buffer(struct usb_device *hdev, u16 devinfo, u16 tt)
0762 {
0763
0764 if (((devinfo >> 11) & USB_ENDPOINT_XFERTYPE_MASK) ==
0765 USB_ENDPOINT_XFER_CONTROL) {
0766 int status = usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
0767 HUB_CLEAR_TT_BUFFER, USB_RT_PORT,
0768 devinfo ^ 0x8000, tt, NULL, 0, 1000);
0769 if (status)
0770 return status;
0771 }
0772 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
0773 HUB_CLEAR_TT_BUFFER, USB_RT_PORT, devinfo,
0774 tt, NULL, 0, 1000);
0775 }
0776
0777
0778
0779
0780
0781
0782
0783 static void hub_tt_work(struct work_struct *work)
0784 {
0785 struct usb_hub *hub =
0786 container_of(work, struct usb_hub, tt.clear_work);
0787 unsigned long flags;
0788
0789 spin_lock_irqsave(&hub->tt.lock, flags);
0790 while (!list_empty(&hub->tt.clear_list)) {
0791 struct list_head *next;
0792 struct usb_tt_clear *clear;
0793 struct usb_device *hdev = hub->hdev;
0794 const struct hc_driver *drv;
0795 int status;
0796
0797 next = hub->tt.clear_list.next;
0798 clear = list_entry(next, struct usb_tt_clear, clear_list);
0799 list_del(&clear->clear_list);
0800
0801
0802 spin_unlock_irqrestore(&hub->tt.lock, flags);
0803 status = hub_clear_tt_buffer(hdev, clear->devinfo, clear->tt);
0804 if (status && status != -ENODEV)
0805 dev_err(&hdev->dev,
0806 "clear tt %d (%04x) error %d\n",
0807 clear->tt, clear->devinfo, status);
0808
0809
0810 drv = clear->hcd->driver;
0811 if (drv->clear_tt_buffer_complete)
0812 (drv->clear_tt_buffer_complete)(clear->hcd, clear->ep);
0813
0814 kfree(clear);
0815 spin_lock_irqsave(&hub->tt.lock, flags);
0816 }
0817 spin_unlock_irqrestore(&hub->tt.lock, flags);
0818 }
0819
0820
0821
0822
0823
0824
0825
0826
0827
0828
0829
0830
0831
0832 int usb_hub_set_port_power(struct usb_device *hdev, struct usb_hub *hub,
0833 int port1, bool set)
0834 {
0835 int ret;
0836
0837 if (set)
0838 ret = set_port_feature(hdev, port1, USB_PORT_FEAT_POWER);
0839 else
0840 ret = usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_POWER);
0841
0842 if (ret)
0843 return ret;
0844
0845 if (set)
0846 set_bit(port1, hub->power_bits);
0847 else
0848 clear_bit(port1, hub->power_bits);
0849 return 0;
0850 }
0851
0852
0853
0854
0855
0856
0857
0858
0859
0860
0861
0862
0863
0864
0865
0866 int usb_hub_clear_tt_buffer(struct urb *urb)
0867 {
0868 struct usb_device *udev = urb->dev;
0869 int pipe = urb->pipe;
0870 struct usb_tt *tt = udev->tt;
0871 unsigned long flags;
0872 struct usb_tt_clear *clear;
0873
0874
0875
0876
0877
0878 clear = kmalloc(sizeof *clear, GFP_ATOMIC);
0879 if (clear == NULL) {
0880 dev_err(&udev->dev, "can't save CLEAR_TT_BUFFER state\n");
0881
0882 return -ENOMEM;
0883 }
0884
0885
0886 clear->tt = tt->multi ? udev->ttport : 1;
0887 clear->devinfo = usb_pipeendpoint (pipe);
0888 clear->devinfo |= ((u16)udev->devaddr) << 4;
0889 clear->devinfo |= usb_pipecontrol(pipe)
0890 ? (USB_ENDPOINT_XFER_CONTROL << 11)
0891 : (USB_ENDPOINT_XFER_BULK << 11);
0892 if (usb_pipein(pipe))
0893 clear->devinfo |= 1 << 15;
0894
0895
0896 clear->hcd = bus_to_hcd(udev->bus);
0897 clear->ep = urb->ep;
0898
0899
0900 spin_lock_irqsave(&tt->lock, flags);
0901 list_add_tail(&clear->clear_list, &tt->clear_list);
0902 schedule_work(&tt->clear_work);
0903 spin_unlock_irqrestore(&tt->lock, flags);
0904 return 0;
0905 }
0906 EXPORT_SYMBOL_GPL(usb_hub_clear_tt_buffer);
0907
0908 static void hub_power_on(struct usb_hub *hub, bool do_delay)
0909 {
0910 int port1;
0911
0912
0913
0914
0915
0916
0917
0918 if (hub_is_port_power_switchable(hub))
0919 dev_dbg(hub->intfdev, "enabling power on all ports\n");
0920 else
0921 dev_dbg(hub->intfdev, "trying to enable port power on "
0922 "non-switchable hub\n");
0923 for (port1 = 1; port1 <= hub->hdev->maxchild; port1++)
0924 if (test_bit(port1, hub->power_bits))
0925 set_port_feature(hub->hdev, port1, USB_PORT_FEAT_POWER);
0926 else
0927 usb_clear_port_feature(hub->hdev, port1,
0928 USB_PORT_FEAT_POWER);
0929 if (do_delay)
0930 msleep(hub_power_on_good_delay(hub));
0931 }
0932
0933 static int hub_hub_status(struct usb_hub *hub,
0934 u16 *status, u16 *change)
0935 {
0936 int ret;
0937
0938 mutex_lock(&hub->status_mutex);
0939 ret = get_hub_status(hub->hdev, &hub->status->hub);
0940 if (ret < 0) {
0941 if (ret != -ENODEV)
0942 dev_err(hub->intfdev,
0943 "%s failed (err = %d)\n", __func__, ret);
0944 } else {
0945 *status = le16_to_cpu(hub->status->hub.wHubStatus);
0946 *change = le16_to_cpu(hub->status->hub.wHubChange);
0947 ret = 0;
0948 }
0949 mutex_unlock(&hub->status_mutex);
0950 return ret;
0951 }
0952
0953 static int hub_set_port_link_state(struct usb_hub *hub, int port1,
0954 unsigned int link_status)
0955 {
0956 return set_port_feature(hub->hdev,
0957 port1 | (link_status << 3),
0958 USB_PORT_FEAT_LINK_STATE);
0959 }
0960
0961
0962
0963
0964
0965
0966 static void hub_port_logical_disconnect(struct usb_hub *hub, int port1)
0967 {
0968 dev_dbg(&hub->ports[port1 - 1]->dev, "logical disconnect\n");
0969 hub_port_disable(hub, port1, 1);
0970
0971
0972
0973
0974
0975
0976
0977
0978
0979
0980 set_bit(port1, hub->change_bits);
0981 kick_hub_wq(hub);
0982 }
0983
0984
0985
0986
0987
0988
0989
0990
0991
0992
0993
0994
0995
0996 int usb_remove_device(struct usb_device *udev)
0997 {
0998 struct usb_hub *hub;
0999 struct usb_interface *intf;
1000 int ret;
1001
1002 if (!udev->parent)
1003 return -EINVAL;
1004 hub = usb_hub_to_struct_hub(udev->parent);
1005 intf = to_usb_interface(hub->intfdev);
1006
1007 ret = usb_autopm_get_interface(intf);
1008 if (ret < 0)
1009 return ret;
1010
1011 set_bit(udev->portnum, hub->removed_bits);
1012 hub_port_logical_disconnect(hub, udev->portnum);
1013 usb_autopm_put_interface(intf);
1014 return 0;
1015 }
1016
1017 enum hub_activation_type {
1018 HUB_INIT, HUB_INIT2, HUB_INIT3,
1019 HUB_POST_RESET, HUB_RESUME, HUB_RESET_RESUME,
1020 };
1021
1022 static void hub_init_func2(struct work_struct *ws);
1023 static void hub_init_func3(struct work_struct *ws);
1024
1025 static void hub_activate(struct usb_hub *hub, enum hub_activation_type type)
1026 {
1027 struct usb_device *hdev = hub->hdev;
1028 struct usb_hcd *hcd;
1029 int ret;
1030 int port1;
1031 int status;
1032 bool need_debounce_delay = false;
1033 unsigned delay;
1034
1035
1036 if (type == HUB_INIT2 || type == HUB_INIT3) {
1037 device_lock(&hdev->dev);
1038
1039
1040 if (hub->disconnected)
1041 goto disconnected;
1042 if (type == HUB_INIT2)
1043 goto init2;
1044 goto init3;
1045 }
1046 kref_get(&hub->kref);
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058 if (type != HUB_RESUME) {
1059 if (hdev->parent && hub_is_superspeed(hdev)) {
1060 ret = usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
1061 HUB_SET_DEPTH, USB_RT_HUB,
1062 hdev->level - 1, 0, NULL, 0,
1063 USB_CTRL_SET_TIMEOUT);
1064 if (ret < 0)
1065 dev_err(hub->intfdev,
1066 "set hub depth failed\n");
1067 }
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081 if (type == HUB_INIT) {
1082 delay = hub_power_on_good_delay(hub);
1083
1084 hub_power_on(hub, false);
1085 INIT_DELAYED_WORK(&hub->init_work, hub_init_func2);
1086 queue_delayed_work(system_power_efficient_wq,
1087 &hub->init_work,
1088 msecs_to_jiffies(delay));
1089
1090
1091 usb_autopm_get_interface_no_resume(
1092 to_usb_interface(hub->intfdev));
1093 return;
1094 } else if (type == HUB_RESET_RESUME) {
1095
1096
1097
1098
1099 hcd = bus_to_hcd(hdev->bus);
1100 if (hcd->driver->update_hub_device) {
1101 ret = hcd->driver->update_hub_device(hcd, hdev,
1102 &hub->tt, GFP_NOIO);
1103 if (ret < 0) {
1104 dev_err(hub->intfdev,
1105 "Host not accepting hub info update\n");
1106 dev_err(hub->intfdev,
1107 "LS/FS devices and hubs may not work under this hub\n");
1108 }
1109 }
1110 hub_power_on(hub, true);
1111 } else {
1112 hub_power_on(hub, true);
1113 }
1114
1115 } else if (hub_is_superspeed(hub->hdev))
1116 msleep(20);
1117
1118 init2:
1119
1120
1121
1122
1123
1124 for (port1 = 1; port1 <= hdev->maxchild; ++port1) {
1125 struct usb_port *port_dev = hub->ports[port1 - 1];
1126 struct usb_device *udev = port_dev->child;
1127 u16 portstatus, portchange;
1128
1129 portstatus = portchange = 0;
1130 status = usb_hub_port_status(hub, port1, &portstatus, &portchange);
1131 if (status)
1132 goto abort;
1133
1134 if (udev || (portstatus & USB_PORT_STAT_CONNECTION))
1135 dev_dbg(&port_dev->dev, "status %04x change %04x\n",
1136 portstatus, portchange);
1137
1138
1139
1140
1141
1142
1143
1144 if ((portstatus & USB_PORT_STAT_ENABLE) && (
1145 type != HUB_RESUME ||
1146 !(portstatus & USB_PORT_STAT_CONNECTION) ||
1147 !udev ||
1148 udev->state == USB_STATE_NOTATTACHED)) {
1149
1150
1151
1152
1153
1154
1155 portstatus &= ~USB_PORT_STAT_ENABLE;
1156 if (!hub_is_superspeed(hdev))
1157 usb_clear_port_feature(hdev, port1,
1158 USB_PORT_FEAT_ENABLE);
1159 }
1160
1161
1162 if (type == HUB_RESUME &&
1163 hub_port_warm_reset_required(hub, port1, portstatus))
1164 set_bit(port1, hub->event_bits);
1165
1166
1167
1168
1169
1170
1171 if (hub_is_superspeed(hdev) &&
1172 ((portstatus & USB_PORT_STAT_LINK_STATE) ==
1173 USB_SS_PORT_LS_POLLING))
1174 need_debounce_delay = true;
1175
1176
1177 if (portchange & USB_PORT_STAT_C_CONNECTION) {
1178 need_debounce_delay = true;
1179 usb_clear_port_feature(hub->hdev, port1,
1180 USB_PORT_FEAT_C_CONNECTION);
1181 }
1182 if (portchange & USB_PORT_STAT_C_ENABLE) {
1183 need_debounce_delay = true;
1184 usb_clear_port_feature(hub->hdev, port1,
1185 USB_PORT_FEAT_C_ENABLE);
1186 }
1187 if (portchange & USB_PORT_STAT_C_RESET) {
1188 need_debounce_delay = true;
1189 usb_clear_port_feature(hub->hdev, port1,
1190 USB_PORT_FEAT_C_RESET);
1191 }
1192 if ((portchange & USB_PORT_STAT_C_BH_RESET) &&
1193 hub_is_superspeed(hub->hdev)) {
1194 need_debounce_delay = true;
1195 usb_clear_port_feature(hub->hdev, port1,
1196 USB_PORT_FEAT_C_BH_PORT_RESET);
1197 }
1198
1199
1200
1201 if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
1202 (portchange & USB_PORT_STAT_C_CONNECTION))
1203 clear_bit(port1, hub->removed_bits);
1204
1205 if (!udev || udev->state == USB_STATE_NOTATTACHED) {
1206
1207
1208
1209
1210
1211
1212 if (udev || (portstatus & USB_PORT_STAT_CONNECTION) ||
1213 (portchange & USB_PORT_STAT_C_CONNECTION) ||
1214 (portstatus & USB_PORT_STAT_OVERCURRENT) ||
1215 (portchange & USB_PORT_STAT_C_OVERCURRENT))
1216 set_bit(port1, hub->change_bits);
1217
1218 } else if (portstatus & USB_PORT_STAT_ENABLE) {
1219 bool port_resumed = (portstatus &
1220 USB_PORT_STAT_LINK_STATE) ==
1221 USB_SS_PORT_LS_U0;
1222
1223
1224
1225
1226
1227
1228
1229
1230 if (portchange || (hub_is_superspeed(hub->hdev) &&
1231 port_resumed))
1232 set_bit(port1, hub->event_bits);
1233
1234 } else if (udev->persist_enabled) {
1235 #ifdef CONFIG_PM
1236 udev->reset_resume = 1;
1237 #endif
1238
1239
1240
1241 if (test_bit(port1, hub->power_bits))
1242 set_bit(port1, hub->change_bits);
1243
1244 } else {
1245
1246 usb_set_device_state(udev, USB_STATE_NOTATTACHED);
1247 set_bit(port1, hub->change_bits);
1248 }
1249 }
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259 if (need_debounce_delay) {
1260 delay = HUB_DEBOUNCE_STABLE;
1261
1262
1263 if (type == HUB_INIT2) {
1264 INIT_DELAYED_WORK(&hub->init_work, hub_init_func3);
1265 queue_delayed_work(system_power_efficient_wq,
1266 &hub->init_work,
1267 msecs_to_jiffies(delay));
1268 device_unlock(&hdev->dev);
1269 return;
1270 } else {
1271 msleep(delay);
1272 }
1273 }
1274 init3:
1275 hub->quiescing = 0;
1276
1277 status = usb_submit_urb(hub->urb, GFP_NOIO);
1278 if (status < 0)
1279 dev_err(hub->intfdev, "activate --> %d\n", status);
1280 if (hub->has_indicators && blinkenlights)
1281 queue_delayed_work(system_power_efficient_wq,
1282 &hub->leds, LED_CYCLE_PERIOD);
1283
1284
1285 kick_hub_wq(hub);
1286 abort:
1287 if (type == HUB_INIT2 || type == HUB_INIT3) {
1288
1289 disconnected:
1290 usb_autopm_put_interface_async(to_usb_interface(hub->intfdev));
1291 device_unlock(&hdev->dev);
1292 }
1293
1294 kref_put(&hub->kref, hub_release);
1295 }
1296
1297
1298 static void hub_init_func2(struct work_struct *ws)
1299 {
1300 struct usb_hub *hub = container_of(ws, struct usb_hub, init_work.work);
1301
1302 hub_activate(hub, HUB_INIT2);
1303 }
1304
1305 static void hub_init_func3(struct work_struct *ws)
1306 {
1307 struct usb_hub *hub = container_of(ws, struct usb_hub, init_work.work);
1308
1309 hub_activate(hub, HUB_INIT3);
1310 }
1311
1312 enum hub_quiescing_type {
1313 HUB_DISCONNECT, HUB_PRE_RESET, HUB_SUSPEND
1314 };
1315
1316 static void hub_quiesce(struct usb_hub *hub, enum hub_quiescing_type type)
1317 {
1318 struct usb_device *hdev = hub->hdev;
1319 unsigned long flags;
1320 int i;
1321
1322
1323 spin_lock_irqsave(&hub->irq_urb_lock, flags);
1324 hub->quiescing = 1;
1325 spin_unlock_irqrestore(&hub->irq_urb_lock, flags);
1326
1327 if (type != HUB_SUSPEND) {
1328
1329 for (i = 0; i < hdev->maxchild; ++i) {
1330 if (hub->ports[i]->child)
1331 usb_disconnect(&hub->ports[i]->child);
1332 }
1333 }
1334
1335
1336 del_timer_sync(&hub->irq_urb_retry);
1337 usb_kill_urb(hub->urb);
1338 if (hub->has_indicators)
1339 cancel_delayed_work_sync(&hub->leds);
1340 if (hub->tt.hub)
1341 flush_work(&hub->tt.clear_work);
1342 }
1343
1344 static void hub_pm_barrier_for_all_ports(struct usb_hub *hub)
1345 {
1346 int i;
1347
1348 for (i = 0; i < hub->hdev->maxchild; ++i)
1349 pm_runtime_barrier(&hub->ports[i]->dev);
1350 }
1351
1352
1353 static int hub_pre_reset(struct usb_interface *intf)
1354 {
1355 struct usb_hub *hub = usb_get_intfdata(intf);
1356
1357 hub_quiesce(hub, HUB_PRE_RESET);
1358 hub->in_reset = 1;
1359 hub_pm_barrier_for_all_ports(hub);
1360 return 0;
1361 }
1362
1363
1364 static int hub_post_reset(struct usb_interface *intf)
1365 {
1366 struct usb_hub *hub = usb_get_intfdata(intf);
1367
1368 hub->in_reset = 0;
1369 hub_pm_barrier_for_all_ports(hub);
1370 hub_activate(hub, HUB_POST_RESET);
1371 return 0;
1372 }
1373
1374 static int hub_configure(struct usb_hub *hub,
1375 struct usb_endpoint_descriptor *endpoint)
1376 {
1377 struct usb_hcd *hcd;
1378 struct usb_device *hdev = hub->hdev;
1379 struct device *hub_dev = hub->intfdev;
1380 u16 hubstatus, hubchange;
1381 u16 wHubCharacteristics;
1382 unsigned int pipe;
1383 int maxp, ret, i;
1384 char *message = "out of memory";
1385 unsigned unit_load;
1386 unsigned full_load;
1387 unsigned maxchild;
1388
1389 hub->buffer = kmalloc(sizeof(*hub->buffer), GFP_KERNEL);
1390 if (!hub->buffer) {
1391 ret = -ENOMEM;
1392 goto fail;
1393 }
1394
1395 hub->status = kmalloc(sizeof(*hub->status), GFP_KERNEL);
1396 if (!hub->status) {
1397 ret = -ENOMEM;
1398 goto fail;
1399 }
1400 mutex_init(&hub->status_mutex);
1401
1402 hub->descriptor = kzalloc(sizeof(*hub->descriptor), GFP_KERNEL);
1403 if (!hub->descriptor) {
1404 ret = -ENOMEM;
1405 goto fail;
1406 }
1407
1408
1409
1410
1411
1412 ret = get_hub_descriptor(hdev, hub->descriptor);
1413 if (ret < 0) {
1414 message = "can't read hub descriptor";
1415 goto fail;
1416 }
1417
1418 maxchild = USB_MAXCHILDREN;
1419 if (hub_is_superspeed(hdev))
1420 maxchild = min_t(unsigned, maxchild, USB_SS_MAXPORTS);
1421
1422 if (hub->descriptor->bNbrPorts > maxchild) {
1423 message = "hub has too many ports!";
1424 ret = -ENODEV;
1425 goto fail;
1426 } else if (hub->descriptor->bNbrPorts == 0) {
1427 message = "hub doesn't have any ports!";
1428 ret = -ENODEV;
1429 goto fail;
1430 }
1431
1432
1433
1434
1435
1436 if (hub_is_superspeed(hdev) || hub_is_superspeedplus(hdev)) {
1437 u32 delay = __le16_to_cpu(hub->descriptor->u.ss.wHubDelay);
1438
1439 if (hdev->parent)
1440 delay += hdev->parent->hub_delay;
1441
1442 delay += USB_TP_TRANSMISSION_DELAY;
1443 hdev->hub_delay = min_t(u32, delay, USB_TP_TRANSMISSION_DELAY_MAX);
1444 }
1445
1446 maxchild = hub->descriptor->bNbrPorts;
1447 dev_info(hub_dev, "%d port%s detected\n", maxchild,
1448 (maxchild == 1) ? "" : "s");
1449
1450 hub->ports = kcalloc(maxchild, sizeof(struct usb_port *), GFP_KERNEL);
1451 if (!hub->ports) {
1452 ret = -ENOMEM;
1453 goto fail;
1454 }
1455
1456 wHubCharacteristics = le16_to_cpu(hub->descriptor->wHubCharacteristics);
1457 if (hub_is_superspeed(hdev)) {
1458 unit_load = 150;
1459 full_load = 900;
1460 } else {
1461 unit_load = 100;
1462 full_load = 500;
1463 }
1464
1465
1466 if ((wHubCharacteristics & HUB_CHAR_COMPOUND) &&
1467 !(hub_is_superspeed(hdev))) {
1468 char portstr[USB_MAXCHILDREN + 1];
1469
1470 for (i = 0; i < maxchild; i++)
1471 portstr[i] = hub->descriptor->u.hs.DeviceRemovable
1472 [((i + 1) / 8)] & (1 << ((i + 1) % 8))
1473 ? 'F' : 'R';
1474 portstr[maxchild] = 0;
1475 dev_dbg(hub_dev, "compound device; port removable status: %s\n", portstr);
1476 } else
1477 dev_dbg(hub_dev, "standalone hub\n");
1478
1479 switch (wHubCharacteristics & HUB_CHAR_LPSM) {
1480 case HUB_CHAR_COMMON_LPSM:
1481 dev_dbg(hub_dev, "ganged power switching\n");
1482 break;
1483 case HUB_CHAR_INDV_PORT_LPSM:
1484 dev_dbg(hub_dev, "individual port power switching\n");
1485 break;
1486 case HUB_CHAR_NO_LPSM:
1487 case HUB_CHAR_LPSM:
1488 dev_dbg(hub_dev, "no power switching (usb 1.0)\n");
1489 break;
1490 }
1491
1492 switch (wHubCharacteristics & HUB_CHAR_OCPM) {
1493 case HUB_CHAR_COMMON_OCPM:
1494 dev_dbg(hub_dev, "global over-current protection\n");
1495 break;
1496 case HUB_CHAR_INDV_PORT_OCPM:
1497 dev_dbg(hub_dev, "individual port over-current protection\n");
1498 break;
1499 case HUB_CHAR_NO_OCPM:
1500 case HUB_CHAR_OCPM:
1501 dev_dbg(hub_dev, "no over-current protection\n");
1502 break;
1503 }
1504
1505 spin_lock_init(&hub->tt.lock);
1506 INIT_LIST_HEAD(&hub->tt.clear_list);
1507 INIT_WORK(&hub->tt.clear_work, hub_tt_work);
1508 switch (hdev->descriptor.bDeviceProtocol) {
1509 case USB_HUB_PR_FS:
1510 break;
1511 case USB_HUB_PR_HS_SINGLE_TT:
1512 dev_dbg(hub_dev, "Single TT\n");
1513 hub->tt.hub = hdev;
1514 break;
1515 case USB_HUB_PR_HS_MULTI_TT:
1516 ret = usb_set_interface(hdev, 0, 1);
1517 if (ret == 0) {
1518 dev_dbg(hub_dev, "TT per port\n");
1519 hub->tt.multi = 1;
1520 } else
1521 dev_err(hub_dev, "Using single TT (err %d)\n",
1522 ret);
1523 hub->tt.hub = hdev;
1524 break;
1525 case USB_HUB_PR_SS:
1526
1527 break;
1528 default:
1529 dev_dbg(hub_dev, "Unrecognized hub protocol %d\n",
1530 hdev->descriptor.bDeviceProtocol);
1531 break;
1532 }
1533
1534
1535 switch (wHubCharacteristics & HUB_CHAR_TTTT) {
1536 case HUB_TTTT_8_BITS:
1537 if (hdev->descriptor.bDeviceProtocol != 0) {
1538 hub->tt.think_time = 666;
1539 dev_dbg(hub_dev, "TT requires at most %d "
1540 "FS bit times (%d ns)\n",
1541 8, hub->tt.think_time);
1542 }
1543 break;
1544 case HUB_TTTT_16_BITS:
1545 hub->tt.think_time = 666 * 2;
1546 dev_dbg(hub_dev, "TT requires at most %d "
1547 "FS bit times (%d ns)\n",
1548 16, hub->tt.think_time);
1549 break;
1550 case HUB_TTTT_24_BITS:
1551 hub->tt.think_time = 666 * 3;
1552 dev_dbg(hub_dev, "TT requires at most %d "
1553 "FS bit times (%d ns)\n",
1554 24, hub->tt.think_time);
1555 break;
1556 case HUB_TTTT_32_BITS:
1557 hub->tt.think_time = 666 * 4;
1558 dev_dbg(hub_dev, "TT requires at most %d "
1559 "FS bit times (%d ns)\n",
1560 32, hub->tt.think_time);
1561 break;
1562 }
1563
1564
1565 if (wHubCharacteristics & HUB_CHAR_PORTIND) {
1566 hub->has_indicators = 1;
1567 dev_dbg(hub_dev, "Port indicators are supported\n");
1568 }
1569
1570 dev_dbg(hub_dev, "power on to power good time: %dms\n",
1571 hub->descriptor->bPwrOn2PwrGood * 2);
1572
1573
1574
1575
1576 ret = usb_get_std_status(hdev, USB_RECIP_DEVICE, 0, &hubstatus);
1577 if (ret) {
1578 message = "can't get hub status";
1579 goto fail;
1580 }
1581 hcd = bus_to_hcd(hdev->bus);
1582 if (hdev == hdev->bus->root_hub) {
1583 if (hcd->power_budget > 0)
1584 hdev->bus_mA = hcd->power_budget;
1585 else
1586 hdev->bus_mA = full_load * maxchild;
1587 if (hdev->bus_mA >= full_load)
1588 hub->mA_per_port = full_load;
1589 else {
1590 hub->mA_per_port = hdev->bus_mA;
1591 hub->limited_power = 1;
1592 }
1593 } else if ((hubstatus & (1 << USB_DEVICE_SELF_POWERED)) == 0) {
1594 int remaining = hdev->bus_mA -
1595 hub->descriptor->bHubContrCurrent;
1596
1597 dev_dbg(hub_dev, "hub controller current requirement: %dmA\n",
1598 hub->descriptor->bHubContrCurrent);
1599 hub->limited_power = 1;
1600
1601 if (remaining < maxchild * unit_load)
1602 dev_warn(hub_dev,
1603 "insufficient power available "
1604 "to use all downstream ports\n");
1605 hub->mA_per_port = unit_load;
1606
1607 } else {
1608
1609
1610 hub->mA_per_port = full_load;
1611 }
1612 if (hub->mA_per_port < full_load)
1613 dev_dbg(hub_dev, "%umA bus power budget for each child\n",
1614 hub->mA_per_port);
1615
1616 ret = hub_hub_status(hub, &hubstatus, &hubchange);
1617 if (ret < 0) {
1618 message = "can't get hub status";
1619 goto fail;
1620 }
1621
1622
1623 if (hdev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_SELFPOWER)
1624 dev_dbg(hub_dev, "local power source is %s\n",
1625 (hubstatus & HUB_STATUS_LOCAL_POWER)
1626 ? "lost (inactive)" : "good");
1627
1628 if ((wHubCharacteristics & HUB_CHAR_OCPM) == 0)
1629 dev_dbg(hub_dev, "%sover-current condition exists\n",
1630 (hubstatus & HUB_STATUS_OVERCURRENT) ? "" : "no ");
1631
1632
1633
1634
1635
1636
1637
1638 pipe = usb_rcvintpipe(hdev, endpoint->bEndpointAddress);
1639 maxp = usb_maxpacket(hdev, pipe);
1640
1641 if (maxp > sizeof(*hub->buffer))
1642 maxp = sizeof(*hub->buffer);
1643
1644 hub->urb = usb_alloc_urb(0, GFP_KERNEL);
1645 if (!hub->urb) {
1646 ret = -ENOMEM;
1647 goto fail;
1648 }
1649
1650 usb_fill_int_urb(hub->urb, hdev, pipe, *hub->buffer, maxp, hub_irq,
1651 hub, endpoint->bInterval);
1652
1653
1654 if (hub->has_indicators && blinkenlights)
1655 hub->indicator[0] = INDICATOR_CYCLE;
1656
1657 mutex_lock(&usb_port_peer_mutex);
1658 for (i = 0; i < maxchild; i++) {
1659 ret = usb_hub_create_port_device(hub, i + 1);
1660 if (ret < 0) {
1661 dev_err(hub->intfdev,
1662 "couldn't create port%d device.\n", i + 1);
1663 break;
1664 }
1665 }
1666 hdev->maxchild = i;
1667 for (i = 0; i < hdev->maxchild; i++) {
1668 struct usb_port *port_dev = hub->ports[i];
1669
1670 pm_runtime_put(&port_dev->dev);
1671 }
1672
1673 mutex_unlock(&usb_port_peer_mutex);
1674 if (ret < 0)
1675 goto fail;
1676
1677
1678
1679
1680 if (hcd->driver->update_hub_device) {
1681 ret = hcd->driver->update_hub_device(hcd, hdev,
1682 &hub->tt, GFP_KERNEL);
1683 if (ret < 0) {
1684 message = "can't update HCD hub info";
1685 goto fail;
1686 }
1687 }
1688
1689 usb_hub_adjust_deviceremovable(hdev, hub->descriptor);
1690
1691 hub_activate(hub, HUB_INIT);
1692 return 0;
1693
1694 fail:
1695 dev_err(hub_dev, "config failed, %s (err %d)\n",
1696 message, ret);
1697
1698 return ret;
1699 }
1700
1701 static void hub_release(struct kref *kref)
1702 {
1703 struct usb_hub *hub = container_of(kref, struct usb_hub, kref);
1704
1705 usb_put_dev(hub->hdev);
1706 usb_put_intf(to_usb_interface(hub->intfdev));
1707 kfree(hub);
1708 }
1709
1710 static unsigned highspeed_hubs;
1711
1712 static void hub_disconnect(struct usb_interface *intf)
1713 {
1714 struct usb_hub *hub = usb_get_intfdata(intf);
1715 struct usb_device *hdev = interface_to_usbdev(intf);
1716 int port1;
1717
1718
1719
1720
1721
1722 hub->disconnected = 1;
1723
1724
1725 hub->error = 0;
1726 hub_quiesce(hub, HUB_DISCONNECT);
1727
1728 mutex_lock(&usb_port_peer_mutex);
1729
1730
1731 spin_lock_irq(&device_state_lock);
1732 port1 = hdev->maxchild;
1733 hdev->maxchild = 0;
1734 usb_set_intfdata(intf, NULL);
1735 spin_unlock_irq(&device_state_lock);
1736
1737 for (; port1 > 0; --port1)
1738 usb_hub_remove_port_device(hub, port1);
1739
1740 mutex_unlock(&usb_port_peer_mutex);
1741
1742 if (hub->hdev->speed == USB_SPEED_HIGH)
1743 highspeed_hubs--;
1744
1745 usb_free_urb(hub->urb);
1746 kfree(hub->ports);
1747 kfree(hub->descriptor);
1748 kfree(hub->status);
1749 kfree(hub->buffer);
1750
1751 pm_suspend_ignore_children(&intf->dev, false);
1752
1753 if (hub->quirk_disable_autosuspend)
1754 usb_autopm_put_interface(intf);
1755
1756 onboard_hub_destroy_pdevs(&hub->onboard_hub_devs);
1757
1758 kref_put(&hub->kref, hub_release);
1759 }
1760
1761 static bool hub_descriptor_is_sane(struct usb_host_interface *desc)
1762 {
1763
1764
1765 if (desc->desc.bInterfaceSubClass != 0 &&
1766 desc->desc.bInterfaceSubClass != 1)
1767 return false;
1768
1769
1770 if (desc->desc.bNumEndpoints != 1)
1771 return false;
1772
1773
1774 if (!usb_endpoint_is_int_in(&desc->endpoint[0].desc))
1775 return false;
1776
1777 return true;
1778 }
1779
1780 static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
1781 {
1782 struct usb_host_interface *desc;
1783 struct usb_device *hdev;
1784 struct usb_hub *hub;
1785
1786 desc = intf->cur_altsetting;
1787 hdev = interface_to_usbdev(intf);
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825 #ifdef CONFIG_PM
1826 if (hdev->dev.power.autosuspend_delay >= 0)
1827 pm_runtime_set_autosuspend_delay(&hdev->dev, 0);
1828 #endif
1829
1830
1831
1832
1833
1834
1835 if (hdev->parent) {
1836 usb_enable_autosuspend(hdev);
1837 } else {
1838 const struct hc_driver *drv = bus_to_hcd(hdev->bus)->driver;
1839
1840 if (drv->bus_suspend && drv->bus_resume)
1841 usb_enable_autosuspend(hdev);
1842 }
1843
1844 if (hdev->level == MAX_TOPO_LEVEL) {
1845 dev_err(&intf->dev,
1846 "Unsupported bus topology: hub nested too deep\n");
1847 return -E2BIG;
1848 }
1849
1850 #ifdef CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB
1851 if (hdev->parent) {
1852 dev_warn(&intf->dev, "ignoring external hub\n");
1853 return -ENODEV;
1854 }
1855 #endif
1856
1857 if (!hub_descriptor_is_sane(desc)) {
1858 dev_err(&intf->dev, "bad descriptor, ignoring hub\n");
1859 return -EIO;
1860 }
1861
1862
1863 dev_info(&intf->dev, "USB hub found\n");
1864
1865 hub = kzalloc(sizeof(*hub), GFP_KERNEL);
1866 if (!hub)
1867 return -ENOMEM;
1868
1869 kref_init(&hub->kref);
1870 hub->intfdev = &intf->dev;
1871 hub->hdev = hdev;
1872 INIT_DELAYED_WORK(&hub->leds, led_work);
1873 INIT_DELAYED_WORK(&hub->init_work, NULL);
1874 INIT_WORK(&hub->events, hub_event);
1875 INIT_LIST_HEAD(&hub->onboard_hub_devs);
1876 spin_lock_init(&hub->irq_urb_lock);
1877 timer_setup(&hub->irq_urb_retry, hub_retry_irq_urb, 0);
1878 usb_get_intf(intf);
1879 usb_get_dev(hdev);
1880
1881 usb_set_intfdata(intf, hub);
1882 intf->needs_remote_wakeup = 1;
1883 pm_suspend_ignore_children(&intf->dev, true);
1884
1885 if (hdev->speed == USB_SPEED_HIGH)
1886 highspeed_hubs++;
1887
1888 if (id->driver_info & HUB_QUIRK_CHECK_PORT_AUTOSUSPEND)
1889 hub->quirk_check_port_auto_suspend = 1;
1890
1891 if (id->driver_info & HUB_QUIRK_DISABLE_AUTOSUSPEND) {
1892 hub->quirk_disable_autosuspend = 1;
1893 usb_autopm_get_interface_no_resume(intf);
1894 }
1895
1896 if (hub_configure(hub, &desc->endpoint[0].desc) >= 0) {
1897 onboard_hub_create_pdevs(hdev, &hub->onboard_hub_devs);
1898
1899 return 0;
1900 }
1901
1902 hub_disconnect(intf);
1903 return -ENODEV;
1904 }
1905
1906 static int
1907 hub_ioctl(struct usb_interface *intf, unsigned int code, void *user_data)
1908 {
1909 struct usb_device *hdev = interface_to_usbdev(intf);
1910 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
1911
1912
1913 switch (code) {
1914 case USBDEVFS_HUB_PORTINFO: {
1915 struct usbdevfs_hub_portinfo *info = user_data;
1916 int i;
1917
1918 spin_lock_irq(&device_state_lock);
1919 if (hdev->devnum <= 0)
1920 info->nports = 0;
1921 else {
1922 info->nports = hdev->maxchild;
1923 for (i = 0; i < info->nports; i++) {
1924 if (hub->ports[i]->child == NULL)
1925 info->port[i] = 0;
1926 else
1927 info->port[i] =
1928 hub->ports[i]->child->devnum;
1929 }
1930 }
1931 spin_unlock_irq(&device_state_lock);
1932
1933 return info->nports + 1;
1934 }
1935
1936 default:
1937 return -ENOSYS;
1938 }
1939 }
1940
1941
1942
1943
1944
1945 static int find_port_owner(struct usb_device *hdev, unsigned port1,
1946 struct usb_dev_state ***ppowner)
1947 {
1948 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
1949
1950 if (hdev->state == USB_STATE_NOTATTACHED)
1951 return -ENODEV;
1952 if (port1 == 0 || port1 > hdev->maxchild)
1953 return -EINVAL;
1954
1955
1956
1957
1958 *ppowner = &(hub->ports[port1 - 1]->port_owner);
1959 return 0;
1960 }
1961
1962
1963 int usb_hub_claim_port(struct usb_device *hdev, unsigned port1,
1964 struct usb_dev_state *owner)
1965 {
1966 int rc;
1967 struct usb_dev_state **powner;
1968
1969 rc = find_port_owner(hdev, port1, &powner);
1970 if (rc)
1971 return rc;
1972 if (*powner)
1973 return -EBUSY;
1974 *powner = owner;
1975 return rc;
1976 }
1977 EXPORT_SYMBOL_GPL(usb_hub_claim_port);
1978
1979 int usb_hub_release_port(struct usb_device *hdev, unsigned port1,
1980 struct usb_dev_state *owner)
1981 {
1982 int rc;
1983 struct usb_dev_state **powner;
1984
1985 rc = find_port_owner(hdev, port1, &powner);
1986 if (rc)
1987 return rc;
1988 if (*powner != owner)
1989 return -ENOENT;
1990 *powner = NULL;
1991 return rc;
1992 }
1993 EXPORT_SYMBOL_GPL(usb_hub_release_port);
1994
1995 void usb_hub_release_all_ports(struct usb_device *hdev, struct usb_dev_state *owner)
1996 {
1997 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
1998 int n;
1999
2000 for (n = 0; n < hdev->maxchild; n++) {
2001 if (hub->ports[n]->port_owner == owner)
2002 hub->ports[n]->port_owner = NULL;
2003 }
2004
2005 }
2006
2007
2008 bool usb_device_is_owned(struct usb_device *udev)
2009 {
2010 struct usb_hub *hub;
2011
2012 if (udev->state == USB_STATE_NOTATTACHED || !udev->parent)
2013 return false;
2014 hub = usb_hub_to_struct_hub(udev->parent);
2015 return !!hub->ports[udev->portnum - 1]->port_owner;
2016 }
2017
2018 static void recursively_mark_NOTATTACHED(struct usb_device *udev)
2019 {
2020 struct usb_hub *hub = usb_hub_to_struct_hub(udev);
2021 int i;
2022
2023 for (i = 0; i < udev->maxchild; ++i) {
2024 if (hub->ports[i]->child)
2025 recursively_mark_NOTATTACHED(hub->ports[i]->child);
2026 }
2027 if (udev->state == USB_STATE_SUSPENDED)
2028 udev->active_duration -= jiffies;
2029 udev->state = USB_STATE_NOTATTACHED;
2030 }
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053 void usb_set_device_state(struct usb_device *udev,
2054 enum usb_device_state new_state)
2055 {
2056 unsigned long flags;
2057 int wakeup = -1;
2058
2059 spin_lock_irqsave(&device_state_lock, flags);
2060 if (udev->state == USB_STATE_NOTATTACHED)
2061 ;
2062 else if (new_state != USB_STATE_NOTATTACHED) {
2063
2064
2065
2066
2067 if (udev->parent) {
2068 if (udev->state == USB_STATE_SUSPENDED
2069 || new_state == USB_STATE_SUSPENDED)
2070 ;
2071 else if (new_state == USB_STATE_CONFIGURED)
2072 wakeup = (udev->quirks &
2073 USB_QUIRK_IGNORE_REMOTE_WAKEUP) ? 0 :
2074 udev->actconfig->desc.bmAttributes &
2075 USB_CONFIG_ATT_WAKEUP;
2076 else
2077 wakeup = 0;
2078 }
2079 if (udev->state == USB_STATE_SUSPENDED &&
2080 new_state != USB_STATE_SUSPENDED)
2081 udev->active_duration -= jiffies;
2082 else if (new_state == USB_STATE_SUSPENDED &&
2083 udev->state != USB_STATE_SUSPENDED)
2084 udev->active_duration += jiffies;
2085 udev->state = new_state;
2086 } else
2087 recursively_mark_NOTATTACHED(udev);
2088 spin_unlock_irqrestore(&device_state_lock, flags);
2089 if (wakeup >= 0)
2090 device_set_wakeup_capable(&udev->dev, wakeup);
2091 }
2092 EXPORT_SYMBOL_GPL(usb_set_device_state);
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123 static void choose_devnum(struct usb_device *udev)
2124 {
2125 int devnum;
2126 struct usb_bus *bus = udev->bus;
2127
2128
2129 mutex_lock(&bus->devnum_next_mutex);
2130 if (udev->wusb) {
2131 devnum = udev->portnum + 1;
2132 BUG_ON(test_bit(devnum, bus->devmap.devicemap));
2133 } else {
2134
2135
2136 devnum = find_next_zero_bit(bus->devmap.devicemap, 128,
2137 bus->devnum_next);
2138 if (devnum >= 128)
2139 devnum = find_next_zero_bit(bus->devmap.devicemap,
2140 128, 1);
2141 bus->devnum_next = (devnum >= 127 ? 1 : devnum + 1);
2142 }
2143 if (devnum < 128) {
2144 set_bit(devnum, bus->devmap.devicemap);
2145 udev->devnum = devnum;
2146 }
2147 mutex_unlock(&bus->devnum_next_mutex);
2148 }
2149
2150 static void release_devnum(struct usb_device *udev)
2151 {
2152 if (udev->devnum > 0) {
2153 clear_bit(udev->devnum, udev->bus->devmap.devicemap);
2154 udev->devnum = -1;
2155 }
2156 }
2157
2158 static void update_devnum(struct usb_device *udev, int devnum)
2159 {
2160
2161 if (!udev->wusb)
2162 udev->devnum = devnum;
2163 if (!udev->devaddr)
2164 udev->devaddr = (u8)devnum;
2165 }
2166
2167 static void hub_free_dev(struct usb_device *udev)
2168 {
2169 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2170
2171
2172 if (hcd->driver->free_dev && udev->parent)
2173 hcd->driver->free_dev(hcd, udev);
2174 }
2175
2176 static void hub_disconnect_children(struct usb_device *udev)
2177 {
2178 struct usb_hub *hub = usb_hub_to_struct_hub(udev);
2179 int i;
2180
2181
2182 for (i = 0; i < udev->maxchild; i++) {
2183 if (hub->ports[i]->child)
2184 usb_disconnect(&hub->ports[i]->child);
2185 }
2186 }
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205 void usb_disconnect(struct usb_device **pdev)
2206 {
2207 struct usb_port *port_dev = NULL;
2208 struct usb_device *udev = *pdev;
2209 struct usb_hub *hub = NULL;
2210 int port1 = 1;
2211
2212
2213
2214
2215
2216 usb_set_device_state(udev, USB_STATE_NOTATTACHED);
2217 dev_info(&udev->dev, "USB disconnect, device number %d\n",
2218 udev->devnum);
2219
2220
2221
2222
2223
2224 pm_runtime_barrier(&udev->dev);
2225
2226 usb_lock_device(udev);
2227
2228 hub_disconnect_children(udev);
2229
2230
2231
2232
2233
2234 dev_dbg(&udev->dev, "unregistering device\n");
2235 usb_disable_device(udev, 0);
2236 usb_hcd_synchronize_unlinks(udev);
2237
2238 if (udev->parent) {
2239 port1 = udev->portnum;
2240 hub = usb_hub_to_struct_hub(udev->parent);
2241 port_dev = hub->ports[port1 - 1];
2242
2243 sysfs_remove_link(&udev->dev.kobj, "port");
2244 sysfs_remove_link(&port_dev->dev.kobj, "device");
2245
2246
2247
2248
2249
2250 if (!test_and_set_bit(port1, hub->child_usage_bits))
2251 pm_runtime_get_sync(&port_dev->dev);
2252 }
2253
2254 usb_remove_ep_devs(&udev->ep0);
2255 usb_unlock_device(udev);
2256
2257
2258
2259
2260
2261 device_del(&udev->dev);
2262
2263
2264
2265
2266 release_devnum(udev);
2267
2268
2269 spin_lock_irq(&device_state_lock);
2270 *pdev = NULL;
2271 spin_unlock_irq(&device_state_lock);
2272
2273 if (port_dev && test_and_clear_bit(port1, hub->child_usage_bits))
2274 pm_runtime_put(&port_dev->dev);
2275
2276 hub_free_dev(udev);
2277
2278 put_device(&udev->dev);
2279 }
2280
2281 #ifdef CONFIG_USB_ANNOUNCE_NEW_DEVICES
2282 static void show_string(struct usb_device *udev, char *id, char *string)
2283 {
2284 if (!string)
2285 return;
2286 dev_info(&udev->dev, "%s: %s\n", id, string);
2287 }
2288
2289 static void announce_device(struct usb_device *udev)
2290 {
2291 u16 bcdDevice = le16_to_cpu(udev->descriptor.bcdDevice);
2292
2293 dev_info(&udev->dev,
2294 "New USB device found, idVendor=%04x, idProduct=%04x, bcdDevice=%2x.%02x\n",
2295 le16_to_cpu(udev->descriptor.idVendor),
2296 le16_to_cpu(udev->descriptor.idProduct),
2297 bcdDevice >> 8, bcdDevice & 0xff);
2298 dev_info(&udev->dev,
2299 "New USB device strings: Mfr=%d, Product=%d, SerialNumber=%d\n",
2300 udev->descriptor.iManufacturer,
2301 udev->descriptor.iProduct,
2302 udev->descriptor.iSerialNumber);
2303 show_string(udev, "Product", udev->product);
2304 show_string(udev, "Manufacturer", udev->manufacturer);
2305 show_string(udev, "SerialNumber", udev->serial);
2306 }
2307 #else
2308 static inline void announce_device(struct usb_device *udev) { }
2309 #endif
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320 static int usb_enumerate_device_otg(struct usb_device *udev)
2321 {
2322 int err = 0;
2323
2324 #ifdef CONFIG_USB_OTG
2325
2326
2327
2328
2329
2330 if (!udev->bus->is_b_host
2331 && udev->config
2332 && udev->parent == udev->bus->root_hub) {
2333 struct usb_otg_descriptor *desc = NULL;
2334 struct usb_bus *bus = udev->bus;
2335 unsigned port1 = udev->portnum;
2336
2337
2338 err = __usb_get_extra_descriptor(udev->rawdescriptors[0],
2339 le16_to_cpu(udev->config[0].desc.wTotalLength),
2340 USB_DT_OTG, (void **) &desc, sizeof(*desc));
2341 if (err || !(desc->bmAttributes & USB_OTG_HNP))
2342 return 0;
2343
2344 dev_info(&udev->dev, "Dual-Role OTG device on %sHNP port\n",
2345 (port1 == bus->otg_port) ? "" : "non-");
2346
2347
2348 if (port1 == bus->otg_port) {
2349 bus->b_hnp_enable = 1;
2350 err = usb_control_msg(udev,
2351 usb_sndctrlpipe(udev, 0),
2352 USB_REQ_SET_FEATURE, 0,
2353 USB_DEVICE_B_HNP_ENABLE,
2354 0, NULL, 0,
2355 USB_CTRL_SET_TIMEOUT);
2356 if (err < 0) {
2357
2358
2359
2360
2361 dev_err(&udev->dev, "can't set HNP mode: %d\n",
2362 err);
2363 bus->b_hnp_enable = 0;
2364 }
2365 } else if (desc->bLength == sizeof
2366 (struct usb_otg_descriptor)) {
2367
2368 err = usb_control_msg(udev,
2369 usb_sndctrlpipe(udev, 0),
2370 USB_REQ_SET_FEATURE, 0,
2371 USB_DEVICE_A_ALT_HNP_SUPPORT,
2372 0, NULL, 0,
2373 USB_CTRL_SET_TIMEOUT);
2374 if (err < 0)
2375 dev_err(&udev->dev,
2376 "set a_alt_hnp_support failed: %d\n",
2377 err);
2378 }
2379 }
2380 #endif
2381 return err;
2382 }
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399 static int usb_enumerate_device(struct usb_device *udev)
2400 {
2401 int err;
2402 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2403
2404 if (udev->config == NULL) {
2405 err = usb_get_configuration(udev);
2406 if (err < 0) {
2407 if (err != -ENODEV)
2408 dev_err(&udev->dev, "can't read configurations, error %d\n",
2409 err);
2410 return err;
2411 }
2412 }
2413
2414
2415 udev->product = usb_cache_string(udev, udev->descriptor.iProduct);
2416 udev->manufacturer = usb_cache_string(udev,
2417 udev->descriptor.iManufacturer);
2418 udev->serial = usb_cache_string(udev, udev->descriptor.iSerialNumber);
2419
2420 err = usb_enumerate_device_otg(udev);
2421 if (err < 0)
2422 return err;
2423
2424 if (IS_ENABLED(CONFIG_USB_OTG_PRODUCTLIST) && hcd->tpl_support &&
2425 !is_targeted(udev)) {
2426
2427
2428
2429 if (IS_ENABLED(CONFIG_USB_OTG) && (udev->bus->b_hnp_enable
2430 || udev->bus->is_b_host)) {
2431 err = usb_port_suspend(udev, PMSG_AUTO_SUSPEND);
2432 if (err < 0)
2433 dev_dbg(&udev->dev, "HNP fail, %d\n", err);
2434 }
2435 return -ENOTSUPP;
2436 }
2437
2438 usb_detect_interface_quirks(udev);
2439
2440 return 0;
2441 }
2442
2443 static void set_usb_port_removable(struct usb_device *udev)
2444 {
2445 struct usb_device *hdev = udev->parent;
2446 struct usb_hub *hub;
2447 u8 port = udev->portnum;
2448 u16 wHubCharacteristics;
2449 bool removable = true;
2450
2451 dev_set_removable(&udev->dev, DEVICE_REMOVABLE_UNKNOWN);
2452
2453 if (!hdev)
2454 return;
2455
2456 hub = usb_hub_to_struct_hub(udev->parent);
2457
2458
2459
2460
2461
2462 switch (hub->ports[udev->portnum - 1]->connect_type) {
2463 case USB_PORT_CONNECT_TYPE_HOT_PLUG:
2464 dev_set_removable(&udev->dev, DEVICE_REMOVABLE);
2465 return;
2466 case USB_PORT_CONNECT_TYPE_HARD_WIRED:
2467 case USB_PORT_NOT_USED:
2468 dev_set_removable(&udev->dev, DEVICE_FIXED);
2469 return;
2470 default:
2471 break;
2472 }
2473
2474
2475
2476
2477
2478 wHubCharacteristics = le16_to_cpu(hub->descriptor->wHubCharacteristics);
2479
2480 if (!(wHubCharacteristics & HUB_CHAR_COMPOUND))
2481 return;
2482
2483 if (hub_is_superspeed(hdev)) {
2484 if (le16_to_cpu(hub->descriptor->u.ss.DeviceRemovable)
2485 & (1 << port))
2486 removable = false;
2487 } else {
2488 if (hub->descriptor->u.hs.DeviceRemovable[port / 8] & (1 << (port % 8)))
2489 removable = false;
2490 }
2491
2492 if (removable)
2493 dev_set_removable(&udev->dev, DEVICE_REMOVABLE);
2494 else
2495 dev_set_removable(&udev->dev, DEVICE_FIXED);
2496
2497 }
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520 int usb_new_device(struct usb_device *udev)
2521 {
2522 int err;
2523
2524 if (udev->parent) {
2525
2526
2527
2528
2529 device_init_wakeup(&udev->dev, 0);
2530 }
2531
2532
2533 pm_runtime_set_active(&udev->dev);
2534 pm_runtime_get_noresume(&udev->dev);
2535 pm_runtime_use_autosuspend(&udev->dev);
2536 pm_runtime_enable(&udev->dev);
2537
2538
2539
2540
2541 usb_disable_autosuspend(udev);
2542
2543 err = usb_enumerate_device(udev);
2544 if (err < 0)
2545 goto fail;
2546 dev_dbg(&udev->dev, "udev %d, busnum %d, minor = %d\n",
2547 udev->devnum, udev->bus->busnum,
2548 (((udev->bus->busnum-1) * 128) + (udev->devnum-1)));
2549
2550 udev->dev.devt = MKDEV(USB_DEVICE_MAJOR,
2551 (((udev->bus->busnum-1) * 128) + (udev->devnum-1)));
2552
2553
2554 announce_device(udev);
2555
2556 if (udev->serial)
2557 add_device_randomness(udev->serial, strlen(udev->serial));
2558 if (udev->product)
2559 add_device_randomness(udev->product, strlen(udev->product));
2560 if (udev->manufacturer)
2561 add_device_randomness(udev->manufacturer,
2562 strlen(udev->manufacturer));
2563
2564 device_enable_async_suspend(&udev->dev);
2565
2566
2567 set_usb_port_removable(udev);
2568
2569
2570
2571
2572
2573 err = device_add(&udev->dev);
2574 if (err) {
2575 dev_err(&udev->dev, "can't device_add, error %d\n", err);
2576 goto fail;
2577 }
2578
2579
2580 if (udev->parent) {
2581 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
2582 int port1 = udev->portnum;
2583 struct usb_port *port_dev = hub->ports[port1 - 1];
2584
2585 err = sysfs_create_link(&udev->dev.kobj,
2586 &port_dev->dev.kobj, "port");
2587 if (err)
2588 goto fail;
2589
2590 err = sysfs_create_link(&port_dev->dev.kobj,
2591 &udev->dev.kobj, "device");
2592 if (err) {
2593 sysfs_remove_link(&udev->dev.kobj, "port");
2594 goto fail;
2595 }
2596
2597 if (!test_and_set_bit(port1, hub->child_usage_bits))
2598 pm_runtime_get_sync(&port_dev->dev);
2599 }
2600
2601 (void) usb_create_ep_devs(&udev->dev, &udev->ep0, udev);
2602 usb_mark_last_busy(udev);
2603 pm_runtime_put_sync_autosuspend(&udev->dev);
2604 return err;
2605
2606 fail:
2607 usb_set_device_state(udev, USB_STATE_NOTATTACHED);
2608 pm_runtime_disable(&udev->dev);
2609 pm_runtime_set_suspended(&udev->dev);
2610 return err;
2611 }
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626 int usb_deauthorize_device(struct usb_device *usb_dev)
2627 {
2628 usb_lock_device(usb_dev);
2629 if (usb_dev->authorized == 0)
2630 goto out_unauthorized;
2631
2632 usb_dev->authorized = 0;
2633 usb_set_configuration(usb_dev, -1);
2634
2635 out_unauthorized:
2636 usb_unlock_device(usb_dev);
2637 return 0;
2638 }
2639
2640
2641 int usb_authorize_device(struct usb_device *usb_dev)
2642 {
2643 int result = 0, c;
2644
2645 usb_lock_device(usb_dev);
2646 if (usb_dev->authorized == 1)
2647 goto out_authorized;
2648
2649 result = usb_autoresume_device(usb_dev);
2650 if (result < 0) {
2651 dev_err(&usb_dev->dev,
2652 "can't autoresume for authorization: %d\n", result);
2653 goto error_autoresume;
2654 }
2655
2656 if (usb_dev->wusb) {
2657 result = usb_get_device_descriptor(usb_dev, sizeof(usb_dev->descriptor));
2658 if (result < 0) {
2659 dev_err(&usb_dev->dev, "can't re-read device descriptor for "
2660 "authorization: %d\n", result);
2661 goto error_device_descriptor;
2662 }
2663 }
2664
2665 usb_dev->authorized = 1;
2666
2667
2668
2669 c = usb_choose_configuration(usb_dev);
2670 if (c >= 0) {
2671 result = usb_set_configuration(usb_dev, c);
2672 if (result) {
2673 dev_err(&usb_dev->dev,
2674 "can't set config #%d, error %d\n", c, result);
2675
2676
2677 }
2678 }
2679 dev_info(&usb_dev->dev, "authorized to connect\n");
2680
2681 error_device_descriptor:
2682 usb_autosuspend_device(usb_dev);
2683 error_autoresume:
2684 out_authorized:
2685 usb_unlock_device(usb_dev);
2686 return result;
2687 }
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698 static enum usb_ssp_rate get_port_ssp_rate(struct usb_device *hdev,
2699 u32 ext_portstatus)
2700 {
2701 struct usb_ssp_cap_descriptor *ssp_cap = hdev->bos->ssp_cap;
2702 u32 attr;
2703 u8 speed_id;
2704 u8 ssac;
2705 u8 lanes;
2706 int i;
2707
2708 if (!ssp_cap)
2709 goto out;
2710
2711 speed_id = ext_portstatus & USB_EXT_PORT_STAT_RX_SPEED_ID;
2712 lanes = USB_EXT_PORT_RX_LANES(ext_portstatus) + 1;
2713
2714 ssac = le32_to_cpu(ssp_cap->bmAttributes) &
2715 USB_SSP_SUBLINK_SPEED_ATTRIBS;
2716
2717 for (i = 0; i <= ssac; i++) {
2718 u8 ssid;
2719
2720 attr = le32_to_cpu(ssp_cap->bmSublinkSpeedAttr[i]);
2721 ssid = FIELD_GET(USB_SSP_SUBLINK_SPEED_SSID, attr);
2722 if (speed_id == ssid) {
2723 u16 mantissa;
2724 u8 lse;
2725 u8 type;
2726
2727
2728
2729
2730
2731 type = FIELD_GET(USB_SSP_SUBLINK_SPEED_ST, attr);
2732 if (type == USB_SSP_SUBLINK_SPEED_ST_ASYM_RX ||
2733 type == USB_SSP_SUBLINK_SPEED_ST_ASYM_TX)
2734 goto out;
2735
2736 if (FIELD_GET(USB_SSP_SUBLINK_SPEED_LP, attr) !=
2737 USB_SSP_SUBLINK_SPEED_LP_SSP)
2738 goto out;
2739
2740 lse = FIELD_GET(USB_SSP_SUBLINK_SPEED_LSE, attr);
2741 mantissa = FIELD_GET(USB_SSP_SUBLINK_SPEED_LSM, attr);
2742
2743
2744 for (; lse < USB_SSP_SUBLINK_SPEED_LSE_GBPS; lse++)
2745 mantissa /= 1000;
2746
2747 if (mantissa >= 10 && lanes == 1)
2748 return USB_SSP_GEN_2x1;
2749
2750 if (mantissa >= 10 && lanes == 2)
2751 return USB_SSP_GEN_2x2;
2752
2753 if (mantissa >= 5 && lanes == 2)
2754 return USB_SSP_GEN_1x2;
2755
2756 goto out;
2757 }
2758 }
2759
2760 out:
2761 return USB_SSP_GEN_UNKNOWN;
2762 }
2763
2764
2765 static unsigned hub_is_wusb(struct usb_hub *hub)
2766 {
2767 struct usb_hcd *hcd;
2768 if (hub->hdev->parent != NULL)
2769 return 0;
2770 hcd = bus_to_hcd(hub->hdev->bus);
2771 return hcd->wireless;
2772 }
2773
2774
2775 #ifdef CONFIG_USB_FEW_INIT_RETRIES
2776 #define PORT_RESET_TRIES 2
2777 #define SET_ADDRESS_TRIES 1
2778 #define GET_DESCRIPTOR_TRIES 1
2779 #define GET_MAXPACKET0_TRIES 1
2780 #define PORT_INIT_TRIES 4
2781
2782 #else
2783 #define PORT_RESET_TRIES 5
2784 #define SET_ADDRESS_TRIES 2
2785 #define GET_DESCRIPTOR_TRIES 2
2786 #define GET_MAXPACKET0_TRIES 3
2787 #define PORT_INIT_TRIES 4
2788 #endif
2789
2790 #define DETECT_DISCONNECT_TRIES 5
2791
2792 #define HUB_ROOT_RESET_TIME 60
2793 #define HUB_SHORT_RESET_TIME 10
2794 #define HUB_BH_RESET_TIME 50
2795 #define HUB_LONG_RESET_TIME 200
2796 #define HUB_RESET_TIMEOUT 800
2797
2798 static bool use_new_scheme(struct usb_device *udev, int retry,
2799 struct usb_port *port_dev)
2800 {
2801 int old_scheme_first_port =
2802 (port_dev->quirks & USB_PORT_QUIRK_OLD_SCHEME) ||
2803 old_scheme_first;
2804
2805
2806
2807
2808
2809
2810
2811
2812 if (udev->speed >= USB_SPEED_SUPER)
2813 return false;
2814
2815
2816
2817
2818
2819
2820 if (use_both_schemes && retry >= (PORT_INIT_TRIES + 1) / 2)
2821 return old_scheme_first_port;
2822 return !old_scheme_first_port;
2823 }
2824
2825
2826
2827
2828 static bool hub_port_warm_reset_required(struct usb_hub *hub, int port1,
2829 u16 portstatus)
2830 {
2831 u16 link_state;
2832
2833 if (!hub_is_superspeed(hub->hdev))
2834 return false;
2835
2836 if (test_bit(port1, hub->warm_reset_bits))
2837 return true;
2838
2839 link_state = portstatus & USB_PORT_STAT_LINK_STATE;
2840 return link_state == USB_SS_PORT_LS_SS_INACTIVE
2841 || link_state == USB_SS_PORT_LS_COMP_MOD;
2842 }
2843
2844 static int hub_port_wait_reset(struct usb_hub *hub, int port1,
2845 struct usb_device *udev, unsigned int delay, bool warm)
2846 {
2847 int delay_time, ret;
2848 u16 portstatus;
2849 u16 portchange;
2850 u32 ext_portstatus = 0;
2851
2852 for (delay_time = 0;
2853 delay_time < HUB_RESET_TIMEOUT;
2854 delay_time += delay) {
2855
2856 msleep(delay);
2857
2858
2859 if (hub_is_superspeedplus(hub->hdev))
2860 ret = hub_ext_port_status(hub, port1,
2861 HUB_EXT_PORT_STATUS,
2862 &portstatus, &portchange,
2863 &ext_portstatus);
2864 else
2865 ret = usb_hub_port_status(hub, port1, &portstatus,
2866 &portchange);
2867 if (ret < 0)
2868 return ret;
2869
2870
2871
2872
2873
2874
2875
2876
2877 if (!(portstatus & USB_PORT_STAT_RESET) &&
2878 (portstatus & USB_PORT_STAT_CONNECTION))
2879 break;
2880
2881
2882 if (delay_time >= 2 * HUB_SHORT_RESET_TIME)
2883 delay = HUB_LONG_RESET_TIME;
2884
2885 dev_dbg(&hub->ports[port1 - 1]->dev,
2886 "not %sreset yet, waiting %dms\n",
2887 warm ? "warm " : "", delay);
2888 }
2889
2890 if ((portstatus & USB_PORT_STAT_RESET))
2891 return -EBUSY;
2892
2893 if (hub_port_warm_reset_required(hub, port1, portstatus))
2894 return -ENOTCONN;
2895
2896
2897 if (!(portstatus & USB_PORT_STAT_CONNECTION))
2898 return -ENOTCONN;
2899
2900
2901
2902
2903
2904 if (!hub_is_superspeed(hub->hdev) &&
2905 (portchange & USB_PORT_STAT_C_CONNECTION)) {
2906 usb_clear_port_feature(hub->hdev, port1,
2907 USB_PORT_FEAT_C_CONNECTION);
2908 return -EAGAIN;
2909 }
2910
2911 if (!(portstatus & USB_PORT_STAT_ENABLE))
2912 return -EBUSY;
2913
2914 if (!udev)
2915 return 0;
2916
2917 if (hub_is_superspeedplus(hub->hdev)) {
2918
2919 udev->rx_lanes = USB_EXT_PORT_RX_LANES(ext_portstatus) + 1;
2920 udev->tx_lanes = USB_EXT_PORT_TX_LANES(ext_portstatus) + 1;
2921 udev->ssp_rate = get_port_ssp_rate(hub->hdev, ext_portstatus);
2922 } else {
2923 udev->rx_lanes = 1;
2924 udev->tx_lanes = 1;
2925 udev->ssp_rate = USB_SSP_GEN_UNKNOWN;
2926 }
2927 if (hub_is_wusb(hub))
2928 udev->speed = USB_SPEED_WIRELESS;
2929 else if (udev->ssp_rate != USB_SSP_GEN_UNKNOWN)
2930 udev->speed = USB_SPEED_SUPER_PLUS;
2931 else if (hub_is_superspeed(hub->hdev))
2932 udev->speed = USB_SPEED_SUPER;
2933 else if (portstatus & USB_PORT_STAT_HIGH_SPEED)
2934 udev->speed = USB_SPEED_HIGH;
2935 else if (portstatus & USB_PORT_STAT_LOW_SPEED)
2936 udev->speed = USB_SPEED_LOW;
2937 else
2938 udev->speed = USB_SPEED_FULL;
2939 return 0;
2940 }
2941
2942
2943 static int hub_port_reset(struct usb_hub *hub, int port1,
2944 struct usb_device *udev, unsigned int delay, bool warm)
2945 {
2946 int i, status;
2947 u16 portchange, portstatus;
2948 struct usb_port *port_dev = hub->ports[port1 - 1];
2949 int reset_recovery_time;
2950
2951 if (!hub_is_superspeed(hub->hdev)) {
2952 if (warm) {
2953 dev_err(hub->intfdev, "only USB3 hub support "
2954 "warm reset\n");
2955 return -EINVAL;
2956 }
2957
2958
2959
2960 down_read(&ehci_cf_port_reset_rwsem);
2961 } else if (!warm) {
2962
2963
2964
2965
2966 if (usb_hub_port_status(hub, port1, &portstatus,
2967 &portchange) == 0)
2968 if (hub_port_warm_reset_required(hub, port1,
2969 portstatus))
2970 warm = true;
2971 }
2972 clear_bit(port1, hub->warm_reset_bits);
2973
2974
2975 for (i = 0; i < PORT_RESET_TRIES; i++) {
2976 status = set_port_feature(hub->hdev, port1, (warm ?
2977 USB_PORT_FEAT_BH_PORT_RESET :
2978 USB_PORT_FEAT_RESET));
2979 if (status == -ENODEV) {
2980 ;
2981 } else if (status) {
2982 dev_err(&port_dev->dev,
2983 "cannot %sreset (err = %d)\n",
2984 warm ? "warm " : "", status);
2985 } else {
2986 status = hub_port_wait_reset(hub, port1, udev, delay,
2987 warm);
2988 if (status && status != -ENOTCONN && status != -ENODEV)
2989 dev_dbg(hub->intfdev,
2990 "port_wait_reset: err = %d\n",
2991 status);
2992 }
2993
2994
2995
2996
2997
2998 if (status == 0 || status == -ENOTCONN || status == -ENODEV ||
2999 (status == -EBUSY && i == PORT_RESET_TRIES - 1)) {
3000 usb_clear_port_feature(hub->hdev, port1,
3001 USB_PORT_FEAT_C_RESET);
3002
3003 if (!hub_is_superspeed(hub->hdev))
3004 goto done;
3005
3006 usb_clear_port_feature(hub->hdev, port1,
3007 USB_PORT_FEAT_C_BH_PORT_RESET);
3008 usb_clear_port_feature(hub->hdev, port1,
3009 USB_PORT_FEAT_C_PORT_LINK_STATE);
3010
3011 if (udev)
3012 usb_clear_port_feature(hub->hdev, port1,
3013 USB_PORT_FEAT_C_CONNECTION);
3014
3015
3016
3017
3018
3019 if (usb_hub_port_status(hub, port1,
3020 &portstatus, &portchange) < 0)
3021 goto done;
3022
3023 if (!hub_port_warm_reset_required(hub, port1,
3024 portstatus))
3025 goto done;
3026
3027
3028
3029
3030
3031 if (!warm) {
3032 dev_dbg(&port_dev->dev,
3033 "hot reset failed, warm reset\n");
3034 warm = true;
3035 }
3036 }
3037
3038 dev_dbg(&port_dev->dev,
3039 "not enabled, trying %sreset again...\n",
3040 warm ? "warm " : "");
3041 delay = HUB_LONG_RESET_TIME;
3042 }
3043
3044 dev_err(&port_dev->dev, "Cannot enable. Maybe the USB cable is bad?\n");
3045
3046 done:
3047 if (status == 0) {
3048 if (port_dev->quirks & USB_PORT_QUIRK_FAST_ENUM)
3049 usleep_range(10000, 12000);
3050 else {
3051
3052 reset_recovery_time = 10 + 40;
3053
3054
3055 if (hub->hdev->quirks & USB_QUIRK_HUB_SLOW_RESET)
3056 reset_recovery_time += 100;
3057
3058 msleep(reset_recovery_time);
3059 }
3060
3061 if (udev) {
3062 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
3063
3064 update_devnum(udev, 0);
3065
3066
3067
3068 if (hcd->driver->reset_device)
3069 hcd->driver->reset_device(hcd, udev);
3070
3071 usb_set_device_state(udev, USB_STATE_DEFAULT);
3072 }
3073 } else {
3074 if (udev)
3075 usb_set_device_state(udev, USB_STATE_NOTATTACHED);
3076 }
3077
3078 if (!hub_is_superspeed(hub->hdev))
3079 up_read(&ehci_cf_port_reset_rwsem);
3080
3081 return status;
3082 }
3083
3084
3085 int usb_port_is_power_on(struct usb_hub *hub, unsigned int portstatus)
3086 {
3087 int ret = 0;
3088
3089 if (hub_is_superspeed(hub->hdev)) {
3090 if (portstatus & USB_SS_PORT_STAT_POWER)
3091 ret = 1;
3092 } else {
3093 if (portstatus & USB_PORT_STAT_POWER)
3094 ret = 1;
3095 }
3096
3097 return ret;
3098 }
3099
3100 static void usb_lock_port(struct usb_port *port_dev)
3101 __acquires(&port_dev->status_lock)
3102 {
3103 mutex_lock(&port_dev->status_lock);
3104 __acquire(&port_dev->status_lock);
3105 }
3106
3107 static void usb_unlock_port(struct usb_port *port_dev)
3108 __releases(&port_dev->status_lock)
3109 {
3110 mutex_unlock(&port_dev->status_lock);
3111 __release(&port_dev->status_lock);
3112 }
3113
3114 #ifdef CONFIG_PM
3115
3116
3117 static int port_is_suspended(struct usb_hub *hub, unsigned portstatus)
3118 {
3119 int ret = 0;
3120
3121 if (hub_is_superspeed(hub->hdev)) {
3122 if ((portstatus & USB_PORT_STAT_LINK_STATE)
3123 == USB_SS_PORT_LS_U3)
3124 ret = 1;
3125 } else {
3126 if (portstatus & USB_PORT_STAT_SUSPEND)
3127 ret = 1;
3128 }
3129
3130 return ret;
3131 }
3132
3133
3134
3135
3136 static int check_port_resume_type(struct usb_device *udev,
3137 struct usb_hub *hub, int port1,
3138 int status, u16 portchange, u16 portstatus)
3139 {
3140 struct usb_port *port_dev = hub->ports[port1 - 1];
3141 int retries = 3;
3142
3143 retry:
3144
3145 if (status == 0 && udev->reset_resume
3146 && hub_port_warm_reset_required(hub, port1, portstatus)) {
3147 ;
3148 }
3149
3150 else if (status || port_is_suspended(hub, portstatus) ||
3151 !usb_port_is_power_on(hub, portstatus)) {
3152 if (status >= 0)
3153 status = -ENODEV;
3154 } else if (!(portstatus & USB_PORT_STAT_CONNECTION)) {
3155 if (retries--) {
3156 usleep_range(200, 300);
3157 status = usb_hub_port_status(hub, port1, &portstatus,
3158 &portchange);
3159 goto retry;
3160 }
3161 status = -ENODEV;
3162 }
3163
3164
3165
3166
3167 else if (!(portstatus & USB_PORT_STAT_ENABLE) && !udev->reset_resume) {
3168 if (udev->persist_enabled)
3169 udev->reset_resume = 1;
3170 else
3171 status = -ENODEV;
3172 }
3173
3174 if (status) {
3175 dev_dbg(&port_dev->dev, "status %04x.%04x after resume, %d\n",
3176 portchange, portstatus, status);
3177 } else if (udev->reset_resume) {
3178
3179
3180 if (portchange & USB_PORT_STAT_C_CONNECTION)
3181 usb_clear_port_feature(hub->hdev, port1,
3182 USB_PORT_FEAT_C_CONNECTION);
3183 if (portchange & USB_PORT_STAT_C_ENABLE)
3184 usb_clear_port_feature(hub->hdev, port1,
3185 USB_PORT_FEAT_C_ENABLE);
3186
3187
3188
3189
3190
3191
3192
3193
3194 clear_bit(port1, hub->change_bits);
3195 }
3196
3197 return status;
3198 }
3199
3200 int usb_disable_ltm(struct usb_device *udev)
3201 {
3202 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
3203
3204
3205 if (!usb_device_supports_ltm(hcd->self.root_hub) ||
3206 !usb_device_supports_ltm(udev))
3207 return 0;
3208
3209
3210
3211
3212 if (!udev->actconfig)
3213 return 0;
3214
3215 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3216 USB_REQ_CLEAR_FEATURE, USB_RECIP_DEVICE,
3217 USB_DEVICE_LTM_ENABLE, 0, NULL, 0,
3218 USB_CTRL_SET_TIMEOUT);
3219 }
3220 EXPORT_SYMBOL_GPL(usb_disable_ltm);
3221
3222 void usb_enable_ltm(struct usb_device *udev)
3223 {
3224 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
3225
3226
3227 if (!usb_device_supports_ltm(hcd->self.root_hub) ||
3228 !usb_device_supports_ltm(udev))
3229 return;
3230
3231
3232
3233
3234 if (!udev->actconfig)
3235 return;
3236
3237 usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3238 USB_REQ_SET_FEATURE, USB_RECIP_DEVICE,
3239 USB_DEVICE_LTM_ENABLE, 0, NULL, 0,
3240 USB_CTRL_SET_TIMEOUT);
3241 }
3242 EXPORT_SYMBOL_GPL(usb_enable_ltm);
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254 static int usb_enable_remote_wakeup(struct usb_device *udev)
3255 {
3256 if (udev->speed < USB_SPEED_SUPER)
3257 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3258 USB_REQ_SET_FEATURE, USB_RECIP_DEVICE,
3259 USB_DEVICE_REMOTE_WAKEUP, 0, NULL, 0,
3260 USB_CTRL_SET_TIMEOUT);
3261 else
3262 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3263 USB_REQ_SET_FEATURE, USB_RECIP_INTERFACE,
3264 USB_INTRF_FUNC_SUSPEND,
3265 USB_INTRF_FUNC_SUSPEND_RW |
3266 USB_INTRF_FUNC_SUSPEND_LP,
3267 NULL, 0, USB_CTRL_SET_TIMEOUT);
3268 }
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280 static int usb_disable_remote_wakeup(struct usb_device *udev)
3281 {
3282 if (udev->speed < USB_SPEED_SUPER)
3283 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3284 USB_REQ_CLEAR_FEATURE, USB_RECIP_DEVICE,
3285 USB_DEVICE_REMOTE_WAKEUP, 0, NULL, 0,
3286 USB_CTRL_SET_TIMEOUT);
3287 else
3288 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3289 USB_REQ_SET_FEATURE, USB_RECIP_INTERFACE,
3290 USB_INTRF_FUNC_SUSPEND, 0, NULL, 0,
3291 USB_CTRL_SET_TIMEOUT);
3292 }
3293
3294
3295 unsigned usb_wakeup_enabled_descendants(struct usb_device *udev)
3296 {
3297 struct usb_hub *hub = usb_hub_to_struct_hub(udev);
3298
3299 return udev->do_remote_wakeup +
3300 (hub ? hub->wakeup_enabled_descendants : 0);
3301 }
3302 EXPORT_SYMBOL_GPL(usb_wakeup_enabled_descendants);
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352 int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
3353 {
3354 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
3355 struct usb_port *port_dev = hub->ports[udev->portnum - 1];
3356 int port1 = udev->portnum;
3357 int status;
3358 bool really_suspend = true;
3359
3360 usb_lock_port(port_dev);
3361
3362
3363
3364
3365
3366
3367
3368 if (udev->do_remote_wakeup) {
3369 status = usb_enable_remote_wakeup(udev);
3370 if (status) {
3371 dev_dbg(&udev->dev, "won't remote wakeup, status %d\n",
3372 status);
3373
3374 if (PMSG_IS_AUTO(msg))
3375 goto err_wakeup;
3376 }
3377 }
3378
3379
3380 usb_disable_usb2_hardware_lpm(udev);
3381
3382 if (usb_disable_ltm(udev)) {
3383 dev_err(&udev->dev, "Failed to disable LTM before suspend\n");
3384 status = -ENOMEM;
3385 if (PMSG_IS_AUTO(msg))
3386 goto err_ltm;
3387 }
3388
3389
3390 if (hub_is_superspeed(hub->hdev))
3391 status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U3);
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404 else if (PMSG_IS_AUTO(msg) || usb_wakeup_enabled_descendants(udev) > 0)
3405 status = set_port_feature(hub->hdev, port1,
3406 USB_PORT_FEAT_SUSPEND);
3407 else {
3408 really_suspend = false;
3409 status = 0;
3410 }
3411 if (status) {
3412
3413
3414
3415 if (status == -ETIMEDOUT) {
3416 int ret;
3417 u16 portstatus, portchange;
3418
3419 portstatus = portchange = 0;
3420 ret = usb_hub_port_status(hub, port1, &portstatus,
3421 &portchange);
3422
3423 dev_dbg(&port_dev->dev,
3424 "suspend timeout, status %04x\n", portstatus);
3425
3426 if (ret == 0 && port_is_suspended(hub, portstatus)) {
3427 status = 0;
3428 goto suspend_done;
3429 }
3430 }
3431
3432 dev_dbg(&port_dev->dev, "can't suspend, status %d\n", status);
3433
3434
3435 usb_enable_ltm(udev);
3436 err_ltm:
3437
3438 usb_enable_usb2_hardware_lpm(udev);
3439
3440 if (udev->do_remote_wakeup)
3441 (void) usb_disable_remote_wakeup(udev);
3442 err_wakeup:
3443
3444
3445 if (!PMSG_IS_AUTO(msg))
3446 status = 0;
3447 } else {
3448 suspend_done:
3449 dev_dbg(&udev->dev, "usb %ssuspend, wakeup %d\n",
3450 (PMSG_IS_AUTO(msg) ? "auto-" : ""),
3451 udev->do_remote_wakeup);
3452 if (really_suspend) {
3453 udev->port_is_suspended = 1;
3454
3455
3456 msleep(10);
3457 }
3458 usb_set_device_state(udev, USB_STATE_SUSPENDED);
3459 }
3460
3461 if (status == 0 && !udev->do_remote_wakeup && udev->persist_enabled
3462 && test_and_clear_bit(port1, hub->child_usage_bits))
3463 pm_runtime_put_sync(&port_dev->dev);
3464
3465 usb_mark_last_busy(hub->hdev);
3466
3467 usb_unlock_port(port_dev);
3468 return status;
3469 }
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482 static int finish_port_resume(struct usb_device *udev)
3483 {
3484 int status = 0;
3485 u16 devstatus = 0;
3486
3487
3488 dev_dbg(&udev->dev, "%s\n",
3489 udev->reset_resume ? "finish reset-resume" : "finish resume");
3490
3491
3492
3493
3494
3495
3496 usb_set_device_state(udev, udev->actconfig
3497 ? USB_STATE_CONFIGURED
3498 : USB_STATE_ADDRESS);
3499
3500
3501
3502
3503
3504
3505 if (udev->reset_resume) {
3506
3507
3508
3509
3510
3511
3512 retry_reset_resume:
3513 if (udev->quirks & USB_QUIRK_RESET)
3514 status = -ENODEV;
3515 else
3516 status = usb_reset_and_verify_device(udev);
3517 }
3518
3519
3520
3521
3522
3523 if (status == 0) {
3524 devstatus = 0;
3525 status = usb_get_std_status(udev, USB_RECIP_DEVICE, 0, &devstatus);
3526
3527
3528 if (status && !udev->reset_resume && udev->persist_enabled) {
3529 dev_dbg(&udev->dev, "retry with reset-resume\n");
3530 udev->reset_resume = 1;
3531 goto retry_reset_resume;
3532 }
3533 }
3534
3535 if (status) {
3536 dev_dbg(&udev->dev, "gone after usb resume? status %d\n",
3537 status);
3538
3539
3540
3541
3542
3543
3544 } else if (udev->actconfig && !udev->reset_resume) {
3545 if (udev->speed < USB_SPEED_SUPER) {
3546 if (devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP))
3547 status = usb_disable_remote_wakeup(udev);
3548 } else {
3549 status = usb_get_std_status(udev, USB_RECIP_INTERFACE, 0,
3550 &devstatus);
3551 if (!status && devstatus & (USB_INTRF_STAT_FUNC_RW_CAP
3552 | USB_INTRF_STAT_FUNC_RW))
3553 status = usb_disable_remote_wakeup(udev);
3554 }
3555
3556 if (status)
3557 dev_dbg(&udev->dev,
3558 "disable remote wakeup, status %d\n",
3559 status);
3560 status = 0;
3561 }
3562 return status;
3563 }
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589 static int wait_for_connected(struct usb_device *udev,
3590 struct usb_hub *hub, int port1,
3591 u16 *portchange, u16 *portstatus)
3592 {
3593 int status = 0, delay_ms = 0;
3594
3595 while (delay_ms < 2000) {
3596 if (status || *portstatus & USB_PORT_STAT_CONNECTION)
3597 break;
3598 if (!usb_port_is_power_on(hub, *portstatus)) {
3599 status = -ENODEV;
3600 break;
3601 }
3602 msleep(20);
3603 delay_ms += 20;
3604 status = usb_hub_port_status(hub, port1, portstatus, portchange);
3605 }
3606 dev_dbg(&udev->dev, "Waited %dms for CONNECT\n", delay_ms);
3607 return status;
3608 }
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644 int usb_port_resume(struct usb_device *udev, pm_message_t msg)
3645 {
3646 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
3647 struct usb_port *port_dev = hub->ports[udev->portnum - 1];
3648 int port1 = udev->portnum;
3649 int status;
3650 u16 portchange, portstatus;
3651
3652 if (!test_and_set_bit(port1, hub->child_usage_bits)) {
3653 status = pm_runtime_resume_and_get(&port_dev->dev);
3654 if (status < 0) {
3655 dev_dbg(&udev->dev, "can't resume usb port, status %d\n",
3656 status);
3657 return status;
3658 }
3659 }
3660
3661 usb_lock_port(port_dev);
3662
3663
3664 status = usb_hub_port_status(hub, port1, &portstatus, &portchange);
3665 if (status == 0 && !port_is_suspended(hub, portstatus)) {
3666 if (portchange & USB_PORT_STAT_C_SUSPEND)
3667 pm_wakeup_event(&udev->dev, 0);
3668 goto SuspendCleared;
3669 }
3670
3671
3672 if (hub_is_superspeed(hub->hdev))
3673 status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U0);
3674 else
3675 status = usb_clear_port_feature(hub->hdev,
3676 port1, USB_PORT_FEAT_SUSPEND);
3677 if (status) {
3678 dev_dbg(&port_dev->dev, "can't resume, status %d\n", status);
3679 } else {
3680
3681 dev_dbg(&udev->dev, "usb %sresume\n",
3682 (PMSG_IS_AUTO(msg) ? "auto-" : ""));
3683 msleep(USB_RESUME_TIMEOUT);
3684
3685
3686
3687
3688
3689 status = usb_hub_port_status(hub, port1, &portstatus, &portchange);
3690 }
3691
3692 SuspendCleared:
3693 if (status == 0) {
3694 udev->port_is_suspended = 0;
3695 if (hub_is_superspeed(hub->hdev)) {
3696 if (portchange & USB_PORT_STAT_C_LINK_STATE)
3697 usb_clear_port_feature(hub->hdev, port1,
3698 USB_PORT_FEAT_C_PORT_LINK_STATE);
3699 } else {
3700 if (portchange & USB_PORT_STAT_C_SUSPEND)
3701 usb_clear_port_feature(hub->hdev, port1,
3702 USB_PORT_FEAT_C_SUSPEND);
3703 }
3704
3705
3706 msleep(10);
3707 }
3708
3709 if (udev->persist_enabled)
3710 status = wait_for_connected(udev, hub, port1, &portchange,
3711 &portstatus);
3712
3713 status = check_port_resume_type(udev,
3714 hub, port1, status, portchange, portstatus);
3715 if (status == 0)
3716 status = finish_port_resume(udev);
3717 if (status < 0) {
3718 dev_dbg(&udev->dev, "can't resume, status %d\n", status);
3719 hub_port_logical_disconnect(hub, port1);
3720 } else {
3721
3722 usb_enable_usb2_hardware_lpm(udev);
3723
3724
3725 usb_enable_ltm(udev);
3726 }
3727
3728 usb_unlock_port(port_dev);
3729
3730 return status;
3731 }
3732
3733 int usb_remote_wakeup(struct usb_device *udev)
3734 {
3735 int status = 0;
3736
3737 usb_lock_device(udev);
3738 if (udev->state == USB_STATE_SUSPENDED) {
3739 dev_dbg(&udev->dev, "usb %sresume\n", "wakeup-");
3740 status = usb_autoresume_device(udev);
3741 if (status == 0) {
3742
3743 usb_autosuspend_device(udev);
3744 }
3745 }
3746 usb_unlock_device(udev);
3747 return status;
3748 }
3749
3750
3751 static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port,
3752 u16 portstatus, u16 portchange)
3753 __must_hold(&port_dev->status_lock)
3754 {
3755 struct usb_port *port_dev = hub->ports[port - 1];
3756 struct usb_device *hdev;
3757 struct usb_device *udev;
3758 int connect_change = 0;
3759 u16 link_state;
3760 int ret;
3761
3762 hdev = hub->hdev;
3763 udev = port_dev->child;
3764 if (!hub_is_superspeed(hdev)) {
3765 if (!(portchange & USB_PORT_STAT_C_SUSPEND))
3766 return 0;
3767 usb_clear_port_feature(hdev, port, USB_PORT_FEAT_C_SUSPEND);
3768 } else {
3769 link_state = portstatus & USB_PORT_STAT_LINK_STATE;
3770 if (!udev || udev->state != USB_STATE_SUSPENDED ||
3771 (link_state != USB_SS_PORT_LS_U0 &&
3772 link_state != USB_SS_PORT_LS_U1 &&
3773 link_state != USB_SS_PORT_LS_U2))
3774 return 0;
3775 }
3776
3777 if (udev) {
3778
3779 msleep(10);
3780
3781 usb_unlock_port(port_dev);
3782 ret = usb_remote_wakeup(udev);
3783 usb_lock_port(port_dev);
3784 if (ret < 0)
3785 connect_change = 1;
3786 } else {
3787 ret = -ENODEV;
3788 hub_port_disable(hub, port, 1);
3789 }
3790 dev_dbg(&port_dev->dev, "resume, status %d\n", ret);
3791 return connect_change;
3792 }
3793
3794 static int check_ports_changed(struct usb_hub *hub)
3795 {
3796 int port1;
3797
3798 for (port1 = 1; port1 <= hub->hdev->maxchild; ++port1) {
3799 u16 portstatus, portchange;
3800 int status;
3801
3802 status = usb_hub_port_status(hub, port1, &portstatus, &portchange);
3803 if (!status && portchange)
3804 return 1;
3805 }
3806 return 0;
3807 }
3808
3809 static int hub_suspend(struct usb_interface *intf, pm_message_t msg)
3810 {
3811 struct usb_hub *hub = usb_get_intfdata(intf);
3812 struct usb_device *hdev = hub->hdev;
3813 unsigned port1;
3814
3815
3816
3817
3818
3819 hub->wakeup_enabled_descendants = 0;
3820 for (port1 = 1; port1 <= hdev->maxchild; port1++) {
3821 struct usb_port *port_dev = hub->ports[port1 - 1];
3822 struct usb_device *udev = port_dev->child;
3823
3824 if (udev && udev->can_submit) {
3825 dev_warn(&port_dev->dev, "device %s not suspended yet\n",
3826 dev_name(&udev->dev));
3827 if (PMSG_IS_AUTO(msg))
3828 return -EBUSY;
3829 }
3830 if (udev)
3831 hub->wakeup_enabled_descendants +=
3832 usb_wakeup_enabled_descendants(udev);
3833 }
3834
3835 if (hdev->do_remote_wakeup && hub->quirk_check_port_auto_suspend) {
3836
3837 if (check_ports_changed(hub)) {
3838 if (PMSG_IS_AUTO(msg))
3839 return -EBUSY;
3840 pm_wakeup_event(&hdev->dev, 2000);
3841 }
3842 }
3843
3844 if (hub_is_superspeed(hdev) && hdev->do_remote_wakeup) {
3845
3846 for (port1 = 1; port1 <= hdev->maxchild; port1++) {
3847 set_port_feature(hdev,
3848 port1 |
3849 USB_PORT_FEAT_REMOTE_WAKE_CONNECT |
3850 USB_PORT_FEAT_REMOTE_WAKE_DISCONNECT |
3851 USB_PORT_FEAT_REMOTE_WAKE_OVER_CURRENT,
3852 USB_PORT_FEAT_REMOTE_WAKE_MASK);
3853 }
3854 }
3855
3856 dev_dbg(&intf->dev, "%s\n", __func__);
3857
3858
3859 hub_quiesce(hub, HUB_SUSPEND);
3860 return 0;
3861 }
3862
3863
3864 static void report_wakeup_requests(struct usb_hub *hub)
3865 {
3866 struct usb_device *hdev = hub->hdev;
3867 struct usb_device *udev;
3868 struct usb_hcd *hcd;
3869 unsigned long resuming_ports;
3870 int i;
3871
3872 if (hdev->parent)
3873 return;
3874
3875 hcd = bus_to_hcd(hdev->bus);
3876 if (hcd->driver->get_resuming_ports) {
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886 resuming_ports = hcd->driver->get_resuming_ports(hcd);
3887 for (i = 0; i < hdev->maxchild; ++i) {
3888 if (test_bit(i, &resuming_ports)) {
3889 udev = hub->ports[i]->child;
3890 if (udev)
3891 pm_wakeup_event(&udev->dev, 0);
3892 }
3893 }
3894 }
3895 }
3896
3897 static int hub_resume(struct usb_interface *intf)
3898 {
3899 struct usb_hub *hub = usb_get_intfdata(intf);
3900
3901 dev_dbg(&intf->dev, "%s\n", __func__);
3902 hub_activate(hub, HUB_RESUME);
3903
3904
3905
3906
3907
3908
3909
3910 report_wakeup_requests(hub);
3911 return 0;
3912 }
3913
3914 static int hub_reset_resume(struct usb_interface *intf)
3915 {
3916 struct usb_hub *hub = usb_get_intfdata(intf);
3917
3918 dev_dbg(&intf->dev, "%s\n", __func__);
3919 hub_activate(hub, HUB_RESET_RESUME);
3920 return 0;
3921 }
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934 void usb_root_hub_lost_power(struct usb_device *rhdev)
3935 {
3936 dev_notice(&rhdev->dev, "root hub lost power or was reset\n");
3937 rhdev->reset_resume = 1;
3938 }
3939 EXPORT_SYMBOL_GPL(usb_root_hub_lost_power);
3940
3941 static const char * const usb3_lpm_names[] = {
3942 "U0",
3943 "U1",
3944 "U2",
3945 "U3",
3946 };
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957 static int usb_req_set_sel(struct usb_device *udev)
3958 {
3959 struct usb_set_sel_req *sel_values;
3960 unsigned long long u1_sel;
3961 unsigned long long u1_pel;
3962 unsigned long long u2_sel;
3963 unsigned long long u2_pel;
3964 int ret;
3965
3966 if (!udev->parent || udev->speed < USB_SPEED_SUPER || !udev->lpm_capable)
3967 return 0;
3968
3969
3970 u1_sel = DIV_ROUND_UP(udev->u1_params.sel, 1000);
3971 u1_pel = DIV_ROUND_UP(udev->u1_params.pel, 1000);
3972 u2_sel = DIV_ROUND_UP(udev->u2_params.sel, 1000);
3973 u2_pel = DIV_ROUND_UP(udev->u2_params.pel, 1000);
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983 if (u1_sel > USB3_LPM_MAX_U1_SEL_PEL ||
3984 u1_pel > USB3_LPM_MAX_U1_SEL_PEL ||
3985 u2_sel > USB3_LPM_MAX_U2_SEL_PEL ||
3986 u2_pel > USB3_LPM_MAX_U2_SEL_PEL) {
3987 dev_dbg(&udev->dev, "Device-initiated U1/U2 disabled due to long SEL or PEL\n");
3988 return -EINVAL;
3989 }
3990
3991
3992
3993
3994
3995
3996 sel_values = kmalloc(sizeof *(sel_values), GFP_NOIO);
3997 if (!sel_values)
3998 return -ENOMEM;
3999
4000 sel_values->u1_sel = u1_sel;
4001 sel_values->u1_pel = u1_pel;
4002 sel_values->u2_sel = cpu_to_le16(u2_sel);
4003 sel_values->u2_pel = cpu_to_le16(u2_pel);
4004
4005 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
4006 USB_REQ_SET_SEL,
4007 USB_RECIP_DEVICE,
4008 0, 0,
4009 sel_values, sizeof *(sel_values),
4010 USB_CTRL_SET_TIMEOUT);
4011 kfree(sel_values);
4012
4013 if (ret > 0)
4014 udev->lpm_devinit_allow = 1;
4015
4016 return ret;
4017 }
4018
4019
4020
4021
4022 static int usb_set_device_initiated_lpm(struct usb_device *udev,
4023 enum usb3_link_state state, bool enable)
4024 {
4025 int ret;
4026 int feature;
4027
4028 switch (state) {
4029 case USB3_LPM_U1:
4030 feature = USB_DEVICE_U1_ENABLE;
4031 break;
4032 case USB3_LPM_U2:
4033 feature = USB_DEVICE_U2_ENABLE;
4034 break;
4035 default:
4036 dev_warn(&udev->dev, "%s: Can't %s non-U1 or U2 state.\n",
4037 __func__, enable ? "enable" : "disable");
4038 return -EINVAL;
4039 }
4040
4041 if (udev->state != USB_STATE_CONFIGURED) {
4042 dev_dbg(&udev->dev, "%s: Can't %s %s state "
4043 "for unconfigured device.\n",
4044 __func__, enable ? "enable" : "disable",
4045 usb3_lpm_names[state]);
4046 return 0;
4047 }
4048
4049 if (enable) {
4050
4051
4052
4053
4054 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
4055 USB_REQ_SET_FEATURE,
4056 USB_RECIP_DEVICE,
4057 feature,
4058 0, NULL, 0,
4059 USB_CTRL_SET_TIMEOUT);
4060 } else {
4061 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
4062 USB_REQ_CLEAR_FEATURE,
4063 USB_RECIP_DEVICE,
4064 feature,
4065 0, NULL, 0,
4066 USB_CTRL_SET_TIMEOUT);
4067 }
4068 if (ret < 0) {
4069 dev_warn(&udev->dev, "%s of device-initiated %s failed.\n",
4070 enable ? "Enable" : "Disable",
4071 usb3_lpm_names[state]);
4072 return -EBUSY;
4073 }
4074 return 0;
4075 }
4076
4077 static int usb_set_lpm_timeout(struct usb_device *udev,
4078 enum usb3_link_state state, int timeout)
4079 {
4080 int ret;
4081 int feature;
4082
4083 switch (state) {
4084 case USB3_LPM_U1:
4085 feature = USB_PORT_FEAT_U1_TIMEOUT;
4086 break;
4087 case USB3_LPM_U2:
4088 feature = USB_PORT_FEAT_U2_TIMEOUT;
4089 break;
4090 default:
4091 dev_warn(&udev->dev, "%s: Can't set timeout for non-U1 or U2 state.\n",
4092 __func__);
4093 return -EINVAL;
4094 }
4095
4096 if (state == USB3_LPM_U1 && timeout > USB3_LPM_U1_MAX_TIMEOUT &&
4097 timeout != USB3_LPM_DEVICE_INITIATED) {
4098 dev_warn(&udev->dev, "Failed to set %s timeout to 0x%x, "
4099 "which is a reserved value.\n",
4100 usb3_lpm_names[state], timeout);
4101 return -EINVAL;
4102 }
4103
4104 ret = set_port_feature(udev->parent,
4105 USB_PORT_LPM_TIMEOUT(timeout) | udev->portnum,
4106 feature);
4107 if (ret < 0) {
4108 dev_warn(&udev->dev, "Failed to set %s timeout to 0x%x,"
4109 "error code %i\n", usb3_lpm_names[state],
4110 timeout, ret);
4111 return -EBUSY;
4112 }
4113 if (state == USB3_LPM_U1)
4114 udev->u1_params.timeout = timeout;
4115 else
4116 udev->u2_params.timeout = timeout;
4117 return 0;
4118 }
4119
4120
4121
4122
4123
4124
4125 static bool usb_device_may_initiate_lpm(struct usb_device *udev,
4126 enum usb3_link_state state)
4127 {
4128 unsigned int sel;
4129 int i, j;
4130
4131 if (!udev->lpm_devinit_allow)
4132 return false;
4133
4134 if (state == USB3_LPM_U1)
4135 sel = DIV_ROUND_UP(udev->u1_params.sel, 1000);
4136 else if (state == USB3_LPM_U2)
4137 sel = DIV_ROUND_UP(udev->u2_params.sel, 1000);
4138 else
4139 return false;
4140
4141 for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) {
4142 struct usb_interface *intf;
4143 struct usb_endpoint_descriptor *desc;
4144 unsigned int interval;
4145
4146 intf = udev->actconfig->interface[i];
4147 if (!intf)
4148 continue;
4149
4150 for (j = 0; j < intf->cur_altsetting->desc.bNumEndpoints; j++) {
4151 desc = &intf->cur_altsetting->endpoint[j].desc;
4152
4153 if (usb_endpoint_xfer_int(desc) ||
4154 usb_endpoint_xfer_isoc(desc)) {
4155 interval = (1 << (desc->bInterval - 1)) * 125;
4156 if (sel + 125 > interval)
4157 return false;
4158 }
4159 }
4160 }
4161 return true;
4162 }
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179 static void usb_enable_link_state(struct usb_hcd *hcd, struct usb_device *udev,
4180 enum usb3_link_state state)
4181 {
4182 int timeout;
4183 __u8 u1_mel = udev->bos->ss_cap->bU1devExitLat;
4184 __le16 u2_mel = udev->bos->ss_cap->bU2DevExitLat;
4185
4186
4187
4188
4189
4190 if ((state == USB3_LPM_U1 && u1_mel == 0) ||
4191 (state == USB3_LPM_U2 && u2_mel == 0))
4192 return;
4193
4194
4195
4196
4197
4198
4199 timeout = hcd->driver->enable_usb3_lpm_timeout(hcd, udev, state);
4200
4201
4202 if (timeout == 0)
4203 return;
4204
4205 if (timeout < 0) {
4206 dev_warn(&udev->dev, "Could not enable %s link state, "
4207 "xHCI error %i.\n", usb3_lpm_names[state],
4208 timeout);
4209 return;
4210 }
4211
4212 if (usb_set_lpm_timeout(udev, state, timeout)) {
4213
4214
4215
4216
4217 hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state);
4218 return;
4219 }
4220
4221
4222
4223
4224 if (udev->actconfig &&
4225 usb_device_may_initiate_lpm(udev, state)) {
4226 if (usb_set_device_initiated_lpm(udev, state, true)) {
4227
4228
4229
4230
4231 usb_set_lpm_timeout(udev, state, 0);
4232 hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state);
4233 return;
4234 }
4235 }
4236
4237 if (state == USB3_LPM_U1)
4238 udev->usb3_lpm_u1_enabled = 1;
4239 else if (state == USB3_LPM_U2)
4240 udev->usb3_lpm_u2_enabled = 1;
4241 }
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257 static int usb_disable_link_state(struct usb_hcd *hcd, struct usb_device *udev,
4258 enum usb3_link_state state)
4259 {
4260 switch (state) {
4261 case USB3_LPM_U1:
4262 case USB3_LPM_U2:
4263 break;
4264 default:
4265 dev_warn(&udev->dev, "%s: Can't disable non-U1 or U2 state.\n",
4266 __func__);
4267 return -EINVAL;
4268 }
4269
4270 if (usb_set_lpm_timeout(udev, state, 0))
4271 return -EBUSY;
4272
4273 usb_set_device_initiated_lpm(udev, state, false);
4274
4275 if (hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state))
4276 dev_warn(&udev->dev, "Could not disable xHCI %s timeout, "
4277 "bus schedule bandwidth may be impacted.\n",
4278 usb3_lpm_names[state]);
4279
4280
4281
4282
4283
4284
4285
4286 if (state == USB3_LPM_U1)
4287 udev->usb3_lpm_u1_enabled = 0;
4288 else if (state == USB3_LPM_U2)
4289 udev->usb3_lpm_u2_enabled = 0;
4290
4291 return 0;
4292 }
4293
4294
4295
4296
4297
4298
4299
4300
4301 int usb_disable_lpm(struct usb_device *udev)
4302 {
4303 struct usb_hcd *hcd;
4304
4305 if (!udev || !udev->parent ||
4306 udev->speed < USB_SPEED_SUPER ||
4307 !udev->lpm_capable ||
4308 udev->state < USB_STATE_CONFIGURED)
4309 return 0;
4310
4311 hcd = bus_to_hcd(udev->bus);
4312 if (!hcd || !hcd->driver->disable_usb3_lpm_timeout)
4313 return 0;
4314
4315 udev->lpm_disable_count++;
4316 if ((udev->u1_params.timeout == 0 && udev->u2_params.timeout == 0))
4317 return 0;
4318
4319
4320 if (usb_disable_link_state(hcd, udev, USB3_LPM_U1))
4321 goto enable_lpm;
4322 if (usb_disable_link_state(hcd, udev, USB3_LPM_U2))
4323 goto enable_lpm;
4324
4325 return 0;
4326
4327 enable_lpm:
4328 usb_enable_lpm(udev);
4329 return -EBUSY;
4330 }
4331 EXPORT_SYMBOL_GPL(usb_disable_lpm);
4332
4333
4334 int usb_unlocked_disable_lpm(struct usb_device *udev)
4335 {
4336 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
4337 int ret;
4338
4339 if (!hcd)
4340 return -EINVAL;
4341
4342 mutex_lock(hcd->bandwidth_mutex);
4343 ret = usb_disable_lpm(udev);
4344 mutex_unlock(hcd->bandwidth_mutex);
4345
4346 return ret;
4347 }
4348 EXPORT_SYMBOL_GPL(usb_unlocked_disable_lpm);
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358 void usb_enable_lpm(struct usb_device *udev)
4359 {
4360 struct usb_hcd *hcd;
4361 struct usb_hub *hub;
4362 struct usb_port *port_dev;
4363
4364 if (!udev || !udev->parent ||
4365 udev->speed < USB_SPEED_SUPER ||
4366 !udev->lpm_capable ||
4367 udev->state < USB_STATE_CONFIGURED)
4368 return;
4369
4370 udev->lpm_disable_count--;
4371 hcd = bus_to_hcd(udev->bus);
4372
4373
4374
4375 if (!hcd || !hcd->driver->enable_usb3_lpm_timeout ||
4376 !hcd->driver->disable_usb3_lpm_timeout)
4377 return;
4378
4379 if (udev->lpm_disable_count > 0)
4380 return;
4381
4382 hub = usb_hub_to_struct_hub(udev->parent);
4383 if (!hub)
4384 return;
4385
4386 port_dev = hub->ports[udev->portnum - 1];
4387
4388 if (port_dev->usb3_lpm_u1_permit)
4389 usb_enable_link_state(hcd, udev, USB3_LPM_U1);
4390
4391 if (port_dev->usb3_lpm_u2_permit)
4392 usb_enable_link_state(hcd, udev, USB3_LPM_U2);
4393 }
4394 EXPORT_SYMBOL_GPL(usb_enable_lpm);
4395
4396
4397 void usb_unlocked_enable_lpm(struct usb_device *udev)
4398 {
4399 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
4400
4401 if (!hcd)
4402 return;
4403
4404 mutex_lock(hcd->bandwidth_mutex);
4405 usb_enable_lpm(udev);
4406 mutex_unlock(hcd->bandwidth_mutex);
4407 }
4408 EXPORT_SYMBOL_GPL(usb_unlocked_enable_lpm);
4409
4410
4411 static void hub_usb3_port_prepare_disable(struct usb_hub *hub,
4412 struct usb_port *port_dev)
4413 {
4414 struct usb_device *udev = port_dev->child;
4415 int ret;
4416
4417 if (udev && udev->port_is_suspended && udev->do_remote_wakeup) {
4418 ret = hub_set_port_link_state(hub, port_dev->portnum,
4419 USB_SS_PORT_LS_U0);
4420 if (!ret) {
4421 msleep(USB_RESUME_TIMEOUT);
4422 ret = usb_disable_remote_wakeup(udev);
4423 }
4424 if (ret)
4425 dev_warn(&udev->dev,
4426 "Port disable: can't disable remote wake\n");
4427 udev->do_remote_wakeup = 0;
4428 }
4429 }
4430
4431 #else
4432
4433 #define hub_suspend NULL
4434 #define hub_resume NULL
4435 #define hub_reset_resume NULL
4436
4437 static inline void hub_usb3_port_prepare_disable(struct usb_hub *hub,
4438 struct usb_port *port_dev) { }
4439
4440 int usb_disable_lpm(struct usb_device *udev)
4441 {
4442 return 0;
4443 }
4444 EXPORT_SYMBOL_GPL(usb_disable_lpm);
4445
4446 void usb_enable_lpm(struct usb_device *udev) { }
4447 EXPORT_SYMBOL_GPL(usb_enable_lpm);
4448
4449 int usb_unlocked_disable_lpm(struct usb_device *udev)
4450 {
4451 return 0;
4452 }
4453 EXPORT_SYMBOL_GPL(usb_unlocked_disable_lpm);
4454
4455 void usb_unlocked_enable_lpm(struct usb_device *udev) { }
4456 EXPORT_SYMBOL_GPL(usb_unlocked_enable_lpm);
4457
4458 int usb_disable_ltm(struct usb_device *udev)
4459 {
4460 return 0;
4461 }
4462 EXPORT_SYMBOL_GPL(usb_disable_ltm);
4463
4464 void usb_enable_ltm(struct usb_device *udev) { }
4465 EXPORT_SYMBOL_GPL(usb_enable_ltm);
4466
4467 static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port,
4468 u16 portstatus, u16 portchange)
4469 {
4470 return 0;
4471 }
4472
4473 static int usb_req_set_sel(struct usb_device *udev)
4474 {
4475 return 0;
4476 }
4477
4478 #endif
4479
4480
4481
4482
4483
4484
4485 static int hub_port_disable(struct usb_hub *hub, int port1, int set_state)
4486 {
4487 struct usb_port *port_dev = hub->ports[port1 - 1];
4488 struct usb_device *hdev = hub->hdev;
4489 int ret = 0;
4490
4491 if (!hub->error) {
4492 if (hub_is_superspeed(hub->hdev)) {
4493 hub_usb3_port_prepare_disable(hub, port_dev);
4494 ret = hub_set_port_link_state(hub, port_dev->portnum,
4495 USB_SS_PORT_LS_U3);
4496 } else {
4497 ret = usb_clear_port_feature(hdev, port1,
4498 USB_PORT_FEAT_ENABLE);
4499 }
4500 }
4501 if (port_dev->child && set_state)
4502 usb_set_device_state(port_dev->child, USB_STATE_NOTATTACHED);
4503 if (ret && ret != -ENODEV)
4504 dev_err(&port_dev->dev, "cannot disable (err = %d)\n", ret);
4505 return ret;
4506 }
4507
4508
4509
4510
4511
4512
4513
4514
4515 int usb_port_disable(struct usb_device *udev)
4516 {
4517 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
4518
4519 return hub_port_disable(hub, udev->portnum, 0);
4520 }
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537 int hub_port_debounce(struct usb_hub *hub, int port1, bool must_be_connected)
4538 {
4539 int ret;
4540 u16 portchange, portstatus;
4541 unsigned connection = 0xffff;
4542 int total_time, stable_time = 0;
4543 struct usb_port *port_dev = hub->ports[port1 - 1];
4544
4545 for (total_time = 0; ; total_time += HUB_DEBOUNCE_STEP) {
4546 ret = usb_hub_port_status(hub, port1, &portstatus, &portchange);
4547 if (ret < 0)
4548 return ret;
4549
4550 if (!(portchange & USB_PORT_STAT_C_CONNECTION) &&
4551 (portstatus & USB_PORT_STAT_CONNECTION) == connection) {
4552 if (!must_be_connected ||
4553 (connection == USB_PORT_STAT_CONNECTION))
4554 stable_time += HUB_DEBOUNCE_STEP;
4555 if (stable_time >= HUB_DEBOUNCE_STABLE)
4556 break;
4557 } else {
4558 stable_time = 0;
4559 connection = portstatus & USB_PORT_STAT_CONNECTION;
4560 }
4561
4562 if (portchange & USB_PORT_STAT_C_CONNECTION) {
4563 usb_clear_port_feature(hub->hdev, port1,
4564 USB_PORT_FEAT_C_CONNECTION);
4565 }
4566
4567 if (total_time >= HUB_DEBOUNCE_TIMEOUT)
4568 break;
4569 msleep(HUB_DEBOUNCE_STEP);
4570 }
4571
4572 dev_dbg(&port_dev->dev, "debounce total %dms stable %dms status 0x%x\n",
4573 total_time, stable_time, portstatus);
4574
4575 if (stable_time < HUB_DEBOUNCE_STABLE)
4576 return -ETIMEDOUT;
4577 return portstatus;
4578 }
4579
4580 void usb_ep0_reinit(struct usb_device *udev)
4581 {
4582 usb_disable_endpoint(udev, 0 + USB_DIR_IN, true);
4583 usb_disable_endpoint(udev, 0 + USB_DIR_OUT, true);
4584 usb_enable_endpoint(udev, &udev->ep0, true);
4585 }
4586 EXPORT_SYMBOL_GPL(usb_ep0_reinit);
4587
4588 #define usb_sndaddr0pipe() (PIPE_CONTROL << 30)
4589 #define usb_rcvaddr0pipe() ((PIPE_CONTROL << 30) | USB_DIR_IN)
4590
4591 static int hub_set_address(struct usb_device *udev, int devnum)
4592 {
4593 int retval;
4594 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
4595
4596
4597
4598
4599
4600 if (!hcd->driver->address_device && devnum <= 1)
4601 return -EINVAL;
4602 if (udev->state == USB_STATE_ADDRESS)
4603 return 0;
4604 if (udev->state != USB_STATE_DEFAULT)
4605 return -EINVAL;
4606 if (hcd->driver->address_device)
4607 retval = hcd->driver->address_device(hcd, udev);
4608 else
4609 retval = usb_control_msg(udev, usb_sndaddr0pipe(),
4610 USB_REQ_SET_ADDRESS, 0, devnum, 0,
4611 NULL, 0, USB_CTRL_SET_TIMEOUT);
4612 if (retval == 0) {
4613 update_devnum(udev, devnum);
4614
4615 usb_set_device_state(udev, USB_STATE_ADDRESS);
4616 usb_ep0_reinit(udev);
4617 }
4618 return retval;
4619 }
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630 static void hub_set_initial_usb2_lpm_policy(struct usb_device *udev)
4631 {
4632 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
4633 int connect_type = USB_PORT_CONNECT_TYPE_UNKNOWN;
4634
4635 if (!udev->usb2_hw_lpm_capable || !udev->bos)
4636 return;
4637
4638 if (hub)
4639 connect_type = hub->ports[udev->portnum - 1]->connect_type;
4640
4641 if ((udev->bos->ext_cap->bmAttributes & cpu_to_le32(USB_BESL_SUPPORT)) ||
4642 connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) {
4643 udev->usb2_hw_lpm_allowed = 1;
4644 usb_enable_usb2_hardware_lpm(udev);
4645 }
4646 }
4647
4648 static int hub_enable_device(struct usb_device *udev)
4649 {
4650 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
4651
4652 if (!hcd->driver->enable_device)
4653 return 0;
4654 if (udev->state == USB_STATE_ADDRESS)
4655 return 0;
4656 if (udev->state != USB_STATE_DEFAULT)
4657 return -EINVAL;
4658
4659 return hcd->driver->enable_device(hcd, udev);
4660 }
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672 static int
4673 hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
4674 int retry_counter)
4675 {
4676 struct usb_device *hdev = hub->hdev;
4677 struct usb_hcd *hcd = bus_to_hcd(hdev->bus);
4678 struct usb_port *port_dev = hub->ports[port1 - 1];
4679 int retries, operations, retval, i;
4680 unsigned delay = HUB_SHORT_RESET_TIME;
4681 enum usb_device_speed oldspeed = udev->speed;
4682 const char *speed;
4683 int devnum = udev->devnum;
4684 const char *driver_name;
4685 bool do_new_scheme;
4686
4687
4688
4689
4690 if (!hdev->parent) {
4691 delay = HUB_ROOT_RESET_TIME;
4692 if (port1 == hdev->bus->otg_port)
4693 hdev->bus->b_hnp_enable = 0;
4694 }
4695
4696
4697
4698 if (oldspeed == USB_SPEED_LOW)
4699 delay = HUB_LONG_RESET_TIME;
4700
4701
4702
4703 retval = hub_port_reset(hub, port1, udev, delay, false);
4704 if (retval < 0)
4705 goto fail;
4706
4707
4708 retval = -ENODEV;
4709
4710
4711 if (oldspeed != USB_SPEED_UNKNOWN && oldspeed != udev->speed &&
4712 !(oldspeed == USB_SPEED_SUPER && udev->speed > oldspeed)) {
4713 dev_dbg(&udev->dev, "device reset changed speed!\n");
4714 goto fail;
4715 }
4716 oldspeed = udev->speed;
4717
4718
4719
4720
4721
4722
4723 switch (udev->speed) {
4724 case USB_SPEED_SUPER_PLUS:
4725 case USB_SPEED_SUPER:
4726 case USB_SPEED_WIRELESS:
4727 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(512);
4728 break;
4729 case USB_SPEED_HIGH:
4730 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(64);
4731 break;
4732 case USB_SPEED_FULL:
4733
4734
4735
4736
4737 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(64);
4738 break;
4739 case USB_SPEED_LOW:
4740 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(8);
4741 break;
4742 default:
4743 goto fail;
4744 }
4745
4746 if (udev->speed == USB_SPEED_WIRELESS)
4747 speed = "variable speed Wireless";
4748 else
4749 speed = usb_speed_string(udev->speed);
4750
4751
4752
4753
4754
4755
4756
4757
4758 if (udev->bus->controller->driver)
4759 driver_name = udev->bus->controller->driver->name;
4760 else
4761 driver_name = udev->bus->sysdev->driver->name;
4762
4763 if (udev->speed < USB_SPEED_SUPER)
4764 dev_info(&udev->dev,
4765 "%s %s USB device number %d using %s\n",
4766 (udev->config) ? "reset" : "new", speed,
4767 devnum, driver_name);
4768
4769
4770 if (hdev->tt) {
4771 udev->tt = hdev->tt;
4772 udev->ttport = hdev->ttport;
4773 } else if (udev->speed != USB_SPEED_HIGH
4774 && hdev->speed == USB_SPEED_HIGH) {
4775 if (!hub->tt.hub) {
4776 dev_err(&udev->dev, "parent hub has no TT\n");
4777 retval = -EINVAL;
4778 goto fail;
4779 }
4780 udev->tt = &hub->tt;
4781 udev->ttport = port1;
4782 }
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796 do_new_scheme = use_new_scheme(udev, retry_counter, port_dev);
4797
4798 for (retries = 0; retries < GET_DESCRIPTOR_TRIES; (++retries, msleep(100))) {
4799 if (do_new_scheme) {
4800 struct usb_device_descriptor *buf;
4801 int r = 0;
4802
4803 retval = hub_enable_device(udev);
4804 if (retval < 0) {
4805 dev_err(&udev->dev,
4806 "hub failed to enable device, error %d\n",
4807 retval);
4808 goto fail;
4809 }
4810
4811 #define GET_DESCRIPTOR_BUFSIZE 64
4812 buf = kmalloc(GET_DESCRIPTOR_BUFSIZE, GFP_NOIO);
4813 if (!buf) {
4814 retval = -ENOMEM;
4815 continue;
4816 }
4817
4818
4819
4820
4821
4822 for (operations = 0; operations < GET_MAXPACKET0_TRIES;
4823 ++operations) {
4824 buf->bMaxPacketSize0 = 0;
4825 r = usb_control_msg(udev, usb_rcvaddr0pipe(),
4826 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,
4827 USB_DT_DEVICE << 8, 0,
4828 buf, GET_DESCRIPTOR_BUFSIZE,
4829 initial_descriptor_timeout);
4830 switch (buf->bMaxPacketSize0) {
4831 case 8: case 16: case 32: case 64: case 255:
4832 if (buf->bDescriptorType ==
4833 USB_DT_DEVICE) {
4834 r = 0;
4835 break;
4836 }
4837 fallthrough;
4838 default:
4839 if (r == 0)
4840 r = -EPROTO;
4841 break;
4842 }
4843
4844
4845
4846
4847
4848
4849 if (r == 0 || (r == -ETIMEDOUT &&
4850 retries == 0 &&
4851 udev->speed > USB_SPEED_FULL))
4852 break;
4853 }
4854 udev->descriptor.bMaxPacketSize0 =
4855 buf->bMaxPacketSize0;
4856 kfree(buf);
4857
4858 retval = hub_port_reset(hub, port1, udev, delay, false);
4859 if (retval < 0)
4860 goto fail;
4861 if (oldspeed != udev->speed) {
4862 dev_dbg(&udev->dev,
4863 "device reset changed speed!\n");
4864 retval = -ENODEV;
4865 goto fail;
4866 }
4867 if (r) {
4868 if (r != -ENODEV)
4869 dev_err(&udev->dev, "device descriptor read/64, error %d\n",
4870 r);
4871 retval = -EMSGSIZE;
4872 continue;
4873 }
4874 #undef GET_DESCRIPTOR_BUFSIZE
4875 }
4876
4877
4878
4879
4880
4881
4882 if (udev->wusb == 0) {
4883 for (operations = 0; operations < SET_ADDRESS_TRIES; ++operations) {
4884 retval = hub_set_address(udev, devnum);
4885 if (retval >= 0)
4886 break;
4887 msleep(200);
4888 }
4889 if (retval < 0) {
4890 if (retval != -ENODEV)
4891 dev_err(&udev->dev, "device not accepting address %d, error %d\n",
4892 devnum, retval);
4893 goto fail;
4894 }
4895 if (udev->speed >= USB_SPEED_SUPER) {
4896 devnum = udev->devnum;
4897 dev_info(&udev->dev,
4898 "%s SuperSpeed%s%s USB device number %d using %s\n",
4899 (udev->config) ? "reset" : "new",
4900 (udev->speed == USB_SPEED_SUPER_PLUS) ?
4901 " Plus" : "",
4902 (udev->ssp_rate == USB_SSP_GEN_2x2) ?
4903 " Gen 2x2" :
4904 (udev->ssp_rate == USB_SSP_GEN_2x1) ?
4905 " Gen 2x1" :
4906 (udev->ssp_rate == USB_SSP_GEN_1x2) ?
4907 " Gen 1x2" : "",
4908 devnum, driver_name);
4909 }
4910
4911
4912
4913
4914
4915 msleep(10);
4916 if (do_new_scheme)
4917 break;
4918 }
4919
4920 retval = usb_get_device_descriptor(udev, 8);
4921 if (retval < 8) {
4922 if (retval != -ENODEV)
4923 dev_err(&udev->dev,
4924 "device descriptor read/8, error %d\n",
4925 retval);
4926 if (retval >= 0)
4927 retval = -EMSGSIZE;
4928 } else {
4929 u32 delay;
4930
4931 retval = 0;
4932
4933 delay = udev->parent->hub_delay;
4934 udev->hub_delay = min_t(u32, delay,
4935 USB_TP_TRANSMISSION_DELAY_MAX);
4936 retval = usb_set_isoch_delay(udev);
4937 if (retval) {
4938 dev_dbg(&udev->dev,
4939 "Failed set isoch delay, error %d\n",
4940 retval);
4941 retval = 0;
4942 }
4943 break;
4944 }
4945 }
4946 if (retval)
4947 goto fail;
4948
4949
4950
4951
4952
4953
4954
4955 if ((udev->speed >= USB_SPEED_SUPER) &&
4956 (le16_to_cpu(udev->descriptor.bcdUSB) < 0x0300)) {
4957 dev_err(&udev->dev, "got a wrong device descriptor, "
4958 "warm reset device\n");
4959 hub_port_reset(hub, port1, udev,
4960 HUB_BH_RESET_TIME, true);
4961 retval = -EINVAL;
4962 goto fail;
4963 }
4964
4965 if (udev->descriptor.bMaxPacketSize0 == 0xff ||
4966 udev->speed >= USB_SPEED_SUPER)
4967 i = 512;
4968 else
4969 i = udev->descriptor.bMaxPacketSize0;
4970 if (usb_endpoint_maxp(&udev->ep0.desc) != i) {
4971 if (udev->speed == USB_SPEED_LOW ||
4972 !(i == 8 || i == 16 || i == 32 || i == 64)) {
4973 dev_err(&udev->dev, "Invalid ep0 maxpacket: %d\n", i);
4974 retval = -EMSGSIZE;
4975 goto fail;
4976 }
4977 if (udev->speed == USB_SPEED_FULL)
4978 dev_dbg(&udev->dev, "ep0 maxpacket = %d\n", i);
4979 else
4980 dev_warn(&udev->dev, "Using ep0 maxpacket: %d\n", i);
4981 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(i);
4982 usb_ep0_reinit(udev);
4983 }
4984
4985 retval = usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE);
4986 if (retval < (signed)sizeof(udev->descriptor)) {
4987 if (retval != -ENODEV)
4988 dev_err(&udev->dev, "device descriptor read/all, error %d\n",
4989 retval);
4990 if (retval >= 0)
4991 retval = -ENOMSG;
4992 goto fail;
4993 }
4994
4995 usb_detect_quirks(udev);
4996
4997 if (udev->wusb == 0 && le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0201) {
4998 retval = usb_get_bos_descriptor(udev);
4999 if (!retval) {
5000 udev->lpm_capable = usb_device_supports_lpm(udev);
5001 udev->lpm_disable_count = 1;
5002 usb_set_lpm_parameters(udev);
5003 usb_req_set_sel(udev);
5004 }
5005 }
5006
5007 retval = 0;
5008
5009 if (hcd->driver->update_device)
5010 hcd->driver->update_device(hcd, udev);
5011 hub_set_initial_usb2_lpm_policy(udev);
5012 fail:
5013 if (retval) {
5014 hub_port_disable(hub, port1, 0);
5015 update_devnum(udev, devnum);
5016 }
5017 return retval;
5018 }
5019
5020 static void
5021 check_highspeed(struct usb_hub *hub, struct usb_device *udev, int port1)
5022 {
5023 struct usb_qualifier_descriptor *qual;
5024 int status;
5025
5026 if (udev->quirks & USB_QUIRK_DEVICE_QUALIFIER)
5027 return;
5028
5029 qual = kmalloc(sizeof *qual, GFP_KERNEL);
5030 if (qual == NULL)
5031 return;
5032
5033 status = usb_get_descriptor(udev, USB_DT_DEVICE_QUALIFIER, 0,
5034 qual, sizeof *qual);
5035 if (status == sizeof *qual) {
5036 dev_info(&udev->dev, "not running at top speed; "
5037 "connect to a high speed hub\n");
5038
5039 if (hub->has_indicators) {
5040 hub->indicator[port1-1] = INDICATOR_GREEN_BLINK;
5041 queue_delayed_work(system_power_efficient_wq,
5042 &hub->leds, 0);
5043 }
5044 }
5045 kfree(qual);
5046 }
5047
5048 static unsigned
5049 hub_power_remaining(struct usb_hub *hub)
5050 {
5051 struct usb_device *hdev = hub->hdev;
5052 int remaining;
5053 int port1;
5054
5055 if (!hub->limited_power)
5056 return 0;
5057
5058 remaining = hdev->bus_mA - hub->descriptor->bHubContrCurrent;
5059 for (port1 = 1; port1 <= hdev->maxchild; ++port1) {
5060 struct usb_port *port_dev = hub->ports[port1 - 1];
5061 struct usb_device *udev = port_dev->child;
5062 unsigned unit_load;
5063 int delta;
5064
5065 if (!udev)
5066 continue;
5067 if (hub_is_superspeed(udev))
5068 unit_load = 150;
5069 else
5070 unit_load = 100;
5071
5072
5073
5074
5075
5076 if (udev->actconfig)
5077 delta = usb_get_max_power(udev, udev->actconfig);
5078 else if (port1 != udev->bus->otg_port || hdev->parent)
5079 delta = unit_load;
5080 else
5081 delta = 8;
5082 if (delta > hub->mA_per_port)
5083 dev_warn(&port_dev->dev, "%dmA is over %umA budget!\n",
5084 delta, hub->mA_per_port);
5085 remaining -= delta;
5086 }
5087 if (remaining < 0) {
5088 dev_warn(hub->intfdev, "%dmA over power budget!\n",
5089 -remaining);
5090 remaining = 0;
5091 }
5092 return remaining;
5093 }
5094
5095
5096 static int descriptors_changed(struct usb_device *udev,
5097 struct usb_device_descriptor *old_device_descriptor,
5098 struct usb_host_bos *old_bos)
5099 {
5100 int changed = 0;
5101 unsigned index;
5102 unsigned serial_len = 0;
5103 unsigned len;
5104 unsigned old_length;
5105 int length;
5106 char *buf;
5107
5108 if (memcmp(&udev->descriptor, old_device_descriptor,
5109 sizeof(*old_device_descriptor)) != 0)
5110 return 1;
5111
5112 if ((old_bos && !udev->bos) || (!old_bos && udev->bos))
5113 return 1;
5114 if (udev->bos) {
5115 len = le16_to_cpu(udev->bos->desc->wTotalLength);
5116 if (len != le16_to_cpu(old_bos->desc->wTotalLength))
5117 return 1;
5118 if (memcmp(udev->bos->desc, old_bos->desc, len))
5119 return 1;
5120 }
5121
5122
5123
5124
5125
5126
5127
5128 if (udev->serial)
5129 serial_len = strlen(udev->serial) + 1;
5130
5131 len = serial_len;
5132 for (index = 0; index < udev->descriptor.bNumConfigurations; index++) {
5133 old_length = le16_to_cpu(udev->config[index].desc.wTotalLength);
5134 len = max(len, old_length);
5135 }
5136
5137 buf = kmalloc(len, GFP_NOIO);
5138 if (!buf)
5139
5140 return 1;
5141
5142 for (index = 0; index < udev->descriptor.bNumConfigurations; index++) {
5143 old_length = le16_to_cpu(udev->config[index].desc.wTotalLength);
5144 length = usb_get_descriptor(udev, USB_DT_CONFIG, index, buf,
5145 old_length);
5146 if (length != old_length) {
5147 dev_dbg(&udev->dev, "config index %d, error %d\n",
5148 index, length);
5149 changed = 1;
5150 break;
5151 }
5152 if (memcmp(buf, udev->rawdescriptors[index], old_length)
5153 != 0) {
5154 dev_dbg(&udev->dev, "config index %d changed (#%d)\n",
5155 index,
5156 ((struct usb_config_descriptor *) buf)->
5157 bConfigurationValue);
5158 changed = 1;
5159 break;
5160 }
5161 }
5162
5163 if (!changed && serial_len) {
5164 length = usb_string(udev, udev->descriptor.iSerialNumber,
5165 buf, serial_len);
5166 if (length + 1 != serial_len) {
5167 dev_dbg(&udev->dev, "serial string error %d\n",
5168 length);
5169 changed = 1;
5170 } else if (memcmp(buf, udev->serial, length) != 0) {
5171 dev_dbg(&udev->dev, "serial string changed\n");
5172 changed = 1;
5173 }
5174 }
5175
5176 kfree(buf);
5177 return changed;
5178 }
5179
5180 static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
5181 u16 portchange)
5182 {
5183 int status = -ENODEV;
5184 int i;
5185 unsigned unit_load;
5186 struct usb_device *hdev = hub->hdev;
5187 struct usb_hcd *hcd = bus_to_hcd(hdev->bus);
5188 struct usb_port *port_dev = hub->ports[port1 - 1];
5189 struct usb_device *udev = port_dev->child;
5190 static int unreliable_port = -1;
5191 bool retry_locked;
5192
5193
5194 if (udev) {
5195 if (hcd->usb_phy && !hdev->parent)
5196 usb_phy_notify_disconnect(hcd->usb_phy, udev->speed);
5197 usb_disconnect(&port_dev->child);
5198 }
5199
5200
5201
5202
5203 if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
5204 (portchange & USB_PORT_STAT_C_CONNECTION))
5205 clear_bit(port1, hub->removed_bits);
5206
5207 if (portchange & (USB_PORT_STAT_C_CONNECTION |
5208 USB_PORT_STAT_C_ENABLE)) {
5209 status = hub_port_debounce_be_stable(hub, port1);
5210 if (status < 0) {
5211 if (status != -ENODEV &&
5212 port1 != unreliable_port &&
5213 printk_ratelimit())
5214 dev_err(&port_dev->dev, "connect-debounce failed\n");
5215 portstatus &= ~USB_PORT_STAT_CONNECTION;
5216 unreliable_port = port1;
5217 } else {
5218 portstatus = status;
5219 }
5220 }
5221
5222
5223
5224
5225 if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
5226 test_bit(port1, hub->removed_bits)) {
5227
5228
5229
5230
5231
5232 if (hub_is_port_power_switchable(hub)
5233 && !usb_port_is_power_on(hub, portstatus)
5234 && !port_dev->port_owner)
5235 set_port_feature(hdev, port1, USB_PORT_FEAT_POWER);
5236
5237 if (portstatus & USB_PORT_STAT_ENABLE)
5238 goto done;
5239 return;
5240 }
5241 if (hub_is_superspeed(hub->hdev))
5242 unit_load = 150;
5243 else
5244 unit_load = 100;
5245
5246 status = 0;
5247
5248 for (i = 0; i < PORT_INIT_TRIES; i++) {
5249 usb_lock_port(port_dev);
5250 mutex_lock(hcd->address0_mutex);
5251 retry_locked = true;
5252
5253
5254
5255 udev = usb_alloc_dev(hdev, hdev->bus, port1);
5256 if (!udev) {
5257 dev_err(&port_dev->dev,
5258 "couldn't allocate usb_device\n");
5259 mutex_unlock(hcd->address0_mutex);
5260 usb_unlock_port(port_dev);
5261 goto done;
5262 }
5263
5264 usb_set_device_state(udev, USB_STATE_POWERED);
5265 udev->bus_mA = hub->mA_per_port;
5266 udev->level = hdev->level + 1;
5267 udev->wusb = hub_is_wusb(hub);
5268
5269
5270 if (hub_is_superspeed(hub->hdev))
5271 udev->speed = USB_SPEED_SUPER;
5272 else
5273 udev->speed = USB_SPEED_UNKNOWN;
5274
5275 choose_devnum(udev);
5276 if (udev->devnum <= 0) {
5277 status = -ENOTCONN;
5278 goto loop;
5279 }
5280
5281
5282 status = hub_port_init(hub, udev, port1, i);
5283 if (status < 0)
5284 goto loop;
5285
5286 mutex_unlock(hcd->address0_mutex);
5287 usb_unlock_port(port_dev);
5288 retry_locked = false;
5289
5290 if (udev->quirks & USB_QUIRK_DELAY_INIT)
5291 msleep(2000);
5292
5293
5294
5295
5296
5297
5298
5299 if (udev->descriptor.bDeviceClass == USB_CLASS_HUB
5300 && udev->bus_mA <= unit_load) {
5301 u16 devstat;
5302
5303 status = usb_get_std_status(udev, USB_RECIP_DEVICE, 0,
5304 &devstat);
5305 if (status) {
5306 dev_dbg(&udev->dev, "get status %d ?\n", status);
5307 goto loop_disable;
5308 }
5309 if ((devstat & (1 << USB_DEVICE_SELF_POWERED)) == 0) {
5310 dev_err(&udev->dev,
5311 "can't connect bus-powered hub "
5312 "to this port\n");
5313 if (hub->has_indicators) {
5314 hub->indicator[port1-1] =
5315 INDICATOR_AMBER_BLINK;
5316 queue_delayed_work(
5317 system_power_efficient_wq,
5318 &hub->leds, 0);
5319 }
5320 status = -ENOTCONN;
5321 goto loop_disable;
5322 }
5323 }
5324
5325
5326 if (le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0200
5327 && udev->speed == USB_SPEED_FULL
5328 && highspeed_hubs != 0)
5329 check_highspeed(hub, udev, port1);
5330
5331
5332
5333
5334
5335 status = 0;
5336
5337 mutex_lock(&usb_port_peer_mutex);
5338
5339
5340
5341
5342
5343 spin_lock_irq(&device_state_lock);
5344 if (hdev->state == USB_STATE_NOTATTACHED)
5345 status = -ENOTCONN;
5346 else
5347 port_dev->child = udev;
5348 spin_unlock_irq(&device_state_lock);
5349 mutex_unlock(&usb_port_peer_mutex);
5350
5351
5352 if (!status) {
5353 status = usb_new_device(udev);
5354 if (status) {
5355 mutex_lock(&usb_port_peer_mutex);
5356 spin_lock_irq(&device_state_lock);
5357 port_dev->child = NULL;
5358 spin_unlock_irq(&device_state_lock);
5359 mutex_unlock(&usb_port_peer_mutex);
5360 } else {
5361 if (hcd->usb_phy && !hdev->parent)
5362 usb_phy_notify_connect(hcd->usb_phy,
5363 udev->speed);
5364 }
5365 }
5366
5367 if (status)
5368 goto loop_disable;
5369
5370 status = hub_power_remaining(hub);
5371 if (status)
5372 dev_dbg(hub->intfdev, "%dmA power budget left\n", status);
5373
5374 return;
5375
5376 loop_disable:
5377 hub_port_disable(hub, port1, 1);
5378 loop:
5379 usb_ep0_reinit(udev);
5380 release_devnum(udev);
5381 hub_free_dev(udev);
5382 if (retry_locked) {
5383 mutex_unlock(hcd->address0_mutex);
5384 usb_unlock_port(port_dev);
5385 }
5386 usb_put_dev(udev);
5387 if ((status == -ENOTCONN) || (status == -ENOTSUPP))
5388 break;
5389
5390
5391 if (i == (PORT_INIT_TRIES - 1) / 2) {
5392 dev_info(&port_dev->dev, "attempt power cycle\n");
5393 usb_hub_set_port_power(hdev, hub, port1, false);
5394 msleep(2 * hub_power_on_good_delay(hub));
5395 usb_hub_set_port_power(hdev, hub, port1, true);
5396 msleep(hub_power_on_good_delay(hub));
5397 }
5398 }
5399 if (hub->hdev->parent ||
5400 !hcd->driver->port_handed_over ||
5401 !(hcd->driver->port_handed_over)(hcd, port1)) {
5402 if (status != -ENOTCONN && status != -ENODEV)
5403 dev_err(&port_dev->dev,
5404 "unable to enumerate USB device\n");
5405 }
5406
5407 done:
5408 hub_port_disable(hub, port1, 1);
5409 if (hcd->driver->relinquish_port && !hub->hdev->parent) {
5410 if (status != -ENOTCONN && status != -ENODEV)
5411 hcd->driver->relinquish_port(hcd, port1);
5412 }
5413 }
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423 static void hub_port_connect_change(struct usb_hub *hub, int port1,
5424 u16 portstatus, u16 portchange)
5425 __must_hold(&port_dev->status_lock)
5426 {
5427 struct usb_port *port_dev = hub->ports[port1 - 1];
5428 struct usb_device *udev = port_dev->child;
5429 struct usb_device_descriptor descriptor;
5430 int status = -ENODEV;
5431 int retval;
5432
5433 dev_dbg(&port_dev->dev, "status %04x, change %04x, %s\n", portstatus,
5434 portchange, portspeed(hub, portstatus));
5435
5436 if (hub->has_indicators) {
5437 set_port_led(hub, port1, HUB_LED_AUTO);
5438 hub->indicator[port1-1] = INDICATOR_AUTO;
5439 }
5440
5441 #ifdef CONFIG_USB_OTG
5442
5443 if (hub->hdev->bus->is_b_host)
5444 portchange &= ~(USB_PORT_STAT_C_CONNECTION |
5445 USB_PORT_STAT_C_ENABLE);
5446 #endif
5447
5448
5449 if ((portstatus & USB_PORT_STAT_CONNECTION) && udev &&
5450 udev->state != USB_STATE_NOTATTACHED) {
5451 if (portstatus & USB_PORT_STAT_ENABLE) {
5452
5453
5454
5455
5456
5457
5458 descriptor = udev->descriptor;
5459 retval = usb_get_device_descriptor(udev,
5460 sizeof(udev->descriptor));
5461 if (retval < 0) {
5462 dev_dbg(&udev->dev,
5463 "can't read device descriptor %d\n",
5464 retval);
5465 } else {
5466 if (descriptors_changed(udev, &descriptor,
5467 udev->bos)) {
5468 dev_dbg(&udev->dev,
5469 "device descriptor has changed\n");
5470
5471 udev->descriptor = descriptor;
5472 } else {
5473 status = 0;
5474 }
5475 }
5476 #ifdef CONFIG_PM
5477 } else if (udev->state == USB_STATE_SUSPENDED &&
5478 udev->persist_enabled) {
5479
5480
5481
5482 usb_unlock_port(port_dev);
5483 status = usb_remote_wakeup(udev);
5484 usb_lock_port(port_dev);
5485 #endif
5486 } else {
5487 ;
5488 }
5489 }
5490 clear_bit(port1, hub->change_bits);
5491
5492
5493 if (status == 0)
5494 return;
5495
5496 usb_unlock_port(port_dev);
5497 hub_port_connect(hub, port1, portstatus, portchange);
5498 usb_lock_port(port_dev);
5499 }
5500
5501
5502 static void port_over_current_notify(struct usb_port *port_dev)
5503 {
5504 char *envp[3] = { NULL, NULL, NULL };
5505 struct device *hub_dev;
5506 char *port_dev_path;
5507
5508 sysfs_notify(&port_dev->dev.kobj, NULL, "over_current_count");
5509
5510 hub_dev = port_dev->dev.parent;
5511
5512 if (!hub_dev)
5513 return;
5514
5515 port_dev_path = kobject_get_path(&port_dev->dev.kobj, GFP_KERNEL);
5516 if (!port_dev_path)
5517 return;
5518
5519 envp[0] = kasprintf(GFP_KERNEL, "OVER_CURRENT_PORT=%s", port_dev_path);
5520 if (!envp[0])
5521 goto exit;
5522
5523 envp[1] = kasprintf(GFP_KERNEL, "OVER_CURRENT_COUNT=%u",
5524 port_dev->over_current_count);
5525 if (!envp[1])
5526 goto exit;
5527
5528 kobject_uevent_env(&hub_dev->kobj, KOBJ_CHANGE, envp);
5529
5530 exit:
5531 kfree(envp[1]);
5532 kfree(envp[0]);
5533 kfree(port_dev_path);
5534 }
5535
5536 static void port_event(struct usb_hub *hub, int port1)
5537 __must_hold(&port_dev->status_lock)
5538 {
5539 int connect_change;
5540 struct usb_port *port_dev = hub->ports[port1 - 1];
5541 struct usb_device *udev = port_dev->child;
5542 struct usb_device *hdev = hub->hdev;
5543 u16 portstatus, portchange;
5544 int i = 0;
5545
5546 connect_change = test_bit(port1, hub->change_bits);
5547 clear_bit(port1, hub->event_bits);
5548 clear_bit(port1, hub->wakeup_bits);
5549
5550 if (usb_hub_port_status(hub, port1, &portstatus, &portchange) < 0)
5551 return;
5552
5553 if (portchange & USB_PORT_STAT_C_CONNECTION) {
5554 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_CONNECTION);
5555 connect_change = 1;
5556 }
5557
5558 if (portchange & USB_PORT_STAT_C_ENABLE) {
5559 if (!connect_change)
5560 dev_dbg(&port_dev->dev, "enable change, status %08x\n",
5561 portstatus);
5562 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_ENABLE);
5563
5564
5565
5566
5567
5568
5569 if (!(portstatus & USB_PORT_STAT_ENABLE)
5570 && !connect_change && udev) {
5571 dev_err(&port_dev->dev, "disabled by hub (EMI?), re-enabling...\n");
5572 connect_change = 1;
5573 }
5574 }
5575
5576 if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
5577 u16 status = 0, unused;
5578 port_dev->over_current_count++;
5579 port_over_current_notify(port_dev);
5580
5581 dev_dbg(&port_dev->dev, "over-current change #%u\n",
5582 port_dev->over_current_count);
5583 usb_clear_port_feature(hdev, port1,
5584 USB_PORT_FEAT_C_OVER_CURRENT);
5585 msleep(100);
5586 hub_power_on(hub, true);
5587 usb_hub_port_status(hub, port1, &status, &unused);
5588 if (status & USB_PORT_STAT_OVERCURRENT)
5589 dev_err(&port_dev->dev, "over-current condition\n");
5590 }
5591
5592 if (portchange & USB_PORT_STAT_C_RESET) {
5593 dev_dbg(&port_dev->dev, "reset change\n");
5594 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_RESET);
5595 }
5596 if ((portchange & USB_PORT_STAT_C_BH_RESET)
5597 && hub_is_superspeed(hdev)) {
5598 dev_dbg(&port_dev->dev, "warm reset change\n");
5599 usb_clear_port_feature(hdev, port1,
5600 USB_PORT_FEAT_C_BH_PORT_RESET);
5601 }
5602 if (portchange & USB_PORT_STAT_C_LINK_STATE) {
5603 dev_dbg(&port_dev->dev, "link state change\n");
5604 usb_clear_port_feature(hdev, port1,
5605 USB_PORT_FEAT_C_PORT_LINK_STATE);
5606 }
5607 if (portchange & USB_PORT_STAT_C_CONFIG_ERROR) {
5608 dev_warn(&port_dev->dev, "config error\n");
5609 usb_clear_port_feature(hdev, port1,
5610 USB_PORT_FEAT_C_PORT_CONFIG_ERROR);
5611 }
5612
5613
5614 if (!pm_runtime_active(&port_dev->dev))
5615 return;
5616
5617 if (hub_handle_remote_wakeup(hub, port1, portstatus, portchange))
5618 connect_change = 1;
5619
5620
5621
5622
5623
5624
5625
5626 while (hub_port_warm_reset_required(hub, port1, portstatus)) {
5627 if ((i++ < DETECT_DISCONNECT_TRIES) && udev) {
5628 u16 unused;
5629
5630 msleep(20);
5631 usb_hub_port_status(hub, port1, &portstatus, &unused);
5632 dev_dbg(&port_dev->dev, "Wait for inactive link disconnect detect\n");
5633 continue;
5634 } else if (!udev || !(portstatus & USB_PORT_STAT_CONNECTION)
5635 || udev->state == USB_STATE_NOTATTACHED) {
5636 dev_dbg(&port_dev->dev, "do warm reset, port only\n");
5637 if (hub_port_reset(hub, port1, NULL,
5638 HUB_BH_RESET_TIME, true) < 0)
5639 hub_port_disable(hub, port1, 1);
5640 } else {
5641 dev_dbg(&port_dev->dev, "do warm reset, full device\n");
5642 usb_unlock_port(port_dev);
5643 usb_lock_device(udev);
5644 usb_reset_device(udev);
5645 usb_unlock_device(udev);
5646 usb_lock_port(port_dev);
5647 connect_change = 0;
5648 }
5649 break;
5650 }
5651
5652 if (connect_change)
5653 hub_port_connect_change(hub, port1, portstatus, portchange);
5654 }
5655
5656 static void hub_event(struct work_struct *work)
5657 {
5658 struct usb_device *hdev;
5659 struct usb_interface *intf;
5660 struct usb_hub *hub;
5661 struct device *hub_dev;
5662 u16 hubstatus;
5663 u16 hubchange;
5664 int i, ret;
5665
5666 hub = container_of(work, struct usb_hub, events);
5667 hdev = hub->hdev;
5668 hub_dev = hub->intfdev;
5669 intf = to_usb_interface(hub_dev);
5670
5671 kcov_remote_start_usb((u64)hdev->bus->busnum);
5672
5673 dev_dbg(hub_dev, "state %d ports %d chg %04x evt %04x\n",
5674 hdev->state, hdev->maxchild,
5675
5676 (u16) hub->change_bits[0],
5677 (u16) hub->event_bits[0]);
5678
5679
5680
5681 usb_lock_device(hdev);
5682 if (unlikely(hub->disconnected))
5683 goto out_hdev_lock;
5684
5685
5686 if (hdev->state == USB_STATE_NOTATTACHED) {
5687 hub->error = -ENODEV;
5688 hub_quiesce(hub, HUB_DISCONNECT);
5689 goto out_hdev_lock;
5690 }
5691
5692
5693 ret = usb_autopm_get_interface(intf);
5694 if (ret) {
5695 dev_dbg(hub_dev, "Can't autoresume: %d\n", ret);
5696 goto out_hdev_lock;
5697 }
5698
5699
5700 if (hub->quiescing)
5701 goto out_autopm;
5702
5703 if (hub->error) {
5704 dev_dbg(hub_dev, "resetting for error %d\n", hub->error);
5705
5706 ret = usb_reset_device(hdev);
5707 if (ret) {
5708 dev_dbg(hub_dev, "error resetting hub: %d\n", ret);
5709 goto out_autopm;
5710 }
5711
5712 hub->nerrors = 0;
5713 hub->error = 0;
5714 }
5715
5716
5717 for (i = 1; i <= hdev->maxchild; i++) {
5718 struct usb_port *port_dev = hub->ports[i - 1];
5719
5720 if (test_bit(i, hub->event_bits)
5721 || test_bit(i, hub->change_bits)
5722 || test_bit(i, hub->wakeup_bits)) {
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732 pm_runtime_get_noresume(&port_dev->dev);
5733 pm_runtime_barrier(&port_dev->dev);
5734 usb_lock_port(port_dev);
5735 port_event(hub, i);
5736 usb_unlock_port(port_dev);
5737 pm_runtime_put_sync(&port_dev->dev);
5738 }
5739 }
5740
5741
5742 if (test_and_clear_bit(0, hub->event_bits) == 0)
5743 ;
5744 else if (hub_hub_status(hub, &hubstatus, &hubchange) < 0)
5745 dev_err(hub_dev, "get_hub_status failed\n");
5746 else {
5747 if (hubchange & HUB_CHANGE_LOCAL_POWER) {
5748 dev_dbg(hub_dev, "power change\n");
5749 clear_hub_feature(hdev, C_HUB_LOCAL_POWER);
5750 if (hubstatus & HUB_STATUS_LOCAL_POWER)
5751
5752 hub->limited_power = 1;
5753 else
5754 hub->limited_power = 0;
5755 }
5756 if (hubchange & HUB_CHANGE_OVERCURRENT) {
5757 u16 status = 0;
5758 u16 unused;
5759
5760 dev_dbg(hub_dev, "over-current change\n");
5761 clear_hub_feature(hdev, C_HUB_OVER_CURRENT);
5762 msleep(500);
5763 hub_power_on(hub, true);
5764 hub_hub_status(hub, &status, &unused);
5765 if (status & HUB_STATUS_OVERCURRENT)
5766 dev_err(hub_dev, "over-current condition\n");
5767 }
5768 }
5769
5770 out_autopm:
5771
5772 usb_autopm_put_interface_no_suspend(intf);
5773 out_hdev_lock:
5774 usb_unlock_device(hdev);
5775
5776
5777 usb_autopm_put_interface(intf);
5778 kref_put(&hub->kref, hub_release);
5779
5780 kcov_remote_stop();
5781 }
5782
5783 static const struct usb_device_id hub_id_table[] = {
5784 { .match_flags = USB_DEVICE_ID_MATCH_VENDOR
5785 | USB_DEVICE_ID_MATCH_PRODUCT
5786 | USB_DEVICE_ID_MATCH_INT_CLASS,
5787 .idVendor = USB_VENDOR_SMSC,
5788 .idProduct = USB_PRODUCT_USB5534B,
5789 .bInterfaceClass = USB_CLASS_HUB,
5790 .driver_info = HUB_QUIRK_DISABLE_AUTOSUSPEND},
5791 { .match_flags = USB_DEVICE_ID_MATCH_VENDOR
5792 | USB_DEVICE_ID_MATCH_PRODUCT,
5793 .idVendor = USB_VENDOR_CYPRESS,
5794 .idProduct = USB_PRODUCT_CY7C65632,
5795 .driver_info = HUB_QUIRK_DISABLE_AUTOSUSPEND},
5796 { .match_flags = USB_DEVICE_ID_MATCH_VENDOR
5797 | USB_DEVICE_ID_MATCH_INT_CLASS,
5798 .idVendor = USB_VENDOR_GENESYS_LOGIC,
5799 .bInterfaceClass = USB_CLASS_HUB,
5800 .driver_info = HUB_QUIRK_CHECK_PORT_AUTOSUSPEND},
5801 { .match_flags = USB_DEVICE_ID_MATCH_DEV_CLASS,
5802 .bDeviceClass = USB_CLASS_HUB},
5803 { .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS,
5804 .bInterfaceClass = USB_CLASS_HUB},
5805 { }
5806 };
5807
5808 MODULE_DEVICE_TABLE(usb, hub_id_table);
5809
5810 static struct usb_driver hub_driver = {
5811 .name = "hub",
5812 .probe = hub_probe,
5813 .disconnect = hub_disconnect,
5814 .suspend = hub_suspend,
5815 .resume = hub_resume,
5816 .reset_resume = hub_reset_resume,
5817 .pre_reset = hub_pre_reset,
5818 .post_reset = hub_post_reset,
5819 .unlocked_ioctl = hub_ioctl,
5820 .id_table = hub_id_table,
5821 .supports_autosuspend = 1,
5822 };
5823
5824 int usb_hub_init(void)
5825 {
5826 if (usb_register(&hub_driver) < 0) {
5827 printk(KERN_ERR "%s: can't register hub driver\n",
5828 usbcore_name);
5829 return -1;
5830 }
5831
5832
5833
5834
5835
5836
5837
5838 hub_wq = alloc_workqueue("usb_hub_wq", WQ_FREEZABLE, 0);
5839 if (hub_wq)
5840 return 0;
5841
5842
5843 usb_deregister(&hub_driver);
5844 pr_err("%s: can't allocate workqueue for usb hub\n", usbcore_name);
5845
5846 return -1;
5847 }
5848
5849 void usb_hub_cleanup(void)
5850 {
5851 destroy_workqueue(hub_wq);
5852
5853
5854
5855
5856
5857
5858
5859
5860 usb_deregister(&hub_driver);
5861 }
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897 static int usb_reset_and_verify_device(struct usb_device *udev)
5898 {
5899 struct usb_device *parent_hdev = udev->parent;
5900 struct usb_hub *parent_hub;
5901 struct usb_hcd *hcd = bus_to_hcd(udev->bus);
5902 struct usb_device_descriptor descriptor = udev->descriptor;
5903 struct usb_host_bos *bos;
5904 int i, j, ret = 0;
5905 int port1 = udev->portnum;
5906
5907 if (udev->state == USB_STATE_NOTATTACHED ||
5908 udev->state == USB_STATE_SUSPENDED) {
5909 dev_dbg(&udev->dev, "device reset not allowed in state %d\n",
5910 udev->state);
5911 return -EINVAL;
5912 }
5913
5914 if (!parent_hdev)
5915 return -EISDIR;
5916
5917 parent_hub = usb_hub_to_struct_hub(parent_hdev);
5918
5919
5920
5921
5922 usb_disable_usb2_hardware_lpm(udev);
5923
5924 bos = udev->bos;
5925 udev->bos = NULL;
5926
5927 mutex_lock(hcd->address0_mutex);
5928
5929 for (i = 0; i < PORT_INIT_TRIES; ++i) {
5930
5931
5932
5933 usb_ep0_reinit(udev);
5934 ret = hub_port_init(parent_hub, udev, port1, i);
5935 if (ret >= 0 || ret == -ENOTCONN || ret == -ENODEV)
5936 break;
5937 }
5938 mutex_unlock(hcd->address0_mutex);
5939
5940 if (ret < 0)
5941 goto re_enumerate;
5942
5943
5944 if (descriptors_changed(udev, &descriptor, bos)) {
5945 dev_info(&udev->dev, "device firmware changed\n");
5946 udev->descriptor = descriptor;
5947 goto re_enumerate;
5948 }
5949
5950
5951 if (!udev->actconfig)
5952 goto done;
5953
5954 mutex_lock(hcd->bandwidth_mutex);
5955 ret = usb_hcd_alloc_bandwidth(udev, udev->actconfig, NULL, NULL);
5956 if (ret < 0) {
5957 dev_warn(&udev->dev,
5958 "Busted HC? Not enough HCD resources for "
5959 "old configuration.\n");
5960 mutex_unlock(hcd->bandwidth_mutex);
5961 goto re_enumerate;
5962 }
5963 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
5964 USB_REQ_SET_CONFIGURATION, 0,
5965 udev->actconfig->desc.bConfigurationValue, 0,
5966 NULL, 0, USB_CTRL_SET_TIMEOUT);
5967 if (ret < 0) {
5968 dev_err(&udev->dev,
5969 "can't restore configuration #%d (error=%d)\n",
5970 udev->actconfig->desc.bConfigurationValue, ret);
5971 mutex_unlock(hcd->bandwidth_mutex);
5972 goto re_enumerate;
5973 }
5974 mutex_unlock(hcd->bandwidth_mutex);
5975 usb_set_device_state(udev, USB_STATE_CONFIGURED);
5976
5977
5978
5979
5980
5981
5982
5983 for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) {
5984 struct usb_host_config *config = udev->actconfig;
5985 struct usb_interface *intf = config->interface[i];
5986 struct usb_interface_descriptor *desc;
5987
5988 desc = &intf->cur_altsetting->desc;
5989 if (desc->bAlternateSetting == 0) {
5990 usb_disable_interface(udev, intf, true);
5991 usb_enable_interface(udev, intf, true);
5992 ret = 0;
5993 } else {
5994
5995
5996
5997
5998 intf->resetting_device = 1;
5999 ret = usb_set_interface(udev, desc->bInterfaceNumber,
6000 desc->bAlternateSetting);
6001 intf->resetting_device = 0;
6002 }
6003 if (ret < 0) {
6004 dev_err(&udev->dev, "failed to restore interface %d "
6005 "altsetting %d (error=%d)\n",
6006 desc->bInterfaceNumber,
6007 desc->bAlternateSetting,
6008 ret);
6009 goto re_enumerate;
6010 }
6011
6012 for (j = 0; j < intf->cur_altsetting->desc.bNumEndpoints; j++)
6013 intf->cur_altsetting->endpoint[j].streams = 0;
6014 }
6015
6016 done:
6017
6018 usb_enable_usb2_hardware_lpm(udev);
6019 usb_unlocked_enable_lpm(udev);
6020 usb_enable_ltm(udev);
6021 usb_release_bos_descriptor(udev);
6022 udev->bos = bos;
6023 return 0;
6024
6025 re_enumerate:
6026 usb_release_bos_descriptor(udev);
6027 udev->bos = bos;
6028 hub_port_logical_disconnect(parent_hub, port1);
6029 return -ENODEV;
6030 }
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058 int usb_reset_device(struct usb_device *udev)
6059 {
6060 int ret;
6061 int i;
6062 unsigned int noio_flag;
6063 struct usb_port *port_dev;
6064 struct usb_host_config *config = udev->actconfig;
6065 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
6066
6067 if (udev->state == USB_STATE_NOTATTACHED) {
6068 dev_dbg(&udev->dev, "device reset not allowed in state %d\n",
6069 udev->state);
6070 return -EINVAL;
6071 }
6072
6073 if (!udev->parent) {
6074
6075 dev_dbg(&udev->dev, "%s for root hub!\n", __func__);
6076 return -EISDIR;
6077 }
6078
6079 if (udev->reset_in_progress)
6080 return -EINPROGRESS;
6081 udev->reset_in_progress = 1;
6082
6083 port_dev = hub->ports[udev->portnum - 1];
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094 noio_flag = memalloc_noio_save();
6095
6096
6097 usb_autoresume_device(udev);
6098
6099 if (config) {
6100 for (i = 0; i < config->desc.bNumInterfaces; ++i) {
6101 struct usb_interface *cintf = config->interface[i];
6102 struct usb_driver *drv;
6103 int unbind = 0;
6104
6105 if (cintf->dev.driver) {
6106 drv = to_usb_driver(cintf->dev.driver);
6107 if (drv->pre_reset && drv->post_reset)
6108 unbind = (drv->pre_reset)(cintf);
6109 else if (cintf->condition ==
6110 USB_INTERFACE_BOUND)
6111 unbind = 1;
6112 if (unbind)
6113 usb_forced_unbind_intf(cintf);
6114 }
6115 }
6116 }
6117
6118 usb_lock_port(port_dev);
6119 ret = usb_reset_and_verify_device(udev);
6120 usb_unlock_port(port_dev);
6121
6122 if (config) {
6123 for (i = config->desc.bNumInterfaces - 1; i >= 0; --i) {
6124 struct usb_interface *cintf = config->interface[i];
6125 struct usb_driver *drv;
6126 int rebind = cintf->needs_binding;
6127
6128 if (!rebind && cintf->dev.driver) {
6129 drv = to_usb_driver(cintf->dev.driver);
6130 if (drv->post_reset)
6131 rebind = (drv->post_reset)(cintf);
6132 else if (cintf->condition ==
6133 USB_INTERFACE_BOUND)
6134 rebind = 1;
6135 if (rebind)
6136 cintf->needs_binding = 1;
6137 }
6138 }
6139
6140
6141 if (ret == 0)
6142 usb_unbind_and_rebind_marked_interfaces(udev);
6143 }
6144
6145 usb_autosuspend_device(udev);
6146 memalloc_noio_restore(noio_flag);
6147 udev->reset_in_progress = 0;
6148 return ret;
6149 }
6150 EXPORT_SYMBOL_GPL(usb_reset_device);
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181 void usb_queue_reset_device(struct usb_interface *iface)
6182 {
6183 if (schedule_work(&iface->reset_ws))
6184 usb_get_intf(iface);
6185 }
6186 EXPORT_SYMBOL_GPL(usb_queue_reset_device);
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201 struct usb_device *usb_hub_find_child(struct usb_device *hdev,
6202 int port1)
6203 {
6204 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
6205
6206 if (port1 < 1 || port1 > hdev->maxchild)
6207 return NULL;
6208 return hub->ports[port1 - 1]->child;
6209 }
6210 EXPORT_SYMBOL_GPL(usb_hub_find_child);
6211
6212 void usb_hub_adjust_deviceremovable(struct usb_device *hdev,
6213 struct usb_hub_descriptor *desc)
6214 {
6215 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
6216 enum usb_port_connect_type connect_type;
6217 int i;
6218
6219 if (!hub)
6220 return;
6221
6222 if (!hub_is_superspeed(hdev)) {
6223 for (i = 1; i <= hdev->maxchild; i++) {
6224 struct usb_port *port_dev = hub->ports[i - 1];
6225
6226 connect_type = port_dev->connect_type;
6227 if (connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) {
6228 u8 mask = 1 << (i%8);
6229
6230 if (!(desc->u.hs.DeviceRemovable[i/8] & mask)) {
6231 dev_dbg(&port_dev->dev, "DeviceRemovable is changed to 1 according to platform information.\n");
6232 desc->u.hs.DeviceRemovable[i/8] |= mask;
6233 }
6234 }
6235 }
6236 } else {
6237 u16 port_removable = le16_to_cpu(desc->u.ss.DeviceRemovable);
6238
6239 for (i = 1; i <= hdev->maxchild; i++) {
6240 struct usb_port *port_dev = hub->ports[i - 1];
6241
6242 connect_type = port_dev->connect_type;
6243 if (connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) {
6244 u16 mask = 1 << i;
6245
6246 if (!(port_removable & mask)) {
6247 dev_dbg(&port_dev->dev, "DeviceRemovable is changed to 1 according to platform information.\n");
6248 port_removable |= mask;
6249 }
6250 }
6251 }
6252
6253 desc->u.ss.DeviceRemovable = cpu_to_le16(port_removable);
6254 }
6255 }
6256
6257 #ifdef CONFIG_ACPI
6258
6259
6260
6261
6262
6263
6264
6265
6266 acpi_handle usb_get_hub_port_acpi_handle(struct usb_device *hdev,
6267 int port1)
6268 {
6269 struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
6270
6271 if (!hub)
6272 return NULL;
6273
6274 return ACPI_HANDLE(&hub->ports[port1 - 1]->dev);
6275 }
6276 #endif