1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * USB hub driver. 4 * 5 * (C) Copyright 1999 Linus Torvalds 6 * (C) Copyright 1999 Johannes Erdfelt 7 * (C) Copyright 1999 Gregory P. Smith 8 * (C) Copyright 2001 Brad Hards (bhards@bigpond.net.au) 9 * 10 * Released under the GPLv2 only. 11 */ 12 13 #include <linux/kernel.h> 14 #include <linux/errno.h> 15 #include <linux/module.h> 16 #include <linux/moduleparam.h> 17 #include <linux/completion.h> 18 #include <linux/sched/mm.h> 19 #include <linux/list.h> 20 #include <linux/slab.h> 21 #include <linux/kcov.h> 22 #include <linux/ioctl.h> 23 #include <linux/usb.h> 24 #include <linux/usbdevice_fs.h> 25 #include <linux/usb/hcd.h> 26 #include <linux/usb/otg.h> 27 #include <linux/usb/quirks.h> 28 #include <linux/workqueue.h> 29 #include <linux/mutex.h> 30 #include <linux/random.h> 31 #include <linux/pm_qos.h> 32 #include <linux/kobject.h> 33 34 #include <linux/uaccess.h> 35 #include <asm/byteorder.h> 36 37 #include "hub.h" 38 #include "otg_whitelist.h" 39 40 #define USB_VENDOR_GENESYS_LOGIC 0x05e3 41 #define USB_VENDOR_SMSC 0x0424 42 #define HUB_QUIRK_CHECK_PORT_AUTOSUSPEND 0x01 43 #define HUB_QUIRK_DISABLE_AUTOSUSPEND 0x02 44 45 #define USB_TP_TRANSMISSION_DELAY 40 /* ns */ 46 #define USB_TP_TRANSMISSION_DELAY_MAX 65535 /* ns */ 47 48 /* Protect struct usb_device->state and ->children members 49 * Note: Both are also protected by ->dev.sem, except that ->state can 50 * change to USB_STATE_NOTATTACHED even when the semaphore isn't held. */ 51 static DEFINE_SPINLOCK(device_state_lock); 52 53 /* workqueue to process hub events */ 54 static struct workqueue_struct *hub_wq; 55 static void hub_event(struct work_struct *work); 56 57 /* synchronize hub-port add/remove and peering operations */ 58 DEFINE_MUTEX(usb_port_peer_mutex); 59 60 /* cycle leds on hubs that aren't blinking for attention */ 61 static bool blinkenlights; 62 module_param(blinkenlights, bool, S_IRUGO); 63 MODULE_PARM_DESC(blinkenlights, "true to cycle leds on hubs"); 64 65 /* 66 * Device SATA8000 FW1.0 from DATAST0R Technology Corp requires about 67 * 10 seconds to send reply for the initial 64-byte descriptor request. 68 */ 69 /* define initial 64-byte descriptor request timeout in milliseconds */ 70 static int initial_descriptor_timeout = USB_CTRL_GET_TIMEOUT; 71 module_param(initial_descriptor_timeout, int, S_IRUGO|S_IWUSR); 72 MODULE_PARM_DESC(initial_descriptor_timeout, 73 "initial 64-byte descriptor request timeout in milliseconds " 74 "(default 5000 - 5.0 seconds)"); 75 76 /* 77 * As of 2.6.10 we introduce a new USB device initialization scheme which 78 * closely resembles the way Windows works. Hopefully it will be compatible 79 * with a wider range of devices than the old scheme. However some previously 80 * working devices may start giving rise to "device not accepting address" 81 * errors; if that happens the user can try the old scheme by adjusting the 82 * following module parameters. 83 * 84 * For maximum flexibility there are two boolean parameters to control the 85 * hub driver's behavior. On the first initialization attempt, if the 86 * "old_scheme_first" parameter is set then the old scheme will be used, 87 * otherwise the new scheme is used. If that fails and "use_both_schemes" 88 * is set, then the driver will make another attempt, using the other scheme. 89 */ 90 static bool old_scheme_first; 91 module_param(old_scheme_first, bool, S_IRUGO | S_IWUSR); 92 MODULE_PARM_DESC(old_scheme_first, 93 "start with the old device initialization scheme"); 94 95 static bool use_both_schemes = 1; 96 module_param(use_both_schemes, bool, S_IRUGO | S_IWUSR); 97 MODULE_PARM_DESC(use_both_schemes, 98 "try the other device initialization scheme if the " 99 "first one fails"); 100 101 /* Mutual exclusion for EHCI CF initialization. This interferes with 102 * port reset on some companion controllers. 103 */ 104 DECLARE_RWSEM(ehci_cf_port_reset_rwsem); 105 EXPORT_SYMBOL_GPL(ehci_cf_port_reset_rwsem); 106 107 #define HUB_DEBOUNCE_TIMEOUT 2000 108 #define HUB_DEBOUNCE_STEP 25 109 #define HUB_DEBOUNCE_STABLE 100 110 111 static void hub_release(struct kref *kref); 112 static int usb_reset_and_verify_device(struct usb_device *udev); 113 static int hub_port_disable(struct usb_hub *hub, int port1, int set_state); 114 static bool hub_port_warm_reset_required(struct usb_hub *hub, int port1, 115 u16 portstatus); 116 117 static inline char *portspeed(struct usb_hub *hub, int portstatus) 118 { 119 if (hub_is_superspeedplus(hub->hdev)) 120 return "10.0 Gb/s"; 121 if (hub_is_superspeed(hub->hdev)) 122 return "5.0 Gb/s"; 123 if (portstatus & USB_PORT_STAT_HIGH_SPEED) 124 return "480 Mb/s"; 125 else if (portstatus & USB_PORT_STAT_LOW_SPEED) 126 return "1.5 Mb/s"; 127 else 128 return "12 Mb/s"; 129 } 130 131 /* Note that hdev or one of its children must be locked! */ 132 struct usb_hub *usb_hub_to_struct_hub(struct usb_device *hdev) 133 { 134 if (!hdev || !hdev->actconfig || !hdev->maxchild) 135 return NULL; 136 return usb_get_intfdata(hdev->actconfig->interface[0]); 137 } 138 139 int usb_device_supports_lpm(struct usb_device *udev) 140 { 141 /* Some devices have trouble with LPM */ 142 if (udev->quirks & USB_QUIRK_NO_LPM) 143 return 0; 144 145 /* USB 2.1 (and greater) devices indicate LPM support through 146 * their USB 2.0 Extended Capabilities BOS descriptor. 147 */ 148 if (udev->speed == USB_SPEED_HIGH || udev->speed == USB_SPEED_FULL) { 149 if (udev->bos->ext_cap && 150 (USB_LPM_SUPPORT & 151 le32_to_cpu(udev->bos->ext_cap->bmAttributes))) 152 return 1; 153 return 0; 154 } 155 156 /* 157 * According to the USB 3.0 spec, all USB 3.0 devices must support LPM. 158 * However, there are some that don't, and they set the U1/U2 exit 159 * latencies to zero. 160 */ 161 if (!udev->bos->ss_cap) { 162 dev_info(&udev->dev, "No LPM exit latency info found, disabling LPM.\n"); 163 return 0; 164 } 165 166 if (udev->bos->ss_cap->bU1devExitLat == 0 && 167 udev->bos->ss_cap->bU2DevExitLat == 0) { 168 if (udev->parent) 169 dev_info(&udev->dev, "LPM exit latency is zeroed, disabling LPM.\n"); 170 else 171 dev_info(&udev->dev, "We don't know the algorithms for LPM for this host, disabling LPM.\n"); 172 return 0; 173 } 174 175 if (!udev->parent || udev->parent->lpm_capable) 176 return 1; 177 return 0; 178 } 179 180 /* 181 * Set the Maximum Exit Latency (MEL) for the host to initiate a transition from 182 * either U1 or U2. 183 */ 184 static void usb_set_lpm_mel(struct usb_device *udev, 185 struct usb3_lpm_parameters *udev_lpm_params, 186 unsigned int udev_exit_latency, 187 struct usb_hub *hub, 188 struct usb3_lpm_parameters *hub_lpm_params, 189 unsigned int hub_exit_latency) 190 { 191 unsigned int total_mel; 192 unsigned int device_mel; 193 unsigned int hub_mel; 194 195 /* 196 * Calculate the time it takes to transition all links from the roothub 197 * to the parent hub into U0. The parent hub must then decode the 198 * packet (hub header decode latency) to figure out which port it was 199 * bound for. 200 * 201 * The Hub Header decode latency is expressed in 0.1us intervals (0x1 202 * means 0.1us). Multiply that by 100 to get nanoseconds. 203 */ 204 total_mel = hub_lpm_params->mel + 205 (hub->descriptor->u.ss.bHubHdrDecLat * 100); 206 207 /* 208 * How long will it take to transition the downstream hub's port into 209 * U0? The greater of either the hub exit latency or the device exit 210 * latency. 211 * 212 * The BOS U1/U2 exit latencies are expressed in 1us intervals. 213 * Multiply that by 1000 to get nanoseconds. 214 */ 215 device_mel = udev_exit_latency * 1000; 216 hub_mel = hub_exit_latency * 1000; 217 if (device_mel > hub_mel) 218 total_mel += device_mel; 219 else 220 total_mel += hub_mel; 221 222 udev_lpm_params->mel = total_mel; 223 } 224 225 /* 226 * Set the maximum Device to Host Exit Latency (PEL) for the device to initiate 227 * a transition from either U1 or U2. 228 */ 229 static void usb_set_lpm_pel(struct usb_device *udev, 230 struct usb3_lpm_parameters *udev_lpm_params, 231 unsigned int udev_exit_latency, 232 struct usb_hub *hub, 233 struct usb3_lpm_parameters *hub_lpm_params, 234 unsigned int hub_exit_latency, 235 unsigned int port_to_port_exit_latency) 236 { 237 unsigned int first_link_pel; 238 unsigned int hub_pel; 239 240 /* 241 * First, the device sends an LFPS to transition the link between the 242 * device and the parent hub into U0. The exit latency is the bigger of 243 * the device exit latency or the hub exit latency. 244 */ 245 if (udev_exit_latency > hub_exit_latency) 246 first_link_pel = udev_exit_latency * 1000; 247 else 248 first_link_pel = hub_exit_latency * 1000; 249 250 /* 251 * When the hub starts to receive the LFPS, there is a slight delay for 252 * it to figure out that one of the ports is sending an LFPS. Then it 253 * will forward the LFPS to its upstream link. The exit latency is the 254 * delay, plus the PEL that we calculated for this hub. 255 */ 256 hub_pel = port_to_port_exit_latency * 1000 + hub_lpm_params->pel; 257 258 /* 259 * According to figure C-7 in the USB 3.0 spec, the PEL for this device 260 * is the greater of the two exit latencies. 261 */ 262 if (first_link_pel > hub_pel) 263 udev_lpm_params->pel = first_link_pel; 264 else 265 udev_lpm_params->pel = hub_pel; 266 } 267 268 /* 269 * Set the System Exit Latency (SEL) to indicate the total worst-case time from 270 * when a device initiates a transition to U0, until when it will receive the 271 * first packet from the host controller. 272 * 273 * Section C.1.5.1 describes the four components to this: 274 * - t1: device PEL 275 * - t2: time for the ERDY to make it from the device to the host. 276 * - t3: a host-specific delay to process the ERDY. 277 * - t4: time for the packet to make it from the host to the device. 278 * 279 * t3 is specific to both the xHCI host and the platform the host is integrated 280 * into. The Intel HW folks have said it's negligible, FIXME if a different 281 * vendor says otherwise. 282 */ 283 static void usb_set_lpm_sel(struct usb_device *udev, 284 struct usb3_lpm_parameters *udev_lpm_params) 285 { 286 struct usb_device *parent; 287 unsigned int num_hubs; 288 unsigned int total_sel; 289 290 /* t1 = device PEL */ 291 total_sel = udev_lpm_params->pel; 292 /* How many external hubs are in between the device & the root port. */ 293 for (parent = udev->parent, num_hubs = 0; parent->parent; 294 parent = parent->parent) 295 num_hubs++; 296 /* t2 = 2.1us + 250ns * (num_hubs - 1) */ 297 if (num_hubs > 0) 298 total_sel += 2100 + 250 * (num_hubs - 1); 299 300 /* t4 = 250ns * num_hubs */ 301 total_sel += 250 * num_hubs; 302 303 udev_lpm_params->sel = total_sel; 304 } 305 306 static void usb_set_lpm_parameters(struct usb_device *udev) 307 { 308 struct usb_hub *hub; 309 unsigned int port_to_port_delay; 310 unsigned int udev_u1_del; 311 unsigned int udev_u2_del; 312 unsigned int hub_u1_del; 313 unsigned int hub_u2_del; 314 315 if (!udev->lpm_capable || udev->speed < USB_SPEED_SUPER) 316 return; 317 318 hub = usb_hub_to_struct_hub(udev->parent); 319 /* It doesn't take time to transition the roothub into U0, since it 320 * doesn't have an upstream link. 321 */ 322 if (!hub) 323 return; 324 325 udev_u1_del = udev->bos->ss_cap->bU1devExitLat; 326 udev_u2_del = le16_to_cpu(udev->bos->ss_cap->bU2DevExitLat); 327 hub_u1_del = udev->parent->bos->ss_cap->bU1devExitLat; 328 hub_u2_del = le16_to_cpu(udev->parent->bos->ss_cap->bU2DevExitLat); 329 330 usb_set_lpm_mel(udev, &udev->u1_params, udev_u1_del, 331 hub, &udev->parent->u1_params, hub_u1_del); 332 333 usb_set_lpm_mel(udev, &udev->u2_params, udev_u2_del, 334 hub, &udev->parent->u2_params, hub_u2_del); 335 336 /* 337 * Appendix C, section C.2.2.2, says that there is a slight delay from 338 * when the parent hub notices the downstream port is trying to 339 * transition to U0 to when the hub initiates a U0 transition on its 340 * upstream port. The section says the delays are tPort2PortU1EL and 341 * tPort2PortU2EL, but it doesn't define what they are. 342 * 343 * The hub chapter, sections 10.4.2.4 and 10.4.2.5 seem to be talking 344 * about the same delays. Use the maximum delay calculations from those 345 * sections. For U1, it's tHubPort2PortExitLat, which is 1us max. For 346 * U2, it's tHubPort2PortExitLat + U2DevExitLat - U1DevExitLat. I 347 * assume the device exit latencies they are talking about are the hub 348 * exit latencies. 349 * 350 * What do we do if the U2 exit latency is less than the U1 exit 351 * latency? It's possible, although not likely... 352 */ 353 port_to_port_delay = 1; 354 355 usb_set_lpm_pel(udev, &udev->u1_params, udev_u1_del, 356 hub, &udev->parent->u1_params, hub_u1_del, 357 port_to_port_delay); 358 359 if (hub_u2_del > hub_u1_del) 360 port_to_port_delay = 1 + hub_u2_del - hub_u1_del; 361 else 362 port_to_port_delay = 1 + hub_u1_del; 363 364 usb_set_lpm_pel(udev, &udev->u2_params, udev_u2_del, 365 hub, &udev->parent->u2_params, hub_u2_del, 366 port_to_port_delay); 367 368 /* Now that we've got PEL, calculate SEL. */ 369 usb_set_lpm_sel(udev, &udev->u1_params); 370 usb_set_lpm_sel(udev, &udev->u2_params); 371 } 372 373 /* USB 2.0 spec Section 11.24.4.5 */ 374 static int get_hub_descriptor(struct usb_device *hdev, 375 struct usb_hub_descriptor *desc) 376 { 377 int i, ret, size; 378 unsigned dtype; 379 380 if (hub_is_superspeed(hdev)) { 381 dtype = USB_DT_SS_HUB; 382 size = USB_DT_SS_HUB_SIZE; 383 } else { 384 dtype = USB_DT_HUB; 385 size = sizeof(struct usb_hub_descriptor); 386 } 387 388 for (i = 0; i < 3; i++) { 389 ret = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0), 390 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN | USB_RT_HUB, 391 dtype << 8, 0, desc, size, 392 USB_CTRL_GET_TIMEOUT); 393 if (hub_is_superspeed(hdev)) { 394 if (ret == size) 395 return ret; 396 } else if (ret >= USB_DT_HUB_NONVAR_SIZE + 2) { 397 /* Make sure we have the DeviceRemovable field. */ 398 size = USB_DT_HUB_NONVAR_SIZE + desc->bNbrPorts / 8 + 1; 399 if (ret < size) 400 return -EMSGSIZE; 401 return ret; 402 } 403 } 404 return -EINVAL; 405 } 406 407 /* 408 * USB 2.0 spec Section 11.24.2.1 409 */ 410 static int clear_hub_feature(struct usb_device *hdev, int feature) 411 { 412 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0), 413 USB_REQ_CLEAR_FEATURE, USB_RT_HUB, feature, 0, NULL, 0, 1000); 414 } 415 416 /* 417 * USB 2.0 spec Section 11.24.2.2 418 */ 419 int usb_clear_port_feature(struct usb_device *hdev, int port1, int feature) 420 { 421 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0), 422 USB_REQ_CLEAR_FEATURE, USB_RT_PORT, feature, port1, 423 NULL, 0, 1000); 424 } 425 426 /* 427 * USB 2.0 spec Section 11.24.2.13 428 */ 429 static int set_port_feature(struct usb_device *hdev, int port1, int feature) 430 { 431 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0), 432 USB_REQ_SET_FEATURE, USB_RT_PORT, feature, port1, 433 NULL, 0, 1000); 434 } 435 436 static char *to_led_name(int selector) 437 { 438 switch (selector) { 439 case HUB_LED_AMBER: 440 return "amber"; 441 case HUB_LED_GREEN: 442 return "green"; 443 case HUB_LED_OFF: 444 return "off"; 445 case HUB_LED_AUTO: 446 return "auto"; 447 default: 448 return "??"; 449 } 450 } 451 452 /* 453 * USB 2.0 spec Section 11.24.2.7.1.10 and table 11-7 454 * for info about using port indicators 455 */ 456 static void set_port_led(struct usb_hub *hub, int port1, int selector) 457 { 458 struct usb_port *port_dev = hub->ports[port1 - 1]; 459 int status; 460 461 status = set_port_feature(hub->hdev, (selector << 8) | port1, 462 USB_PORT_FEAT_INDICATOR); 463 dev_dbg(&port_dev->dev, "indicator %s status %d\n", 464 to_led_name(selector), status); 465 } 466 467 #define LED_CYCLE_PERIOD ((2*HZ)/3) 468 469 static void led_work(struct work_struct *work) 470 { 471 struct usb_hub *hub = 472 container_of(work, struct usb_hub, leds.work); 473 struct usb_device *hdev = hub->hdev; 474 unsigned i; 475 unsigned changed = 0; 476 int cursor = -1; 477 478 if (hdev->state != USB_STATE_CONFIGURED || hub->quiescing) 479 return; 480 481 for (i = 0; i < hdev->maxchild; i++) { 482 unsigned selector, mode; 483 484 /* 30%-50% duty cycle */ 485 486 switch (hub->indicator[i]) { 487 /* cycle marker */ 488 case INDICATOR_CYCLE: 489 cursor = i; 490 selector = HUB_LED_AUTO; 491 mode = INDICATOR_AUTO; 492 break; 493 /* blinking green = sw attention */ 494 case INDICATOR_GREEN_BLINK: 495 selector = HUB_LED_GREEN; 496 mode = INDICATOR_GREEN_BLINK_OFF; 497 break; 498 case INDICATOR_GREEN_BLINK_OFF: 499 selector = HUB_LED_OFF; 500 mode = INDICATOR_GREEN_BLINK; 501 break; 502 /* blinking amber = hw attention */ 503 case INDICATOR_AMBER_BLINK: 504 selector = HUB_LED_AMBER; 505 mode = INDICATOR_AMBER_BLINK_OFF; 506 break; 507 case INDICATOR_AMBER_BLINK_OFF: 508 selector = HUB_LED_OFF; 509 mode = INDICATOR_AMBER_BLINK; 510 break; 511 /* blink green/amber = reserved */ 512 case INDICATOR_ALT_BLINK: 513 selector = HUB_LED_GREEN; 514 mode = INDICATOR_ALT_BLINK_OFF; 515 break; 516 case INDICATOR_ALT_BLINK_OFF: 517 selector = HUB_LED_AMBER; 518 mode = INDICATOR_ALT_BLINK; 519 break; 520 default: 521 continue; 522 } 523 if (selector != HUB_LED_AUTO) 524 changed = 1; 525 set_port_led(hub, i + 1, selector); 526 hub->indicator[i] = mode; 527 } 528 if (!changed && blinkenlights) { 529 cursor++; 530 cursor %= hdev->maxchild; 531 set_port_led(hub, cursor + 1, HUB_LED_GREEN); 532 hub->indicator[cursor] = INDICATOR_CYCLE; 533 changed++; 534 } 535 if (changed) 536 queue_delayed_work(system_power_efficient_wq, 537 &hub->leds, LED_CYCLE_PERIOD); 538 } 539 540 /* use a short timeout for hub/port status fetches */ 541 #define USB_STS_TIMEOUT 1000 542 #define USB_STS_RETRIES 5 543 544 /* 545 * USB 2.0 spec Section 11.24.2.6 546 */ 547 static int get_hub_status(struct usb_device *hdev, 548 struct usb_hub_status *data) 549 { 550 int i, status = -ETIMEDOUT; 551 552 for (i = 0; i < USB_STS_RETRIES && 553 (status == -ETIMEDOUT || status == -EPIPE); i++) { 554 status = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0), 555 USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_HUB, 0, 0, 556 data, sizeof(*data), USB_STS_TIMEOUT); 557 } 558 return status; 559 } 560 561 /* 562 * USB 2.0 spec Section 11.24.2.7 563 * USB 3.1 takes into use the wValue and wLength fields, spec Section 10.16.2.6 564 */ 565 static int get_port_status(struct usb_device *hdev, int port1, 566 void *data, u16 value, u16 length) 567 { 568 int i, status = -ETIMEDOUT; 569 570 for (i = 0; i < USB_STS_RETRIES && 571 (status == -ETIMEDOUT || status == -EPIPE); i++) { 572 status = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0), 573 USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_PORT, value, 574 port1, data, length, USB_STS_TIMEOUT); 575 } 576 return status; 577 } 578 579 static int hub_ext_port_status(struct usb_hub *hub, int port1, int type, 580 u16 *status, u16 *change, u32 *ext_status) 581 { 582 int ret; 583 int len = 4; 584 585 if (type != HUB_PORT_STATUS) 586 len = 8; 587 588 mutex_lock(&hub->status_mutex); 589 ret = get_port_status(hub->hdev, port1, &hub->status->port, type, len); 590 if (ret < len) { 591 if (ret != -ENODEV) 592 dev_err(hub->intfdev, 593 "%s failed (err = %d)\n", __func__, ret); 594 if (ret >= 0) 595 ret = -EIO; 596 } else { 597 *status = le16_to_cpu(hub->status->port.wPortStatus); 598 *change = le16_to_cpu(hub->status->port.wPortChange); 599 if (type != HUB_PORT_STATUS && ext_status) 600 *ext_status = le32_to_cpu( 601 hub->status->port.dwExtPortStatus); 602 ret = 0; 603 } 604 mutex_unlock(&hub->status_mutex); 605 return ret; 606 } 607 608 static int hub_port_status(struct usb_hub *hub, int port1, 609 u16 *status, u16 *change) 610 { 611 return hub_ext_port_status(hub, port1, HUB_PORT_STATUS, 612 status, change, NULL); 613 } 614 615 static void hub_resubmit_irq_urb(struct usb_hub *hub) 616 { 617 unsigned long flags; 618 int status; 619 620 spin_lock_irqsave(&hub->irq_urb_lock, flags); 621 622 if (hub->quiescing) { 623 spin_unlock_irqrestore(&hub->irq_urb_lock, flags); 624 return; 625 } 626 627 status = usb_submit_urb(hub->urb, GFP_ATOMIC); 628 if (status && status != -ENODEV && status != -EPERM && 629 status != -ESHUTDOWN) { 630 dev_err(hub->intfdev, "resubmit --> %d\n", status); 631 mod_timer(&hub->irq_urb_retry, jiffies + HZ); 632 } 633 634 spin_unlock_irqrestore(&hub->irq_urb_lock, flags); 635 } 636 637 static void hub_retry_irq_urb(struct timer_list *t) 638 { 639 struct usb_hub *hub = from_timer(hub, t, irq_urb_retry); 640 641 hub_resubmit_irq_urb(hub); 642 } 643 644 645 static void kick_hub_wq(struct usb_hub *hub) 646 { 647 struct usb_interface *intf; 648 649 if (hub->disconnected || work_pending(&hub->events)) 650 return; 651 652 /* 653 * Suppress autosuspend until the event is proceed. 654 * 655 * Be careful and make sure that the symmetric operation is 656 * always called. We are here only when there is no pending 657 * work for this hub. Therefore put the interface either when 658 * the new work is called or when it is canceled. 659 */ 660 intf = to_usb_interface(hub->intfdev); 661 usb_autopm_get_interface_no_resume(intf); 662 kref_get(&hub->kref); 663 664 if (queue_work(hub_wq, &hub->events)) 665 return; 666 667 /* the work has already been scheduled */ 668 usb_autopm_put_interface_async(intf); 669 kref_put(&hub->kref, hub_release); 670 } 671 672 void usb_kick_hub_wq(struct usb_device *hdev) 673 { 674 struct usb_hub *hub = usb_hub_to_struct_hub(hdev); 675 676 if (hub) 677 kick_hub_wq(hub); 678 } 679 680 /* 681 * Let the USB core know that a USB 3.0 device has sent a Function Wake Device 682 * Notification, which indicates it had initiated remote wakeup. 683 * 684 * USB 3.0 hubs do not report the port link state change from U3 to U0 when the 685 * device initiates resume, so the USB core will not receive notice of the 686 * resume through the normal hub interrupt URB. 687 */ 688 void usb_wakeup_notification(struct usb_device *hdev, 689 unsigned int portnum) 690 { 691 struct usb_hub *hub; 692 struct usb_port *port_dev; 693 694 if (!hdev) 695 return; 696 697 hub = usb_hub_to_struct_hub(hdev); 698 if (hub) { 699 port_dev = hub->ports[portnum - 1]; 700 if (port_dev && port_dev->child) 701 pm_wakeup_event(&port_dev->child->dev, 0); 702 703 set_bit(portnum, hub->wakeup_bits); 704 kick_hub_wq(hub); 705 } 706 } 707 EXPORT_SYMBOL_GPL(usb_wakeup_notification); 708 709 /* completion function, fires on port status changes and various faults */ 710 static void hub_irq(struct urb *urb) 711 { 712 struct usb_hub *hub = urb->context; 713 int status = urb->status; 714 unsigned i; 715 unsigned long bits; 716 717 switch (status) { 718 case -ENOENT: /* synchronous unlink */ 719 case -ECONNRESET: /* async unlink */ 720 case -ESHUTDOWN: /* hardware going away */ 721 return; 722 723 default: /* presumably an error */ 724 /* Cause a hub reset after 10 consecutive errors */ 725 dev_dbg(hub->intfdev, "transfer --> %d\n", status); 726 if ((++hub->nerrors < 10) || hub->error) 727 goto resubmit; 728 hub->error = status; 729 /* FALL THROUGH */ 730 731 /* let hub_wq handle things */ 732 case 0: /* we got data: port status changed */ 733 bits = 0; 734 for (i = 0; i < urb->actual_length; ++i) 735 bits |= ((unsigned long) ((*hub->buffer)[i])) 736 << (i*8); 737 hub->event_bits[0] = bits; 738 break; 739 } 740 741 hub->nerrors = 0; 742 743 /* Something happened, let hub_wq figure it out */ 744 kick_hub_wq(hub); 745 746 resubmit: 747 hub_resubmit_irq_urb(hub); 748 } 749 750 /* USB 2.0 spec Section 11.24.2.3 */ 751 static inline int 752 hub_clear_tt_buffer(struct usb_device *hdev, u16 devinfo, u16 tt) 753 { 754 /* Need to clear both directions for control ep */ 755 if (((devinfo >> 11) & USB_ENDPOINT_XFERTYPE_MASK) == 756 USB_ENDPOINT_XFER_CONTROL) { 757 int status = usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0), 758 HUB_CLEAR_TT_BUFFER, USB_RT_PORT, 759 devinfo ^ 0x8000, tt, NULL, 0, 1000); 760 if (status) 761 return status; 762 } 763 return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0), 764 HUB_CLEAR_TT_BUFFER, USB_RT_PORT, devinfo, 765 tt, NULL, 0, 1000); 766 } 767 768 /* 769 * enumeration blocks hub_wq for a long time. we use keventd instead, since 770 * long blocking there is the exception, not the rule. accordingly, HCDs 771 * talking to TTs must queue control transfers (not just bulk and iso), so 772 * both can talk to the same hub concurrently. 773 */ 774 static void hub_tt_work(struct work_struct *work) 775 { 776 struct usb_hub *hub = 777 container_of(work, struct usb_hub, tt.clear_work); 778 unsigned long flags; 779 780 spin_lock_irqsave(&hub->tt.lock, flags); 781 while (!list_empty(&hub->tt.clear_list)) { 782 struct list_head *next; 783 struct usb_tt_clear *clear; 784 struct usb_device *hdev = hub->hdev; 785 const struct hc_driver *drv; 786 int status; 787 788 next = hub->tt.clear_list.next; 789 clear = list_entry(next, struct usb_tt_clear, clear_list); 790 list_del(&clear->clear_list); 791 792 /* drop lock so HCD can concurrently report other TT errors */ 793 spin_unlock_irqrestore(&hub->tt.lock, flags); 794 status = hub_clear_tt_buffer(hdev, clear->devinfo, clear->tt); 795 if (status && status != -ENODEV) 796 dev_err(&hdev->dev, 797 "clear tt %d (%04x) error %d\n", 798 clear->tt, clear->devinfo, status); 799 800 /* Tell the HCD, even if the operation failed */ 801 drv = clear->hcd->driver; 802 if (drv->clear_tt_buffer_complete) 803 (drv->clear_tt_buffer_complete)(clear->hcd, clear->ep); 804 805 kfree(clear); 806 spin_lock_irqsave(&hub->tt.lock, flags); 807 } 808 spin_unlock_irqrestore(&hub->tt.lock, flags); 809 } 810 811 /** 812 * usb_hub_set_port_power - control hub port's power state 813 * @hdev: USB device belonging to the usb hub 814 * @hub: target hub 815 * @port1: port index 816 * @set: expected status 817 * 818 * call this function to control port's power via setting or 819 * clearing the port's PORT_POWER feature. 820 * 821 * Return: 0 if successful. A negative error code otherwise. 822 */ 823 int usb_hub_set_port_power(struct usb_device *hdev, struct usb_hub *hub, 824 int port1, bool set) 825 { 826 int ret; 827 828 if (set) 829 ret = set_port_feature(hdev, port1, USB_PORT_FEAT_POWER); 830 else 831 ret = usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_POWER); 832 833 if (ret) 834 return ret; 835 836 if (set) 837 set_bit(port1, hub->power_bits); 838 else 839 clear_bit(port1, hub->power_bits); 840 return 0; 841 } 842 843 /** 844 * usb_hub_clear_tt_buffer - clear control/bulk TT state in high speed hub 845 * @urb: an URB associated with the failed or incomplete split transaction 846 * 847 * High speed HCDs use this to tell the hub driver that some split control or 848 * bulk transaction failed in a way that requires clearing internal state of 849 * a transaction translator. This is normally detected (and reported) from 850 * interrupt context. 851 * 852 * It may not be possible for that hub to handle additional full (or low) 853 * speed transactions until that state is fully cleared out. 854 * 855 * Return: 0 if successful. A negative error code otherwise. 856 */ 857 int usb_hub_clear_tt_buffer(struct urb *urb) 858 { 859 struct usb_device *udev = urb->dev; 860 int pipe = urb->pipe; 861 struct usb_tt *tt = udev->tt; 862 unsigned long flags; 863 struct usb_tt_clear *clear; 864 865 /* we've got to cope with an arbitrary number of pending TT clears, 866 * since each TT has "at least two" buffers that can need it (and 867 * there can be many TTs per hub). even if they're uncommon. 868 */ 869 clear = kmalloc(sizeof *clear, GFP_ATOMIC); 870 if (clear == NULL) { 871 dev_err(&udev->dev, "can't save CLEAR_TT_BUFFER state\n"); 872 /* FIXME recover somehow ... RESET_TT? */ 873 return -ENOMEM; 874 } 875 876 /* info that CLEAR_TT_BUFFER needs */ 877 clear->tt = tt->multi ? udev->ttport : 1; 878 clear->devinfo = usb_pipeendpoint (pipe); 879 clear->devinfo |= ((u16)udev->devaddr) << 4; 880 clear->devinfo |= usb_pipecontrol(pipe) 881 ? (USB_ENDPOINT_XFER_CONTROL << 11) 882 : (USB_ENDPOINT_XFER_BULK << 11); 883 if (usb_pipein(pipe)) 884 clear->devinfo |= 1 << 15; 885 886 /* info for completion callback */ 887 clear->hcd = bus_to_hcd(udev->bus); 888 clear->ep = urb->ep; 889 890 /* tell keventd to clear state for this TT */ 891 spin_lock_irqsave(&tt->lock, flags); 892 list_add_tail(&clear->clear_list, &tt->clear_list); 893 schedule_work(&tt->clear_work); 894 spin_unlock_irqrestore(&tt->lock, flags); 895 return 0; 896 } 897 EXPORT_SYMBOL_GPL(usb_hub_clear_tt_buffer); 898 899 static void hub_power_on(struct usb_hub *hub, bool do_delay) 900 { 901 int port1; 902 903 /* Enable power on each port. Some hubs have reserved values 904 * of LPSM (> 2) in their descriptors, even though they are 905 * USB 2.0 hubs. Some hubs do not implement port-power switching 906 * but only emulate it. In all cases, the ports won't work 907 * unless we send these messages to the hub. 908 */ 909 if (hub_is_port_power_switchable(hub)) 910 dev_dbg(hub->intfdev, "enabling power on all ports\n"); 911 else 912 dev_dbg(hub->intfdev, "trying to enable port power on " 913 "non-switchable hub\n"); 914 for (port1 = 1; port1 <= hub->hdev->maxchild; port1++) 915 if (test_bit(port1, hub->power_bits)) 916 set_port_feature(hub->hdev, port1, USB_PORT_FEAT_POWER); 917 else 918 usb_clear_port_feature(hub->hdev, port1, 919 USB_PORT_FEAT_POWER); 920 if (do_delay) 921 msleep(hub_power_on_good_delay(hub)); 922 } 923 924 static int hub_hub_status(struct usb_hub *hub, 925 u16 *status, u16 *change) 926 { 927 int ret; 928 929 mutex_lock(&hub->status_mutex); 930 ret = get_hub_status(hub->hdev, &hub->status->hub); 931 if (ret < 0) { 932 if (ret != -ENODEV) 933 dev_err(hub->intfdev, 934 "%s failed (err = %d)\n", __func__, ret); 935 } else { 936 *status = le16_to_cpu(hub->status->hub.wHubStatus); 937 *change = le16_to_cpu(hub->status->hub.wHubChange); 938 ret = 0; 939 } 940 mutex_unlock(&hub->status_mutex); 941 return ret; 942 } 943 944 static int hub_set_port_link_state(struct usb_hub *hub, int port1, 945 unsigned int link_status) 946 { 947 return set_port_feature(hub->hdev, 948 port1 | (link_status << 3), 949 USB_PORT_FEAT_LINK_STATE); 950 } 951 952 /* 953 * Disable a port and mark a logical connect-change event, so that some 954 * time later hub_wq will disconnect() any existing usb_device on the port 955 * and will re-enumerate if there actually is a device attached. 956 */ 957 static void hub_port_logical_disconnect(struct usb_hub *hub, int port1) 958 { 959 dev_dbg(&hub->ports[port1 - 1]->dev, "logical disconnect\n"); 960 hub_port_disable(hub, port1, 1); 961 962 /* FIXME let caller ask to power down the port: 963 * - some devices won't enumerate without a VBUS power cycle 964 * - SRP saves power that way 965 * - ... new call, TBD ... 966 * That's easy if this hub can switch power per-port, and 967 * hub_wq reactivates the port later (timer, SRP, etc). 968 * Powerdown must be optional, because of reset/DFU. 969 */ 970 971 set_bit(port1, hub->change_bits); 972 kick_hub_wq(hub); 973 } 974 975 /** 976 * usb_remove_device - disable a device's port on its parent hub 977 * @udev: device to be disabled and removed 978 * Context: @udev locked, must be able to sleep. 979 * 980 * After @udev's port has been disabled, hub_wq is notified and it will 981 * see that the device has been disconnected. When the device is 982 * physically unplugged and something is plugged in, the events will 983 * be received and processed normally. 984 * 985 * Return: 0 if successful. A negative error code otherwise. 986 */ 987 int usb_remove_device(struct usb_device *udev) 988 { 989 struct usb_hub *hub; 990 struct usb_interface *intf; 991 int ret; 992 993 if (!udev->parent) /* Can't remove a root hub */ 994 return -EINVAL; 995 hub = usb_hub_to_struct_hub(udev->parent); 996 intf = to_usb_interface(hub->intfdev); 997 998 ret = usb_autopm_get_interface(intf); 999 if (ret < 0) 1000 return ret; 1001 1002 set_bit(udev->portnum, hub->removed_bits); 1003 hub_port_logical_disconnect(hub, udev->portnum); 1004 usb_autopm_put_interface(intf); 1005 return 0; 1006 } 1007 1008 enum hub_activation_type { 1009 HUB_INIT, HUB_INIT2, HUB_INIT3, /* INITs must come first */ 1010 HUB_POST_RESET, HUB_RESUME, HUB_RESET_RESUME, 1011 }; 1012 1013 static void hub_init_func2(struct work_struct *ws); 1014 static void hub_init_func3(struct work_struct *ws); 1015 1016 static void hub_activate(struct usb_hub *hub, enum hub_activation_type type) 1017 { 1018 struct usb_device *hdev = hub->hdev; 1019 struct usb_hcd *hcd; 1020 int ret; 1021 int port1; 1022 int status; 1023 bool need_debounce_delay = false; 1024 unsigned delay; 1025 1026 /* Continue a partial initialization */ 1027 if (type == HUB_INIT2 || type == HUB_INIT3) { 1028 device_lock(&hdev->dev); 1029 1030 /* Was the hub disconnected while we were waiting? */ 1031 if (hub->disconnected) 1032 goto disconnected; 1033 if (type == HUB_INIT2) 1034 goto init2; 1035 goto init3; 1036 } 1037 kref_get(&hub->kref); 1038 1039 /* The superspeed hub except for root hub has to use Hub Depth 1040 * value as an offset into the route string to locate the bits 1041 * it uses to determine the downstream port number. So hub driver 1042 * should send a set hub depth request to superspeed hub after 1043 * the superspeed hub is set configuration in initialization or 1044 * reset procedure. 1045 * 1046 * After a resume, port power should still be on. 1047 * For any other type of activation, turn it on. 1048 */ 1049 if (type != HUB_RESUME) { 1050 if (hdev->parent && hub_is_superspeed(hdev)) { 1051 ret = usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0), 1052 HUB_SET_DEPTH, USB_RT_HUB, 1053 hdev->level - 1, 0, NULL, 0, 1054 USB_CTRL_SET_TIMEOUT); 1055 if (ret < 0) 1056 dev_err(hub->intfdev, 1057 "set hub depth failed\n"); 1058 } 1059 1060 /* Speed up system boot by using a delayed_work for the 1061 * hub's initial power-up delays. This is pretty awkward 1062 * and the implementation looks like a home-brewed sort of 1063 * setjmp/longjmp, but it saves at least 100 ms for each 1064 * root hub (assuming usbcore is compiled into the kernel 1065 * rather than as a module). It adds up. 1066 * 1067 * This can't be done for HUB_RESUME or HUB_RESET_RESUME 1068 * because for those activation types the ports have to be 1069 * operational when we return. In theory this could be done 1070 * for HUB_POST_RESET, but it's easier not to. 1071 */ 1072 if (type == HUB_INIT) { 1073 delay = hub_power_on_good_delay(hub); 1074 1075 hub_power_on(hub, false); 1076 INIT_DELAYED_WORK(&hub->init_work, hub_init_func2); 1077 queue_delayed_work(system_power_efficient_wq, 1078 &hub->init_work, 1079 msecs_to_jiffies(delay)); 1080 1081 /* Suppress autosuspend until init is done */ 1082 usb_autopm_get_interface_no_resume( 1083 to_usb_interface(hub->intfdev)); 1084 return; /* Continues at init2: below */ 1085 } else if (type == HUB_RESET_RESUME) { 1086 /* The internal host controller state for the hub device 1087 * may be gone after a host power loss on system resume. 1088 * Update the device's info so the HW knows it's a hub. 1089 */ 1090 hcd = bus_to_hcd(hdev->bus); 1091 if (hcd->driver->update_hub_device) { 1092 ret = hcd->driver->update_hub_device(hcd, hdev, 1093 &hub->tt, GFP_NOIO); 1094 if (ret < 0) { 1095 dev_err(hub->intfdev, 1096 "Host not accepting hub info update\n"); 1097 dev_err(hub->intfdev, 1098 "LS/FS devices and hubs may not work under this hub\n"); 1099 } 1100 } 1101 hub_power_on(hub, true); 1102 } else { 1103 hub_power_on(hub, true); 1104 } 1105 } 1106 init2: 1107 1108 /* 1109 * Check each port and set hub->change_bits to let hub_wq know 1110 * which ports need attention. 1111 */ 1112 for (port1 = 1; port1 <= hdev->maxchild; ++port1) { 1113 struct usb_port *port_dev = hub->ports[port1 - 1]; 1114 struct usb_device *udev = port_dev->child; 1115 u16 portstatus, portchange; 1116 1117 portstatus = portchange = 0; 1118 status = hub_port_status(hub, port1, &portstatus, &portchange); 1119 if (status) 1120 goto abort; 1121 1122 if (udev || (portstatus & USB_PORT_STAT_CONNECTION)) 1123 dev_dbg(&port_dev->dev, "status %04x change %04x\n", 1124 portstatus, portchange); 1125 1126 /* 1127 * After anything other than HUB_RESUME (i.e., initialization 1128 * or any sort of reset), every port should be disabled. 1129 * Unconnected ports should likewise be disabled (paranoia), 1130 * and so should ports for which we have no usb_device. 1131 */ 1132 if ((portstatus & USB_PORT_STAT_ENABLE) && ( 1133 type != HUB_RESUME || 1134 !(portstatus & USB_PORT_STAT_CONNECTION) || 1135 !udev || 1136 udev->state == USB_STATE_NOTATTACHED)) { 1137 /* 1138 * USB3 protocol ports will automatically transition 1139 * to Enabled state when detect an USB3.0 device attach. 1140 * Do not disable USB3 protocol ports, just pretend 1141 * power was lost 1142 */ 1143 portstatus &= ~USB_PORT_STAT_ENABLE; 1144 if (!hub_is_superspeed(hdev)) 1145 usb_clear_port_feature(hdev, port1, 1146 USB_PORT_FEAT_ENABLE); 1147 } 1148 1149 /* Make sure a warm-reset request is handled by port_event */ 1150 if (type == HUB_RESUME && 1151 hub_port_warm_reset_required(hub, port1, portstatus)) 1152 set_bit(port1, hub->event_bits); 1153 1154 /* 1155 * Add debounce if USB3 link is in polling/link training state. 1156 * Link will automatically transition to Enabled state after 1157 * link training completes. 1158 */ 1159 if (hub_is_superspeed(hdev) && 1160 ((portstatus & USB_PORT_STAT_LINK_STATE) == 1161 USB_SS_PORT_LS_POLLING)) 1162 need_debounce_delay = true; 1163 1164 /* Clear status-change flags; we'll debounce later */ 1165 if (portchange & USB_PORT_STAT_C_CONNECTION) { 1166 need_debounce_delay = true; 1167 usb_clear_port_feature(hub->hdev, port1, 1168 USB_PORT_FEAT_C_CONNECTION); 1169 } 1170 if (portchange & USB_PORT_STAT_C_ENABLE) { 1171 need_debounce_delay = true; 1172 usb_clear_port_feature(hub->hdev, port1, 1173 USB_PORT_FEAT_C_ENABLE); 1174 } 1175 if (portchange & USB_PORT_STAT_C_RESET) { 1176 need_debounce_delay = true; 1177 usb_clear_port_feature(hub->hdev, port1, 1178 USB_PORT_FEAT_C_RESET); 1179 } 1180 if ((portchange & USB_PORT_STAT_C_BH_RESET) && 1181 hub_is_superspeed(hub->hdev)) { 1182 need_debounce_delay = true; 1183 usb_clear_port_feature(hub->hdev, port1, 1184 USB_PORT_FEAT_C_BH_PORT_RESET); 1185 } 1186 /* We can forget about a "removed" device when there's a 1187 * physical disconnect or the connect status changes. 1188 */ 1189 if (!(portstatus & USB_PORT_STAT_CONNECTION) || 1190 (portchange & USB_PORT_STAT_C_CONNECTION)) 1191 clear_bit(port1, hub->removed_bits); 1192 1193 if (!udev || udev->state == USB_STATE_NOTATTACHED) { 1194 /* Tell hub_wq to disconnect the device or 1195 * check for a new connection or over current condition. 1196 * Based on USB2.0 Spec Section 11.12.5, 1197 * C_PORT_OVER_CURRENT could be set while 1198 * PORT_OVER_CURRENT is not. So check for any of them. 1199 */ 1200 if (udev || (portstatus & USB_PORT_STAT_CONNECTION) || 1201 (portchange & USB_PORT_STAT_C_CONNECTION) || 1202 (portstatus & USB_PORT_STAT_OVERCURRENT) || 1203 (portchange & USB_PORT_STAT_C_OVERCURRENT)) 1204 set_bit(port1, hub->change_bits); 1205 1206 } else if (portstatus & USB_PORT_STAT_ENABLE) { 1207 bool port_resumed = (portstatus & 1208 USB_PORT_STAT_LINK_STATE) == 1209 USB_SS_PORT_LS_U0; 1210 /* The power session apparently survived the resume. 1211 * If there was an overcurrent or suspend change 1212 * (i.e., remote wakeup request), have hub_wq 1213 * take care of it. Look at the port link state 1214 * for USB 3.0 hubs, since they don't have a suspend 1215 * change bit, and they don't set the port link change 1216 * bit on device-initiated resume. 1217 */ 1218 if (portchange || (hub_is_superspeed(hub->hdev) && 1219 port_resumed)) 1220 set_bit(port1, hub->change_bits); 1221 1222 } else if (udev->persist_enabled) { 1223 #ifdef CONFIG_PM 1224 udev->reset_resume = 1; 1225 #endif 1226 1227 } else { 1228 /* The power session is gone; tell hub_wq */ 1229 usb_set_device_state(udev, USB_STATE_NOTATTACHED); 1230 set_bit(port1, hub->change_bits); 1231 } 1232 } 1233 1234 /* If no port-status-change flags were set, we don't need any 1235 * debouncing. If flags were set we can try to debounce the 1236 * ports all at once right now, instead of letting hub_wq do them 1237 * one at a time later on. 1238 * 1239 * If any port-status changes do occur during this delay, hub_wq 1240 * will see them later and handle them normally. 1241 */ 1242 if (need_debounce_delay) { 1243 delay = HUB_DEBOUNCE_STABLE; 1244 1245 /* Don't do a long sleep inside a workqueue routine */ 1246 if (type == HUB_INIT2) { 1247 INIT_DELAYED_WORK(&hub->init_work, hub_init_func3); 1248 queue_delayed_work(system_power_efficient_wq, 1249 &hub->init_work, 1250 msecs_to_jiffies(delay)); 1251 device_unlock(&hdev->dev); 1252 return; /* Continues at init3: below */ 1253 } else { 1254 msleep(delay); 1255 } 1256 } 1257 init3: 1258 hub->quiescing = 0; 1259 1260 status = usb_submit_urb(hub->urb, GFP_NOIO); 1261 if (status < 0) 1262 dev_err(hub->intfdev, "activate --> %d\n", status); 1263 if (hub->has_indicators && blinkenlights) 1264 queue_delayed_work(system_power_efficient_wq, 1265 &hub->leds, LED_CYCLE_PERIOD); 1266 1267 /* Scan all ports that need attention */ 1268 kick_hub_wq(hub); 1269 abort: 1270 if (type == HUB_INIT2 || type == HUB_INIT3) { 1271 /* Allow autosuspend if it was suppressed */ 1272 disconnected: 1273 usb_autopm_put_interface_async(to_usb_interface(hub->intfdev)); 1274 device_unlock(&hdev->dev); 1275 } 1276 1277 kref_put(&hub->kref, hub_release); 1278 } 1279 1280 /* Implement the continuations for the delays above */ 1281 static void hub_init_func2(struct work_struct *ws) 1282 { 1283 struct usb_hub *hub = container_of(ws, struct usb_hub, init_work.work); 1284 1285 hub_activate(hub, HUB_INIT2); 1286 } 1287 1288 static void hub_init_func3(struct work_struct *ws) 1289 { 1290 struct usb_hub *hub = container_of(ws, struct usb_hub, init_work.work); 1291 1292 hub_activate(hub, HUB_INIT3); 1293 } 1294 1295 enum hub_quiescing_type { 1296 HUB_DISCONNECT, HUB_PRE_RESET, HUB_SUSPEND 1297 }; 1298 1299 static void hub_quiesce(struct usb_hub *hub, enum hub_quiescing_type type) 1300 { 1301 struct usb_device *hdev = hub->hdev; 1302 unsigned long flags; 1303 int i; 1304 1305 /* hub_wq and related activity won't re-trigger */ 1306 spin_lock_irqsave(&hub->irq_urb_lock, flags); 1307 hub->quiescing = 1; 1308 spin_unlock_irqrestore(&hub->irq_urb_lock, flags); 1309 1310 if (type != HUB_SUSPEND) { 1311 /* Disconnect all the children */ 1312 for (i = 0; i < hdev->maxchild; ++i) { 1313 if (hub->ports[i]->child) 1314 usb_disconnect(&hub->ports[i]->child); 1315 } 1316 } 1317 1318 /* Stop hub_wq and related activity */ 1319 del_timer_sync(&hub->irq_urb_retry); 1320 usb_kill_urb(hub->urb); 1321 if (hub->has_indicators) 1322 cancel_delayed_work_sync(&hub->leds); 1323 if (hub->tt.hub) 1324 flush_work(&hub->tt.clear_work); 1325 } 1326 1327 static void hub_pm_barrier_for_all_ports(struct usb_hub *hub) 1328 { 1329 int i; 1330 1331 for (i = 0; i < hub->hdev->maxchild; ++i) 1332 pm_runtime_barrier(&hub->ports[i]->dev); 1333 } 1334 1335 /* caller has locked the hub device */ 1336 static int hub_pre_reset(struct usb_interface *intf) 1337 { 1338 struct usb_hub *hub = usb_get_intfdata(intf); 1339 1340 hub_quiesce(hub, HUB_PRE_RESET); 1341 hub->in_reset = 1; 1342 hub_pm_barrier_for_all_ports(hub); 1343 return 0; 1344 } 1345 1346 /* caller has locked the hub device */ 1347 static int hub_post_reset(struct usb_interface *intf) 1348 { 1349 struct usb_hub *hub = usb_get_intfdata(intf); 1350 1351 hub->in_reset = 0; 1352 hub_pm_barrier_for_all_ports(hub); 1353 hub_activate(hub, HUB_POST_RESET); 1354 return 0; 1355 } 1356 1357 static int hub_configure(struct usb_hub *hub, 1358 struct usb_endpoint_descriptor *endpoint) 1359 { 1360 struct usb_hcd *hcd; 1361 struct usb_device *hdev = hub->hdev; 1362 struct device *hub_dev = hub->intfdev; 1363 u16 hubstatus, hubchange; 1364 u16 wHubCharacteristics; 1365 unsigned int pipe; 1366 int maxp, ret, i; 1367 char *message = "out of memory"; 1368 unsigned unit_load; 1369 unsigned full_load; 1370 unsigned maxchild; 1371 1372 hub->buffer = kmalloc(sizeof(*hub->buffer), GFP_KERNEL); 1373 if (!hub->buffer) { 1374 ret = -ENOMEM; 1375 goto fail; 1376 } 1377 1378 hub->status = kmalloc(sizeof(*hub->status), GFP_KERNEL); 1379 if (!hub->status) { 1380 ret = -ENOMEM; 1381 goto fail; 1382 } 1383 mutex_init(&hub->status_mutex); 1384 1385 hub->descriptor = kzalloc(sizeof(*hub->descriptor), GFP_KERNEL); 1386 if (!hub->descriptor) { 1387 ret = -ENOMEM; 1388 goto fail; 1389 } 1390 1391 /* Request the entire hub descriptor. 1392 * hub->descriptor can handle USB_MAXCHILDREN ports, 1393 * but a (non-SS) hub can/will return fewer bytes here. 1394 */ 1395 ret = get_hub_descriptor(hdev, hub->descriptor); 1396 if (ret < 0) { 1397 message = "can't read hub descriptor"; 1398 goto fail; 1399 } 1400 1401 maxchild = USB_MAXCHILDREN; 1402 if (hub_is_superspeed(hdev)) 1403 maxchild = min_t(unsigned, maxchild, USB_SS_MAXPORTS); 1404 1405 if (hub->descriptor->bNbrPorts > maxchild) { 1406 message = "hub has too many ports!"; 1407 ret = -ENODEV; 1408 goto fail; 1409 } else if (hub->descriptor->bNbrPorts == 0) { 1410 message = "hub doesn't have any ports!"; 1411 ret = -ENODEV; 1412 goto fail; 1413 } 1414 1415 /* 1416 * Accumulate wHubDelay + 40ns for every hub in the tree of devices. 1417 * The resulting value will be used for SetIsochDelay() request. 1418 */ 1419 if (hub_is_superspeed(hdev) || hub_is_superspeedplus(hdev)) { 1420 u32 delay = __le16_to_cpu(hub->descriptor->u.ss.wHubDelay); 1421 1422 if (hdev->parent) 1423 delay += hdev->parent->hub_delay; 1424 1425 delay += USB_TP_TRANSMISSION_DELAY; 1426 hdev->hub_delay = min_t(u32, delay, USB_TP_TRANSMISSION_DELAY_MAX); 1427 } 1428 1429 maxchild = hub->descriptor->bNbrPorts; 1430 dev_info(hub_dev, "%d port%s detected\n", maxchild, 1431 (maxchild == 1) ? "" : "s"); 1432 1433 hub->ports = kcalloc(maxchild, sizeof(struct usb_port *), GFP_KERNEL); 1434 if (!hub->ports) { 1435 ret = -ENOMEM; 1436 goto fail; 1437 } 1438 1439 wHubCharacteristics = le16_to_cpu(hub->descriptor->wHubCharacteristics); 1440 if (hub_is_superspeed(hdev)) { 1441 unit_load = 150; 1442 full_load = 900; 1443 } else { 1444 unit_load = 100; 1445 full_load = 500; 1446 } 1447 1448 /* FIXME for USB 3.0, skip for now */ 1449 if ((wHubCharacteristics & HUB_CHAR_COMPOUND) && 1450 !(hub_is_superspeed(hdev))) { 1451 char portstr[USB_MAXCHILDREN + 1]; 1452 1453 for (i = 0; i < maxchild; i++) 1454 portstr[i] = hub->descriptor->u.hs.DeviceRemovable 1455 [((i + 1) / 8)] & (1 << ((i + 1) % 8)) 1456 ? 'F' : 'R'; 1457 portstr[maxchild] = 0; 1458 dev_dbg(hub_dev, "compound device; port removable status: %s\n", portstr); 1459 } else 1460 dev_dbg(hub_dev, "standalone hub\n"); 1461 1462 switch (wHubCharacteristics & HUB_CHAR_LPSM) { 1463 case HUB_CHAR_COMMON_LPSM: 1464 dev_dbg(hub_dev, "ganged power switching\n"); 1465 break; 1466 case HUB_CHAR_INDV_PORT_LPSM: 1467 dev_dbg(hub_dev, "individual port power switching\n"); 1468 break; 1469 case HUB_CHAR_NO_LPSM: 1470 case HUB_CHAR_LPSM: 1471 dev_dbg(hub_dev, "no power switching (usb 1.0)\n"); 1472 break; 1473 } 1474 1475 switch (wHubCharacteristics & HUB_CHAR_OCPM) { 1476 case HUB_CHAR_COMMON_OCPM: 1477 dev_dbg(hub_dev, "global over-current protection\n"); 1478 break; 1479 case HUB_CHAR_INDV_PORT_OCPM: 1480 dev_dbg(hub_dev, "individual port over-current protection\n"); 1481 break; 1482 case HUB_CHAR_NO_OCPM: 1483 case HUB_CHAR_OCPM: 1484 dev_dbg(hub_dev, "no over-current protection\n"); 1485 break; 1486 } 1487 1488 spin_lock_init(&hub->tt.lock); 1489 INIT_LIST_HEAD(&hub->tt.clear_list); 1490 INIT_WORK(&hub->tt.clear_work, hub_tt_work); 1491 switch (hdev->descriptor.bDeviceProtocol) { 1492 case USB_HUB_PR_FS: 1493 break; 1494 case USB_HUB_PR_HS_SINGLE_TT: 1495 dev_dbg(hub_dev, "Single TT\n"); 1496 hub->tt.hub = hdev; 1497 break; 1498 case USB_HUB_PR_HS_MULTI_TT: 1499 ret = usb_set_interface(hdev, 0, 1); 1500 if (ret == 0) { 1501 dev_dbg(hub_dev, "TT per port\n"); 1502 hub->tt.multi = 1; 1503 } else 1504 dev_err(hub_dev, "Using single TT (err %d)\n", 1505 ret); 1506 hub->tt.hub = hdev; 1507 break; 1508 case USB_HUB_PR_SS: 1509 /* USB 3.0 hubs don't have a TT */ 1510 break; 1511 default: 1512 dev_dbg(hub_dev, "Unrecognized hub protocol %d\n", 1513 hdev->descriptor.bDeviceProtocol); 1514 break; 1515 } 1516 1517 /* Note 8 FS bit times == (8 bits / 12000000 bps) ~= 666ns */ 1518 switch (wHubCharacteristics & HUB_CHAR_TTTT) { 1519 case HUB_TTTT_8_BITS: 1520 if (hdev->descriptor.bDeviceProtocol != 0) { 1521 hub->tt.think_time = 666; 1522 dev_dbg(hub_dev, "TT requires at most %d " 1523 "FS bit times (%d ns)\n", 1524 8, hub->tt.think_time); 1525 } 1526 break; 1527 case HUB_TTTT_16_BITS: 1528 hub->tt.think_time = 666 * 2; 1529 dev_dbg(hub_dev, "TT requires at most %d " 1530 "FS bit times (%d ns)\n", 1531 16, hub->tt.think_time); 1532 break; 1533 case HUB_TTTT_24_BITS: 1534 hub->tt.think_time = 666 * 3; 1535 dev_dbg(hub_dev, "TT requires at most %d " 1536 "FS bit times (%d ns)\n", 1537 24, hub->tt.think_time); 1538 break; 1539 case HUB_TTTT_32_BITS: 1540 hub->tt.think_time = 666 * 4; 1541 dev_dbg(hub_dev, "TT requires at most %d " 1542 "FS bit times (%d ns)\n", 1543 32, hub->tt.think_time); 1544 break; 1545 } 1546 1547 /* probe() zeroes hub->indicator[] */ 1548 if (wHubCharacteristics & HUB_CHAR_PORTIND) { 1549 hub->has_indicators = 1; 1550 dev_dbg(hub_dev, "Port indicators are supported\n"); 1551 } 1552 1553 dev_dbg(hub_dev, "power on to power good time: %dms\n", 1554 hub->descriptor->bPwrOn2PwrGood * 2); 1555 1556 /* power budgeting mostly matters with bus-powered hubs, 1557 * and battery-powered root hubs (may provide just 8 mA). 1558 */ 1559 ret = usb_get_std_status(hdev, USB_RECIP_DEVICE, 0, &hubstatus); 1560 if (ret) { 1561 message = "can't get hub status"; 1562 goto fail; 1563 } 1564 hcd = bus_to_hcd(hdev->bus); 1565 if (hdev == hdev->bus->root_hub) { 1566 if (hcd->power_budget > 0) 1567 hdev->bus_mA = hcd->power_budget; 1568 else 1569 hdev->bus_mA = full_load * maxchild; 1570 if (hdev->bus_mA >= full_load) 1571 hub->mA_per_port = full_load; 1572 else { 1573 hub->mA_per_port = hdev->bus_mA; 1574 hub->limited_power = 1; 1575 } 1576 } else if ((hubstatus & (1 << USB_DEVICE_SELF_POWERED)) == 0) { 1577 int remaining = hdev->bus_mA - 1578 hub->descriptor->bHubContrCurrent; 1579 1580 dev_dbg(hub_dev, "hub controller current requirement: %dmA\n", 1581 hub->descriptor->bHubContrCurrent); 1582 hub->limited_power = 1; 1583 1584 if (remaining < maxchild * unit_load) 1585 dev_warn(hub_dev, 1586 "insufficient power available " 1587 "to use all downstream ports\n"); 1588 hub->mA_per_port = unit_load; /* 7.2.1 */ 1589 1590 } else { /* Self-powered external hub */ 1591 /* FIXME: What about battery-powered external hubs that 1592 * provide less current per port? */ 1593 hub->mA_per_port = full_load; 1594 } 1595 if (hub->mA_per_port < full_load) 1596 dev_dbg(hub_dev, "%umA bus power budget for each child\n", 1597 hub->mA_per_port); 1598 1599 ret = hub_hub_status(hub, &hubstatus, &hubchange); 1600 if (ret < 0) { 1601 message = "can't get hub status"; 1602 goto fail; 1603 } 1604 1605 /* local power status reports aren't always correct */ 1606 if (hdev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_SELFPOWER) 1607 dev_dbg(hub_dev, "local power source is %s\n", 1608 (hubstatus & HUB_STATUS_LOCAL_POWER) 1609 ? "lost (inactive)" : "good"); 1610 1611 if ((wHubCharacteristics & HUB_CHAR_OCPM) == 0) 1612 dev_dbg(hub_dev, "%sover-current condition exists\n", 1613 (hubstatus & HUB_STATUS_OVERCURRENT) ? "" : "no "); 1614 1615 /* set up the interrupt endpoint 1616 * We use the EP's maxpacket size instead of (PORTS+1+7)/8 1617 * bytes as USB2.0[11.12.3] says because some hubs are known 1618 * to send more data (and thus cause overflow). For root hubs, 1619 * maxpktsize is defined in hcd.c's fake endpoint descriptors 1620 * to be big enough for at least USB_MAXCHILDREN ports. */ 1621 pipe = usb_rcvintpipe(hdev, endpoint->bEndpointAddress); 1622 maxp = usb_maxpacket(hdev, pipe, usb_pipeout(pipe)); 1623 1624 if (maxp > sizeof(*hub->buffer)) 1625 maxp = sizeof(*hub->buffer); 1626 1627 hub->urb = usb_alloc_urb(0, GFP_KERNEL); 1628 if (!hub->urb) { 1629 ret = -ENOMEM; 1630 goto fail; 1631 } 1632 1633 usb_fill_int_urb(hub->urb, hdev, pipe, *hub->buffer, maxp, hub_irq, 1634 hub, endpoint->bInterval); 1635 1636 /* maybe cycle the hub leds */ 1637 if (hub->has_indicators && blinkenlights) 1638 hub->indicator[0] = INDICATOR_CYCLE; 1639 1640 mutex_lock(&usb_port_peer_mutex); 1641 for (i = 0; i < maxchild; i++) { 1642 ret = usb_hub_create_port_device(hub, i + 1); 1643 if (ret < 0) { 1644 dev_err(hub->intfdev, 1645 "couldn't create port%d device.\n", i + 1); 1646 break; 1647 } 1648 } 1649 hdev->maxchild = i; 1650 for (i = 0; i < hdev->maxchild; i++) { 1651 struct usb_port *port_dev = hub->ports[i]; 1652 1653 pm_runtime_put(&port_dev->dev); 1654 } 1655 1656 mutex_unlock(&usb_port_peer_mutex); 1657 if (ret < 0) 1658 goto fail; 1659 1660 /* Update the HCD's internal representation of this hub before hub_wq 1661 * starts getting port status changes for devices under the hub. 1662 */ 1663 if (hcd->driver->update_hub_device) { 1664 ret = hcd->driver->update_hub_device(hcd, hdev, 1665 &hub->tt, GFP_KERNEL); 1666 if (ret < 0) { 1667 message = "can't update HCD hub info"; 1668 goto fail; 1669 } 1670 } 1671 1672 usb_hub_adjust_deviceremovable(hdev, hub->descriptor); 1673 1674 hub_activate(hub, HUB_INIT); 1675 return 0; 1676 1677 fail: 1678 dev_err(hub_dev, "config failed, %s (err %d)\n", 1679 message, ret); 1680 /* hub_disconnect() frees urb and descriptor */ 1681 return ret; 1682 } 1683 1684 static void hub_release(struct kref *kref) 1685 { 1686 struct usb_hub *hub = container_of(kref, struct usb_hub, kref); 1687 1688 usb_put_dev(hub->hdev); 1689 usb_put_intf(to_usb_interface(hub->intfdev)); 1690 kfree(hub); 1691 } 1692 1693 static unsigned highspeed_hubs; 1694 1695 static void hub_disconnect(struct usb_interface *intf) 1696 { 1697 struct usb_hub *hub = usb_get_intfdata(intf); 1698 struct usb_device *hdev = interface_to_usbdev(intf); 1699 int port1; 1700 1701 /* 1702 * Stop adding new hub events. We do not want to block here and thus 1703 * will not try to remove any pending work item. 1704 */ 1705 hub->disconnected = 1; 1706 1707 /* Disconnect all children and quiesce the hub */ 1708 hub->error = 0; 1709 hub_quiesce(hub, HUB_DISCONNECT); 1710 1711 mutex_lock(&usb_port_peer_mutex); 1712 1713 /* Avoid races with recursively_mark_NOTATTACHED() */ 1714 spin_lock_irq(&device_state_lock); 1715 port1 = hdev->maxchild; 1716 hdev->maxchild = 0; 1717 usb_set_intfdata(intf, NULL); 1718 spin_unlock_irq(&device_state_lock); 1719 1720 for (; port1 > 0; --port1) 1721 usb_hub_remove_port_device(hub, port1); 1722 1723 mutex_unlock(&usb_port_peer_mutex); 1724 1725 if (hub->hdev->speed == USB_SPEED_HIGH) 1726 highspeed_hubs--; 1727 1728 usb_free_urb(hub->urb); 1729 kfree(hub->ports); 1730 kfree(hub->descriptor); 1731 kfree(hub->status); 1732 kfree(hub->buffer); 1733 1734 pm_suspend_ignore_children(&intf->dev, false); 1735 1736 if (hub->quirk_disable_autosuspend) 1737 usb_autopm_put_interface(intf); 1738 1739 kref_put(&hub->kref, hub_release); 1740 } 1741 1742 static bool hub_descriptor_is_sane(struct usb_host_interface *desc) 1743 { 1744 /* Some hubs have a subclass of 1, which AFAICT according to the */ 1745 /* specs is not defined, but it works */ 1746 if (desc->desc.bInterfaceSubClass != 0 && 1747 desc->desc.bInterfaceSubClass != 1) 1748 return false; 1749 1750 /* Multiple endpoints? What kind of mutant ninja-hub is this? */ 1751 if (desc->desc.bNumEndpoints != 1) 1752 return false; 1753 1754 /* If the first endpoint is not interrupt IN, we'd better punt! */ 1755 if (!usb_endpoint_is_int_in(&desc->endpoint[0].desc)) 1756 return false; 1757 1758 return true; 1759 } 1760 1761 static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id) 1762 { 1763 struct usb_host_interface *desc; 1764 struct usb_device *hdev; 1765 struct usb_hub *hub; 1766 1767 desc = intf->cur_altsetting; 1768 hdev = interface_to_usbdev(intf); 1769 1770 /* 1771 * Set default autosuspend delay as 0 to speedup bus suspend, 1772 * based on the below considerations: 1773 * 1774 * - Unlike other drivers, the hub driver does not rely on the 1775 * autosuspend delay to provide enough time to handle a wakeup 1776 * event, and the submitted status URB is just to check future 1777 * change on hub downstream ports, so it is safe to do it. 1778 * 1779 * - The patch might cause one or more auto supend/resume for 1780 * below very rare devices when they are plugged into hub 1781 * first time: 1782 * 1783 * devices having trouble initializing, and disconnect 1784 * themselves from the bus and then reconnect a second 1785 * or so later 1786 * 1787 * devices just for downloading firmware, and disconnects 1788 * themselves after completing it 1789 * 1790 * For these quite rare devices, their drivers may change the 1791 * autosuspend delay of their parent hub in the probe() to one 1792 * appropriate value to avoid the subtle problem if someone 1793 * does care it. 1794 * 1795 * - The patch may cause one or more auto suspend/resume on 1796 * hub during running 'lsusb', but it is probably too 1797 * infrequent to worry about. 1798 * 1799 * - Change autosuspend delay of hub can avoid unnecessary auto 1800 * suspend timer for hub, also may decrease power consumption 1801 * of USB bus. 1802 * 1803 * - If user has indicated to prevent autosuspend by passing 1804 * usbcore.autosuspend = -1 then keep autosuspend disabled. 1805 */ 1806 #ifdef CONFIG_PM 1807 if (hdev->dev.power.autosuspend_delay >= 0) 1808 pm_runtime_set_autosuspend_delay(&hdev->dev, 0); 1809 #endif 1810 1811 /* 1812 * Hubs have proper suspend/resume support, except for root hubs 1813 * where the controller driver doesn't have bus_suspend and 1814 * bus_resume methods. 1815 */ 1816 if (hdev->parent) { /* normal device */ 1817 usb_enable_autosuspend(hdev); 1818 } else { /* root hub */ 1819 const struct hc_driver *drv = bus_to_hcd(hdev->bus)->driver; 1820 1821 if (drv->bus_suspend && drv->bus_resume) 1822 usb_enable_autosuspend(hdev); 1823 } 1824 1825 if (hdev->level == MAX_TOPO_LEVEL) { 1826 dev_err(&intf->dev, 1827 "Unsupported bus topology: hub nested too deep\n"); 1828 return -E2BIG; 1829 } 1830 1831 #ifdef CONFIG_USB_OTG_BLACKLIST_HUB 1832 if (hdev->parent) { 1833 dev_warn(&intf->dev, "ignoring external hub\n"); 1834 return -ENODEV; 1835 } 1836 #endif 1837 1838 if (!hub_descriptor_is_sane(desc)) { 1839 dev_err(&intf->dev, "bad descriptor, ignoring hub\n"); 1840 return -EIO; 1841 } 1842 1843 /* We found a hub */ 1844 dev_info(&intf->dev, "USB hub found\n"); 1845 1846 hub = kzalloc(sizeof(*hub), GFP_KERNEL); 1847 if (!hub) 1848 return -ENOMEM; 1849 1850 kref_init(&hub->kref); 1851 hub->intfdev = &intf->dev; 1852 hub->hdev = hdev; 1853 INIT_DELAYED_WORK(&hub->leds, led_work); 1854 INIT_DELAYED_WORK(&hub->init_work, NULL); 1855 INIT_WORK(&hub->events, hub_event); 1856 spin_lock_init(&hub->irq_urb_lock); 1857 timer_setup(&hub->irq_urb_retry, hub_retry_irq_urb, 0); 1858 usb_get_intf(intf); 1859 usb_get_dev(hdev); 1860 1861 usb_set_intfdata(intf, hub); 1862 intf->needs_remote_wakeup = 1; 1863 pm_suspend_ignore_children(&intf->dev, true); 1864 1865 if (hdev->speed == USB_SPEED_HIGH) 1866 highspeed_hubs++; 1867 1868 if (id->driver_info & HUB_QUIRK_CHECK_PORT_AUTOSUSPEND) 1869 hub->quirk_check_port_auto_suspend = 1; 1870 1871 if (id->driver_info & HUB_QUIRK_DISABLE_AUTOSUSPEND) { 1872 hub->quirk_disable_autosuspend = 1; 1873 usb_autopm_get_interface_no_resume(intf); 1874 } 1875 1876 if (hub_configure(hub, &desc->endpoint[0].desc) >= 0) 1877 return 0; 1878 1879 hub_disconnect(intf); 1880 return -ENODEV; 1881 } 1882 1883 static int 1884 hub_ioctl(struct usb_interface *intf, unsigned int code, void *user_data) 1885 { 1886 struct usb_device *hdev = interface_to_usbdev(intf); 1887 struct usb_hub *hub = usb_hub_to_struct_hub(hdev); 1888 1889 /* assert ifno == 0 (part of hub spec) */ 1890 switch (code) { 1891 case USBDEVFS_HUB_PORTINFO: { 1892 struct usbdevfs_hub_portinfo *info = user_data; 1893 int i; 1894 1895 spin_lock_irq(&device_state_lock); 1896 if (hdev->devnum <= 0) 1897 info->nports = 0; 1898 else { 1899 info->nports = hdev->maxchild; 1900 for (i = 0; i < info->nports; i++) { 1901 if (hub->ports[i]->child == NULL) 1902 info->port[i] = 0; 1903 else 1904 info->port[i] = 1905 hub->ports[i]->child->devnum; 1906 } 1907 } 1908 spin_unlock_irq(&device_state_lock); 1909 1910 return info->nports + 1; 1911 } 1912 1913 default: 1914 return -ENOSYS; 1915 } 1916 } 1917 1918 /* 1919 * Allow user programs to claim ports on a hub. When a device is attached 1920 * to one of these "claimed" ports, the program will "own" the device. 1921 */ 1922 static int find_port_owner(struct usb_device *hdev, unsigned port1, 1923 struct usb_dev_state ***ppowner) 1924 { 1925 struct usb_hub *hub = usb_hub_to_struct_hub(hdev); 1926 1927 if (hdev->state == USB_STATE_NOTATTACHED) 1928 return -ENODEV; 1929 if (port1 == 0 || port1 > hdev->maxchild) 1930 return -EINVAL; 1931 1932 /* Devices not managed by the hub driver 1933 * will always have maxchild equal to 0. 1934 */ 1935 *ppowner = &(hub->ports[port1 - 1]->port_owner); 1936 return 0; 1937 } 1938 1939 /* In the following three functions, the caller must hold hdev's lock */ 1940 int usb_hub_claim_port(struct usb_device *hdev, unsigned port1, 1941 struct usb_dev_state *owner) 1942 { 1943 int rc; 1944 struct usb_dev_state **powner; 1945 1946 rc = find_port_owner(hdev, port1, &powner); 1947 if (rc) 1948 return rc; 1949 if (*powner) 1950 return -EBUSY; 1951 *powner = owner; 1952 return rc; 1953 } 1954 EXPORT_SYMBOL_GPL(usb_hub_claim_port); 1955 1956 int usb_hub_release_port(struct usb_device *hdev, unsigned port1, 1957 struct usb_dev_state *owner) 1958 { 1959 int rc; 1960 struct usb_dev_state **powner; 1961 1962 rc = find_port_owner(hdev, port1, &powner); 1963 if (rc) 1964 return rc; 1965 if (*powner != owner) 1966 return -ENOENT; 1967 *powner = NULL; 1968 return rc; 1969 } 1970 EXPORT_SYMBOL_GPL(usb_hub_release_port); 1971 1972 void usb_hub_release_all_ports(struct usb_device *hdev, struct usb_dev_state *owner) 1973 { 1974 struct usb_hub *hub = usb_hub_to_struct_hub(hdev); 1975 int n; 1976 1977 for (n = 0; n < hdev->maxchild; n++) { 1978 if (hub->ports[n]->port_owner == owner) 1979 hub->ports[n]->port_owner = NULL; 1980 } 1981 1982 } 1983 1984 /* The caller must hold udev's lock */ 1985 bool usb_device_is_owned(struct usb_device *udev) 1986 { 1987 struct usb_hub *hub; 1988 1989 if (udev->state == USB_STATE_NOTATTACHED || !udev->parent) 1990 return false; 1991 hub = usb_hub_to_struct_hub(udev->parent); 1992 return !!hub->ports[udev->portnum - 1]->port_owner; 1993 } 1994 1995 static void recursively_mark_NOTATTACHED(struct usb_device *udev) 1996 { 1997 struct usb_hub *hub = usb_hub_to_struct_hub(udev); 1998 int i; 1999 2000 for (i = 0; i < udev->maxchild; ++i) { 2001 if (hub->ports[i]->child) 2002 recursively_mark_NOTATTACHED(hub->ports[i]->child); 2003 } 2004 if (udev->state == USB_STATE_SUSPENDED) 2005 udev->active_duration -= jiffies; 2006 udev->state = USB_STATE_NOTATTACHED; 2007 } 2008 2009 /** 2010 * usb_set_device_state - change a device's current state (usbcore, hcds) 2011 * @udev: pointer to device whose state should be changed 2012 * @new_state: new state value to be stored 2013 * 2014 * udev->state is _not_ fully protected by the device lock. Although 2015 * most transitions are made only while holding the lock, the state can 2016 * can change to USB_STATE_NOTATTACHED at almost any time. This 2017 * is so that devices can be marked as disconnected as soon as possible, 2018 * without having to wait for any semaphores to be released. As a result, 2019 * all changes to any device's state must be protected by the 2020 * device_state_lock spinlock. 2021 * 2022 * Once a device has been added to the device tree, all changes to its state 2023 * should be made using this routine. The state should _not_ be set directly. 2024 * 2025 * If udev->state is already USB_STATE_NOTATTACHED then no change is made. 2026 * Otherwise udev->state is set to new_state, and if new_state is 2027 * USB_STATE_NOTATTACHED then all of udev's descendants' states are also set 2028 * to USB_STATE_NOTATTACHED. 2029 */ 2030 void usb_set_device_state(struct usb_device *udev, 2031 enum usb_device_state new_state) 2032 { 2033 unsigned long flags; 2034 int wakeup = -1; 2035 2036 spin_lock_irqsave(&device_state_lock, flags); 2037 if (udev->state == USB_STATE_NOTATTACHED) 2038 ; /* do nothing */ 2039 else if (new_state != USB_STATE_NOTATTACHED) { 2040 2041 /* root hub wakeup capabilities are managed out-of-band 2042 * and may involve silicon errata ... ignore them here. 2043 */ 2044 if (udev->parent) { 2045 if (udev->state == USB_STATE_SUSPENDED 2046 || new_state == USB_STATE_SUSPENDED) 2047 ; /* No change to wakeup settings */ 2048 else if (new_state == USB_STATE_CONFIGURED) 2049 wakeup = (udev->quirks & 2050 USB_QUIRK_IGNORE_REMOTE_WAKEUP) ? 0 : 2051 udev->actconfig->desc.bmAttributes & 2052 USB_CONFIG_ATT_WAKEUP; 2053 else 2054 wakeup = 0; 2055 } 2056 if (udev->state == USB_STATE_SUSPENDED && 2057 new_state != USB_STATE_SUSPENDED) 2058 udev->active_duration -= jiffies; 2059 else if (new_state == USB_STATE_SUSPENDED && 2060 udev->state != USB_STATE_SUSPENDED) 2061 udev->active_duration += jiffies; 2062 udev->state = new_state; 2063 } else 2064 recursively_mark_NOTATTACHED(udev); 2065 spin_unlock_irqrestore(&device_state_lock, flags); 2066 if (wakeup >= 0) 2067 device_set_wakeup_capable(&udev->dev, wakeup); 2068 } 2069 EXPORT_SYMBOL_GPL(usb_set_device_state); 2070 2071 /* 2072 * Choose a device number. 2073 * 2074 * Device numbers are used as filenames in usbfs. On USB-1.1 and 2075 * USB-2.0 buses they are also used as device addresses, however on 2076 * USB-3.0 buses the address is assigned by the controller hardware 2077 * and it usually is not the same as the device number. 2078 * 2079 * WUSB devices are simple: they have no hubs behind, so the mapping 2080 * device <-> virtual port number becomes 1:1. Why? to simplify the 2081 * life of the device connection logic in 2082 * drivers/usb/wusbcore/devconnect.c. When we do the initial secret 2083 * handshake we need to assign a temporary address in the unauthorized 2084 * space. For simplicity we use the first virtual port number found to 2085 * be free [drivers/usb/wusbcore/devconnect.c:wusbhc_devconnect_ack()] 2086 * and that becomes it's address [X < 128] or its unauthorized address 2087 * [X | 0x80]. 2088 * 2089 * We add 1 as an offset to the one-based USB-stack port number 2090 * (zero-based wusb virtual port index) for two reasons: (a) dev addr 2091 * 0 is reserved by USB for default address; (b) Linux's USB stack 2092 * uses always #1 for the root hub of the controller. So USB stack's 2093 * port #1, which is wusb virtual-port #0 has address #2. 2094 * 2095 * Devices connected under xHCI are not as simple. The host controller 2096 * supports virtualization, so the hardware assigns device addresses and 2097 * the HCD must setup data structures before issuing a set address 2098 * command to the hardware. 2099 */ 2100 static void choose_devnum(struct usb_device *udev) 2101 { 2102 int devnum; 2103 struct usb_bus *bus = udev->bus; 2104 2105 /* be safe when more hub events are proceed in parallel */ 2106 mutex_lock(&bus->devnum_next_mutex); 2107 if (udev->wusb) { 2108 devnum = udev->portnum + 1; 2109 BUG_ON(test_bit(devnum, bus->devmap.devicemap)); 2110 } else { 2111 /* Try to allocate the next devnum beginning at 2112 * bus->devnum_next. */ 2113 devnum = find_next_zero_bit(bus->devmap.devicemap, 128, 2114 bus->devnum_next); 2115 if (devnum >= 128) 2116 devnum = find_next_zero_bit(bus->devmap.devicemap, 2117 128, 1); 2118 bus->devnum_next = (devnum >= 127 ? 1 : devnum + 1); 2119 } 2120 if (devnum < 128) { 2121 set_bit(devnum, bus->devmap.devicemap); 2122 udev->devnum = devnum; 2123 } 2124 mutex_unlock(&bus->devnum_next_mutex); 2125 } 2126 2127 static void release_devnum(struct usb_device *udev) 2128 { 2129 if (udev->devnum > 0) { 2130 clear_bit(udev->devnum, udev->bus->devmap.devicemap); 2131 udev->devnum = -1; 2132 } 2133 } 2134 2135 static void update_devnum(struct usb_device *udev, int devnum) 2136 { 2137 /* The address for a WUSB device is managed by wusbcore. */ 2138 if (!udev->wusb) 2139 udev->devnum = devnum; 2140 if (!udev->devaddr) 2141 udev->devaddr = (u8)devnum; 2142 } 2143 2144 static void hub_free_dev(struct usb_device *udev) 2145 { 2146 struct usb_hcd *hcd = bus_to_hcd(udev->bus); 2147 2148 /* Root hubs aren't real devices, so don't free HCD resources */ 2149 if (hcd->driver->free_dev && udev->parent) 2150 hcd->driver->free_dev(hcd, udev); 2151 } 2152 2153 static void hub_disconnect_children(struct usb_device *udev) 2154 { 2155 struct usb_hub *hub = usb_hub_to_struct_hub(udev); 2156 int i; 2157 2158 /* Free up all the children before we remove this device */ 2159 for (i = 0; i < udev->maxchild; i++) { 2160 if (hub->ports[i]->child) 2161 usb_disconnect(&hub->ports[i]->child); 2162 } 2163 } 2164 2165 /** 2166 * usb_disconnect - disconnect a device (usbcore-internal) 2167 * @pdev: pointer to device being disconnected 2168 * Context: !in_interrupt () 2169 * 2170 * Something got disconnected. Get rid of it and all of its children. 2171 * 2172 * If *pdev is a normal device then the parent hub must already be locked. 2173 * If *pdev is a root hub then the caller must hold the usb_bus_idr_lock, 2174 * which protects the set of root hubs as well as the list of buses. 2175 * 2176 * Only hub drivers (including virtual root hub drivers for host 2177 * controllers) should ever call this. 2178 * 2179 * This call is synchronous, and may not be used in an interrupt context. 2180 */ 2181 void usb_disconnect(struct usb_device **pdev) 2182 { 2183 struct usb_port *port_dev = NULL; 2184 struct usb_device *udev = *pdev; 2185 struct usb_hub *hub = NULL; 2186 int port1 = 1; 2187 2188 /* mark the device as inactive, so any further urb submissions for 2189 * this device (and any of its children) will fail immediately. 2190 * this quiesces everything except pending urbs. 2191 */ 2192 usb_set_device_state(udev, USB_STATE_NOTATTACHED); 2193 dev_info(&udev->dev, "USB disconnect, device number %d\n", 2194 udev->devnum); 2195 2196 /* 2197 * Ensure that the pm runtime code knows that the USB device 2198 * is in the process of being disconnected. 2199 */ 2200 pm_runtime_barrier(&udev->dev); 2201 2202 usb_lock_device(udev); 2203 2204 hub_disconnect_children(udev); 2205 2206 /* deallocate hcd/hardware state ... nuking all pending urbs and 2207 * cleaning up all state associated with the current configuration 2208 * so that the hardware is now fully quiesced. 2209 */ 2210 dev_dbg(&udev->dev, "unregistering device\n"); 2211 usb_disable_device(udev, 0); 2212 usb_hcd_synchronize_unlinks(udev); 2213 2214 if (udev->parent) { 2215 port1 = udev->portnum; 2216 hub = usb_hub_to_struct_hub(udev->parent); 2217 port_dev = hub->ports[port1 - 1]; 2218 2219 sysfs_remove_link(&udev->dev.kobj, "port"); 2220 sysfs_remove_link(&port_dev->dev.kobj, "device"); 2221 2222 /* 2223 * As usb_port_runtime_resume() de-references udev, make 2224 * sure no resumes occur during removal 2225 */ 2226 if (!test_and_set_bit(port1, hub->child_usage_bits)) 2227 pm_runtime_get_sync(&port_dev->dev); 2228 } 2229 2230 usb_remove_ep_devs(&udev->ep0); 2231 usb_unlock_device(udev); 2232 2233 /* Unregister the device. The device driver is responsible 2234 * for de-configuring the device and invoking the remove-device 2235 * notifier chain (used by usbfs and possibly others). 2236 */ 2237 device_del(&udev->dev); 2238 2239 /* Free the device number and delete the parent's children[] 2240 * (or root_hub) pointer. 2241 */ 2242 release_devnum(udev); 2243 2244 /* Avoid races with recursively_mark_NOTATTACHED() */ 2245 spin_lock_irq(&device_state_lock); 2246 *pdev = NULL; 2247 spin_unlock_irq(&device_state_lock); 2248 2249 if (port_dev && test_and_clear_bit(port1, hub->child_usage_bits)) 2250 pm_runtime_put(&port_dev->dev); 2251 2252 hub_free_dev(udev); 2253 2254 put_device(&udev->dev); 2255 } 2256 2257 #ifdef CONFIG_USB_ANNOUNCE_NEW_DEVICES 2258 static void show_string(struct usb_device *udev, char *id, char *string) 2259 { 2260 if (!string) 2261 return; 2262 dev_info(&udev->dev, "%s: %s\n", id, string); 2263 } 2264 2265 static void announce_device(struct usb_device *udev) 2266 { 2267 u16 bcdDevice = le16_to_cpu(udev->descriptor.bcdDevice); 2268 2269 dev_info(&udev->dev, 2270 "New USB device found, idVendor=%04x, idProduct=%04x, bcdDevice=%2x.%02x\n", 2271 le16_to_cpu(udev->descriptor.idVendor), 2272 le16_to_cpu(udev->descriptor.idProduct), 2273 bcdDevice >> 8, bcdDevice & 0xff); 2274 dev_info(&udev->dev, 2275 "New USB device strings: Mfr=%d, Product=%d, SerialNumber=%d\n", 2276 udev->descriptor.iManufacturer, 2277 udev->descriptor.iProduct, 2278 udev->descriptor.iSerialNumber); 2279 show_string(udev, "Product", udev->product); 2280 show_string(udev, "Manufacturer", udev->manufacturer); 2281 show_string(udev, "SerialNumber", udev->serial); 2282 } 2283 #else 2284 static inline void announce_device(struct usb_device *udev) { } 2285 #endif 2286 2287 2288 /** 2289 * usb_enumerate_device_otg - FIXME (usbcore-internal) 2290 * @udev: newly addressed device (in ADDRESS state) 2291 * 2292 * Finish enumeration for On-The-Go devices 2293 * 2294 * Return: 0 if successful. A negative error code otherwise. 2295 */ 2296 static int usb_enumerate_device_otg(struct usb_device *udev) 2297 { 2298 int err = 0; 2299 2300 #ifdef CONFIG_USB_OTG 2301 /* 2302 * OTG-aware devices on OTG-capable root hubs may be able to use SRP, 2303 * to wake us after we've powered off VBUS; and HNP, switching roles 2304 * "host" to "peripheral". The OTG descriptor helps figure this out. 2305 */ 2306 if (!udev->bus->is_b_host 2307 && udev->config 2308 && udev->parent == udev->bus->root_hub) { 2309 struct usb_otg_descriptor *desc = NULL; 2310 struct usb_bus *bus = udev->bus; 2311 unsigned port1 = udev->portnum; 2312 2313 /* descriptor may appear anywhere in config */ 2314 err = __usb_get_extra_descriptor(udev->rawdescriptors[0], 2315 le16_to_cpu(udev->config[0].desc.wTotalLength), 2316 USB_DT_OTG, (void **) &desc, sizeof(*desc)); 2317 if (err || !(desc->bmAttributes & USB_OTG_HNP)) 2318 return 0; 2319 2320 dev_info(&udev->dev, "Dual-Role OTG device on %sHNP port\n", 2321 (port1 == bus->otg_port) ? "" : "non-"); 2322 2323 /* enable HNP before suspend, it's simpler */ 2324 if (port1 == bus->otg_port) { 2325 bus->b_hnp_enable = 1; 2326 err = usb_control_msg(udev, 2327 usb_sndctrlpipe(udev, 0), 2328 USB_REQ_SET_FEATURE, 0, 2329 USB_DEVICE_B_HNP_ENABLE, 2330 0, NULL, 0, 2331 USB_CTRL_SET_TIMEOUT); 2332 if (err < 0) { 2333 /* 2334 * OTG MESSAGE: report errors here, 2335 * customize to match your product. 2336 */ 2337 dev_err(&udev->dev, "can't set HNP mode: %d\n", 2338 err); 2339 bus->b_hnp_enable = 0; 2340 } 2341 } else if (desc->bLength == sizeof 2342 (struct usb_otg_descriptor)) { 2343 /* Set a_alt_hnp_support for legacy otg device */ 2344 err = usb_control_msg(udev, 2345 usb_sndctrlpipe(udev, 0), 2346 USB_REQ_SET_FEATURE, 0, 2347 USB_DEVICE_A_ALT_HNP_SUPPORT, 2348 0, NULL, 0, 2349 USB_CTRL_SET_TIMEOUT); 2350 if (err < 0) 2351 dev_err(&udev->dev, 2352 "set a_alt_hnp_support failed: %d\n", 2353 err); 2354 } 2355 } 2356 #endif 2357 return err; 2358 } 2359 2360 2361 /** 2362 * usb_enumerate_device - Read device configs/intfs/otg (usbcore-internal) 2363 * @udev: newly addressed device (in ADDRESS state) 2364 * 2365 * This is only called by usb_new_device() and usb_authorize_device() 2366 * and FIXME -- all comments that apply to them apply here wrt to 2367 * environment. 2368 * 2369 * If the device is WUSB and not authorized, we don't attempt to read 2370 * the string descriptors, as they will be errored out by the device 2371 * until it has been authorized. 2372 * 2373 * Return: 0 if successful. A negative error code otherwise. 2374 */ 2375 static int usb_enumerate_device(struct usb_device *udev) 2376 { 2377 int err; 2378 struct usb_hcd *hcd = bus_to_hcd(udev->bus); 2379 2380 if (udev->config == NULL) { 2381 err = usb_get_configuration(udev); 2382 if (err < 0) { 2383 if (err != -ENODEV) 2384 dev_err(&udev->dev, "can't read configurations, error %d\n", 2385 err); 2386 return err; 2387 } 2388 } 2389 2390 /* read the standard strings and cache them if present */ 2391 udev->product = usb_cache_string(udev, udev->descriptor.iProduct); 2392 udev->manufacturer = usb_cache_string(udev, 2393 udev->descriptor.iManufacturer); 2394 udev->serial = usb_cache_string(udev, udev->descriptor.iSerialNumber); 2395 2396 err = usb_enumerate_device_otg(udev); 2397 if (err < 0) 2398 return err; 2399 2400 if (IS_ENABLED(CONFIG_USB_OTG_WHITELIST) && hcd->tpl_support && 2401 !is_targeted(udev)) { 2402 /* Maybe it can talk to us, though we can't talk to it. 2403 * (Includes HNP test device.) 2404 */ 2405 if (IS_ENABLED(CONFIG_USB_OTG) && (udev->bus->b_hnp_enable 2406 || udev->bus->is_b_host)) { 2407 err = usb_port_suspend(udev, PMSG_AUTO_SUSPEND); 2408 if (err < 0) 2409 dev_dbg(&udev->dev, "HNP fail, %d\n", err); 2410 } 2411 return -ENOTSUPP; 2412 } 2413 2414 usb_detect_interface_quirks(udev); 2415 2416 return 0; 2417 } 2418 2419 static void set_usb_port_removable(struct usb_device *udev) 2420 { 2421 struct usb_device *hdev = udev->parent; 2422 struct usb_hub *hub; 2423 u8 port = udev->portnum; 2424 u16 wHubCharacteristics; 2425 bool removable = true; 2426 2427 if (!hdev) 2428 return; 2429 2430 hub = usb_hub_to_struct_hub(udev->parent); 2431 2432 /* 2433 * If the platform firmware has provided information about a port, 2434 * use that to determine whether it's removable. 2435 */ 2436 switch (hub->ports[udev->portnum - 1]->connect_type) { 2437 case USB_PORT_CONNECT_TYPE_HOT_PLUG: 2438 udev->removable = USB_DEVICE_REMOVABLE; 2439 return; 2440 case USB_PORT_CONNECT_TYPE_HARD_WIRED: 2441 case USB_PORT_NOT_USED: 2442 udev->removable = USB_DEVICE_FIXED; 2443 return; 2444 default: 2445 break; 2446 } 2447 2448 /* 2449 * Otherwise, check whether the hub knows whether a port is removable 2450 * or not 2451 */ 2452 wHubCharacteristics = le16_to_cpu(hub->descriptor->wHubCharacteristics); 2453 2454 if (!(wHubCharacteristics & HUB_CHAR_COMPOUND)) 2455 return; 2456 2457 if (hub_is_superspeed(hdev)) { 2458 if (le16_to_cpu(hub->descriptor->u.ss.DeviceRemovable) 2459 & (1 << port)) 2460 removable = false; 2461 } else { 2462 if (hub->descriptor->u.hs.DeviceRemovable[port / 8] & (1 << (port % 8))) 2463 removable = false; 2464 } 2465 2466 if (removable) 2467 udev->removable = USB_DEVICE_REMOVABLE; 2468 else 2469 udev->removable = USB_DEVICE_FIXED; 2470 2471 } 2472 2473 /** 2474 * usb_new_device - perform initial device setup (usbcore-internal) 2475 * @udev: newly addressed device (in ADDRESS state) 2476 * 2477 * This is called with devices which have been detected but not fully 2478 * enumerated. The device descriptor is available, but not descriptors 2479 * for any device configuration. The caller must have locked either 2480 * the parent hub (if udev is a normal device) or else the 2481 * usb_bus_idr_lock (if udev is a root hub). The parent's pointer to 2482 * udev has already been installed, but udev is not yet visible through 2483 * sysfs or other filesystem code. 2484 * 2485 * This call is synchronous, and may not be used in an interrupt context. 2486 * 2487 * Only the hub driver or root-hub registrar should ever call this. 2488 * 2489 * Return: Whether the device is configured properly or not. Zero if the 2490 * interface was registered with the driver core; else a negative errno 2491 * value. 2492 * 2493 */ 2494 int usb_new_device(struct usb_device *udev) 2495 { 2496 int err; 2497 2498 if (udev->parent) { 2499 /* Initialize non-root-hub device wakeup to disabled; 2500 * device (un)configuration controls wakeup capable 2501 * sysfs power/wakeup controls wakeup enabled/disabled 2502 */ 2503 device_init_wakeup(&udev->dev, 0); 2504 } 2505 2506 /* Tell the runtime-PM framework the device is active */ 2507 pm_runtime_set_active(&udev->dev); 2508 pm_runtime_get_noresume(&udev->dev); 2509 pm_runtime_use_autosuspend(&udev->dev); 2510 pm_runtime_enable(&udev->dev); 2511 2512 /* By default, forbid autosuspend for all devices. It will be 2513 * allowed for hubs during binding. 2514 */ 2515 usb_disable_autosuspend(udev); 2516 2517 err = usb_enumerate_device(udev); /* Read descriptors */ 2518 if (err < 0) 2519 goto fail; 2520 dev_dbg(&udev->dev, "udev %d, busnum %d, minor = %d\n", 2521 udev->devnum, udev->bus->busnum, 2522 (((udev->bus->busnum-1) * 128) + (udev->devnum-1))); 2523 /* export the usbdev device-node for libusb */ 2524 udev->dev.devt = MKDEV(USB_DEVICE_MAJOR, 2525 (((udev->bus->busnum-1) * 128) + (udev->devnum-1))); 2526 2527 /* Tell the world! */ 2528 announce_device(udev); 2529 2530 if (udev->serial) 2531 add_device_randomness(udev->serial, strlen(udev->serial)); 2532 if (udev->product) 2533 add_device_randomness(udev->product, strlen(udev->product)); 2534 if (udev->manufacturer) 2535 add_device_randomness(udev->manufacturer, 2536 strlen(udev->manufacturer)); 2537 2538 device_enable_async_suspend(&udev->dev); 2539 2540 /* check whether the hub or firmware marks this port as non-removable */ 2541 if (udev->parent) 2542 set_usb_port_removable(udev); 2543 2544 /* Register the device. The device driver is responsible 2545 * for configuring the device and invoking the add-device 2546 * notifier chain (used by usbfs and possibly others). 2547 */ 2548 err = device_add(&udev->dev); 2549 if (err) { 2550 dev_err(&udev->dev, "can't device_add, error %d\n", err); 2551 goto fail; 2552 } 2553 2554 /* Create link files between child device and usb port device. */ 2555 if (udev->parent) { 2556 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent); 2557 int port1 = udev->portnum; 2558 struct usb_port *port_dev = hub->ports[port1 - 1]; 2559 2560 err = sysfs_create_link(&udev->dev.kobj, 2561 &port_dev->dev.kobj, "port"); 2562 if (err) 2563 goto fail; 2564 2565 err = sysfs_create_link(&port_dev->dev.kobj, 2566 &udev->dev.kobj, "device"); 2567 if (err) { 2568 sysfs_remove_link(&udev->dev.kobj, "port"); 2569 goto fail; 2570 } 2571 2572 if (!test_and_set_bit(port1, hub->child_usage_bits)) 2573 pm_runtime_get_sync(&port_dev->dev); 2574 } 2575 2576 (void) usb_create_ep_devs(&udev->dev, &udev->ep0, udev); 2577 usb_mark_last_busy(udev); 2578 pm_runtime_put_sync_autosuspend(&udev->dev); 2579 return err; 2580 2581 fail: 2582 usb_set_device_state(udev, USB_STATE_NOTATTACHED); 2583 pm_runtime_disable(&udev->dev); 2584 pm_runtime_set_suspended(&udev->dev); 2585 return err; 2586 } 2587 2588 2589 /** 2590 * usb_deauthorize_device - deauthorize a device (usbcore-internal) 2591 * @usb_dev: USB device 2592 * 2593 * Move the USB device to a very basic state where interfaces are disabled 2594 * and the device is in fact unconfigured and unusable. 2595 * 2596 * We share a lock (that we have) with device_del(), so we need to 2597 * defer its call. 2598 * 2599 * Return: 0. 2600 */ 2601 int usb_deauthorize_device(struct usb_device *usb_dev) 2602 { 2603 usb_lock_device(usb_dev); 2604 if (usb_dev->authorized == 0) 2605 goto out_unauthorized; 2606 2607 usb_dev->authorized = 0; 2608 usb_set_configuration(usb_dev, -1); 2609 2610 out_unauthorized: 2611 usb_unlock_device(usb_dev); 2612 return 0; 2613 } 2614 2615 2616 int usb_authorize_device(struct usb_device *usb_dev) 2617 { 2618 int result = 0, c; 2619 2620 usb_lock_device(usb_dev); 2621 if (usb_dev->authorized == 1) 2622 goto out_authorized; 2623 2624 result = usb_autoresume_device(usb_dev); 2625 if (result < 0) { 2626 dev_err(&usb_dev->dev, 2627 "can't autoresume for authorization: %d\n", result); 2628 goto error_autoresume; 2629 } 2630 2631 if (usb_dev->wusb) { 2632 result = usb_get_device_descriptor(usb_dev, sizeof(usb_dev->descriptor)); 2633 if (result < 0) { 2634 dev_err(&usb_dev->dev, "can't re-read device descriptor for " 2635 "authorization: %d\n", result); 2636 goto error_device_descriptor; 2637 } 2638 } 2639 2640 usb_dev->authorized = 1; 2641 /* Choose and set the configuration. This registers the interfaces 2642 * with the driver core and lets interface drivers bind to them. 2643 */ 2644 c = usb_choose_configuration(usb_dev); 2645 if (c >= 0) { 2646 result = usb_set_configuration(usb_dev, c); 2647 if (result) { 2648 dev_err(&usb_dev->dev, 2649 "can't set config #%d, error %d\n", c, result); 2650 /* This need not be fatal. The user can try to 2651 * set other configurations. */ 2652 } 2653 } 2654 dev_info(&usb_dev->dev, "authorized to connect\n"); 2655 2656 error_device_descriptor: 2657 usb_autosuspend_device(usb_dev); 2658 error_autoresume: 2659 out_authorized: 2660 usb_unlock_device(usb_dev); /* complements locktree */ 2661 return result; 2662 } 2663 2664 /* 2665 * Return 1 if port speed is SuperSpeedPlus, 0 otherwise 2666 * check it from the link protocol field of the current speed ID attribute. 2667 * current speed ID is got from ext port status request. Sublink speed attribute 2668 * table is returned with the hub BOS SSP device capability descriptor 2669 */ 2670 static int port_speed_is_ssp(struct usb_device *hdev, int speed_id) 2671 { 2672 int ssa_count; 2673 u32 ss_attr; 2674 int i; 2675 struct usb_ssp_cap_descriptor *ssp_cap = hdev->bos->ssp_cap; 2676 2677 if (!ssp_cap) 2678 return 0; 2679 2680 ssa_count = le32_to_cpu(ssp_cap->bmAttributes) & 2681 USB_SSP_SUBLINK_SPEED_ATTRIBS; 2682 2683 for (i = 0; i <= ssa_count; i++) { 2684 ss_attr = le32_to_cpu(ssp_cap->bmSublinkSpeedAttr[i]); 2685 if (speed_id == (ss_attr & USB_SSP_SUBLINK_SPEED_SSID)) 2686 return !!(ss_attr & USB_SSP_SUBLINK_SPEED_LP); 2687 } 2688 return 0; 2689 } 2690 2691 /* Returns 1 if @hub is a WUSB root hub, 0 otherwise */ 2692 static unsigned hub_is_wusb(struct usb_hub *hub) 2693 { 2694 struct usb_hcd *hcd; 2695 if (hub->hdev->parent != NULL) /* not a root hub? */ 2696 return 0; 2697 hcd = bus_to_hcd(hub->hdev->bus); 2698 return hcd->wireless; 2699 } 2700 2701 2702 #define PORT_RESET_TRIES 5 2703 #define SET_ADDRESS_TRIES 2 2704 #define GET_DESCRIPTOR_TRIES 2 2705 #define SET_CONFIG_TRIES (2 * (use_both_schemes + 1)) 2706 #define USE_NEW_SCHEME(i, scheme) ((i) / 2 == (int)(scheme)) 2707 2708 #define HUB_ROOT_RESET_TIME 60 /* times are in msec */ 2709 #define HUB_SHORT_RESET_TIME 10 2710 #define HUB_BH_RESET_TIME 50 2711 #define HUB_LONG_RESET_TIME 200 2712 #define HUB_RESET_TIMEOUT 800 2713 2714 /* 2715 * "New scheme" enumeration causes an extra state transition to be 2716 * exposed to an xhci host and causes USB3 devices to receive control 2717 * commands in the default state. This has been seen to cause 2718 * enumeration failures, so disable this enumeration scheme for USB3 2719 * devices. 2720 */ 2721 static bool use_new_scheme(struct usb_device *udev, int retry, 2722 struct usb_port *port_dev) 2723 { 2724 int old_scheme_first_port = 2725 port_dev->quirks & USB_PORT_QUIRK_OLD_SCHEME; 2726 int quick_enumeration = (udev->speed == USB_SPEED_HIGH); 2727 2728 if (udev->speed >= USB_SPEED_SUPER) 2729 return false; 2730 2731 return USE_NEW_SCHEME(retry, old_scheme_first_port || old_scheme_first 2732 || quick_enumeration); 2733 } 2734 2735 /* Is a USB 3.0 port in the Inactive or Compliance Mode state? 2736 * Port warm reset is required to recover 2737 */ 2738 static bool hub_port_warm_reset_required(struct usb_hub *hub, int port1, 2739 u16 portstatus) 2740 { 2741 u16 link_state; 2742 2743 if (!hub_is_superspeed(hub->hdev)) 2744 return false; 2745 2746 if (test_bit(port1, hub->warm_reset_bits)) 2747 return true; 2748 2749 link_state = portstatus & USB_PORT_STAT_LINK_STATE; 2750 return link_state == USB_SS_PORT_LS_SS_INACTIVE 2751 || link_state == USB_SS_PORT_LS_COMP_MOD; 2752 } 2753 2754 static int hub_port_wait_reset(struct usb_hub *hub, int port1, 2755 struct usb_device *udev, unsigned int delay, bool warm) 2756 { 2757 int delay_time, ret; 2758 u16 portstatus; 2759 u16 portchange; 2760 u32 ext_portstatus = 0; 2761 2762 for (delay_time = 0; 2763 delay_time < HUB_RESET_TIMEOUT; 2764 delay_time += delay) { 2765 /* wait to give the device a chance to reset */ 2766 msleep(delay); 2767 2768 /* read and decode port status */ 2769 if (hub_is_superspeedplus(hub->hdev)) 2770 ret = hub_ext_port_status(hub, port1, 2771 HUB_EXT_PORT_STATUS, 2772 &portstatus, &portchange, 2773 &ext_portstatus); 2774 else 2775 ret = hub_port_status(hub, port1, &portstatus, 2776 &portchange); 2777 if (ret < 0) 2778 return ret; 2779 2780 /* 2781 * The port state is unknown until the reset completes. 2782 * 2783 * On top of that, some chips may require additional time 2784 * to re-establish a connection after the reset is complete, 2785 * so also wait for the connection to be re-established. 2786 */ 2787 if (!(portstatus & USB_PORT_STAT_RESET) && 2788 (portstatus & USB_PORT_STAT_CONNECTION)) 2789 break; 2790 2791 /* switch to the long delay after two short delay failures */ 2792 if (delay_time >= 2 * HUB_SHORT_RESET_TIME) 2793 delay = HUB_LONG_RESET_TIME; 2794 2795 dev_dbg(&hub->ports[port1 - 1]->dev, 2796 "not %sreset yet, waiting %dms\n", 2797 warm ? "warm " : "", delay); 2798 } 2799 2800 if ((portstatus & USB_PORT_STAT_RESET)) 2801 return -EBUSY; 2802 2803 if (hub_port_warm_reset_required(hub, port1, portstatus)) 2804 return -ENOTCONN; 2805 2806 /* Device went away? */ 2807 if (!(portstatus & USB_PORT_STAT_CONNECTION)) 2808 return -ENOTCONN; 2809 2810 /* Retry if connect change is set but status is still connected. 2811 * A USB 3.0 connection may bounce if multiple warm resets were issued, 2812 * but the device may have successfully re-connected. Ignore it. 2813 */ 2814 if (!hub_is_superspeed(hub->hdev) && 2815 (portchange & USB_PORT_STAT_C_CONNECTION)) { 2816 usb_clear_port_feature(hub->hdev, port1, 2817 USB_PORT_FEAT_C_CONNECTION); 2818 return -EAGAIN; 2819 } 2820 2821 if (!(portstatus & USB_PORT_STAT_ENABLE)) 2822 return -EBUSY; 2823 2824 if (!udev) 2825 return 0; 2826 2827 if (hub_is_superspeedplus(hub->hdev)) { 2828 /* extended portstatus Rx and Tx lane count are zero based */ 2829 udev->rx_lanes = USB_EXT_PORT_RX_LANES(ext_portstatus) + 1; 2830 udev->tx_lanes = USB_EXT_PORT_TX_LANES(ext_portstatus) + 1; 2831 } else { 2832 udev->rx_lanes = 1; 2833 udev->tx_lanes = 1; 2834 } 2835 if (hub_is_wusb(hub)) 2836 udev->speed = USB_SPEED_WIRELESS; 2837 else if (hub_is_superspeedplus(hub->hdev) && 2838 port_speed_is_ssp(hub->hdev, ext_portstatus & 2839 USB_EXT_PORT_STAT_RX_SPEED_ID)) 2840 udev->speed = USB_SPEED_SUPER_PLUS; 2841 else if (hub_is_superspeed(hub->hdev)) 2842 udev->speed = USB_SPEED_SUPER; 2843 else if (portstatus & USB_PORT_STAT_HIGH_SPEED) 2844 udev->speed = USB_SPEED_HIGH; 2845 else if (portstatus & USB_PORT_STAT_LOW_SPEED) 2846 udev->speed = USB_SPEED_LOW; 2847 else 2848 udev->speed = USB_SPEED_FULL; 2849 return 0; 2850 } 2851 2852 /* Handle port reset and port warm(BH) reset (for USB3 protocol ports) */ 2853 static int hub_port_reset(struct usb_hub *hub, int port1, 2854 struct usb_device *udev, unsigned int delay, bool warm) 2855 { 2856 int i, status; 2857 u16 portchange, portstatus; 2858 struct usb_port *port_dev = hub->ports[port1 - 1]; 2859 int reset_recovery_time; 2860 2861 if (!hub_is_superspeed(hub->hdev)) { 2862 if (warm) { 2863 dev_err(hub->intfdev, "only USB3 hub support " 2864 "warm reset\n"); 2865 return -EINVAL; 2866 } 2867 /* Block EHCI CF initialization during the port reset. 2868 * Some companion controllers don't like it when they mix. 2869 */ 2870 down_read(&ehci_cf_port_reset_rwsem); 2871 } else if (!warm) { 2872 /* 2873 * If the caller hasn't explicitly requested a warm reset, 2874 * double check and see if one is needed. 2875 */ 2876 if (hub_port_status(hub, port1, &portstatus, &portchange) == 0) 2877 if (hub_port_warm_reset_required(hub, port1, 2878 portstatus)) 2879 warm = true; 2880 } 2881 clear_bit(port1, hub->warm_reset_bits); 2882 2883 /* Reset the port */ 2884 for (i = 0; i < PORT_RESET_TRIES; i++) { 2885 status = set_port_feature(hub->hdev, port1, (warm ? 2886 USB_PORT_FEAT_BH_PORT_RESET : 2887 USB_PORT_FEAT_RESET)); 2888 if (status == -ENODEV) { 2889 ; /* The hub is gone */ 2890 } else if (status) { 2891 dev_err(&port_dev->dev, 2892 "cannot %sreset (err = %d)\n", 2893 warm ? "warm " : "", status); 2894 } else { 2895 status = hub_port_wait_reset(hub, port1, udev, delay, 2896 warm); 2897 if (status && status != -ENOTCONN && status != -ENODEV) 2898 dev_dbg(hub->intfdev, 2899 "port_wait_reset: err = %d\n", 2900 status); 2901 } 2902 2903 /* Check for disconnect or reset */ 2904 if (status == 0 || status == -ENOTCONN || status == -ENODEV) { 2905 usb_clear_port_feature(hub->hdev, port1, 2906 USB_PORT_FEAT_C_RESET); 2907 2908 if (!hub_is_superspeed(hub->hdev)) 2909 goto done; 2910 2911 usb_clear_port_feature(hub->hdev, port1, 2912 USB_PORT_FEAT_C_BH_PORT_RESET); 2913 usb_clear_port_feature(hub->hdev, port1, 2914 USB_PORT_FEAT_C_PORT_LINK_STATE); 2915 2916 if (udev) 2917 usb_clear_port_feature(hub->hdev, port1, 2918 USB_PORT_FEAT_C_CONNECTION); 2919 2920 /* 2921 * If a USB 3.0 device migrates from reset to an error 2922 * state, re-issue the warm reset. 2923 */ 2924 if (hub_port_status(hub, port1, 2925 &portstatus, &portchange) < 0) 2926 goto done; 2927 2928 if (!hub_port_warm_reset_required(hub, port1, 2929 portstatus)) 2930 goto done; 2931 2932 /* 2933 * If the port is in SS.Inactive or Compliance Mode, the 2934 * hot or warm reset failed. Try another warm reset. 2935 */ 2936 if (!warm) { 2937 dev_dbg(&port_dev->dev, 2938 "hot reset failed, warm reset\n"); 2939 warm = true; 2940 } 2941 } 2942 2943 dev_dbg(&port_dev->dev, 2944 "not enabled, trying %sreset again...\n", 2945 warm ? "warm " : ""); 2946 delay = HUB_LONG_RESET_TIME; 2947 } 2948 2949 dev_err(&port_dev->dev, "Cannot enable. Maybe the USB cable is bad?\n"); 2950 2951 done: 2952 if (status == 0) { 2953 if (port_dev->quirks & USB_PORT_QUIRK_FAST_ENUM) 2954 usleep_range(10000, 12000); 2955 else { 2956 /* TRSTRCY = 10 ms; plus some extra */ 2957 reset_recovery_time = 10 + 40; 2958 2959 /* Hub needs extra delay after resetting its port. */ 2960 if (hub->hdev->quirks & USB_QUIRK_HUB_SLOW_RESET) 2961 reset_recovery_time += 100; 2962 2963 msleep(reset_recovery_time); 2964 } 2965 2966 if (udev) { 2967 struct usb_hcd *hcd = bus_to_hcd(udev->bus); 2968 2969 update_devnum(udev, 0); 2970 /* The xHC may think the device is already reset, 2971 * so ignore the status. 2972 */ 2973 if (hcd->driver->reset_device) 2974 hcd->driver->reset_device(hcd, udev); 2975 2976 usb_set_device_state(udev, USB_STATE_DEFAULT); 2977 } 2978 } else { 2979 if (udev) 2980 usb_set_device_state(udev, USB_STATE_NOTATTACHED); 2981 } 2982 2983 if (!hub_is_superspeed(hub->hdev)) 2984 up_read(&ehci_cf_port_reset_rwsem); 2985 2986 return status; 2987 } 2988 2989 /* Check if a port is power on */ 2990 static int port_is_power_on(struct usb_hub *hub, unsigned portstatus) 2991 { 2992 int ret = 0; 2993 2994 if (hub_is_superspeed(hub->hdev)) { 2995 if (portstatus & USB_SS_PORT_STAT_POWER) 2996 ret = 1; 2997 } else { 2998 if (portstatus & USB_PORT_STAT_POWER) 2999 ret = 1; 3000 } 3001 3002 return ret; 3003 } 3004 3005 static void usb_lock_port(struct usb_port *port_dev) 3006 __acquires(&port_dev->status_lock) 3007 { 3008 mutex_lock(&port_dev->status_lock); 3009 __acquire(&port_dev->status_lock); 3010 } 3011 3012 static void usb_unlock_port(struct usb_port *port_dev) 3013 __releases(&port_dev->status_lock) 3014 { 3015 mutex_unlock(&port_dev->status_lock); 3016 __release(&port_dev->status_lock); 3017 } 3018 3019 #ifdef CONFIG_PM 3020 3021 /* Check if a port is suspended(USB2.0 port) or in U3 state(USB3.0 port) */ 3022 static int port_is_suspended(struct usb_hub *hub, unsigned portstatus) 3023 { 3024 int ret = 0; 3025 3026 if (hub_is_superspeed(hub->hdev)) { 3027 if ((portstatus & USB_PORT_STAT_LINK_STATE) 3028 == USB_SS_PORT_LS_U3) 3029 ret = 1; 3030 } else { 3031 if (portstatus & USB_PORT_STAT_SUSPEND) 3032 ret = 1; 3033 } 3034 3035 return ret; 3036 } 3037 3038 /* Determine whether the device on a port is ready for a normal resume, 3039 * is ready for a reset-resume, or should be disconnected. 3040 */ 3041 static int check_port_resume_type(struct usb_device *udev, 3042 struct usb_hub *hub, int port1, 3043 int status, u16 portchange, u16 portstatus) 3044 { 3045 struct usb_port *port_dev = hub->ports[port1 - 1]; 3046 int retries = 3; 3047 3048 retry: 3049 /* Is a warm reset needed to recover the connection? */ 3050 if (status == 0 && udev->reset_resume 3051 && hub_port_warm_reset_required(hub, port1, portstatus)) { 3052 /* pass */; 3053 } 3054 /* Is the device still present? */ 3055 else if (status || port_is_suspended(hub, portstatus) || 3056 !port_is_power_on(hub, portstatus)) { 3057 if (status >= 0) 3058 status = -ENODEV; 3059 } else if (!(portstatus & USB_PORT_STAT_CONNECTION)) { 3060 if (retries--) { 3061 usleep_range(200, 300); 3062 status = hub_port_status(hub, port1, &portstatus, 3063 &portchange); 3064 goto retry; 3065 } 3066 status = -ENODEV; 3067 } 3068 3069 /* Can't do a normal resume if the port isn't enabled, 3070 * so try a reset-resume instead. 3071 */ 3072 else if (!(portstatus & USB_PORT_STAT_ENABLE) && !udev->reset_resume) { 3073 if (udev->persist_enabled) 3074 udev->reset_resume = 1; 3075 else 3076 status = -ENODEV; 3077 } 3078 3079 if (status) { 3080 dev_dbg(&port_dev->dev, "status %04x.%04x after resume, %d\n", 3081 portchange, portstatus, status); 3082 } else if (udev->reset_resume) { 3083 3084 /* Late port handoff can set status-change bits */ 3085 if (portchange & USB_PORT_STAT_C_CONNECTION) 3086 usb_clear_port_feature(hub->hdev, port1, 3087 USB_PORT_FEAT_C_CONNECTION); 3088 if (portchange & USB_PORT_STAT_C_ENABLE) 3089 usb_clear_port_feature(hub->hdev, port1, 3090 USB_PORT_FEAT_C_ENABLE); 3091 } 3092 3093 return status; 3094 } 3095 3096 int usb_disable_ltm(struct usb_device *udev) 3097 { 3098 struct usb_hcd *hcd = bus_to_hcd(udev->bus); 3099 3100 /* Check if the roothub and device supports LTM. */ 3101 if (!usb_device_supports_ltm(hcd->self.root_hub) || 3102 !usb_device_supports_ltm(udev)) 3103 return 0; 3104 3105 /* Clear Feature LTM Enable can only be sent if the device is 3106 * configured. 3107 */ 3108 if (!udev->actconfig) 3109 return 0; 3110 3111 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 3112 USB_REQ_CLEAR_FEATURE, USB_RECIP_DEVICE, 3113 USB_DEVICE_LTM_ENABLE, 0, NULL, 0, 3114 USB_CTRL_SET_TIMEOUT); 3115 } 3116 EXPORT_SYMBOL_GPL(usb_disable_ltm); 3117 3118 void usb_enable_ltm(struct usb_device *udev) 3119 { 3120 struct usb_hcd *hcd = bus_to_hcd(udev->bus); 3121 3122 /* Check if the roothub and device supports LTM. */ 3123 if (!usb_device_supports_ltm(hcd->self.root_hub) || 3124 !usb_device_supports_ltm(udev)) 3125 return; 3126 3127 /* Set Feature LTM Enable can only be sent if the device is 3128 * configured. 3129 */ 3130 if (!udev->actconfig) 3131 return; 3132 3133 usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 3134 USB_REQ_SET_FEATURE, USB_RECIP_DEVICE, 3135 USB_DEVICE_LTM_ENABLE, 0, NULL, 0, 3136 USB_CTRL_SET_TIMEOUT); 3137 } 3138 EXPORT_SYMBOL_GPL(usb_enable_ltm); 3139 3140 /* 3141 * usb_enable_remote_wakeup - enable remote wakeup for a device 3142 * @udev: target device 3143 * 3144 * For USB-2 devices: Set the device's remote wakeup feature. 3145 * 3146 * For USB-3 devices: Assume there's only one function on the device and 3147 * enable remote wake for the first interface. FIXME if the interface 3148 * association descriptor shows there's more than one function. 3149 */ 3150 static int usb_enable_remote_wakeup(struct usb_device *udev) 3151 { 3152 if (udev->speed < USB_SPEED_SUPER) 3153 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 3154 USB_REQ_SET_FEATURE, USB_RECIP_DEVICE, 3155 USB_DEVICE_REMOTE_WAKEUP, 0, NULL, 0, 3156 USB_CTRL_SET_TIMEOUT); 3157 else 3158 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 3159 USB_REQ_SET_FEATURE, USB_RECIP_INTERFACE, 3160 USB_INTRF_FUNC_SUSPEND, 3161 USB_INTRF_FUNC_SUSPEND_RW | 3162 USB_INTRF_FUNC_SUSPEND_LP, 3163 NULL, 0, USB_CTRL_SET_TIMEOUT); 3164 } 3165 3166 /* 3167 * usb_disable_remote_wakeup - disable remote wakeup for a device 3168 * @udev: target device 3169 * 3170 * For USB-2 devices: Clear the device's remote wakeup feature. 3171 * 3172 * For USB-3 devices: Assume there's only one function on the device and 3173 * disable remote wake for the first interface. FIXME if the interface 3174 * association descriptor shows there's more than one function. 3175 */ 3176 static int usb_disable_remote_wakeup(struct usb_device *udev) 3177 { 3178 if (udev->speed < USB_SPEED_SUPER) 3179 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 3180 USB_REQ_CLEAR_FEATURE, USB_RECIP_DEVICE, 3181 USB_DEVICE_REMOTE_WAKEUP, 0, NULL, 0, 3182 USB_CTRL_SET_TIMEOUT); 3183 else 3184 return usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 3185 USB_REQ_SET_FEATURE, USB_RECIP_INTERFACE, 3186 USB_INTRF_FUNC_SUSPEND, 0, NULL, 0, 3187 USB_CTRL_SET_TIMEOUT); 3188 } 3189 3190 /* Count of wakeup-enabled devices at or below udev */ 3191 unsigned usb_wakeup_enabled_descendants(struct usb_device *udev) 3192 { 3193 struct usb_hub *hub = usb_hub_to_struct_hub(udev); 3194 3195 return udev->do_remote_wakeup + 3196 (hub ? hub->wakeup_enabled_descendants : 0); 3197 } 3198 EXPORT_SYMBOL_GPL(usb_wakeup_enabled_descendants); 3199 3200 /* 3201 * usb_port_suspend - suspend a usb device's upstream port 3202 * @udev: device that's no longer in active use, not a root hub 3203 * Context: must be able to sleep; device not locked; pm locks held 3204 * 3205 * Suspends a USB device that isn't in active use, conserving power. 3206 * Devices may wake out of a suspend, if anything important happens, 3207 * using the remote wakeup mechanism. They may also be taken out of 3208 * suspend by the host, using usb_port_resume(). It's also routine 3209 * to disconnect devices while they are suspended. 3210 * 3211 * This only affects the USB hardware for a device; its interfaces 3212 * (and, for hubs, child devices) must already have been suspended. 3213 * 3214 * Selective port suspend reduces power; most suspended devices draw 3215 * less than 500 uA. It's also used in OTG, along with remote wakeup. 3216 * All devices below the suspended port are also suspended. 3217 * 3218 * Devices leave suspend state when the host wakes them up. Some devices 3219 * also support "remote wakeup", where the device can activate the USB 3220 * tree above them to deliver data, such as a keypress or packet. In 3221 * some cases, this wakes the USB host. 3222 * 3223 * Suspending OTG devices may trigger HNP, if that's been enabled 3224 * between a pair of dual-role devices. That will change roles, such 3225 * as from A-Host to A-Peripheral or from B-Host back to B-Peripheral. 3226 * 3227 * Devices on USB hub ports have only one "suspend" state, corresponding 3228 * to ACPI D2, "may cause the device to lose some context". 3229 * State transitions include: 3230 * 3231 * - suspend, resume ... when the VBUS power link stays live 3232 * - suspend, disconnect ... VBUS lost 3233 * 3234 * Once VBUS drop breaks the circuit, the port it's using has to go through 3235 * normal re-enumeration procedures, starting with enabling VBUS power. 3236 * Other than re-initializing the hub (plug/unplug, except for root hubs), 3237 * Linux (2.6) currently has NO mechanisms to initiate that: no hub_wq 3238 * timer, no SRP, no requests through sysfs. 3239 * 3240 * If Runtime PM isn't enabled or used, non-SuperSpeed devices may not get 3241 * suspended until their bus goes into global suspend (i.e., the root 3242 * hub is suspended). Nevertheless, we change @udev->state to 3243 * USB_STATE_SUSPENDED as this is the device's "logical" state. The actual 3244 * upstream port setting is stored in @udev->port_is_suspended. 3245 * 3246 * Returns 0 on success, else negative errno. 3247 */ 3248 int usb_port_suspend(struct usb_device *udev, pm_message_t msg) 3249 { 3250 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent); 3251 struct usb_port *port_dev = hub->ports[udev->portnum - 1]; 3252 int port1 = udev->portnum; 3253 int status; 3254 bool really_suspend = true; 3255 3256 usb_lock_port(port_dev); 3257 3258 /* enable remote wakeup when appropriate; this lets the device 3259 * wake up the upstream hub (including maybe the root hub). 3260 * 3261 * NOTE: OTG devices may issue remote wakeup (or SRP) even when 3262 * we don't explicitly enable it here. 3263 */ 3264 if (udev->do_remote_wakeup) { 3265 status = usb_enable_remote_wakeup(udev); 3266 if (status) { 3267 dev_dbg(&udev->dev, "won't remote wakeup, status %d\n", 3268 status); 3269 /* bail if autosuspend is requested */ 3270 if (PMSG_IS_AUTO(msg)) 3271 goto err_wakeup; 3272 } 3273 } 3274 3275 /* disable USB2 hardware LPM */ 3276 usb_disable_usb2_hardware_lpm(udev); 3277 3278 if (usb_disable_ltm(udev)) { 3279 dev_err(&udev->dev, "Failed to disable LTM before suspend\n"); 3280 status = -ENOMEM; 3281 if (PMSG_IS_AUTO(msg)) 3282 goto err_ltm; 3283 } 3284 3285 /* see 7.1.7.6 */ 3286 if (hub_is_superspeed(hub->hdev)) 3287 status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U3); 3288 3289 /* 3290 * For system suspend, we do not need to enable the suspend feature 3291 * on individual USB-2 ports. The devices will automatically go 3292 * into suspend a few ms after the root hub stops sending packets. 3293 * The USB 2.0 spec calls this "global suspend". 3294 * 3295 * However, many USB hubs have a bug: They don't relay wakeup requests 3296 * from a downstream port if the port's suspend feature isn't on. 3297 * Therefore we will turn on the suspend feature if udev or any of its 3298 * descendants is enabled for remote wakeup. 3299 */ 3300 else if (PMSG_IS_AUTO(msg) || usb_wakeup_enabled_descendants(udev) > 0) 3301 status = set_port_feature(hub->hdev, port1, 3302 USB_PORT_FEAT_SUSPEND); 3303 else { 3304 really_suspend = false; 3305 status = 0; 3306 } 3307 if (status) { 3308 dev_dbg(&port_dev->dev, "can't suspend, status %d\n", status); 3309 3310 /* Try to enable USB3 LTM again */ 3311 usb_enable_ltm(udev); 3312 err_ltm: 3313 /* Try to enable USB2 hardware LPM again */ 3314 usb_enable_usb2_hardware_lpm(udev); 3315 3316 if (udev->do_remote_wakeup) 3317 (void) usb_disable_remote_wakeup(udev); 3318 err_wakeup: 3319 3320 /* System sleep transitions should never fail */ 3321 if (!PMSG_IS_AUTO(msg)) 3322 status = 0; 3323 } else { 3324 dev_dbg(&udev->dev, "usb %ssuspend, wakeup %d\n", 3325 (PMSG_IS_AUTO(msg) ? "auto-" : ""), 3326 udev->do_remote_wakeup); 3327 if (really_suspend) { 3328 udev->port_is_suspended = 1; 3329 3330 /* device has up to 10 msec to fully suspend */ 3331 msleep(10); 3332 } 3333 usb_set_device_state(udev, USB_STATE_SUSPENDED); 3334 } 3335 3336 if (status == 0 && !udev->do_remote_wakeup && udev->persist_enabled 3337 && test_and_clear_bit(port1, hub->child_usage_bits)) 3338 pm_runtime_put_sync(&port_dev->dev); 3339 3340 usb_mark_last_busy(hub->hdev); 3341 3342 usb_unlock_port(port_dev); 3343 return status; 3344 } 3345 3346 /* 3347 * If the USB "suspend" state is in use (rather than "global suspend"), 3348 * many devices will be individually taken out of suspend state using 3349 * special "resume" signaling. This routine kicks in shortly after 3350 * hardware resume signaling is finished, either because of selective 3351 * resume (by host) or remote wakeup (by device) ... now see what changed 3352 * in the tree that's rooted at this device. 3353 * 3354 * If @udev->reset_resume is set then the device is reset before the 3355 * status check is done. 3356 */ 3357 static int finish_port_resume(struct usb_device *udev) 3358 { 3359 int status = 0; 3360 u16 devstatus = 0; 3361 3362 /* caller owns the udev device lock */ 3363 dev_dbg(&udev->dev, "%s\n", 3364 udev->reset_resume ? "finish reset-resume" : "finish resume"); 3365 3366 /* usb ch9 identifies four variants of SUSPENDED, based on what 3367 * state the device resumes to. Linux currently won't see the 3368 * first two on the host side; they'd be inside hub_port_init() 3369 * during many timeouts, but hub_wq can't suspend until later. 3370 */ 3371 usb_set_device_state(udev, udev->actconfig 3372 ? USB_STATE_CONFIGURED 3373 : USB_STATE_ADDRESS); 3374 3375 /* 10.5.4.5 says not to reset a suspended port if the attached 3376 * device is enabled for remote wakeup. Hence the reset 3377 * operation is carried out here, after the port has been 3378 * resumed. 3379 */ 3380 if (udev->reset_resume) { 3381 /* 3382 * If the device morphs or switches modes when it is reset, 3383 * we don't want to perform a reset-resume. We'll fail the 3384 * resume, which will cause a logical disconnect, and then 3385 * the device will be rediscovered. 3386 */ 3387 retry_reset_resume: 3388 if (udev->quirks & USB_QUIRK_RESET) 3389 status = -ENODEV; 3390 else 3391 status = usb_reset_and_verify_device(udev); 3392 } 3393 3394 /* 10.5.4.5 says be sure devices in the tree are still there. 3395 * For now let's assume the device didn't go crazy on resume, 3396 * and device drivers will know about any resume quirks. 3397 */ 3398 if (status == 0) { 3399 devstatus = 0; 3400 status = usb_get_std_status(udev, USB_RECIP_DEVICE, 0, &devstatus); 3401 3402 /* If a normal resume failed, try doing a reset-resume */ 3403 if (status && !udev->reset_resume && udev->persist_enabled) { 3404 dev_dbg(&udev->dev, "retry with reset-resume\n"); 3405 udev->reset_resume = 1; 3406 goto retry_reset_resume; 3407 } 3408 } 3409 3410 if (status) { 3411 dev_dbg(&udev->dev, "gone after usb resume? status %d\n", 3412 status); 3413 /* 3414 * There are a few quirky devices which violate the standard 3415 * by claiming to have remote wakeup enabled after a reset, 3416 * which crash if the feature is cleared, hence check for 3417 * udev->reset_resume 3418 */ 3419 } else if (udev->actconfig && !udev->reset_resume) { 3420 if (udev->speed < USB_SPEED_SUPER) { 3421 if (devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP)) 3422 status = usb_disable_remote_wakeup(udev); 3423 } else { 3424 status = usb_get_std_status(udev, USB_RECIP_INTERFACE, 0, 3425 &devstatus); 3426 if (!status && devstatus & (USB_INTRF_STAT_FUNC_RW_CAP 3427 | USB_INTRF_STAT_FUNC_RW)) 3428 status = usb_disable_remote_wakeup(udev); 3429 } 3430 3431 if (status) 3432 dev_dbg(&udev->dev, 3433 "disable remote wakeup, status %d\n", 3434 status); 3435 status = 0; 3436 } 3437 return status; 3438 } 3439 3440 /* 3441 * There are some SS USB devices which take longer time for link training. 3442 * XHCI specs 4.19.4 says that when Link training is successful, port 3443 * sets CCS bit to 1. So if SW reads port status before successful link 3444 * training, then it will not find device to be present. 3445 * USB Analyzer log with such buggy devices show that in some cases 3446 * device switch on the RX termination after long delay of host enabling 3447 * the VBUS. In few other cases it has been seen that device fails to 3448 * negotiate link training in first attempt. It has been 3449 * reported till now that few devices take as long as 2000 ms to train 3450 * the link after host enabling its VBUS and termination. Following 3451 * routine implements a 2000 ms timeout for link training. If in a case 3452 * link trains before timeout, loop will exit earlier. 3453 * 3454 * There are also some 2.0 hard drive based devices and 3.0 thumb 3455 * drives that, when plugged into a 2.0 only port, take a long 3456 * time to set CCS after VBUS enable. 3457 * 3458 * FIXME: If a device was connected before suspend, but was removed 3459 * while system was asleep, then the loop in the following routine will 3460 * only exit at timeout. 3461 * 3462 * This routine should only be called when persist is enabled. 3463 */ 3464 static int wait_for_connected(struct usb_device *udev, 3465 struct usb_hub *hub, int *port1, 3466 u16 *portchange, u16 *portstatus) 3467 { 3468 int status = 0, delay_ms = 0; 3469 3470 while (delay_ms < 2000) { 3471 if (status || *portstatus & USB_PORT_STAT_CONNECTION) 3472 break; 3473 if (!port_is_power_on(hub, *portstatus)) { 3474 status = -ENODEV; 3475 break; 3476 } 3477 msleep(20); 3478 delay_ms += 20; 3479 status = hub_port_status(hub, *port1, portstatus, portchange); 3480 } 3481 dev_dbg(&udev->dev, "Waited %dms for CONNECT\n", delay_ms); 3482 return status; 3483 } 3484 3485 /* 3486 * usb_port_resume - re-activate a suspended usb device's upstream port 3487 * @udev: device to re-activate, not a root hub 3488 * Context: must be able to sleep; device not locked; pm locks held 3489 * 3490 * This will re-activate the suspended device, increasing power usage 3491 * while letting drivers communicate again with its endpoints. 3492 * USB resume explicitly guarantees that the power session between 3493 * the host and the device is the same as it was when the device 3494 * suspended. 3495 * 3496 * If @udev->reset_resume is set then this routine won't check that the 3497 * port is still enabled. Furthermore, finish_port_resume() above will 3498 * reset @udev. The end result is that a broken power session can be 3499 * recovered and @udev will appear to persist across a loss of VBUS power. 3500 * 3501 * For example, if a host controller doesn't maintain VBUS suspend current 3502 * during a system sleep or is reset when the system wakes up, all the USB 3503 * power sessions below it will be broken. This is especially troublesome 3504 * for mass-storage devices containing mounted filesystems, since the 3505 * device will appear to have disconnected and all the memory mappings 3506 * to it will be lost. Using the USB_PERSIST facility, the device can be 3507 * made to appear as if it had not disconnected. 3508 * 3509 * This facility can be dangerous. Although usb_reset_and_verify_device() makes 3510 * every effort to insure that the same device is present after the 3511 * reset as before, it cannot provide a 100% guarantee. Furthermore it's 3512 * quite possible for a device to remain unaltered but its media to be 3513 * changed. If the user replaces a flash memory card while the system is 3514 * asleep, he will have only himself to blame when the filesystem on the 3515 * new card is corrupted and the system crashes. 3516 * 3517 * Returns 0 on success, else negative errno. 3518 */ 3519 int usb_port_resume(struct usb_device *udev, pm_message_t msg) 3520 { 3521 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent); 3522 struct usb_port *port_dev = hub->ports[udev->portnum - 1]; 3523 int port1 = udev->portnum; 3524 int status; 3525 u16 portchange, portstatus; 3526 3527 if (!test_and_set_bit(port1, hub->child_usage_bits)) { 3528 status = pm_runtime_get_sync(&port_dev->dev); 3529 if (status < 0) { 3530 dev_dbg(&udev->dev, "can't resume usb port, status %d\n", 3531 status); 3532 return status; 3533 } 3534 } 3535 3536 usb_lock_port(port_dev); 3537 3538 /* Skip the initial Clear-Suspend step for a remote wakeup */ 3539 status = hub_port_status(hub, port1, &portstatus, &portchange); 3540 if (status == 0 && !port_is_suspended(hub, portstatus)) { 3541 if (portchange & USB_PORT_STAT_C_SUSPEND) 3542 pm_wakeup_event(&udev->dev, 0); 3543 goto SuspendCleared; 3544 } 3545 3546 /* see 7.1.7.7; affects power usage, but not budgeting */ 3547 if (hub_is_superspeed(hub->hdev)) 3548 status = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_U0); 3549 else 3550 status = usb_clear_port_feature(hub->hdev, 3551 port1, USB_PORT_FEAT_SUSPEND); 3552 if (status) { 3553 dev_dbg(&port_dev->dev, "can't resume, status %d\n", status); 3554 } else { 3555 /* drive resume for USB_RESUME_TIMEOUT msec */ 3556 dev_dbg(&udev->dev, "usb %sresume\n", 3557 (PMSG_IS_AUTO(msg) ? "auto-" : "")); 3558 msleep(USB_RESUME_TIMEOUT); 3559 3560 /* Virtual root hubs can trigger on GET_PORT_STATUS to 3561 * stop resume signaling. Then finish the resume 3562 * sequence. 3563 */ 3564 status = hub_port_status(hub, port1, &portstatus, &portchange); 3565 3566 /* TRSMRCY = 10 msec */ 3567 msleep(10); 3568 } 3569 3570 SuspendCleared: 3571 if (status == 0) { 3572 udev->port_is_suspended = 0; 3573 if (hub_is_superspeed(hub->hdev)) { 3574 if (portchange & USB_PORT_STAT_C_LINK_STATE) 3575 usb_clear_port_feature(hub->hdev, port1, 3576 USB_PORT_FEAT_C_PORT_LINK_STATE); 3577 } else { 3578 if (portchange & USB_PORT_STAT_C_SUSPEND) 3579 usb_clear_port_feature(hub->hdev, port1, 3580 USB_PORT_FEAT_C_SUSPEND); 3581 } 3582 } 3583 3584 if (udev->persist_enabled) 3585 status = wait_for_connected(udev, hub, &port1, &portchange, 3586 &portstatus); 3587 3588 status = check_port_resume_type(udev, 3589 hub, port1, status, portchange, portstatus); 3590 if (status == 0) 3591 status = finish_port_resume(udev); 3592 if (status < 0) { 3593 dev_dbg(&udev->dev, "can't resume, status %d\n", status); 3594 hub_port_logical_disconnect(hub, port1); 3595 } else { 3596 /* Try to enable USB2 hardware LPM */ 3597 usb_enable_usb2_hardware_lpm(udev); 3598 3599 /* Try to enable USB3 LTM */ 3600 usb_enable_ltm(udev); 3601 } 3602 3603 usb_unlock_port(port_dev); 3604 3605 return status; 3606 } 3607 3608 int usb_remote_wakeup(struct usb_device *udev) 3609 { 3610 int status = 0; 3611 3612 usb_lock_device(udev); 3613 if (udev->state == USB_STATE_SUSPENDED) { 3614 dev_dbg(&udev->dev, "usb %sresume\n", "wakeup-"); 3615 status = usb_autoresume_device(udev); 3616 if (status == 0) { 3617 /* Let the drivers do their thing, then... */ 3618 usb_autosuspend_device(udev); 3619 } 3620 } 3621 usb_unlock_device(udev); 3622 return status; 3623 } 3624 3625 /* Returns 1 if there was a remote wakeup and a connect status change. */ 3626 static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port, 3627 u16 portstatus, u16 portchange) 3628 __must_hold(&port_dev->status_lock) 3629 { 3630 struct usb_port *port_dev = hub->ports[port - 1]; 3631 struct usb_device *hdev; 3632 struct usb_device *udev; 3633 int connect_change = 0; 3634 u16 link_state; 3635 int ret; 3636 3637 hdev = hub->hdev; 3638 udev = port_dev->child; 3639 if (!hub_is_superspeed(hdev)) { 3640 if (!(portchange & USB_PORT_STAT_C_SUSPEND)) 3641 return 0; 3642 usb_clear_port_feature(hdev, port, USB_PORT_FEAT_C_SUSPEND); 3643 } else { 3644 link_state = portstatus & USB_PORT_STAT_LINK_STATE; 3645 if (!udev || udev->state != USB_STATE_SUSPENDED || 3646 (link_state != USB_SS_PORT_LS_U0 && 3647 link_state != USB_SS_PORT_LS_U1 && 3648 link_state != USB_SS_PORT_LS_U2)) 3649 return 0; 3650 } 3651 3652 if (udev) { 3653 /* TRSMRCY = 10 msec */ 3654 msleep(10); 3655 3656 usb_unlock_port(port_dev); 3657 ret = usb_remote_wakeup(udev); 3658 usb_lock_port(port_dev); 3659 if (ret < 0) 3660 connect_change = 1; 3661 } else { 3662 ret = -ENODEV; 3663 hub_port_disable(hub, port, 1); 3664 } 3665 dev_dbg(&port_dev->dev, "resume, status %d\n", ret); 3666 return connect_change; 3667 } 3668 3669 static int check_ports_changed(struct usb_hub *hub) 3670 { 3671 int port1; 3672 3673 for (port1 = 1; port1 <= hub->hdev->maxchild; ++port1) { 3674 u16 portstatus, portchange; 3675 int status; 3676 3677 status = hub_port_status(hub, port1, &portstatus, &portchange); 3678 if (!status && portchange) 3679 return 1; 3680 } 3681 return 0; 3682 } 3683 3684 static int hub_suspend(struct usb_interface *intf, pm_message_t msg) 3685 { 3686 struct usb_hub *hub = usb_get_intfdata(intf); 3687 struct usb_device *hdev = hub->hdev; 3688 unsigned port1; 3689 3690 /* 3691 * Warn if children aren't already suspended. 3692 * Also, add up the number of wakeup-enabled descendants. 3693 */ 3694 hub->wakeup_enabled_descendants = 0; 3695 for (port1 = 1; port1 <= hdev->maxchild; port1++) { 3696 struct usb_port *port_dev = hub->ports[port1 - 1]; 3697 struct usb_device *udev = port_dev->child; 3698 3699 if (udev && udev->can_submit) { 3700 dev_warn(&port_dev->dev, "device %s not suspended yet\n", 3701 dev_name(&udev->dev)); 3702 if (PMSG_IS_AUTO(msg)) 3703 return -EBUSY; 3704 } 3705 if (udev) 3706 hub->wakeup_enabled_descendants += 3707 usb_wakeup_enabled_descendants(udev); 3708 } 3709 3710 if (hdev->do_remote_wakeup && hub->quirk_check_port_auto_suspend) { 3711 /* check if there are changes pending on hub ports */ 3712 if (check_ports_changed(hub)) { 3713 if (PMSG_IS_AUTO(msg)) 3714 return -EBUSY; 3715 pm_wakeup_event(&hdev->dev, 2000); 3716 } 3717 } 3718 3719 if (hub_is_superspeed(hdev) && hdev->do_remote_wakeup) { 3720 /* Enable hub to send remote wakeup for all ports. */ 3721 for (port1 = 1; port1 <= hdev->maxchild; port1++) { 3722 set_port_feature(hdev, 3723 port1 | 3724 USB_PORT_FEAT_REMOTE_WAKE_CONNECT | 3725 USB_PORT_FEAT_REMOTE_WAKE_DISCONNECT | 3726 USB_PORT_FEAT_REMOTE_WAKE_OVER_CURRENT, 3727 USB_PORT_FEAT_REMOTE_WAKE_MASK); 3728 } 3729 } 3730 3731 dev_dbg(&intf->dev, "%s\n", __func__); 3732 3733 /* stop hub_wq and related activity */ 3734 hub_quiesce(hub, HUB_SUSPEND); 3735 return 0; 3736 } 3737 3738 /* Report wakeup requests from the ports of a resuming root hub */ 3739 static void report_wakeup_requests(struct usb_hub *hub) 3740 { 3741 struct usb_device *hdev = hub->hdev; 3742 struct usb_device *udev; 3743 struct usb_hcd *hcd; 3744 unsigned long resuming_ports; 3745 int i; 3746 3747 if (hdev->parent) 3748 return; /* Not a root hub */ 3749 3750 hcd = bus_to_hcd(hdev->bus); 3751 if (hcd->driver->get_resuming_ports) { 3752 3753 /* 3754 * The get_resuming_ports() method returns a bitmap (origin 0) 3755 * of ports which have started wakeup signaling but have not 3756 * yet finished resuming. During system resume we will 3757 * resume all the enabled ports, regardless of any wakeup 3758 * signals, which means the wakeup requests would be lost. 3759 * To prevent this, report them to the PM core here. 3760 */ 3761 resuming_ports = hcd->driver->get_resuming_ports(hcd); 3762 for (i = 0; i < hdev->maxchild; ++i) { 3763 if (test_bit(i, &resuming_ports)) { 3764 udev = hub->ports[i]->child; 3765 if (udev) 3766 pm_wakeup_event(&udev->dev, 0); 3767 } 3768 } 3769 } 3770 } 3771 3772 static int hub_resume(struct usb_interface *intf) 3773 { 3774 struct usb_hub *hub = usb_get_intfdata(intf); 3775 3776 dev_dbg(&intf->dev, "%s\n", __func__); 3777 hub_activate(hub, HUB_RESUME); 3778 3779 /* 3780 * This should be called only for system resume, not runtime resume. 3781 * We can't tell the difference here, so some wakeup requests will be 3782 * reported at the wrong time or more than once. This shouldn't 3783 * matter much, so long as they do get reported. 3784 */ 3785 report_wakeup_requests(hub); 3786 return 0; 3787 } 3788 3789 static int hub_reset_resume(struct usb_interface *intf) 3790 { 3791 struct usb_hub *hub = usb_get_intfdata(intf); 3792 3793 dev_dbg(&intf->dev, "%s\n", __func__); 3794 hub_activate(hub, HUB_RESET_RESUME); 3795 return 0; 3796 } 3797 3798 /** 3799 * usb_root_hub_lost_power - called by HCD if the root hub lost Vbus power 3800 * @rhdev: struct usb_device for the root hub 3801 * 3802 * The USB host controller driver calls this function when its root hub 3803 * is resumed and Vbus power has been interrupted or the controller 3804 * has been reset. The routine marks @rhdev as having lost power. 3805 * When the hub driver is resumed it will take notice and carry out 3806 * power-session recovery for all the "USB-PERSIST"-enabled child devices; 3807 * the others will be disconnected. 3808 */ 3809 void usb_root_hub_lost_power(struct usb_device *rhdev) 3810 { 3811 dev_notice(&rhdev->dev, "root hub lost power or was reset\n"); 3812 rhdev->reset_resume = 1; 3813 } 3814 EXPORT_SYMBOL_GPL(usb_root_hub_lost_power); 3815 3816 static const char * const usb3_lpm_names[] = { 3817 "U0", 3818 "U1", 3819 "U2", 3820 "U3", 3821 }; 3822 3823 /* 3824 * Send a Set SEL control transfer to the device, prior to enabling 3825 * device-initiated U1 or U2. This lets the device know the exit latencies from 3826 * the time the device initiates a U1 or U2 exit, to the time it will receive a 3827 * packet from the host. 3828 * 3829 * This function will fail if the SEL or PEL values for udev are greater than 3830 * the maximum allowed values for the link state to be enabled. 3831 */ 3832 static int usb_req_set_sel(struct usb_device *udev, enum usb3_link_state state) 3833 { 3834 struct usb_set_sel_req *sel_values; 3835 unsigned long long u1_sel; 3836 unsigned long long u1_pel; 3837 unsigned long long u2_sel; 3838 unsigned long long u2_pel; 3839 int ret; 3840 3841 if (udev->state != USB_STATE_CONFIGURED) 3842 return 0; 3843 3844 /* Convert SEL and PEL stored in ns to us */ 3845 u1_sel = DIV_ROUND_UP(udev->u1_params.sel, 1000); 3846 u1_pel = DIV_ROUND_UP(udev->u1_params.pel, 1000); 3847 u2_sel = DIV_ROUND_UP(udev->u2_params.sel, 1000); 3848 u2_pel = DIV_ROUND_UP(udev->u2_params.pel, 1000); 3849 3850 /* 3851 * Make sure that the calculated SEL and PEL values for the link 3852 * state we're enabling aren't bigger than the max SEL/PEL 3853 * value that will fit in the SET SEL control transfer. 3854 * Otherwise the device would get an incorrect idea of the exit 3855 * latency for the link state, and could start a device-initiated 3856 * U1/U2 when the exit latencies are too high. 3857 */ 3858 if ((state == USB3_LPM_U1 && 3859 (u1_sel > USB3_LPM_MAX_U1_SEL_PEL || 3860 u1_pel > USB3_LPM_MAX_U1_SEL_PEL)) || 3861 (state == USB3_LPM_U2 && 3862 (u2_sel > USB3_LPM_MAX_U2_SEL_PEL || 3863 u2_pel > USB3_LPM_MAX_U2_SEL_PEL))) { 3864 dev_dbg(&udev->dev, "Device-initiated %s disabled due to long SEL %llu us or PEL %llu us\n", 3865 usb3_lpm_names[state], u1_sel, u1_pel); 3866 return -EINVAL; 3867 } 3868 3869 /* 3870 * If we're enabling device-initiated LPM for one link state, 3871 * but the other link state has a too high SEL or PEL value, 3872 * just set those values to the max in the Set SEL request. 3873 */ 3874 if (u1_sel > USB3_LPM_MAX_U1_SEL_PEL) 3875 u1_sel = USB3_LPM_MAX_U1_SEL_PEL; 3876 3877 if (u1_pel > USB3_LPM_MAX_U1_SEL_PEL) 3878 u1_pel = USB3_LPM_MAX_U1_SEL_PEL; 3879 3880 if (u2_sel > USB3_LPM_MAX_U2_SEL_PEL) 3881 u2_sel = USB3_LPM_MAX_U2_SEL_PEL; 3882 3883 if (u2_pel > USB3_LPM_MAX_U2_SEL_PEL) 3884 u2_pel = USB3_LPM_MAX_U2_SEL_PEL; 3885 3886 /* 3887 * usb_enable_lpm() can be called as part of a failed device reset, 3888 * which may be initiated by an error path of a mass storage driver. 3889 * Therefore, use GFP_NOIO. 3890 */ 3891 sel_values = kmalloc(sizeof *(sel_values), GFP_NOIO); 3892 if (!sel_values) 3893 return -ENOMEM; 3894 3895 sel_values->u1_sel = u1_sel; 3896 sel_values->u1_pel = u1_pel; 3897 sel_values->u2_sel = cpu_to_le16(u2_sel); 3898 sel_values->u2_pel = cpu_to_le16(u2_pel); 3899 3900 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 3901 USB_REQ_SET_SEL, 3902 USB_RECIP_DEVICE, 3903 0, 0, 3904 sel_values, sizeof *(sel_values), 3905 USB_CTRL_SET_TIMEOUT); 3906 kfree(sel_values); 3907 return ret; 3908 } 3909 3910 /* 3911 * Enable or disable device-initiated U1 or U2 transitions. 3912 */ 3913 static int usb_set_device_initiated_lpm(struct usb_device *udev, 3914 enum usb3_link_state state, bool enable) 3915 { 3916 int ret; 3917 int feature; 3918 3919 switch (state) { 3920 case USB3_LPM_U1: 3921 feature = USB_DEVICE_U1_ENABLE; 3922 break; 3923 case USB3_LPM_U2: 3924 feature = USB_DEVICE_U2_ENABLE; 3925 break; 3926 default: 3927 dev_warn(&udev->dev, "%s: Can't %s non-U1 or U2 state.\n", 3928 __func__, enable ? "enable" : "disable"); 3929 return -EINVAL; 3930 } 3931 3932 if (udev->state != USB_STATE_CONFIGURED) { 3933 dev_dbg(&udev->dev, "%s: Can't %s %s state " 3934 "for unconfigured device.\n", 3935 __func__, enable ? "enable" : "disable", 3936 usb3_lpm_names[state]); 3937 return 0; 3938 } 3939 3940 if (enable) { 3941 /* 3942 * Now send the control transfer to enable device-initiated LPM 3943 * for either U1 or U2. 3944 */ 3945 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 3946 USB_REQ_SET_FEATURE, 3947 USB_RECIP_DEVICE, 3948 feature, 3949 0, NULL, 0, 3950 USB_CTRL_SET_TIMEOUT); 3951 } else { 3952 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 3953 USB_REQ_CLEAR_FEATURE, 3954 USB_RECIP_DEVICE, 3955 feature, 3956 0, NULL, 0, 3957 USB_CTRL_SET_TIMEOUT); 3958 } 3959 if (ret < 0) { 3960 dev_warn(&udev->dev, "%s of device-initiated %s failed.\n", 3961 enable ? "Enable" : "Disable", 3962 usb3_lpm_names[state]); 3963 return -EBUSY; 3964 } 3965 return 0; 3966 } 3967 3968 static int usb_set_lpm_timeout(struct usb_device *udev, 3969 enum usb3_link_state state, int timeout) 3970 { 3971 int ret; 3972 int feature; 3973 3974 switch (state) { 3975 case USB3_LPM_U1: 3976 feature = USB_PORT_FEAT_U1_TIMEOUT; 3977 break; 3978 case USB3_LPM_U2: 3979 feature = USB_PORT_FEAT_U2_TIMEOUT; 3980 break; 3981 default: 3982 dev_warn(&udev->dev, "%s: Can't set timeout for non-U1 or U2 state.\n", 3983 __func__); 3984 return -EINVAL; 3985 } 3986 3987 if (state == USB3_LPM_U1 && timeout > USB3_LPM_U1_MAX_TIMEOUT && 3988 timeout != USB3_LPM_DEVICE_INITIATED) { 3989 dev_warn(&udev->dev, "Failed to set %s timeout to 0x%x, " 3990 "which is a reserved value.\n", 3991 usb3_lpm_names[state], timeout); 3992 return -EINVAL; 3993 } 3994 3995 ret = set_port_feature(udev->parent, 3996 USB_PORT_LPM_TIMEOUT(timeout) | udev->portnum, 3997 feature); 3998 if (ret < 0) { 3999 dev_warn(&udev->dev, "Failed to set %s timeout to 0x%x," 4000 "error code %i\n", usb3_lpm_names[state], 4001 timeout, ret); 4002 return -EBUSY; 4003 } 4004 if (state == USB3_LPM_U1) 4005 udev->u1_params.timeout = timeout; 4006 else 4007 udev->u2_params.timeout = timeout; 4008 return 0; 4009 } 4010 4011 /* 4012 * Enable the hub-initiated U1/U2 idle timeouts, and enable device-initiated 4013 * U1/U2 entry. 4014 * 4015 * We will attempt to enable U1 or U2, but there are no guarantees that the 4016 * control transfers to set the hub timeout or enable device-initiated U1/U2 4017 * will be successful. 4018 * 4019 * If the control transfer to enable device-initiated U1/U2 entry fails, then 4020 * hub-initiated U1/U2 will be disabled. 4021 * 4022 * If we cannot set the parent hub U1/U2 timeout, we attempt to let the xHCI 4023 * driver know about it. If that call fails, it should be harmless, and just 4024 * take up more slightly more bus bandwidth for unnecessary U1/U2 exit latency. 4025 */ 4026 static void usb_enable_link_state(struct usb_hcd *hcd, struct usb_device *udev, 4027 enum usb3_link_state state) 4028 { 4029 int timeout, ret; 4030 __u8 u1_mel = udev->bos->ss_cap->bU1devExitLat; 4031 __le16 u2_mel = udev->bos->ss_cap->bU2DevExitLat; 4032 4033 /* If the device says it doesn't have *any* exit latency to come out of 4034 * U1 or U2, it's probably lying. Assume it doesn't implement that link 4035 * state. 4036 */ 4037 if ((state == USB3_LPM_U1 && u1_mel == 0) || 4038 (state == USB3_LPM_U2 && u2_mel == 0)) 4039 return; 4040 4041 /* 4042 * First, let the device know about the exit latencies 4043 * associated with the link state we're about to enable. 4044 */ 4045 ret = usb_req_set_sel(udev, state); 4046 if (ret < 0) { 4047 dev_warn(&udev->dev, "Set SEL for device-initiated %s failed.\n", 4048 usb3_lpm_names[state]); 4049 return; 4050 } 4051 4052 /* We allow the host controller to set the U1/U2 timeout internally 4053 * first, so that it can change its schedule to account for the 4054 * additional latency to send data to a device in a lower power 4055 * link state. 4056 */ 4057 timeout = hcd->driver->enable_usb3_lpm_timeout(hcd, udev, state); 4058 4059 /* xHCI host controller doesn't want to enable this LPM state. */ 4060 if (timeout == 0) 4061 return; 4062 4063 if (timeout < 0) { 4064 dev_warn(&udev->dev, "Could not enable %s link state, " 4065 "xHCI error %i.\n", usb3_lpm_names[state], 4066 timeout); 4067 return; 4068 } 4069 4070 if (usb_set_lpm_timeout(udev, state, timeout)) { 4071 /* If we can't set the parent hub U1/U2 timeout, 4072 * device-initiated LPM won't be allowed either, so let the xHCI 4073 * host know that this link state won't be enabled. 4074 */ 4075 hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state); 4076 return; 4077 } 4078 4079 /* Only a configured device will accept the Set Feature 4080 * U1/U2_ENABLE 4081 */ 4082 if (udev->actconfig && 4083 usb_set_device_initiated_lpm(udev, state, true) == 0) { 4084 if (state == USB3_LPM_U1) 4085 udev->usb3_lpm_u1_enabled = 1; 4086 else if (state == USB3_LPM_U2) 4087 udev->usb3_lpm_u2_enabled = 1; 4088 } else { 4089 /* Don't request U1/U2 entry if the device 4090 * cannot transition to U1/U2. 4091 */ 4092 usb_set_lpm_timeout(udev, state, 0); 4093 hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state); 4094 } 4095 } 4096 4097 /* 4098 * Disable the hub-initiated U1/U2 idle timeouts, and disable device-initiated 4099 * U1/U2 entry. 4100 * 4101 * If this function returns -EBUSY, the parent hub will still allow U1/U2 entry. 4102 * If zero is returned, the parent will not allow the link to go into U1/U2. 4103 * 4104 * If zero is returned, device-initiated U1/U2 entry may still be enabled, but 4105 * it won't have an effect on the bus link state because the parent hub will 4106 * still disallow device-initiated U1/U2 entry. 4107 * 4108 * If zero is returned, the xHCI host controller may still think U1/U2 entry is 4109 * possible. The result will be slightly more bus bandwidth will be taken up 4110 * (to account for U1/U2 exit latency), but it should be harmless. 4111 */ 4112 static int usb_disable_link_state(struct usb_hcd *hcd, struct usb_device *udev, 4113 enum usb3_link_state state) 4114 { 4115 switch (state) { 4116 case USB3_LPM_U1: 4117 case USB3_LPM_U2: 4118 break; 4119 default: 4120 dev_warn(&udev->dev, "%s: Can't disable non-U1 or U2 state.\n", 4121 __func__); 4122 return -EINVAL; 4123 } 4124 4125 if (usb_set_lpm_timeout(udev, state, 0)) 4126 return -EBUSY; 4127 4128 usb_set_device_initiated_lpm(udev, state, false); 4129 4130 if (hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state)) 4131 dev_warn(&udev->dev, "Could not disable xHCI %s timeout, " 4132 "bus schedule bandwidth may be impacted.\n", 4133 usb3_lpm_names[state]); 4134 4135 /* As soon as usb_set_lpm_timeout(0) return 0, hub initiated LPM 4136 * is disabled. Hub will disallows link to enter U1/U2 as well, 4137 * even device is initiating LPM. Hence LPM is disabled if hub LPM 4138 * timeout set to 0, no matter device-initiated LPM is disabled or 4139 * not. 4140 */ 4141 if (state == USB3_LPM_U1) 4142 udev->usb3_lpm_u1_enabled = 0; 4143 else if (state == USB3_LPM_U2) 4144 udev->usb3_lpm_u2_enabled = 0; 4145 4146 return 0; 4147 } 4148 4149 /* 4150 * Disable hub-initiated and device-initiated U1 and U2 entry. 4151 * Caller must own the bandwidth_mutex. 4152 * 4153 * This will call usb_enable_lpm() on failure, which will decrement 4154 * lpm_disable_count, and will re-enable LPM if lpm_disable_count reaches zero. 4155 */ 4156 int usb_disable_lpm(struct usb_device *udev) 4157 { 4158 struct usb_hcd *hcd; 4159 4160 if (!udev || !udev->parent || 4161 udev->speed < USB_SPEED_SUPER || 4162 !udev->lpm_capable || 4163 udev->state < USB_STATE_CONFIGURED) 4164 return 0; 4165 4166 hcd = bus_to_hcd(udev->bus); 4167 if (!hcd || !hcd->driver->disable_usb3_lpm_timeout) 4168 return 0; 4169 4170 udev->lpm_disable_count++; 4171 if ((udev->u1_params.timeout == 0 && udev->u2_params.timeout == 0)) 4172 return 0; 4173 4174 /* If LPM is enabled, attempt to disable it. */ 4175 if (usb_disable_link_state(hcd, udev, USB3_LPM_U1)) 4176 goto enable_lpm; 4177 if (usb_disable_link_state(hcd, udev, USB3_LPM_U2)) 4178 goto enable_lpm; 4179 4180 return 0; 4181 4182 enable_lpm: 4183 usb_enable_lpm(udev); 4184 return -EBUSY; 4185 } 4186 EXPORT_SYMBOL_GPL(usb_disable_lpm); 4187 4188 /* Grab the bandwidth_mutex before calling usb_disable_lpm() */ 4189 int usb_unlocked_disable_lpm(struct usb_device *udev) 4190 { 4191 struct usb_hcd *hcd = bus_to_hcd(udev->bus); 4192 int ret; 4193 4194 if (!hcd) 4195 return -EINVAL; 4196 4197 mutex_lock(hcd->bandwidth_mutex); 4198 ret = usb_disable_lpm(udev); 4199 mutex_unlock(hcd->bandwidth_mutex); 4200 4201 return ret; 4202 } 4203 EXPORT_SYMBOL_GPL(usb_unlocked_disable_lpm); 4204 4205 /* 4206 * Attempt to enable device-initiated and hub-initiated U1 and U2 entry. The 4207 * xHCI host policy may prevent U1 or U2 from being enabled. 4208 * 4209 * Other callers may have disabled link PM, so U1 and U2 entry will be disabled 4210 * until the lpm_disable_count drops to zero. Caller must own the 4211 * bandwidth_mutex. 4212 */ 4213 void usb_enable_lpm(struct usb_device *udev) 4214 { 4215 struct usb_hcd *hcd; 4216 struct usb_hub *hub; 4217 struct usb_port *port_dev; 4218 4219 if (!udev || !udev->parent || 4220 udev->speed < USB_SPEED_SUPER || 4221 !udev->lpm_capable || 4222 udev->state < USB_STATE_CONFIGURED) 4223 return; 4224 4225 udev->lpm_disable_count--; 4226 hcd = bus_to_hcd(udev->bus); 4227 /* Double check that we can both enable and disable LPM. 4228 * Device must be configured to accept set feature U1/U2 timeout. 4229 */ 4230 if (!hcd || !hcd->driver->enable_usb3_lpm_timeout || 4231 !hcd->driver->disable_usb3_lpm_timeout) 4232 return; 4233 4234 if (udev->lpm_disable_count > 0) 4235 return; 4236 4237 hub = usb_hub_to_struct_hub(udev->parent); 4238 if (!hub) 4239 return; 4240 4241 port_dev = hub->ports[udev->portnum - 1]; 4242 4243 if (port_dev->usb3_lpm_u1_permit) 4244 usb_enable_link_state(hcd, udev, USB3_LPM_U1); 4245 4246 if (port_dev->usb3_lpm_u2_permit) 4247 usb_enable_link_state(hcd, udev, USB3_LPM_U2); 4248 } 4249 EXPORT_SYMBOL_GPL(usb_enable_lpm); 4250 4251 /* Grab the bandwidth_mutex before calling usb_enable_lpm() */ 4252 void usb_unlocked_enable_lpm(struct usb_device *udev) 4253 { 4254 struct usb_hcd *hcd = bus_to_hcd(udev->bus); 4255 4256 if (!hcd) 4257 return; 4258 4259 mutex_lock(hcd->bandwidth_mutex); 4260 usb_enable_lpm(udev); 4261 mutex_unlock(hcd->bandwidth_mutex); 4262 } 4263 EXPORT_SYMBOL_GPL(usb_unlocked_enable_lpm); 4264 4265 /* usb3 devices use U3 for disabled, make sure remote wakeup is disabled */ 4266 static void hub_usb3_port_prepare_disable(struct usb_hub *hub, 4267 struct usb_port *port_dev) 4268 { 4269 struct usb_device *udev = port_dev->child; 4270 int ret; 4271 4272 if (udev && udev->port_is_suspended && udev->do_remote_wakeup) { 4273 ret = hub_set_port_link_state(hub, port_dev->portnum, 4274 USB_SS_PORT_LS_U0); 4275 if (!ret) { 4276 msleep(USB_RESUME_TIMEOUT); 4277 ret = usb_disable_remote_wakeup(udev); 4278 } 4279 if (ret) 4280 dev_warn(&udev->dev, 4281 "Port disable: can't disable remote wake\n"); 4282 udev->do_remote_wakeup = 0; 4283 } 4284 } 4285 4286 #else /* CONFIG_PM */ 4287 4288 #define hub_suspend NULL 4289 #define hub_resume NULL 4290 #define hub_reset_resume NULL 4291 4292 static inline void hub_usb3_port_prepare_disable(struct usb_hub *hub, 4293 struct usb_port *port_dev) { } 4294 4295 int usb_disable_lpm(struct usb_device *udev) 4296 { 4297 return 0; 4298 } 4299 EXPORT_SYMBOL_GPL(usb_disable_lpm); 4300 4301 void usb_enable_lpm(struct usb_device *udev) { } 4302 EXPORT_SYMBOL_GPL(usb_enable_lpm); 4303 4304 int usb_unlocked_disable_lpm(struct usb_device *udev) 4305 { 4306 return 0; 4307 } 4308 EXPORT_SYMBOL_GPL(usb_unlocked_disable_lpm); 4309 4310 void usb_unlocked_enable_lpm(struct usb_device *udev) { } 4311 EXPORT_SYMBOL_GPL(usb_unlocked_enable_lpm); 4312 4313 int usb_disable_ltm(struct usb_device *udev) 4314 { 4315 return 0; 4316 } 4317 EXPORT_SYMBOL_GPL(usb_disable_ltm); 4318 4319 void usb_enable_ltm(struct usb_device *udev) { } 4320 EXPORT_SYMBOL_GPL(usb_enable_ltm); 4321 4322 static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port, 4323 u16 portstatus, u16 portchange) 4324 { 4325 return 0; 4326 } 4327 4328 #endif /* CONFIG_PM */ 4329 4330 /* 4331 * USB-3 does not have a similar link state as USB-2 that will avoid negotiating 4332 * a connection with a plugged-in cable but will signal the host when the cable 4333 * is unplugged. Disable remote wake and set link state to U3 for USB-3 devices 4334 */ 4335 static int hub_port_disable(struct usb_hub *hub, int port1, int set_state) 4336 { 4337 struct usb_port *port_dev = hub->ports[port1 - 1]; 4338 struct usb_device *hdev = hub->hdev; 4339 int ret = 0; 4340 4341 if (!hub->error) { 4342 if (hub_is_superspeed(hub->hdev)) { 4343 hub_usb3_port_prepare_disable(hub, port_dev); 4344 ret = hub_set_port_link_state(hub, port_dev->portnum, 4345 USB_SS_PORT_LS_U3); 4346 } else { 4347 ret = usb_clear_port_feature(hdev, port1, 4348 USB_PORT_FEAT_ENABLE); 4349 } 4350 } 4351 if (port_dev->child && set_state) 4352 usb_set_device_state(port_dev->child, USB_STATE_NOTATTACHED); 4353 if (ret && ret != -ENODEV) 4354 dev_err(&port_dev->dev, "cannot disable (err = %d)\n", ret); 4355 return ret; 4356 } 4357 4358 /* 4359 * usb_port_disable - disable a usb device's upstream port 4360 * @udev: device to disable 4361 * Context: @udev locked, must be able to sleep. 4362 * 4363 * Disables a USB device that isn't in active use. 4364 */ 4365 int usb_port_disable(struct usb_device *udev) 4366 { 4367 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent); 4368 4369 return hub_port_disable(hub, udev->portnum, 0); 4370 } 4371 4372 /* USB 2.0 spec, 7.1.7.3 / fig 7-29: 4373 * 4374 * Between connect detection and reset signaling there must be a delay 4375 * of 100ms at least for debounce and power-settling. The corresponding 4376 * timer shall restart whenever the downstream port detects a disconnect. 4377 * 4378 * Apparently there are some bluetooth and irda-dongles and a number of 4379 * low-speed devices for which this debounce period may last over a second. 4380 * Not covered by the spec - but easy to deal with. 4381 * 4382 * This implementation uses a 1500ms total debounce timeout; if the 4383 * connection isn't stable by then it returns -ETIMEDOUT. It checks 4384 * every 25ms for transient disconnects. When the port status has been 4385 * unchanged for 100ms it returns the port status. 4386 */ 4387 int hub_port_debounce(struct usb_hub *hub, int port1, bool must_be_connected) 4388 { 4389 int ret; 4390 u16 portchange, portstatus; 4391 unsigned connection = 0xffff; 4392 int total_time, stable_time = 0; 4393 struct usb_port *port_dev = hub->ports[port1 - 1]; 4394 4395 for (total_time = 0; ; total_time += HUB_DEBOUNCE_STEP) { 4396 ret = hub_port_status(hub, port1, &portstatus, &portchange); 4397 if (ret < 0) 4398 return ret; 4399 4400 if (!(portchange & USB_PORT_STAT_C_CONNECTION) && 4401 (portstatus & USB_PORT_STAT_CONNECTION) == connection) { 4402 if (!must_be_connected || 4403 (connection == USB_PORT_STAT_CONNECTION)) 4404 stable_time += HUB_DEBOUNCE_STEP; 4405 if (stable_time >= HUB_DEBOUNCE_STABLE) 4406 break; 4407 } else { 4408 stable_time = 0; 4409 connection = portstatus & USB_PORT_STAT_CONNECTION; 4410 } 4411 4412 if (portchange & USB_PORT_STAT_C_CONNECTION) { 4413 usb_clear_port_feature(hub->hdev, port1, 4414 USB_PORT_FEAT_C_CONNECTION); 4415 } 4416 4417 if (total_time >= HUB_DEBOUNCE_TIMEOUT) 4418 break; 4419 msleep(HUB_DEBOUNCE_STEP); 4420 } 4421 4422 dev_dbg(&port_dev->dev, "debounce total %dms stable %dms status 0x%x\n", 4423 total_time, stable_time, portstatus); 4424 4425 if (stable_time < HUB_DEBOUNCE_STABLE) 4426 return -ETIMEDOUT; 4427 return portstatus; 4428 } 4429 4430 void usb_ep0_reinit(struct usb_device *udev) 4431 { 4432 usb_disable_endpoint(udev, 0 + USB_DIR_IN, true); 4433 usb_disable_endpoint(udev, 0 + USB_DIR_OUT, true); 4434 usb_enable_endpoint(udev, &udev->ep0, true); 4435 } 4436 EXPORT_SYMBOL_GPL(usb_ep0_reinit); 4437 4438 #define usb_sndaddr0pipe() (PIPE_CONTROL << 30) 4439 #define usb_rcvaddr0pipe() ((PIPE_CONTROL << 30) | USB_DIR_IN) 4440 4441 static int hub_set_address(struct usb_device *udev, int devnum) 4442 { 4443 int retval; 4444 struct usb_hcd *hcd = bus_to_hcd(udev->bus); 4445 4446 /* 4447 * The host controller will choose the device address, 4448 * instead of the core having chosen it earlier 4449 */ 4450 if (!hcd->driver->address_device && devnum <= 1) 4451 return -EINVAL; 4452 if (udev->state == USB_STATE_ADDRESS) 4453 return 0; 4454 if (udev->state != USB_STATE_DEFAULT) 4455 return -EINVAL; 4456 if (hcd->driver->address_device) 4457 retval = hcd->driver->address_device(hcd, udev); 4458 else 4459 retval = usb_control_msg(udev, usb_sndaddr0pipe(), 4460 USB_REQ_SET_ADDRESS, 0, devnum, 0, 4461 NULL, 0, USB_CTRL_SET_TIMEOUT); 4462 if (retval == 0) { 4463 update_devnum(udev, devnum); 4464 /* Device now using proper address. */ 4465 usb_set_device_state(udev, USB_STATE_ADDRESS); 4466 usb_ep0_reinit(udev); 4467 } 4468 return retval; 4469 } 4470 4471 /* 4472 * There are reports of USB 3.0 devices that say they support USB 2.0 Link PM 4473 * when they're plugged into a USB 2.0 port, but they don't work when LPM is 4474 * enabled. 4475 * 4476 * Only enable USB 2.0 Link PM if the port is internal (hardwired), or the 4477 * device says it supports the new USB 2.0 Link PM errata by setting the BESL 4478 * support bit in the BOS descriptor. 4479 */ 4480 static void hub_set_initial_usb2_lpm_policy(struct usb_device *udev) 4481 { 4482 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent); 4483 int connect_type = USB_PORT_CONNECT_TYPE_UNKNOWN; 4484 4485 if (!udev->usb2_hw_lpm_capable || !udev->bos) 4486 return; 4487 4488 if (hub) 4489 connect_type = hub->ports[udev->portnum - 1]->connect_type; 4490 4491 if ((udev->bos->ext_cap->bmAttributes & cpu_to_le32(USB_BESL_SUPPORT)) || 4492 connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) { 4493 udev->usb2_hw_lpm_allowed = 1; 4494 usb_enable_usb2_hardware_lpm(udev); 4495 } 4496 } 4497 4498 static int hub_enable_device(struct usb_device *udev) 4499 { 4500 struct usb_hcd *hcd = bus_to_hcd(udev->bus); 4501 4502 if (!hcd->driver->enable_device) 4503 return 0; 4504 if (udev->state == USB_STATE_ADDRESS) 4505 return 0; 4506 if (udev->state != USB_STATE_DEFAULT) 4507 return -EINVAL; 4508 4509 return hcd->driver->enable_device(hcd, udev); 4510 } 4511 4512 /* Reset device, (re)assign address, get device descriptor. 4513 * Device connection must be stable, no more debouncing needed. 4514 * Returns device in USB_STATE_ADDRESS, except on error. 4515 * 4516 * If this is called for an already-existing device (as part of 4517 * usb_reset_and_verify_device), the caller must own the device lock and 4518 * the port lock. For a newly detected device that is not accessible 4519 * through any global pointers, it's not necessary to lock the device, 4520 * but it is still necessary to lock the port. 4521 */ 4522 static int 4523 hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1, 4524 int retry_counter) 4525 { 4526 struct usb_device *hdev = hub->hdev; 4527 struct usb_hcd *hcd = bus_to_hcd(hdev->bus); 4528 struct usb_port *port_dev = hub->ports[port1 - 1]; 4529 int retries, operations, retval, i; 4530 unsigned delay = HUB_SHORT_RESET_TIME; 4531 enum usb_device_speed oldspeed = udev->speed; 4532 const char *speed; 4533 int devnum = udev->devnum; 4534 const char *driver_name; 4535 4536 /* root hub ports have a slightly longer reset period 4537 * (from USB 2.0 spec, section 7.1.7.5) 4538 */ 4539 if (!hdev->parent) { 4540 delay = HUB_ROOT_RESET_TIME; 4541 if (port1 == hdev->bus->otg_port) 4542 hdev->bus->b_hnp_enable = 0; 4543 } 4544 4545 /* Some low speed devices have problems with the quick delay, so */ 4546 /* be a bit pessimistic with those devices. RHbug #23670 */ 4547 if (oldspeed == USB_SPEED_LOW) 4548 delay = HUB_LONG_RESET_TIME; 4549 4550 mutex_lock(hcd->address0_mutex); 4551 4552 /* Reset the device; full speed may morph to high speed */ 4553 /* FIXME a USB 2.0 device may morph into SuperSpeed on reset. */ 4554 retval = hub_port_reset(hub, port1, udev, delay, false); 4555 if (retval < 0) /* error or disconnect */ 4556 goto fail; 4557 /* success, speed is known */ 4558 4559 retval = -ENODEV; 4560 4561 /* Don't allow speed changes at reset, except usb 3.0 to faster */ 4562 if (oldspeed != USB_SPEED_UNKNOWN && oldspeed != udev->speed && 4563 !(oldspeed == USB_SPEED_SUPER && udev->speed > oldspeed)) { 4564 dev_dbg(&udev->dev, "device reset changed speed!\n"); 4565 goto fail; 4566 } 4567 oldspeed = udev->speed; 4568 4569 /* USB 2.0 section 5.5.3 talks about ep0 maxpacket ... 4570 * it's fixed size except for full speed devices. 4571 * For Wireless USB devices, ep0 max packet is always 512 (tho 4572 * reported as 0xff in the device descriptor). WUSB1.0[4.8.1]. 4573 */ 4574 switch (udev->speed) { 4575 case USB_SPEED_SUPER_PLUS: 4576 case USB_SPEED_SUPER: 4577 case USB_SPEED_WIRELESS: /* fixed at 512 */ 4578 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(512); 4579 break; 4580 case USB_SPEED_HIGH: /* fixed at 64 */ 4581 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(64); 4582 break; 4583 case USB_SPEED_FULL: /* 8, 16, 32, or 64 */ 4584 /* to determine the ep0 maxpacket size, try to read 4585 * the device descriptor to get bMaxPacketSize0 and 4586 * then correct our initial guess. 4587 */ 4588 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(64); 4589 break; 4590 case USB_SPEED_LOW: /* fixed at 8 */ 4591 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(8); 4592 break; 4593 default: 4594 goto fail; 4595 } 4596 4597 if (udev->speed == USB_SPEED_WIRELESS) 4598 speed = "variable speed Wireless"; 4599 else 4600 speed = usb_speed_string(udev->speed); 4601 4602 /* 4603 * The controller driver may be NULL if the controller device 4604 * is the middle device between platform device and roothub. 4605 * This middle device may not need a device driver due to 4606 * all hardware control can be at platform device driver, this 4607 * platform device is usually a dual-role USB controller device. 4608 */ 4609 if (udev->bus->controller->driver) 4610 driver_name = udev->bus->controller->driver->name; 4611 else 4612 driver_name = udev->bus->sysdev->driver->name; 4613 4614 if (udev->speed < USB_SPEED_SUPER) 4615 dev_info(&udev->dev, 4616 "%s %s USB device number %d using %s\n", 4617 (udev->config) ? "reset" : "new", speed, 4618 devnum, driver_name); 4619 4620 /* Set up TT records, if needed */ 4621 if (hdev->tt) { 4622 udev->tt = hdev->tt; 4623 udev->ttport = hdev->ttport; 4624 } else if (udev->speed != USB_SPEED_HIGH 4625 && hdev->speed == USB_SPEED_HIGH) { 4626 if (!hub->tt.hub) { 4627 dev_err(&udev->dev, "parent hub has no TT\n"); 4628 retval = -EINVAL; 4629 goto fail; 4630 } 4631 udev->tt = &hub->tt; 4632 udev->ttport = port1; 4633 } 4634 4635 /* Why interleave GET_DESCRIPTOR and SET_ADDRESS this way? 4636 * Because device hardware and firmware is sometimes buggy in 4637 * this area, and this is how Linux has done it for ages. 4638 * Change it cautiously. 4639 * 4640 * NOTE: If use_new_scheme() is true we will start by issuing 4641 * a 64-byte GET_DESCRIPTOR request. This is what Windows does, 4642 * so it may help with some non-standards-compliant devices. 4643 * Otherwise we start with SET_ADDRESS and then try to read the 4644 * first 8 bytes of the device descriptor to get the ep0 maxpacket 4645 * value. 4646 */ 4647 for (retries = 0; retries < GET_DESCRIPTOR_TRIES; (++retries, msleep(100))) { 4648 bool did_new_scheme = false; 4649 4650 if (use_new_scheme(udev, retry_counter, port_dev)) { 4651 struct usb_device_descriptor *buf; 4652 int r = 0; 4653 4654 did_new_scheme = true; 4655 retval = hub_enable_device(udev); 4656 if (retval < 0) { 4657 dev_err(&udev->dev, 4658 "hub failed to enable device, error %d\n", 4659 retval); 4660 goto fail; 4661 } 4662 4663 #define GET_DESCRIPTOR_BUFSIZE 64 4664 buf = kmalloc(GET_DESCRIPTOR_BUFSIZE, GFP_NOIO); 4665 if (!buf) { 4666 retval = -ENOMEM; 4667 continue; 4668 } 4669 4670 /* Retry on all errors; some devices are flakey. 4671 * 255 is for WUSB devices, we actually need to use 4672 * 512 (WUSB1.0[4.8.1]). 4673 */ 4674 for (operations = 0; operations < 3; ++operations) { 4675 buf->bMaxPacketSize0 = 0; 4676 r = usb_control_msg(udev, usb_rcvaddr0pipe(), 4677 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN, 4678 USB_DT_DEVICE << 8, 0, 4679 buf, GET_DESCRIPTOR_BUFSIZE, 4680 initial_descriptor_timeout); 4681 switch (buf->bMaxPacketSize0) { 4682 case 8: case 16: case 32: case 64: case 255: 4683 if (buf->bDescriptorType == 4684 USB_DT_DEVICE) { 4685 r = 0; 4686 break; 4687 } 4688 /* FALL THROUGH */ 4689 default: 4690 if (r == 0) 4691 r = -EPROTO; 4692 break; 4693 } 4694 /* 4695 * Some devices time out if they are powered on 4696 * when already connected. They need a second 4697 * reset. But only on the first attempt, 4698 * lest we get into a time out/reset loop 4699 */ 4700 if (r == 0 || (r == -ETIMEDOUT && 4701 retries == 0 && 4702 udev->speed > USB_SPEED_FULL)) 4703 break; 4704 } 4705 udev->descriptor.bMaxPacketSize0 = 4706 buf->bMaxPacketSize0; 4707 kfree(buf); 4708 4709 retval = hub_port_reset(hub, port1, udev, delay, false); 4710 if (retval < 0) /* error or disconnect */ 4711 goto fail; 4712 if (oldspeed != udev->speed) { 4713 dev_dbg(&udev->dev, 4714 "device reset changed speed!\n"); 4715 retval = -ENODEV; 4716 goto fail; 4717 } 4718 if (r) { 4719 if (r != -ENODEV) 4720 dev_err(&udev->dev, "device descriptor read/64, error %d\n", 4721 r); 4722 retval = -EMSGSIZE; 4723 continue; 4724 } 4725 #undef GET_DESCRIPTOR_BUFSIZE 4726 } 4727 4728 /* 4729 * If device is WUSB, we already assigned an 4730 * unauthorized address in the Connect Ack sequence; 4731 * authorization will assign the final address. 4732 */ 4733 if (udev->wusb == 0) { 4734 for (operations = 0; operations < SET_ADDRESS_TRIES; ++operations) { 4735 retval = hub_set_address(udev, devnum); 4736 if (retval >= 0) 4737 break; 4738 msleep(200); 4739 } 4740 if (retval < 0) { 4741 if (retval != -ENODEV) 4742 dev_err(&udev->dev, "device not accepting address %d, error %d\n", 4743 devnum, retval); 4744 goto fail; 4745 } 4746 if (udev->speed >= USB_SPEED_SUPER) { 4747 devnum = udev->devnum; 4748 dev_info(&udev->dev, 4749 "%s SuperSpeed%s%s USB device number %d using %s\n", 4750 (udev->config) ? "reset" : "new", 4751 (udev->speed == USB_SPEED_SUPER_PLUS) ? 4752 "Plus Gen 2" : " Gen 1", 4753 (udev->rx_lanes == 2 && udev->tx_lanes == 2) ? 4754 "x2" : "", 4755 devnum, driver_name); 4756 } 4757 4758 /* cope with hardware quirkiness: 4759 * - let SET_ADDRESS settle, some device hardware wants it 4760 * - read ep0 maxpacket even for high and low speed, 4761 */ 4762 msleep(10); 4763 /* use_new_scheme() checks the speed which may have 4764 * changed since the initial look so we cache the result 4765 * in did_new_scheme 4766 */ 4767 if (did_new_scheme) 4768 break; 4769 } 4770 4771 retval = usb_get_device_descriptor(udev, 8); 4772 if (retval < 8) { 4773 if (retval != -ENODEV) 4774 dev_err(&udev->dev, 4775 "device descriptor read/8, error %d\n", 4776 retval); 4777 if (retval >= 0) 4778 retval = -EMSGSIZE; 4779 } else { 4780 u32 delay; 4781 4782 retval = 0; 4783 4784 delay = udev->parent->hub_delay; 4785 udev->hub_delay = min_t(u32, delay, 4786 USB_TP_TRANSMISSION_DELAY_MAX); 4787 retval = usb_set_isoch_delay(udev); 4788 if (retval) { 4789 dev_dbg(&udev->dev, 4790 "Failed set isoch delay, error %d\n", 4791 retval); 4792 retval = 0; 4793 } 4794 break; 4795 } 4796 } 4797 if (retval) 4798 goto fail; 4799 4800 /* 4801 * Some superspeed devices have finished the link training process 4802 * and attached to a superspeed hub port, but the device descriptor 4803 * got from those devices show they aren't superspeed devices. Warm 4804 * reset the port attached by the devices can fix them. 4805 */ 4806 if ((udev->speed >= USB_SPEED_SUPER) && 4807 (le16_to_cpu(udev->descriptor.bcdUSB) < 0x0300)) { 4808 dev_err(&udev->dev, "got a wrong device descriptor, " 4809 "warm reset device\n"); 4810 hub_port_reset(hub, port1, udev, 4811 HUB_BH_RESET_TIME, true); 4812 retval = -EINVAL; 4813 goto fail; 4814 } 4815 4816 if (udev->descriptor.bMaxPacketSize0 == 0xff || 4817 udev->speed >= USB_SPEED_SUPER) 4818 i = 512; 4819 else 4820 i = udev->descriptor.bMaxPacketSize0; 4821 if (usb_endpoint_maxp(&udev->ep0.desc) != i) { 4822 if (udev->speed == USB_SPEED_LOW || 4823 !(i == 8 || i == 16 || i == 32 || i == 64)) { 4824 dev_err(&udev->dev, "Invalid ep0 maxpacket: %d\n", i); 4825 retval = -EMSGSIZE; 4826 goto fail; 4827 } 4828 if (udev->speed == USB_SPEED_FULL) 4829 dev_dbg(&udev->dev, "ep0 maxpacket = %d\n", i); 4830 else 4831 dev_warn(&udev->dev, "Using ep0 maxpacket: %d\n", i); 4832 udev->ep0.desc.wMaxPacketSize = cpu_to_le16(i); 4833 usb_ep0_reinit(udev); 4834 } 4835 4836 retval = usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE); 4837 if (retval < (signed)sizeof(udev->descriptor)) { 4838 if (retval != -ENODEV) 4839 dev_err(&udev->dev, "device descriptor read/all, error %d\n", 4840 retval); 4841 if (retval >= 0) 4842 retval = -ENOMSG; 4843 goto fail; 4844 } 4845 4846 usb_detect_quirks(udev); 4847 4848 if (udev->wusb == 0 && le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0201) { 4849 retval = usb_get_bos_descriptor(udev); 4850 if (!retval) { 4851 udev->lpm_capable = usb_device_supports_lpm(udev); 4852 usb_set_lpm_parameters(udev); 4853 } 4854 } 4855 4856 retval = 0; 4857 /* notify HCD that we have a device connected and addressed */ 4858 if (hcd->driver->update_device) 4859 hcd->driver->update_device(hcd, udev); 4860 hub_set_initial_usb2_lpm_policy(udev); 4861 fail: 4862 if (retval) { 4863 hub_port_disable(hub, port1, 0); 4864 update_devnum(udev, devnum); /* for disconnect processing */ 4865 } 4866 mutex_unlock(hcd->address0_mutex); 4867 return retval; 4868 } 4869 4870 static void 4871 check_highspeed(struct usb_hub *hub, struct usb_device *udev, int port1) 4872 { 4873 struct usb_qualifier_descriptor *qual; 4874 int status; 4875 4876 if (udev->quirks & USB_QUIRK_DEVICE_QUALIFIER) 4877 return; 4878 4879 qual = kmalloc(sizeof *qual, GFP_KERNEL); 4880 if (qual == NULL) 4881 return; 4882 4883 status = usb_get_descriptor(udev, USB_DT_DEVICE_QUALIFIER, 0, 4884 qual, sizeof *qual); 4885 if (status == sizeof *qual) { 4886 dev_info(&udev->dev, "not running at top speed; " 4887 "connect to a high speed hub\n"); 4888 /* hub LEDs are probably harder to miss than syslog */ 4889 if (hub->has_indicators) { 4890 hub->indicator[port1-1] = INDICATOR_GREEN_BLINK; 4891 queue_delayed_work(system_power_efficient_wq, 4892 &hub->leds, 0); 4893 } 4894 } 4895 kfree(qual); 4896 } 4897 4898 static unsigned 4899 hub_power_remaining(struct usb_hub *hub) 4900 { 4901 struct usb_device *hdev = hub->hdev; 4902 int remaining; 4903 int port1; 4904 4905 if (!hub->limited_power) 4906 return 0; 4907 4908 remaining = hdev->bus_mA - hub->descriptor->bHubContrCurrent; 4909 for (port1 = 1; port1 <= hdev->maxchild; ++port1) { 4910 struct usb_port *port_dev = hub->ports[port1 - 1]; 4911 struct usb_device *udev = port_dev->child; 4912 unsigned unit_load; 4913 int delta; 4914 4915 if (!udev) 4916 continue; 4917 if (hub_is_superspeed(udev)) 4918 unit_load = 150; 4919 else 4920 unit_load = 100; 4921 4922 /* 4923 * Unconfigured devices may not use more than one unit load, 4924 * or 8mA for OTG ports 4925 */ 4926 if (udev->actconfig) 4927 delta = usb_get_max_power(udev, udev->actconfig); 4928 else if (port1 != udev->bus->otg_port || hdev->parent) 4929 delta = unit_load; 4930 else 4931 delta = 8; 4932 if (delta > hub->mA_per_port) 4933 dev_warn(&port_dev->dev, "%dmA is over %umA budget!\n", 4934 delta, hub->mA_per_port); 4935 remaining -= delta; 4936 } 4937 if (remaining < 0) { 4938 dev_warn(hub->intfdev, "%dmA over power budget!\n", 4939 -remaining); 4940 remaining = 0; 4941 } 4942 return remaining; 4943 } 4944 4945 4946 static int descriptors_changed(struct usb_device *udev, 4947 struct usb_device_descriptor *old_device_descriptor, 4948 struct usb_host_bos *old_bos) 4949 { 4950 int changed = 0; 4951 unsigned index; 4952 unsigned serial_len = 0; 4953 unsigned len; 4954 unsigned old_length; 4955 int length; 4956 char *buf; 4957 4958 if (memcmp(&udev->descriptor, old_device_descriptor, 4959 sizeof(*old_device_descriptor)) != 0) 4960 return 1; 4961 4962 if ((old_bos && !udev->bos) || (!old_bos && udev->bos)) 4963 return 1; 4964 if (udev->bos) { 4965 len = le16_to_cpu(udev->bos->desc->wTotalLength); 4966 if (len != le16_to_cpu(old_bos->desc->wTotalLength)) 4967 return 1; 4968 if (memcmp(udev->bos->desc, old_bos->desc, len)) 4969 return 1; 4970 } 4971 4972 /* Since the idVendor, idProduct, and bcdDevice values in the 4973 * device descriptor haven't changed, we will assume the 4974 * Manufacturer and Product strings haven't changed either. 4975 * But the SerialNumber string could be different (e.g., a 4976 * different flash card of the same brand). 4977 */ 4978 if (udev->serial) 4979 serial_len = strlen(udev->serial) + 1; 4980 4981 len = serial_len; 4982 for (index = 0; index < udev->descriptor.bNumConfigurations; index++) { 4983 old_length = le16_to_cpu(udev->config[index].desc.wTotalLength); 4984 len = max(len, old_length); 4985 } 4986 4987 buf = kmalloc(len, GFP_NOIO); 4988 if (!buf) 4989 /* assume the worst */ 4990 return 1; 4991 4992 for (index = 0; index < udev->descriptor.bNumConfigurations; index++) { 4993 old_length = le16_to_cpu(udev->config[index].desc.wTotalLength); 4994 length = usb_get_descriptor(udev, USB_DT_CONFIG, index, buf, 4995 old_length); 4996 if (length != old_length) { 4997 dev_dbg(&udev->dev, "config index %d, error %d\n", 4998 index, length); 4999 changed = 1; 5000 break; 5001 } 5002 if (memcmp(buf, udev->rawdescriptors[index], old_length) 5003 != 0) { 5004 dev_dbg(&udev->dev, "config index %d changed (#%d)\n", 5005 index, 5006 ((struct usb_config_descriptor *) buf)-> 5007 bConfigurationValue); 5008 changed = 1; 5009 break; 5010 } 5011 } 5012 5013 if (!changed && serial_len) { 5014 length = usb_string(udev, udev->descriptor.iSerialNumber, 5015 buf, serial_len); 5016 if (length + 1 != serial_len) { 5017 dev_dbg(&udev->dev, "serial string error %d\n", 5018 length); 5019 changed = 1; 5020 } else if (memcmp(buf, udev->serial, length) != 0) { 5021 dev_dbg(&udev->dev, "serial string changed\n"); 5022 changed = 1; 5023 } 5024 } 5025 5026 kfree(buf); 5027 return changed; 5028 } 5029 5030 static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus, 5031 u16 portchange) 5032 { 5033 int status = -ENODEV; 5034 int i; 5035 unsigned unit_load; 5036 struct usb_device *hdev = hub->hdev; 5037 struct usb_hcd *hcd = bus_to_hcd(hdev->bus); 5038 struct usb_port *port_dev = hub->ports[port1 - 1]; 5039 struct usb_device *udev = port_dev->child; 5040 static int unreliable_port = -1; 5041 5042 /* Disconnect any existing devices under this port */ 5043 if (udev) { 5044 if (hcd->usb_phy && !hdev->parent) 5045 usb_phy_notify_disconnect(hcd->usb_phy, udev->speed); 5046 usb_disconnect(&port_dev->child); 5047 } 5048 5049 /* We can forget about a "removed" device when there's a physical 5050 * disconnect or the connect status changes. 5051 */ 5052 if (!(portstatus & USB_PORT_STAT_CONNECTION) || 5053 (portchange & USB_PORT_STAT_C_CONNECTION)) 5054 clear_bit(port1, hub->removed_bits); 5055 5056 if (portchange & (USB_PORT_STAT_C_CONNECTION | 5057 USB_PORT_STAT_C_ENABLE)) { 5058 status = hub_port_debounce_be_stable(hub, port1); 5059 if (status < 0) { 5060 if (status != -ENODEV && 5061 port1 != unreliable_port && 5062 printk_ratelimit()) 5063 dev_err(&port_dev->dev, "connect-debounce failed\n"); 5064 portstatus &= ~USB_PORT_STAT_CONNECTION; 5065 unreliable_port = port1; 5066 } else { 5067 portstatus = status; 5068 } 5069 } 5070 5071 /* Return now if debouncing failed or nothing is connected or 5072 * the device was "removed". 5073 */ 5074 if (!(portstatus & USB_PORT_STAT_CONNECTION) || 5075 test_bit(port1, hub->removed_bits)) { 5076 5077 /* 5078 * maybe switch power back on (e.g. root hub was reset) 5079 * but only if the port isn't owned by someone else. 5080 */ 5081 if (hub_is_port_power_switchable(hub) 5082 && !port_is_power_on(hub, portstatus) 5083 && !port_dev->port_owner) 5084 set_port_feature(hdev, port1, USB_PORT_FEAT_POWER); 5085 5086 if (portstatus & USB_PORT_STAT_ENABLE) 5087 goto done; 5088 return; 5089 } 5090 if (hub_is_superspeed(hub->hdev)) 5091 unit_load = 150; 5092 else 5093 unit_load = 100; 5094 5095 status = 0; 5096 for (i = 0; i < SET_CONFIG_TRIES; i++) { 5097 5098 /* reallocate for each attempt, since references 5099 * to the previous one can escape in various ways 5100 */ 5101 udev = usb_alloc_dev(hdev, hdev->bus, port1); 5102 if (!udev) { 5103 dev_err(&port_dev->dev, 5104 "couldn't allocate usb_device\n"); 5105 goto done; 5106 } 5107 5108 usb_set_device_state(udev, USB_STATE_POWERED); 5109 udev->bus_mA = hub->mA_per_port; 5110 udev->level = hdev->level + 1; 5111 udev->wusb = hub_is_wusb(hub); 5112 5113 /* Devices connected to SuperSpeed hubs are USB 3.0 or later */ 5114 if (hub_is_superspeed(hub->hdev)) 5115 udev->speed = USB_SPEED_SUPER; 5116 else 5117 udev->speed = USB_SPEED_UNKNOWN; 5118 5119 choose_devnum(udev); 5120 if (udev->devnum <= 0) { 5121 status = -ENOTCONN; /* Don't retry */ 5122 goto loop; 5123 } 5124 5125 /* reset (non-USB 3.0 devices) and get descriptor */ 5126 usb_lock_port(port_dev); 5127 status = hub_port_init(hub, udev, port1, i); 5128 usb_unlock_port(port_dev); 5129 if (status < 0) 5130 goto loop; 5131 5132 if (udev->quirks & USB_QUIRK_DELAY_INIT) 5133 msleep(2000); 5134 5135 /* consecutive bus-powered hubs aren't reliable; they can 5136 * violate the voltage drop budget. if the new child has 5137 * a "powered" LED, users should notice we didn't enable it 5138 * (without reading syslog), even without per-port LEDs 5139 * on the parent. 5140 */ 5141 if (udev->descriptor.bDeviceClass == USB_CLASS_HUB 5142 && udev->bus_mA <= unit_load) { 5143 u16 devstat; 5144 5145 status = usb_get_std_status(udev, USB_RECIP_DEVICE, 0, 5146 &devstat); 5147 if (status) { 5148 dev_dbg(&udev->dev, "get status %d ?\n", status); 5149 goto loop_disable; 5150 } 5151 if ((devstat & (1 << USB_DEVICE_SELF_POWERED)) == 0) { 5152 dev_err(&udev->dev, 5153 "can't connect bus-powered hub " 5154 "to this port\n"); 5155 if (hub->has_indicators) { 5156 hub->indicator[port1-1] = 5157 INDICATOR_AMBER_BLINK; 5158 queue_delayed_work( 5159 system_power_efficient_wq, 5160 &hub->leds, 0); 5161 } 5162 status = -ENOTCONN; /* Don't retry */ 5163 goto loop_disable; 5164 } 5165 } 5166 5167 /* check for devices running slower than they could */ 5168 if (le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0200 5169 && udev->speed == USB_SPEED_FULL 5170 && highspeed_hubs != 0) 5171 check_highspeed(hub, udev, port1); 5172 5173 /* Store the parent's children[] pointer. At this point 5174 * udev becomes globally accessible, although presumably 5175 * no one will look at it until hdev is unlocked. 5176 */ 5177 status = 0; 5178 5179 mutex_lock(&usb_port_peer_mutex); 5180 5181 /* We mustn't add new devices if the parent hub has 5182 * been disconnected; we would race with the 5183 * recursively_mark_NOTATTACHED() routine. 5184 */ 5185 spin_lock_irq(&device_state_lock); 5186 if (hdev->state == USB_STATE_NOTATTACHED) 5187 status = -ENOTCONN; 5188 else 5189 port_dev->child = udev; 5190 spin_unlock_irq(&device_state_lock); 5191 mutex_unlock(&usb_port_peer_mutex); 5192 5193 /* Run it through the hoops (find a driver, etc) */ 5194 if (!status) { 5195 status = usb_new_device(udev); 5196 if (status) { 5197 mutex_lock(&usb_port_peer_mutex); 5198 spin_lock_irq(&device_state_lock); 5199 port_dev->child = NULL; 5200 spin_unlock_irq(&device_state_lock); 5201 mutex_unlock(&usb_port_peer_mutex); 5202 } else { 5203 if (hcd->usb_phy && !hdev->parent) 5204 usb_phy_notify_connect(hcd->usb_phy, 5205 udev->speed); 5206 } 5207 } 5208 5209 if (status) 5210 goto loop_disable; 5211 5212 status = hub_power_remaining(hub); 5213 if (status) 5214 dev_dbg(hub->intfdev, "%dmA power budget left\n", status); 5215 5216 return; 5217 5218 loop_disable: 5219 hub_port_disable(hub, port1, 1); 5220 loop: 5221 usb_ep0_reinit(udev); 5222 release_devnum(udev); 5223 hub_free_dev(udev); 5224 usb_put_dev(udev); 5225 if ((status == -ENOTCONN) || (status == -ENOTSUPP)) 5226 break; 5227 5228 /* When halfway through our retry count, power-cycle the port */ 5229 if (i == (SET_CONFIG_TRIES / 2) - 1) { 5230 dev_info(&port_dev->dev, "attempt power cycle\n"); 5231 usb_hub_set_port_power(hdev, hub, port1, false); 5232 msleep(2 * hub_power_on_good_delay(hub)); 5233 usb_hub_set_port_power(hdev, hub, port1, true); 5234 msleep(hub_power_on_good_delay(hub)); 5235 } 5236 } 5237 if (hub->hdev->parent || 5238 !hcd->driver->port_handed_over || 5239 !(hcd->driver->port_handed_over)(hcd, port1)) { 5240 if (status != -ENOTCONN && status != -ENODEV) 5241 dev_err(&port_dev->dev, 5242 "unable to enumerate USB device\n"); 5243 } 5244 5245 done: 5246 hub_port_disable(hub, port1, 1); 5247 if (hcd->driver->relinquish_port && !hub->hdev->parent) { 5248 if (status != -ENOTCONN && status != -ENODEV) 5249 hcd->driver->relinquish_port(hcd, port1); 5250 } 5251 } 5252 5253 /* Handle physical or logical connection change events. 5254 * This routine is called when: 5255 * a port connection-change occurs; 5256 * a port enable-change occurs (often caused by EMI); 5257 * usb_reset_and_verify_device() encounters changed descriptors (as from 5258 * a firmware download) 5259 * caller already locked the hub 5260 */ 5261 static void hub_port_connect_change(struct usb_hub *hub, int port1, 5262 u16 portstatus, u16 portchange) 5263 __must_hold(&port_dev->status_lock) 5264 { 5265 struct usb_port *port_dev = hub->ports[port1 - 1]; 5266 struct usb_device *udev = port_dev->child; 5267 struct usb_device_descriptor descriptor; 5268 int status = -ENODEV; 5269 int retval; 5270 5271 dev_dbg(&port_dev->dev, "status %04x, change %04x, %s\n", portstatus, 5272 portchange, portspeed(hub, portstatus)); 5273 5274 if (hub->has_indicators) { 5275 set_port_led(hub, port1, HUB_LED_AUTO); 5276 hub->indicator[port1-1] = INDICATOR_AUTO; 5277 } 5278 5279 #ifdef CONFIG_USB_OTG 5280 /* during HNP, don't repeat the debounce */ 5281 if (hub->hdev->bus->is_b_host) 5282 portchange &= ~(USB_PORT_STAT_C_CONNECTION | 5283 USB_PORT_STAT_C_ENABLE); 5284 #endif 5285 5286 /* Try to resuscitate an existing device */ 5287 if ((portstatus & USB_PORT_STAT_CONNECTION) && udev && 5288 udev->state != USB_STATE_NOTATTACHED) { 5289 if (portstatus & USB_PORT_STAT_ENABLE) { 5290 /* 5291 * USB-3 connections are initialized automatically by 5292 * the hostcontroller hardware. Therefore check for 5293 * changed device descriptors before resuscitating the 5294 * device. 5295 */ 5296 descriptor = udev->descriptor; 5297 retval = usb_get_device_descriptor(udev, 5298 sizeof(udev->descriptor)); 5299 if (retval < 0) { 5300 dev_dbg(&udev->dev, 5301 "can't read device descriptor %d\n", 5302 retval); 5303 } else { 5304 if (descriptors_changed(udev, &descriptor, 5305 udev->bos)) { 5306 dev_dbg(&udev->dev, 5307 "device descriptor has changed\n"); 5308 /* for disconnect() calls */ 5309 udev->descriptor = descriptor; 5310 } else { 5311 status = 0; /* Nothing to do */ 5312 } 5313 } 5314 #ifdef CONFIG_PM 5315 } else if (udev->state == USB_STATE_SUSPENDED && 5316 udev->persist_enabled) { 5317 /* For a suspended device, treat this as a 5318 * remote wakeup event. 5319 */ 5320 usb_unlock_port(port_dev); 5321 status = usb_remote_wakeup(udev); 5322 usb_lock_port(port_dev); 5323 #endif 5324 } else { 5325 /* Don't resuscitate */; 5326 } 5327 } 5328 clear_bit(port1, hub->change_bits); 5329 5330 /* successfully revalidated the connection */ 5331 if (status == 0) 5332 return; 5333 5334 usb_unlock_port(port_dev); 5335 hub_port_connect(hub, port1, portstatus, portchange); 5336 usb_lock_port(port_dev); 5337 } 5338 5339 /* Handle notifying userspace about hub over-current events */ 5340 static void port_over_current_notify(struct usb_port *port_dev) 5341 { 5342 char *envp[3]; 5343 struct device *hub_dev; 5344 char *port_dev_path; 5345 5346 sysfs_notify(&port_dev->dev.kobj, NULL, "over_current_count"); 5347 5348 hub_dev = port_dev->dev.parent; 5349 5350 if (!hub_dev) 5351 return; 5352 5353 port_dev_path = kobject_get_path(&port_dev->dev.kobj, GFP_KERNEL); 5354 if (!port_dev_path) 5355 return; 5356 5357 envp[0] = kasprintf(GFP_KERNEL, "OVER_CURRENT_PORT=%s", port_dev_path); 5358 if (!envp[0]) 5359 goto exit_path; 5360 5361 envp[1] = kasprintf(GFP_KERNEL, "OVER_CURRENT_COUNT=%u", 5362 port_dev->over_current_count); 5363 if (!envp[1]) 5364 goto exit; 5365 5366 envp[2] = NULL; 5367 kobject_uevent_env(&hub_dev->kobj, KOBJ_CHANGE, envp); 5368 5369 kfree(envp[1]); 5370 exit: 5371 kfree(envp[0]); 5372 exit_path: 5373 kfree(port_dev_path); 5374 } 5375 5376 static void port_event(struct usb_hub *hub, int port1) 5377 __must_hold(&port_dev->status_lock) 5378 { 5379 int connect_change; 5380 struct usb_port *port_dev = hub->ports[port1 - 1]; 5381 struct usb_device *udev = port_dev->child; 5382 struct usb_device *hdev = hub->hdev; 5383 u16 portstatus, portchange; 5384 5385 connect_change = test_bit(port1, hub->change_bits); 5386 clear_bit(port1, hub->event_bits); 5387 clear_bit(port1, hub->wakeup_bits); 5388 5389 if (hub_port_status(hub, port1, &portstatus, &portchange) < 0) 5390 return; 5391 5392 if (portchange & USB_PORT_STAT_C_CONNECTION) { 5393 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_CONNECTION); 5394 connect_change = 1; 5395 } 5396 5397 if (portchange & USB_PORT_STAT_C_ENABLE) { 5398 if (!connect_change) 5399 dev_dbg(&port_dev->dev, "enable change, status %08x\n", 5400 portstatus); 5401 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_ENABLE); 5402 5403 /* 5404 * EM interference sometimes causes badly shielded USB devices 5405 * to be shutdown by the hub, this hack enables them again. 5406 * Works at least with mouse driver. 5407 */ 5408 if (!(portstatus & USB_PORT_STAT_ENABLE) 5409 && !connect_change && udev) { 5410 dev_err(&port_dev->dev, "disabled by hub (EMI?), re-enabling...\n"); 5411 connect_change = 1; 5412 } 5413 } 5414 5415 if (portchange & USB_PORT_STAT_C_OVERCURRENT) { 5416 u16 status = 0, unused; 5417 port_dev->over_current_count++; 5418 port_over_current_notify(port_dev); 5419 5420 dev_dbg(&port_dev->dev, "over-current change #%u\n", 5421 port_dev->over_current_count); 5422 usb_clear_port_feature(hdev, port1, 5423 USB_PORT_FEAT_C_OVER_CURRENT); 5424 msleep(100); /* Cool down */ 5425 hub_power_on(hub, true); 5426 hub_port_status(hub, port1, &status, &unused); 5427 if (status & USB_PORT_STAT_OVERCURRENT) 5428 dev_err(&port_dev->dev, "over-current condition\n"); 5429 } 5430 5431 if (portchange & USB_PORT_STAT_C_RESET) { 5432 dev_dbg(&port_dev->dev, "reset change\n"); 5433 usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_RESET); 5434 } 5435 if ((portchange & USB_PORT_STAT_C_BH_RESET) 5436 && hub_is_superspeed(hdev)) { 5437 dev_dbg(&port_dev->dev, "warm reset change\n"); 5438 usb_clear_port_feature(hdev, port1, 5439 USB_PORT_FEAT_C_BH_PORT_RESET); 5440 } 5441 if (portchange & USB_PORT_STAT_C_LINK_STATE) { 5442 dev_dbg(&port_dev->dev, "link state change\n"); 5443 usb_clear_port_feature(hdev, port1, 5444 USB_PORT_FEAT_C_PORT_LINK_STATE); 5445 } 5446 if (portchange & USB_PORT_STAT_C_CONFIG_ERROR) { 5447 dev_warn(&port_dev->dev, "config error\n"); 5448 usb_clear_port_feature(hdev, port1, 5449 USB_PORT_FEAT_C_PORT_CONFIG_ERROR); 5450 } 5451 5452 /* skip port actions that require the port to be powered on */ 5453 if (!pm_runtime_active(&port_dev->dev)) 5454 return; 5455 5456 if (hub_handle_remote_wakeup(hub, port1, portstatus, portchange)) 5457 connect_change = 1; 5458 5459 /* 5460 * Warm reset a USB3 protocol port if it's in 5461 * SS.Inactive state. 5462 */ 5463 if (hub_port_warm_reset_required(hub, port1, portstatus)) { 5464 dev_dbg(&port_dev->dev, "do warm reset\n"); 5465 if (!udev || !(portstatus & USB_PORT_STAT_CONNECTION) 5466 || udev->state == USB_STATE_NOTATTACHED) { 5467 if (hub_port_reset(hub, port1, NULL, 5468 HUB_BH_RESET_TIME, true) < 0) 5469 hub_port_disable(hub, port1, 1); 5470 } else { 5471 usb_unlock_port(port_dev); 5472 usb_lock_device(udev); 5473 usb_reset_device(udev); 5474 usb_unlock_device(udev); 5475 usb_lock_port(port_dev); 5476 connect_change = 0; 5477 } 5478 } 5479 5480 if (connect_change) 5481 hub_port_connect_change(hub, port1, portstatus, portchange); 5482 } 5483 5484 static void hub_event(struct work_struct *work) 5485 { 5486 struct usb_device *hdev; 5487 struct usb_interface *intf; 5488 struct usb_hub *hub; 5489 struct device *hub_dev; 5490 u16 hubstatus; 5491 u16 hubchange; 5492 int i, ret; 5493 5494 hub = container_of(work, struct usb_hub, events); 5495 hdev = hub->hdev; 5496 hub_dev = hub->intfdev; 5497 intf = to_usb_interface(hub_dev); 5498 5499 kcov_remote_start_usb((u64)hdev->bus->busnum); 5500 5501 dev_dbg(hub_dev, "state %d ports %d chg %04x evt %04x\n", 5502 hdev->state, hdev->maxchild, 5503 /* NOTE: expects max 15 ports... */ 5504 (u16) hub->change_bits[0], 5505 (u16) hub->event_bits[0]); 5506 5507 /* Lock the device, then check to see if we were 5508 * disconnected while waiting for the lock to succeed. */ 5509 usb_lock_device(hdev); 5510 if (unlikely(hub->disconnected)) 5511 goto out_hdev_lock; 5512 5513 /* If the hub has died, clean up after it */ 5514 if (hdev->state == USB_STATE_NOTATTACHED) { 5515 hub->error = -ENODEV; 5516 hub_quiesce(hub, HUB_DISCONNECT); 5517 goto out_hdev_lock; 5518 } 5519 5520 /* Autoresume */ 5521 ret = usb_autopm_get_interface(intf); 5522 if (ret) { 5523 dev_dbg(hub_dev, "Can't autoresume: %d\n", ret); 5524 goto out_hdev_lock; 5525 } 5526 5527 /* If this is an inactive hub, do nothing */ 5528 if (hub->quiescing) 5529 goto out_autopm; 5530 5531 if (hub->error) { 5532 dev_dbg(hub_dev, "resetting for error %d\n", hub->error); 5533 5534 ret = usb_reset_device(hdev); 5535 if (ret) { 5536 dev_dbg(hub_dev, "error resetting hub: %d\n", ret); 5537 goto out_autopm; 5538 } 5539 5540 hub->nerrors = 0; 5541 hub->error = 0; 5542 } 5543 5544 /* deal with port status changes */ 5545 for (i = 1; i <= hdev->maxchild; i++) { 5546 struct usb_port *port_dev = hub->ports[i - 1]; 5547 5548 if (test_bit(i, hub->event_bits) 5549 || test_bit(i, hub->change_bits) 5550 || test_bit(i, hub->wakeup_bits)) { 5551 /* 5552 * The get_noresume and barrier ensure that if 5553 * the port was in the process of resuming, we 5554 * flush that work and keep the port active for 5555 * the duration of the port_event(). However, 5556 * if the port is runtime pm suspended 5557 * (powered-off), we leave it in that state, run 5558 * an abbreviated port_event(), and move on. 5559 */ 5560 pm_runtime_get_noresume(&port_dev->dev); 5561 pm_runtime_barrier(&port_dev->dev); 5562 usb_lock_port(port_dev); 5563 port_event(hub, i); 5564 usb_unlock_port(port_dev); 5565 pm_runtime_put_sync(&port_dev->dev); 5566 } 5567 } 5568 5569 /* deal with hub status changes */ 5570 if (test_and_clear_bit(0, hub->event_bits) == 0) 5571 ; /* do nothing */ 5572 else if (hub_hub_status(hub, &hubstatus, &hubchange) < 0) 5573 dev_err(hub_dev, "get_hub_status failed\n"); 5574 else { 5575 if (hubchange & HUB_CHANGE_LOCAL_POWER) { 5576 dev_dbg(hub_dev, "power change\n"); 5577 clear_hub_feature(hdev, C_HUB_LOCAL_POWER); 5578 if (hubstatus & HUB_STATUS_LOCAL_POWER) 5579 /* FIXME: Is this always true? */ 5580 hub->limited_power = 1; 5581 else 5582 hub->limited_power = 0; 5583 } 5584 if (hubchange & HUB_CHANGE_OVERCURRENT) { 5585 u16 status = 0; 5586 u16 unused; 5587 5588 dev_dbg(hub_dev, "over-current change\n"); 5589 clear_hub_feature(hdev, C_HUB_OVER_CURRENT); 5590 msleep(500); /* Cool down */ 5591 hub_power_on(hub, true); 5592 hub_hub_status(hub, &status, &unused); 5593 if (status & HUB_STATUS_OVERCURRENT) 5594 dev_err(hub_dev, "over-current condition\n"); 5595 } 5596 } 5597 5598 out_autopm: 5599 /* Balance the usb_autopm_get_interface() above */ 5600 usb_autopm_put_interface_no_suspend(intf); 5601 out_hdev_lock: 5602 usb_unlock_device(hdev); 5603 5604 /* Balance the stuff in kick_hub_wq() and allow autosuspend */ 5605 usb_autopm_put_interface(intf); 5606 kref_put(&hub->kref, hub_release); 5607 5608 kcov_remote_stop(); 5609 } 5610 5611 static const struct usb_device_id hub_id_table[] = { 5612 { .match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_INT_CLASS, 5613 .idVendor = USB_VENDOR_SMSC, 5614 .bInterfaceClass = USB_CLASS_HUB, 5615 .driver_info = HUB_QUIRK_DISABLE_AUTOSUSPEND}, 5616 { .match_flags = USB_DEVICE_ID_MATCH_VENDOR 5617 | USB_DEVICE_ID_MATCH_INT_CLASS, 5618 .idVendor = USB_VENDOR_GENESYS_LOGIC, 5619 .bInterfaceClass = USB_CLASS_HUB, 5620 .driver_info = HUB_QUIRK_CHECK_PORT_AUTOSUSPEND}, 5621 { .match_flags = USB_DEVICE_ID_MATCH_DEV_CLASS, 5622 .bDeviceClass = USB_CLASS_HUB}, 5623 { .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS, 5624 .bInterfaceClass = USB_CLASS_HUB}, 5625 { } /* Terminating entry */ 5626 }; 5627 5628 MODULE_DEVICE_TABLE(usb, hub_id_table); 5629 5630 static struct usb_driver hub_driver = { 5631 .name = "hub", 5632 .probe = hub_probe, 5633 .disconnect = hub_disconnect, 5634 .suspend = hub_suspend, 5635 .resume = hub_resume, 5636 .reset_resume = hub_reset_resume, 5637 .pre_reset = hub_pre_reset, 5638 .post_reset = hub_post_reset, 5639 .unlocked_ioctl = hub_ioctl, 5640 .id_table = hub_id_table, 5641 .supports_autosuspend = 1, 5642 }; 5643 5644 int usb_hub_init(void) 5645 { 5646 if (usb_register(&hub_driver) < 0) { 5647 printk(KERN_ERR "%s: can't register hub driver\n", 5648 usbcore_name); 5649 return -1; 5650 } 5651 5652 /* 5653 * The workqueue needs to be freezable to avoid interfering with 5654 * USB-PERSIST port handover. Otherwise it might see that a full-speed 5655 * device was gone before the EHCI controller had handed its port 5656 * over to the companion full-speed controller. 5657 */ 5658 hub_wq = alloc_workqueue("usb_hub_wq", WQ_FREEZABLE, 0); 5659 if (hub_wq) 5660 return 0; 5661 5662 /* Fall through if kernel_thread failed */ 5663 usb_deregister(&hub_driver); 5664 pr_err("%s: can't allocate workqueue for usb hub\n", usbcore_name); 5665 5666 return -1; 5667 } 5668 5669 void usb_hub_cleanup(void) 5670 { 5671 destroy_workqueue(hub_wq); 5672 5673 /* 5674 * Hub resources are freed for us by usb_deregister. It calls 5675 * usb_driver_purge on every device which in turn calls that 5676 * devices disconnect function if it is using this driver. 5677 * The hub_disconnect function takes care of releasing the 5678 * individual hub resources. -greg 5679 */ 5680 usb_deregister(&hub_driver); 5681 } /* usb_hub_cleanup() */ 5682 5683 /** 5684 * usb_reset_and_verify_device - perform a USB port reset to reinitialize a device 5685 * @udev: device to reset (not in SUSPENDED or NOTATTACHED state) 5686 * 5687 * WARNING - don't use this routine to reset a composite device 5688 * (one with multiple interfaces owned by separate drivers)! 5689 * Use usb_reset_device() instead. 5690 * 5691 * Do a port reset, reassign the device's address, and establish its 5692 * former operating configuration. If the reset fails, or the device's 5693 * descriptors change from their values before the reset, or the original 5694 * configuration and altsettings cannot be restored, a flag will be set 5695 * telling hub_wq to pretend the device has been disconnected and then 5696 * re-connected. All drivers will be unbound, and the device will be 5697 * re-enumerated and probed all over again. 5698 * 5699 * Return: 0 if the reset succeeded, -ENODEV if the device has been 5700 * flagged for logical disconnection, or some other negative error code 5701 * if the reset wasn't even attempted. 5702 * 5703 * Note: 5704 * The caller must own the device lock and the port lock, the latter is 5705 * taken by usb_reset_device(). For example, it's safe to use 5706 * usb_reset_device() from a driver probe() routine after downloading 5707 * new firmware. For calls that might not occur during probe(), drivers 5708 * should lock the device using usb_lock_device_for_reset(). 5709 * 5710 * Locking exception: This routine may also be called from within an 5711 * autoresume handler. Such usage won't conflict with other tasks 5712 * holding the device lock because these tasks should always call 5713 * usb_autopm_resume_device(), thereby preventing any unwanted 5714 * autoresume. The autoresume handler is expected to have already 5715 * acquired the port lock before calling this routine. 5716 */ 5717 static int usb_reset_and_verify_device(struct usb_device *udev) 5718 { 5719 struct usb_device *parent_hdev = udev->parent; 5720 struct usb_hub *parent_hub; 5721 struct usb_hcd *hcd = bus_to_hcd(udev->bus); 5722 struct usb_device_descriptor descriptor = udev->descriptor; 5723 struct usb_host_bos *bos; 5724 int i, j, ret = 0; 5725 int port1 = udev->portnum; 5726 5727 if (udev->state == USB_STATE_NOTATTACHED || 5728 udev->state == USB_STATE_SUSPENDED) { 5729 dev_dbg(&udev->dev, "device reset not allowed in state %d\n", 5730 udev->state); 5731 return -EINVAL; 5732 } 5733 5734 if (!parent_hdev) 5735 return -EISDIR; 5736 5737 parent_hub = usb_hub_to_struct_hub(parent_hdev); 5738 5739 /* Disable USB2 hardware LPM. 5740 * It will be re-enabled by the enumeration process. 5741 */ 5742 usb_disable_usb2_hardware_lpm(udev); 5743 5744 /* Disable LPM while we reset the device and reinstall the alt settings. 5745 * Device-initiated LPM, and system exit latency settings are cleared 5746 * when the device is reset, so we have to set them up again. 5747 */ 5748 ret = usb_unlocked_disable_lpm(udev); 5749 if (ret) { 5750 dev_err(&udev->dev, "%s Failed to disable LPM\n", __func__); 5751 goto re_enumerate_no_bos; 5752 } 5753 5754 bos = udev->bos; 5755 udev->bos = NULL; 5756 5757 for (i = 0; i < SET_CONFIG_TRIES; ++i) { 5758 5759 /* ep0 maxpacket size may change; let the HCD know about it. 5760 * Other endpoints will be handled by re-enumeration. */ 5761 usb_ep0_reinit(udev); 5762 ret = hub_port_init(parent_hub, udev, port1, i); 5763 if (ret >= 0 || ret == -ENOTCONN || ret == -ENODEV) 5764 break; 5765 } 5766 5767 if (ret < 0) 5768 goto re_enumerate; 5769 5770 /* Device might have changed firmware (DFU or similar) */ 5771 if (descriptors_changed(udev, &descriptor, bos)) { 5772 dev_info(&udev->dev, "device firmware changed\n"); 5773 udev->descriptor = descriptor; /* for disconnect() calls */ 5774 goto re_enumerate; 5775 } 5776 5777 /* Restore the device's previous configuration */ 5778 if (!udev->actconfig) 5779 goto done; 5780 5781 mutex_lock(hcd->bandwidth_mutex); 5782 ret = usb_hcd_alloc_bandwidth(udev, udev->actconfig, NULL, NULL); 5783 if (ret < 0) { 5784 dev_warn(&udev->dev, 5785 "Busted HC? Not enough HCD resources for " 5786 "old configuration.\n"); 5787 mutex_unlock(hcd->bandwidth_mutex); 5788 goto re_enumerate; 5789 } 5790 ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 5791 USB_REQ_SET_CONFIGURATION, 0, 5792 udev->actconfig->desc.bConfigurationValue, 0, 5793 NULL, 0, USB_CTRL_SET_TIMEOUT); 5794 if (ret < 0) { 5795 dev_err(&udev->dev, 5796 "can't restore configuration #%d (error=%d)\n", 5797 udev->actconfig->desc.bConfigurationValue, ret); 5798 mutex_unlock(hcd->bandwidth_mutex); 5799 goto re_enumerate; 5800 } 5801 mutex_unlock(hcd->bandwidth_mutex); 5802 usb_set_device_state(udev, USB_STATE_CONFIGURED); 5803 5804 /* Put interfaces back into the same altsettings as before. 5805 * Don't bother to send the Set-Interface request for interfaces 5806 * that were already in altsetting 0; besides being unnecessary, 5807 * many devices can't handle it. Instead just reset the host-side 5808 * endpoint state. 5809 */ 5810 for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) { 5811 struct usb_host_config *config = udev->actconfig; 5812 struct usb_interface *intf = config->interface[i]; 5813 struct usb_interface_descriptor *desc; 5814 5815 desc = &intf->cur_altsetting->desc; 5816 if (desc->bAlternateSetting == 0) { 5817 usb_disable_interface(udev, intf, true); 5818 usb_enable_interface(udev, intf, true); 5819 ret = 0; 5820 } else { 5821 /* Let the bandwidth allocation function know that this 5822 * device has been reset, and it will have to use 5823 * alternate setting 0 as the current alternate setting. 5824 */ 5825 intf->resetting_device = 1; 5826 ret = usb_set_interface(udev, desc->bInterfaceNumber, 5827 desc->bAlternateSetting); 5828 intf->resetting_device = 0; 5829 } 5830 if (ret < 0) { 5831 dev_err(&udev->dev, "failed to restore interface %d " 5832 "altsetting %d (error=%d)\n", 5833 desc->bInterfaceNumber, 5834 desc->bAlternateSetting, 5835 ret); 5836 goto re_enumerate; 5837 } 5838 /* Resetting also frees any allocated streams */ 5839 for (j = 0; j < intf->cur_altsetting->desc.bNumEndpoints; j++) 5840 intf->cur_altsetting->endpoint[j].streams = 0; 5841 } 5842 5843 done: 5844 /* Now that the alt settings are re-installed, enable LTM and LPM. */ 5845 usb_enable_usb2_hardware_lpm(udev); 5846 usb_unlocked_enable_lpm(udev); 5847 usb_enable_ltm(udev); 5848 usb_release_bos_descriptor(udev); 5849 udev->bos = bos; 5850 return 0; 5851 5852 re_enumerate: 5853 usb_release_bos_descriptor(udev); 5854 udev->bos = bos; 5855 re_enumerate_no_bos: 5856 /* LPM state doesn't matter when we're about to destroy the device. */ 5857 hub_port_logical_disconnect(parent_hub, port1); 5858 return -ENODEV; 5859 } 5860 5861 /** 5862 * usb_reset_device - warn interface drivers and perform a USB port reset 5863 * @udev: device to reset (not in NOTATTACHED state) 5864 * 5865 * Warns all drivers bound to registered interfaces (using their pre_reset 5866 * method), performs the port reset, and then lets the drivers know that 5867 * the reset is over (using their post_reset method). 5868 * 5869 * Return: The same as for usb_reset_and_verify_device(). 5870 * 5871 * Note: 5872 * The caller must own the device lock. For example, it's safe to use 5873 * this from a driver probe() routine after downloading new firmware. 5874 * For calls that might not occur during probe(), drivers should lock 5875 * the device using usb_lock_device_for_reset(). 5876 * 5877 * If an interface is currently being probed or disconnected, we assume 5878 * its driver knows how to handle resets. For all other interfaces, 5879 * if the driver doesn't have pre_reset and post_reset methods then 5880 * we attempt to unbind it and rebind afterward. 5881 */ 5882 int usb_reset_device(struct usb_device *udev) 5883 { 5884 int ret; 5885 int i; 5886 unsigned int noio_flag; 5887 struct usb_port *port_dev; 5888 struct usb_host_config *config = udev->actconfig; 5889 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent); 5890 5891 if (udev->state == USB_STATE_NOTATTACHED) { 5892 dev_dbg(&udev->dev, "device reset not allowed in state %d\n", 5893 udev->state); 5894 return -EINVAL; 5895 } 5896 5897 if (!udev->parent) { 5898 /* this requires hcd-specific logic; see ohci_restart() */ 5899 dev_dbg(&udev->dev, "%s for root hub!\n", __func__); 5900 return -EISDIR; 5901 } 5902 5903 port_dev = hub->ports[udev->portnum - 1]; 5904 5905 /* 5906 * Don't allocate memory with GFP_KERNEL in current 5907 * context to avoid possible deadlock if usb mass 5908 * storage interface or usbnet interface(iSCSI case) 5909 * is included in current configuration. The easist 5910 * approach is to do it for every device reset, 5911 * because the device 'memalloc_noio' flag may have 5912 * not been set before reseting the usb device. 5913 */ 5914 noio_flag = memalloc_noio_save(); 5915 5916 /* Prevent autosuspend during the reset */ 5917 usb_autoresume_device(udev); 5918 5919 if (config) { 5920 for (i = 0; i < config->desc.bNumInterfaces; ++i) { 5921 struct usb_interface *cintf = config->interface[i]; 5922 struct usb_driver *drv; 5923 int unbind = 0; 5924 5925 if (cintf->dev.driver) { 5926 drv = to_usb_driver(cintf->dev.driver); 5927 if (drv->pre_reset && drv->post_reset) 5928 unbind = (drv->pre_reset)(cintf); 5929 else if (cintf->condition == 5930 USB_INTERFACE_BOUND) 5931 unbind = 1; 5932 if (unbind) 5933 usb_forced_unbind_intf(cintf); 5934 } 5935 } 5936 } 5937 5938 usb_lock_port(port_dev); 5939 ret = usb_reset_and_verify_device(udev); 5940 usb_unlock_port(port_dev); 5941 5942 if (config) { 5943 for (i = config->desc.bNumInterfaces - 1; i >= 0; --i) { 5944 struct usb_interface *cintf = config->interface[i]; 5945 struct usb_driver *drv; 5946 int rebind = cintf->needs_binding; 5947 5948 if (!rebind && cintf->dev.driver) { 5949 drv = to_usb_driver(cintf->dev.driver); 5950 if (drv->post_reset) 5951 rebind = (drv->post_reset)(cintf); 5952 else if (cintf->condition == 5953 USB_INTERFACE_BOUND) 5954 rebind = 1; 5955 if (rebind) 5956 cintf->needs_binding = 1; 5957 } 5958 } 5959 5960 /* If the reset failed, hub_wq will unbind drivers later */ 5961 if (ret == 0) 5962 usb_unbind_and_rebind_marked_interfaces(udev); 5963 } 5964 5965 usb_autosuspend_device(udev); 5966 memalloc_noio_restore(noio_flag); 5967 return ret; 5968 } 5969 EXPORT_SYMBOL_GPL(usb_reset_device); 5970 5971 5972 /** 5973 * usb_queue_reset_device - Reset a USB device from an atomic context 5974 * @iface: USB interface belonging to the device to reset 5975 * 5976 * This function can be used to reset a USB device from an atomic 5977 * context, where usb_reset_device() won't work (as it blocks). 5978 * 5979 * Doing a reset via this method is functionally equivalent to calling 5980 * usb_reset_device(), except for the fact that it is delayed to a 5981 * workqueue. This means that any drivers bound to other interfaces 5982 * might be unbound, as well as users from usbfs in user space. 5983 * 5984 * Corner cases: 5985 * 5986 * - Scheduling two resets at the same time from two different drivers 5987 * attached to two different interfaces of the same device is 5988 * possible; depending on how the driver attached to each interface 5989 * handles ->pre_reset(), the second reset might happen or not. 5990 * 5991 * - If the reset is delayed so long that the interface is unbound from 5992 * its driver, the reset will be skipped. 5993 * 5994 * - This function can be called during .probe(). It can also be called 5995 * during .disconnect(), but doing so is pointless because the reset 5996 * will not occur. If you really want to reset the device during 5997 * .disconnect(), call usb_reset_device() directly -- but watch out 5998 * for nested unbinding issues! 5999 */ 6000 void usb_queue_reset_device(struct usb_interface *iface) 6001 { 6002 if (schedule_work(&iface->reset_ws)) 6003 usb_get_intf(iface); 6004 } 6005 EXPORT_SYMBOL_GPL(usb_queue_reset_device); 6006 6007 /** 6008 * usb_hub_find_child - Get the pointer of child device 6009 * attached to the port which is specified by @port1. 6010 * @hdev: USB device belonging to the usb hub 6011 * @port1: port num to indicate which port the child device 6012 * is attached to. 6013 * 6014 * USB drivers call this function to get hub's child device 6015 * pointer. 6016 * 6017 * Return: %NULL if input param is invalid and 6018 * child's usb_device pointer if non-NULL. 6019 */ 6020 struct usb_device *usb_hub_find_child(struct usb_device *hdev, 6021 int port1) 6022 { 6023 struct usb_hub *hub = usb_hub_to_struct_hub(hdev); 6024 6025 if (port1 < 1 || port1 > hdev->maxchild) 6026 return NULL; 6027 return hub->ports[port1 - 1]->child; 6028 } 6029 EXPORT_SYMBOL_GPL(usb_hub_find_child); 6030 6031 void usb_hub_adjust_deviceremovable(struct usb_device *hdev, 6032 struct usb_hub_descriptor *desc) 6033 { 6034 struct usb_hub *hub = usb_hub_to_struct_hub(hdev); 6035 enum usb_port_connect_type connect_type; 6036 int i; 6037 6038 if (!hub) 6039 return; 6040 6041 if (!hub_is_superspeed(hdev)) { 6042 for (i = 1; i <= hdev->maxchild; i++) { 6043 struct usb_port *port_dev = hub->ports[i - 1]; 6044 6045 connect_type = port_dev->connect_type; 6046 if (connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) { 6047 u8 mask = 1 << (i%8); 6048 6049 if (!(desc->u.hs.DeviceRemovable[i/8] & mask)) { 6050 dev_dbg(&port_dev->dev, "DeviceRemovable is changed to 1 according to platform information.\n"); 6051 desc->u.hs.DeviceRemovable[i/8] |= mask; 6052 } 6053 } 6054 } 6055 } else { 6056 u16 port_removable = le16_to_cpu(desc->u.ss.DeviceRemovable); 6057 6058 for (i = 1; i <= hdev->maxchild; i++) { 6059 struct usb_port *port_dev = hub->ports[i - 1]; 6060 6061 connect_type = port_dev->connect_type; 6062 if (connect_type == USB_PORT_CONNECT_TYPE_HARD_WIRED) { 6063 u16 mask = 1 << i; 6064 6065 if (!(port_removable & mask)) { 6066 dev_dbg(&port_dev->dev, "DeviceRemovable is changed to 1 according to platform information.\n"); 6067 port_removable |= mask; 6068 } 6069 } 6070 } 6071 6072 desc->u.ss.DeviceRemovable = cpu_to_le16(port_removable); 6073 } 6074 } 6075 6076 #ifdef CONFIG_ACPI 6077 /** 6078 * usb_get_hub_port_acpi_handle - Get the usb port's acpi handle 6079 * @hdev: USB device belonging to the usb hub 6080 * @port1: port num of the port 6081 * 6082 * Return: Port's acpi handle if successful, %NULL if params are 6083 * invalid. 6084 */ 6085 acpi_handle usb_get_hub_port_acpi_handle(struct usb_device *hdev, 6086 int port1) 6087 { 6088 struct usb_hub *hub = usb_hub_to_struct_hub(hdev); 6089 6090 if (!hub) 6091 return NULL; 6092 6093 return ACPI_HANDLE(&hub->ports[port1 - 1]->dev); 6094 } 6095 #endif 6096