cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hub.c (183079B)


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