linux/drivers/usb/core/hub.c
<<
>>
Prefs
   1/*
   2 * USB hub driver.
   3 *
   4 * (C) Copyright 1999 Linus Torvalds
   5 * (C) Copyright 1999 Johannes Erdfelt
   6 * (C) Copyright 1999 Gregory P. Smith
   7 * (C) Copyright 2001 Brad Hards (bhards@bigpond.net.au)
   8 *
   9 */
  10
  11#include <linux/kernel.h>
  12#include <linux/errno.h>
  13#include <linux/module.h>
  14#include <linux/moduleparam.h>
  15#include <linux/completion.h>
  16#include <linux/sched.h>
  17#include <linux/list.h>
  18#include <linux/slab.h>
  19#include <linux/ioctl.h>
  20#include <linux/usb.h>
  21#include <linux/usbdevice_fs.h>
  22#include <linux/usb/hcd.h>
  23#include <linux/usb/quirks.h>
  24#include <linux/kthread.h>
  25#include <linux/mutex.h>
  26#include <linux/freezer.h>
  27
  28#include <asm/uaccess.h>
  29#include <asm/byteorder.h>
  30
  31#include "usb.h"
  32
  33/* if we are in debug mode, always announce new devices */
  34#ifdef DEBUG
  35#ifndef CONFIG_USB_ANNOUNCE_NEW_DEVICES
  36#define CONFIG_USB_ANNOUNCE_NEW_DEVICES
  37#endif
  38#endif
  39
  40struct usb_hub {
  41        struct device           *intfdev;       /* the "interface" device */
  42        struct usb_device       *hdev;
  43        struct kref             kref;
  44        struct urb              *urb;           /* for interrupt polling pipe */
  45
  46        /* buffer for urb ... with extra space in case of babble */
  47        char                    (*buffer)[8];
  48        union {
  49                struct usb_hub_status   hub;
  50                struct usb_port_status  port;
  51        }                       *status;        /* buffer for status reports */
  52        struct mutex            status_mutex;   /* for the status buffer */
  53
  54        int                     error;          /* last reported error */
  55        int                     nerrors;        /* track consecutive errors */
  56
  57        struct list_head        event_list;     /* hubs w/data or errs ready */
  58        unsigned long           event_bits[1];  /* status change bitmask */
  59        unsigned long           change_bits[1]; /* ports with logical connect
  60                                                        status change */
  61        unsigned long           busy_bits[1];   /* ports being reset or
  62                                                        resumed */
  63        unsigned long           removed_bits[1]; /* ports with a "removed"
  64                                                        device present */
  65#if USB_MAXCHILDREN > 31 /* 8*sizeof(unsigned long) - 1 */
  66#error event_bits[] is too short!
  67#endif
  68
  69        struct usb_hub_descriptor *descriptor;  /* class descriptor */
  70        struct usb_tt           tt;             /* Transaction Translator */
  71
  72        unsigned                mA_per_port;    /* current for each child */
  73
  74        unsigned                limited_power:1;
  75        unsigned                quiescing:1;
  76        unsigned                disconnected:1;
  77
  78        unsigned                has_indicators:1;
  79        u8                      indicator[USB_MAXCHILDREN];
  80        struct delayed_work     leds;
  81        struct delayed_work     init_work;
  82        void                    **port_owners;
  83};
  84
  85static inline int hub_is_superspeed(struct usb_device *hdev)
  86{
  87        return (hdev->descriptor.bDeviceProtocol == 3);
  88}
  89
  90/* Protect struct usb_device->state and ->children members
  91 * Note: Both are also protected by ->dev.sem, except that ->state can
  92 * change to USB_STATE_NOTATTACHED even when the semaphore isn't held. */
  93static DEFINE_SPINLOCK(device_state_lock);
  94
  95/* khubd's worklist and its lock */
  96static DEFINE_SPINLOCK(hub_event_lock);
  97static LIST_HEAD(hub_event_list);       /* List of hubs needing servicing */
  98
  99/* Wakes up khubd */
 100static DECLARE_WAIT_QUEUE_HEAD(khubd_wait);
 101
 102static struct task_struct *khubd_task;
 103
 104/* cycle leds on hubs that aren't blinking for attention */
 105static int blinkenlights = 0;
 106module_param (blinkenlights, bool, S_IRUGO);
 107MODULE_PARM_DESC (blinkenlights, "true to cycle leds on hubs");
 108
 109/*
 110 * Device SATA8000 FW1.0 from DATAST0R Technology Corp requires about
 111 * 10 seconds to send reply for the initial 64-byte descriptor request.
 112 */
 113/* define initial 64-byte descriptor request timeout in milliseconds */
 114static int initial_descriptor_timeout = USB_CTRL_GET_TIMEOUT;
 115module_param(initial_descriptor_timeout, int, S_IRUGO|S_IWUSR);
 116MODULE_PARM_DESC(initial_descriptor_timeout,
 117                "initial 64-byte descriptor request timeout in milliseconds "
 118                "(default 5000 - 5.0 seconds)");
 119
 120/*
 121 * As of 2.6.10 we introduce a new USB device initialization scheme which
 122 * closely resembles the way Windows works.  Hopefully it will be compatible
 123 * with a wider range of devices than the old scheme.  However some previously
 124 * working devices may start giving rise to "device not accepting address"
 125 * errors; if that happens the user can try the old scheme by adjusting the
 126 * following module parameters.
 127 *
 128 * For maximum flexibility there are two boolean parameters to control the
 129 * hub driver's behavior.  On the first initialization attempt, if the
 130 * "old_scheme_first" parameter is set then the old scheme will be used,
 131 * otherwise the new scheme is used.  If that fails and "use_both_schemes"
 132 * is set, then the driver will make another attempt, using the other scheme.
 133 */
 134static int old_scheme_first = 0;
 135module_param(old_scheme_first, bool, S_IRUGO | S_IWUSR);
 136MODULE_PARM_DESC(old_scheme_first,
 137                 "start with the old device initialization scheme");
 138
 139static int use_both_schemes = 1;
 140module_param(use_both_schemes, bool, S_IRUGO | S_IWUSR);
 141MODULE_PARM_DESC(use_both_schemes,
 142                "try the other device initialization scheme if the "
 143                "first one fails");
 144
 145/* Mutual exclusion for EHCI CF initialization.  This interferes with
 146 * port reset on some companion controllers.
 147 */
 148DECLARE_RWSEM(ehci_cf_port_reset_rwsem);
 149EXPORT_SYMBOL_GPL(ehci_cf_port_reset_rwsem);
 150
 151#define HUB_DEBOUNCE_TIMEOUT    1500
 152#define HUB_DEBOUNCE_STEP         25
 153#define HUB_DEBOUNCE_STABLE      100
 154
 155
 156static int usb_reset_and_verify_device(struct usb_device *udev);
 157
 158static inline char *portspeed(struct usb_hub *hub, int portstatus)
 159{
 160        if (hub_is_superspeed(hub->hdev))
 161                return "5.0 Gb/s";
 162        if (portstatus & USB_PORT_STAT_HIGH_SPEED)
 163                return "480 Mb/s";
 164        else if (portstatus & USB_PORT_STAT_LOW_SPEED)
 165                return "1.5 Mb/s";
 166        else
 167                return "12 Mb/s";
 168}
 169
 170/* Note that hdev or one of its children must be locked! */
 171static struct usb_hub *hdev_to_hub(struct usb_device *hdev)
 172{
 173        if (!hdev || !hdev->actconfig)
 174                return NULL;
 175        return usb_get_intfdata(hdev->actconfig->interface[0]);
 176}
 177
 178/* USB 2.0 spec Section 11.24.4.5 */
 179static int get_hub_descriptor(struct usb_device *hdev, void *data)
 180{
 181        int i, ret, size;
 182        unsigned dtype;
 183
 184        if (hub_is_superspeed(hdev)) {
 185                dtype = USB_DT_SS_HUB;
 186                size = USB_DT_SS_HUB_SIZE;
 187        } else {
 188                dtype = USB_DT_HUB;
 189                size = sizeof(struct usb_hub_descriptor);
 190        }
 191
 192        for (i = 0; i < 3; i++) {
 193                ret = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
 194                        USB_REQ_GET_DESCRIPTOR, USB_DIR_IN | USB_RT_HUB,
 195                        dtype << 8, 0, data, size,
 196                        USB_CTRL_GET_TIMEOUT);
 197                if (ret >= (USB_DT_HUB_NONVAR_SIZE + 2))
 198                        return ret;
 199        }
 200        return -EINVAL;
 201}
 202
 203/*
 204 * USB 2.0 spec Section 11.24.2.1
 205 */
 206static int clear_hub_feature(struct usb_device *hdev, int feature)
 207{
 208        return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
 209                USB_REQ_CLEAR_FEATURE, USB_RT_HUB, feature, 0, NULL, 0, 1000);
 210}
 211
 212/*
 213 * USB 2.0 spec Section 11.24.2.2
 214 */
 215static int clear_port_feature(struct usb_device *hdev, int port1, int feature)
 216{
 217        return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
 218                USB_REQ_CLEAR_FEATURE, USB_RT_PORT, feature, port1,
 219                NULL, 0, 1000);
 220}
 221
 222/*
 223 * USB 2.0 spec Section 11.24.2.13
 224 */
 225static int set_port_feature(struct usb_device *hdev, int port1, int feature)
 226{
 227        return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
 228                USB_REQ_SET_FEATURE, USB_RT_PORT, feature, port1,
 229                NULL, 0, 1000);
 230}
 231
 232/*
 233 * USB 2.0 spec Section 11.24.2.7.1.10 and table 11-7
 234 * for info about using port indicators
 235 */
 236static void set_port_led(
 237        struct usb_hub *hub,
 238        int port1,
 239        int selector
 240)
 241{
 242        int status = set_port_feature(hub->hdev, (selector << 8) | port1,
 243                        USB_PORT_FEAT_INDICATOR);
 244        if (status < 0)
 245                dev_dbg (hub->intfdev,
 246                        "port %d indicator %s status %d\n",
 247                        port1,
 248                        ({ char *s; switch (selector) {
 249                        case HUB_LED_AMBER: s = "amber"; break;
 250                        case HUB_LED_GREEN: s = "green"; break;
 251                        case HUB_LED_OFF: s = "off"; break;
 252                        case HUB_LED_AUTO: s = "auto"; break;
 253                        default: s = "??"; break;
 254                        }; s; }),
 255                        status);
 256}
 257
 258#define LED_CYCLE_PERIOD        ((2*HZ)/3)
 259
 260static void led_work (struct work_struct *work)
 261{
 262        struct usb_hub          *hub =
 263                container_of(work, struct usb_hub, leds.work);
 264        struct usb_device       *hdev = hub->hdev;
 265        unsigned                i;
 266        unsigned                changed = 0;
 267        int                     cursor = -1;
 268
 269        if (hdev->state != USB_STATE_CONFIGURED || hub->quiescing)
 270                return;
 271
 272        for (i = 0; i < hub->descriptor->bNbrPorts; i++) {
 273                unsigned        selector, mode;
 274
 275                /* 30%-50% duty cycle */
 276
 277                switch (hub->indicator[i]) {
 278                /* cycle marker */
 279                case INDICATOR_CYCLE:
 280                        cursor = i;
 281                        selector = HUB_LED_AUTO;
 282                        mode = INDICATOR_AUTO;
 283                        break;
 284                /* blinking green = sw attention */
 285                case INDICATOR_GREEN_BLINK:
 286                        selector = HUB_LED_GREEN;
 287                        mode = INDICATOR_GREEN_BLINK_OFF;
 288                        break;
 289                case INDICATOR_GREEN_BLINK_OFF:
 290                        selector = HUB_LED_OFF;
 291                        mode = INDICATOR_GREEN_BLINK;
 292                        break;
 293                /* blinking amber = hw attention */
 294                case INDICATOR_AMBER_BLINK:
 295                        selector = HUB_LED_AMBER;
 296                        mode = INDICATOR_AMBER_BLINK_OFF;
 297                        break;
 298                case INDICATOR_AMBER_BLINK_OFF:
 299                        selector = HUB_LED_OFF;
 300                        mode = INDICATOR_AMBER_BLINK;
 301                        break;
 302                /* blink green/amber = reserved */
 303                case INDICATOR_ALT_BLINK:
 304                        selector = HUB_LED_GREEN;
 305                        mode = INDICATOR_ALT_BLINK_OFF;
 306                        break;
 307                case INDICATOR_ALT_BLINK_OFF:
 308                        selector = HUB_LED_AMBER;
 309                        mode = INDICATOR_ALT_BLINK;
 310                        break;
 311                default:
 312                        continue;
 313                }
 314                if (selector != HUB_LED_AUTO)
 315                        changed = 1;
 316                set_port_led(hub, i + 1, selector);
 317                hub->indicator[i] = mode;
 318        }
 319        if (!changed && blinkenlights) {
 320                cursor++;
 321                cursor %= hub->descriptor->bNbrPorts;
 322                set_port_led(hub, cursor + 1, HUB_LED_GREEN);
 323                hub->indicator[cursor] = INDICATOR_CYCLE;
 324                changed++;
 325        }
 326        if (changed)
 327                schedule_delayed_work(&hub->leds, LED_CYCLE_PERIOD);
 328}
 329
 330/* use a short timeout for hub/port status fetches */
 331#define USB_STS_TIMEOUT         1000
 332#define USB_STS_RETRIES         5
 333
 334/*
 335 * USB 2.0 spec Section 11.24.2.6
 336 */
 337static int get_hub_status(struct usb_device *hdev,
 338                struct usb_hub_status *data)
 339{
 340        int i, status = -ETIMEDOUT;
 341
 342        for (i = 0; i < USB_STS_RETRIES &&
 343                        (status == -ETIMEDOUT || status == -EPIPE); i++) {
 344                status = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
 345                        USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_HUB, 0, 0,
 346                        data, sizeof(*data), USB_STS_TIMEOUT);
 347        }
 348        return status;
 349}
 350
 351/*
 352 * USB 2.0 spec Section 11.24.2.7
 353 */
 354static int get_port_status(struct usb_device *hdev, int port1,
 355                struct usb_port_status *data)
 356{
 357        int i, status = -ETIMEDOUT;
 358
 359        for (i = 0; i < USB_STS_RETRIES &&
 360                        (status == -ETIMEDOUT || status == -EPIPE); i++) {
 361                status = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
 362                        USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_PORT, 0, port1,
 363                        data, sizeof(*data), USB_STS_TIMEOUT);
 364        }
 365        return status;
 366}
 367
 368static int hub_port_status(struct usb_hub *hub, int port1,
 369                u16 *status, u16 *change)
 370{
 371        int ret;
 372
 373        mutex_lock(&hub->status_mutex);
 374        ret = get_port_status(hub->hdev, port1, &hub->status->port);
 375        if (ret < 4) {
 376                dev_err(hub->intfdev,
 377                        "%s failed (err = %d)\n", __func__, ret);
 378                if (ret >= 0)
 379                        ret = -EIO;
 380        } else {
 381                *status = le16_to_cpu(hub->status->port.wPortStatus);
 382                *change = le16_to_cpu(hub->status->port.wPortChange);
 383
 384                ret = 0;
 385        }
 386        mutex_unlock(&hub->status_mutex);
 387        return ret;
 388}
 389
 390static void kick_khubd(struct usb_hub *hub)
 391{
 392        unsigned long   flags;
 393
 394        spin_lock_irqsave(&hub_event_lock, flags);
 395        if (!hub->disconnected && list_empty(&hub->event_list)) {
 396                list_add_tail(&hub->event_list, &hub_event_list);
 397
 398                /* Suppress autosuspend until khubd runs */
 399                usb_autopm_get_interface_no_resume(
 400                                to_usb_interface(hub->intfdev));
 401                wake_up(&khubd_wait);
 402        }
 403        spin_unlock_irqrestore(&hub_event_lock, flags);
 404}
 405
 406void usb_kick_khubd(struct usb_device *hdev)
 407{
 408        struct usb_hub *hub = hdev_to_hub(hdev);
 409
 410        if (hub)
 411                kick_khubd(hub);
 412}
 413
 414
 415/* completion function, fires on port status changes and various faults */
 416static void hub_irq(struct urb *urb)
 417{
 418        struct usb_hub *hub = urb->context;
 419        int status = urb->status;
 420        unsigned i;
 421        unsigned long bits;
 422
 423        switch (status) {
 424        case -ENOENT:           /* synchronous unlink */
 425        case -ECONNRESET:       /* async unlink */
 426        case -ESHUTDOWN:        /* hardware going away */
 427                return;
 428
 429        default:                /* presumably an error */
 430                /* Cause a hub reset after 10 consecutive errors */
 431                dev_dbg (hub->intfdev, "transfer --> %d\n", status);
 432                if ((++hub->nerrors < 10) || hub->error)
 433                        goto resubmit;
 434                hub->error = status;
 435                /* FALL THROUGH */
 436
 437        /* let khubd handle things */
 438        case 0:                 /* we got data:  port status changed */
 439                bits = 0;
 440                for (i = 0; i < urb->actual_length; ++i)
 441                        bits |= ((unsigned long) ((*hub->buffer)[i]))
 442                                        << (i*8);
 443                hub->event_bits[0] = bits;
 444                break;
 445        }
 446
 447        hub->nerrors = 0;
 448
 449        /* Something happened, let khubd figure it out */
 450        kick_khubd(hub);
 451
 452resubmit:
 453        if (hub->quiescing)
 454                return;
 455
 456        if ((status = usb_submit_urb (hub->urb, GFP_ATOMIC)) != 0
 457                        && status != -ENODEV && status != -EPERM)
 458                dev_err (hub->intfdev, "resubmit --> %d\n", status);
 459}
 460
 461/* USB 2.0 spec Section 11.24.2.3 */
 462static inline int
 463hub_clear_tt_buffer (struct usb_device *hdev, u16 devinfo, u16 tt)
 464{
 465        return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
 466                               HUB_CLEAR_TT_BUFFER, USB_RT_PORT, devinfo,
 467                               tt, NULL, 0, 1000);
 468}
 469
 470/*
 471 * enumeration blocks khubd for a long time. we use keventd instead, since
 472 * long blocking there is the exception, not the rule.  accordingly, HCDs
 473 * talking to TTs must queue control transfers (not just bulk and iso), so
 474 * both can talk to the same hub concurrently.
 475 */
 476static void hub_tt_work(struct work_struct *work)
 477{
 478        struct usb_hub          *hub =
 479                container_of(work, struct usb_hub, tt.clear_work);
 480        unsigned long           flags;
 481        int                     limit = 100;
 482
 483        spin_lock_irqsave (&hub->tt.lock, flags);
 484        while (--limit && !list_empty (&hub->tt.clear_list)) {
 485                struct list_head        *next;
 486                struct usb_tt_clear     *clear;
 487                struct usb_device       *hdev = hub->hdev;
 488                const struct hc_driver  *drv;
 489                int                     status;
 490
 491                next = hub->tt.clear_list.next;
 492                clear = list_entry (next, struct usb_tt_clear, clear_list);
 493                list_del (&clear->clear_list);
 494
 495                /* drop lock so HCD can concurrently report other TT errors */
 496                spin_unlock_irqrestore (&hub->tt.lock, flags);
 497                status = hub_clear_tt_buffer (hdev, clear->devinfo, clear->tt);
 498                if (status)
 499                        dev_err (&hdev->dev,
 500                                "clear tt %d (%04x) error %d\n",
 501                                clear->tt, clear->devinfo, status);
 502
 503                /* Tell the HCD, even if the operation failed */
 504                drv = clear->hcd->driver;
 505                if (drv->clear_tt_buffer_complete)
 506                        (drv->clear_tt_buffer_complete)(clear->hcd, clear->ep);
 507
 508                kfree(clear);
 509                spin_lock_irqsave(&hub->tt.lock, flags);
 510        }
 511        spin_unlock_irqrestore (&hub->tt.lock, flags);
 512}
 513
 514/**
 515 * usb_hub_clear_tt_buffer - clear control/bulk TT state in high speed hub
 516 * @urb: an URB associated with the failed or incomplete split transaction
 517 *
 518 * High speed HCDs use this to tell the hub driver that some split control or
 519 * bulk transaction failed in a way that requires clearing internal state of
 520 * a transaction translator.  This is normally detected (and reported) from
 521 * interrupt context.
 522 *
 523 * It may not be possible for that hub to handle additional full (or low)
 524 * speed transactions until that state is fully cleared out.
 525 */
 526int usb_hub_clear_tt_buffer(struct urb *urb)
 527{
 528        struct usb_device       *udev = urb->dev;
 529        int                     pipe = urb->pipe;
 530        struct usb_tt           *tt = udev->tt;
 531        unsigned long           flags;
 532        struct usb_tt_clear     *clear;
 533
 534        /* we've got to cope with an arbitrary number of pending TT clears,
 535         * since each TT has "at least two" buffers that can need it (and
 536         * there can be many TTs per hub).  even if they're uncommon.
 537         */
 538        if ((clear = kmalloc (sizeof *clear, GFP_ATOMIC)) == NULL) {
 539                dev_err (&udev->dev, "can't save CLEAR_TT_BUFFER state\n");
 540                /* FIXME recover somehow ... RESET_TT? */
 541                return -ENOMEM;
 542        }
 543
 544        /* info that CLEAR_TT_BUFFER needs */
 545        clear->tt = tt->multi ? udev->ttport : 1;
 546        clear->devinfo = usb_pipeendpoint (pipe);
 547        clear->devinfo |= udev->devnum << 4;
 548        clear->devinfo |= usb_pipecontrol (pipe)
 549                        ? (USB_ENDPOINT_XFER_CONTROL << 11)
 550                        : (USB_ENDPOINT_XFER_BULK << 11);
 551        if (usb_pipein (pipe))
 552                clear->devinfo |= 1 << 15;
 553
 554        /* info for completion callback */
 555        clear->hcd = bus_to_hcd(udev->bus);
 556        clear->ep = urb->ep;
 557
 558        /* tell keventd to clear state for this TT */
 559        spin_lock_irqsave (&tt->lock, flags);
 560        list_add_tail (&clear->clear_list, &tt->clear_list);
 561        schedule_work(&tt->clear_work);
 562        spin_unlock_irqrestore (&tt->lock, flags);
 563        return 0;
 564}
 565EXPORT_SYMBOL_GPL(usb_hub_clear_tt_buffer);
 566
 567/* If do_delay is false, return the number of milliseconds the caller
 568 * needs to delay.
 569 */
 570static unsigned hub_power_on(struct usb_hub *hub, bool do_delay)
 571{
 572        int port1;
 573        unsigned pgood_delay = hub->descriptor->bPwrOn2PwrGood * 2;
 574        unsigned delay;
 575        u16 wHubCharacteristics =
 576                        le16_to_cpu(hub->descriptor->wHubCharacteristics);
 577
 578        /* Enable power on each port.  Some hubs have reserved values
 579         * of LPSM (> 2) in their descriptors, even though they are
 580         * USB 2.0 hubs.  Some hubs do not implement port-power switching
 581         * but only emulate it.  In all cases, the ports won't work
 582         * unless we send these messages to the hub.
 583         */
 584        if ((wHubCharacteristics & HUB_CHAR_LPSM) < 2)
 585                dev_dbg(hub->intfdev, "enabling power on all ports\n");
 586        else
 587                dev_dbg(hub->intfdev, "trying to enable port power on "
 588                                "non-switchable hub\n");
 589        for (port1 = 1; port1 <= hub->descriptor->bNbrPorts; port1++)
 590                set_port_feature(hub->hdev, port1, USB_PORT_FEAT_POWER);
 591
 592        /* Wait at least 100 msec for power to become stable */
 593        delay = max(pgood_delay, (unsigned) 100);
 594        if (do_delay)
 595                msleep(delay);
 596        return delay;
 597}
 598
 599static int hub_hub_status(struct usb_hub *hub,
 600                u16 *status, u16 *change)
 601{
 602        int ret;
 603
 604        mutex_lock(&hub->status_mutex);
 605        ret = get_hub_status(hub->hdev, &hub->status->hub);
 606        if (ret < 0)
 607                dev_err (hub->intfdev,
 608                        "%s failed (err = %d)\n", __func__, ret);
 609        else {
 610                *status = le16_to_cpu(hub->status->hub.wHubStatus);
 611                *change = le16_to_cpu(hub->status->hub.wHubChange); 
 612                ret = 0;
 613        }
 614        mutex_unlock(&hub->status_mutex);
 615        return ret;
 616}
 617
 618static int hub_port_disable(struct usb_hub *hub, int port1, int set_state)
 619{
 620        struct usb_device *hdev = hub->hdev;
 621        int ret = 0;
 622
 623        if (hdev->children[port1-1] && set_state)
 624                usb_set_device_state(hdev->children[port1-1],
 625                                USB_STATE_NOTATTACHED);
 626        if (!hub->error && !hub_is_superspeed(hub->hdev))
 627                ret = clear_port_feature(hdev, port1, USB_PORT_FEAT_ENABLE);
 628        if (ret)
 629                dev_err(hub->intfdev, "cannot disable port %d (err = %d)\n",
 630                                port1, ret);
 631        return ret;
 632}
 633
 634/*
 635 * Disable a port and mark a logical connect-change event, so that some
 636 * time later khubd will disconnect() any existing usb_device on the port
 637 * and will re-enumerate if there actually is a device attached.
 638 */
 639static void hub_port_logical_disconnect(struct usb_hub *hub, int port1)
 640{
 641        dev_dbg(hub->intfdev, "logical disconnect on port %d\n", port1);
 642        hub_port_disable(hub, port1, 1);
 643
 644        /* FIXME let caller ask to power down the port:
 645         *  - some devices won't enumerate without a VBUS power cycle
 646         *  - SRP saves power that way
 647         *  - ... new call, TBD ...
 648         * That's easy if this hub can switch power per-port, and
 649         * khubd reactivates the port later (timer, SRP, etc).
 650         * Powerdown must be optional, because of reset/DFU.
 651         */
 652
 653        set_bit(port1, hub->change_bits);
 654        kick_khubd(hub);
 655}
 656
 657/**
 658 * usb_remove_device - disable a device's port on its parent hub
 659 * @udev: device to be disabled and removed
 660 * Context: @udev locked, must be able to sleep.
 661 *
 662 * After @udev's port has been disabled, khubd is notified and it will
 663 * see that the device has been disconnected.  When the device is
 664 * physically unplugged and something is plugged in, the events will
 665 * be received and processed normally.
 666 */
 667int usb_remove_device(struct usb_device *udev)
 668{
 669        struct usb_hub *hub;
 670        struct usb_interface *intf;
 671
 672        if (!udev->parent)      /* Can't remove a root hub */
 673                return -EINVAL;
 674        hub = hdev_to_hub(udev->parent);
 675        intf = to_usb_interface(hub->intfdev);
 676
 677        usb_autopm_get_interface(intf);
 678        set_bit(udev->portnum, hub->removed_bits);
 679        hub_port_logical_disconnect(hub, udev->portnum);
 680        usb_autopm_put_interface(intf);
 681        return 0;
 682}
 683
 684enum hub_activation_type {
 685        HUB_INIT, HUB_INIT2, HUB_INIT3,         /* INITs must come first */
 686        HUB_POST_RESET, HUB_RESUME, HUB_RESET_RESUME,
 687};
 688
 689static void hub_init_func2(struct work_struct *ws);
 690static void hub_init_func3(struct work_struct *ws);
 691
 692static void hub_activate(struct usb_hub *hub, enum hub_activation_type type)
 693{
 694        struct usb_device *hdev = hub->hdev;
 695        struct usb_hcd *hcd;
 696        int ret;
 697        int port1;
 698        int status;
 699        bool need_debounce_delay = false;
 700        unsigned delay;
 701
 702        /* Continue a partial initialization */
 703        if (type == HUB_INIT2)
 704                goto init2;
 705        if (type == HUB_INIT3)
 706                goto init3;
 707
 708        /* After a resume, port power should still be on.
 709         * For any other type of activation, turn it on.
 710         */
 711        if (type != HUB_RESUME) {
 712
 713                /* Speed up system boot by using a delayed_work for the
 714                 * hub's initial power-up delays.  This is pretty awkward
 715                 * and the implementation looks like a home-brewed sort of
 716                 * setjmp/longjmp, but it saves at least 100 ms for each
 717                 * root hub (assuming usbcore is compiled into the kernel
 718                 * rather than as a module).  It adds up.
 719                 *
 720                 * This can't be done for HUB_RESUME or HUB_RESET_RESUME
 721                 * because for those activation types the ports have to be
 722                 * operational when we return.  In theory this could be done
 723                 * for HUB_POST_RESET, but it's easier not to.
 724                 */
 725                if (type == HUB_INIT) {
 726                        delay = hub_power_on(hub, false);
 727                        PREPARE_DELAYED_WORK(&hub->init_work, hub_init_func2);
 728                        schedule_delayed_work(&hub->init_work,
 729                                        msecs_to_jiffies(delay));
 730
 731                        /* Suppress autosuspend until init is done */
 732                        usb_autopm_get_interface_no_resume(
 733                                        to_usb_interface(hub->intfdev));
 734                        return;         /* Continues at init2: below */
 735                } else if (type == HUB_RESET_RESUME) {
 736                        /* The internal host controller state for the hub device
 737                         * may be gone after a host power loss on system resume.
 738                         * Update the device's info so the HW knows it's a hub.
 739                         */
 740                        hcd = bus_to_hcd(hdev->bus);
 741                        if (hcd->driver->update_hub_device) {
 742                                ret = hcd->driver->update_hub_device(hcd, hdev,
 743                                                &hub->tt, GFP_NOIO);
 744                                if (ret < 0) {
 745                                        dev_err(hub->intfdev, "Host not "
 746                                                        "accepting hub info "
 747                                                        "update.\n");
 748                                        dev_err(hub->intfdev, "LS/FS devices "
 749                                                        "and hubs may not work "
 750                                                        "under this hub\n.");
 751                                }
 752                        }
 753                        hub_power_on(hub, true);
 754                } else {
 755                        hub_power_on(hub, true);
 756                }
 757        }
 758 init2:
 759
 760        /* Check each port and set hub->change_bits to let khubd know
 761         * which ports need attention.
 762         */
 763        for (port1 = 1; port1 <= hdev->maxchild; ++port1) {
 764                struct usb_device *udev = hdev->children[port1-1];
 765                u16 portstatus, portchange;
 766
 767                portstatus = portchange = 0;
 768                status = hub_port_status(hub, port1, &portstatus, &portchange);
 769                if (udev || (portstatus & USB_PORT_STAT_CONNECTION))
 770                        dev_dbg(hub->intfdev,
 771                                        "port %d: status %04x change %04x\n",
 772                                        port1, portstatus, portchange);
 773
 774                /* After anything other than HUB_RESUME (i.e., initialization
 775                 * or any sort of reset), every port should be disabled.
 776                 * Unconnected ports should likewise be disabled (paranoia),
 777                 * and so should ports for which we have no usb_device.
 778                 */
 779                if ((portstatus & USB_PORT_STAT_ENABLE) && (
 780                                type != HUB_RESUME ||
 781                                !(portstatus & USB_PORT_STAT_CONNECTION) ||
 782                                !udev ||
 783                                udev->state == USB_STATE_NOTATTACHED)) {
 784                        /*
 785                         * USB3 protocol ports will automatically transition
 786                         * to Enabled state when detect an USB3.0 device attach.
 787                         * Do not disable USB3 protocol ports.
 788                         */
 789                        if (!hub_is_superspeed(hdev)) {
 790                                clear_port_feature(hdev, port1,
 791                                                   USB_PORT_FEAT_ENABLE);
 792                                portstatus &= ~USB_PORT_STAT_ENABLE;
 793                        } else {
 794                                /* Pretend that power was lost for USB3 devs */
 795                                portstatus &= ~USB_PORT_STAT_ENABLE;
 796                        }
 797                }
 798
 799                /* Clear status-change flags; we'll debounce later */
 800                if (portchange & USB_PORT_STAT_C_CONNECTION) {
 801                        need_debounce_delay = true;
 802                        clear_port_feature(hub->hdev, port1,
 803                                        USB_PORT_FEAT_C_CONNECTION);
 804                }
 805                if (portchange & USB_PORT_STAT_C_ENABLE) {
 806                        need_debounce_delay = true;
 807                        clear_port_feature(hub->hdev, port1,
 808                                        USB_PORT_FEAT_C_ENABLE);
 809                }
 810                if (portchange & USB_PORT_STAT_C_LINK_STATE) {
 811                        need_debounce_delay = true;
 812                        clear_port_feature(hub->hdev, port1,
 813                                        USB_PORT_FEAT_C_PORT_LINK_STATE);
 814                }
 815
 816                /* We can forget about a "removed" device when there's a
 817                 * physical disconnect or the connect status changes.
 818                 */
 819                if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
 820                                (portchange & USB_PORT_STAT_C_CONNECTION))
 821                        clear_bit(port1, hub->removed_bits);
 822
 823                if (!udev || udev->state == USB_STATE_NOTATTACHED) {
 824                        /* Tell khubd to disconnect the device or
 825                         * check for a new connection
 826                         */
 827                        if (udev || (portstatus & USB_PORT_STAT_CONNECTION))
 828                                set_bit(port1, hub->change_bits);
 829
 830                } else if (portstatus & USB_PORT_STAT_ENABLE) {
 831                        /* The power session apparently survived the resume.
 832                         * If there was an overcurrent or suspend change
 833                         * (i.e., remote wakeup request), have khubd
 834                         * take care of it.
 835                         */
 836                        if (portchange)
 837                                set_bit(port1, hub->change_bits);
 838
 839                } else if (udev->persist_enabled) {
 840#ifdef CONFIG_PM
 841                        udev->reset_resume = 1;
 842#endif
 843                        set_bit(port1, hub->change_bits);
 844
 845                } else {
 846                        /* The power session is gone; tell khubd */
 847                        usb_set_device_state(udev, USB_STATE_NOTATTACHED);
 848                        set_bit(port1, hub->change_bits);
 849                }
 850        }
 851
 852        /* If no port-status-change flags were set, we don't need any
 853         * debouncing.  If flags were set we can try to debounce the
 854         * ports all at once right now, instead of letting khubd do them
 855         * one at a time later on.
 856         *
 857         * If any port-status changes do occur during this delay, khubd
 858         * will see them later and handle them normally.
 859         */
 860        if (need_debounce_delay) {
 861                delay = HUB_DEBOUNCE_STABLE;
 862
 863                /* Don't do a long sleep inside a workqueue routine */
 864                if (type == HUB_INIT2) {
 865                        PREPARE_DELAYED_WORK(&hub->init_work, hub_init_func3);
 866                        schedule_delayed_work(&hub->init_work,
 867                                        msecs_to_jiffies(delay));
 868                        return;         /* Continues at init3: below */
 869                } else {
 870                        msleep(delay);
 871                }
 872        }
 873 init3:
 874        hub->quiescing = 0;
 875
 876        status = usb_submit_urb(hub->urb, GFP_NOIO);
 877        if (status < 0)
 878                dev_err(hub->intfdev, "activate --> %d\n", status);
 879        if (hub->has_indicators && blinkenlights)
 880                schedule_delayed_work(&hub->leds, LED_CYCLE_PERIOD);
 881
 882        /* Scan all ports that need attention */
 883        kick_khubd(hub);
 884
 885        /* Allow autosuspend if it was suppressed */
 886        if (type <= HUB_INIT3)
 887                usb_autopm_put_interface_async(to_usb_interface(hub->intfdev));
 888}
 889
 890/* Implement the continuations for the delays above */
 891static void hub_init_func2(struct work_struct *ws)
 892{
 893        struct usb_hub *hub = container_of(ws, struct usb_hub, init_work.work);
 894
 895        hub_activate(hub, HUB_INIT2);
 896}
 897
 898static void hub_init_func3(struct work_struct *ws)
 899{
 900        struct usb_hub *hub = container_of(ws, struct usb_hub, init_work.work);
 901
 902        hub_activate(hub, HUB_INIT3);
 903}
 904
 905enum hub_quiescing_type {
 906        HUB_DISCONNECT, HUB_PRE_RESET, HUB_SUSPEND
 907};
 908
 909static void hub_quiesce(struct usb_hub *hub, enum hub_quiescing_type type)
 910{
 911        struct usb_device *hdev = hub->hdev;
 912        int i;
 913
 914        cancel_delayed_work_sync(&hub->init_work);
 915
 916        /* khubd and related activity won't re-trigger */
 917        hub->quiescing = 1;
 918
 919        if (type != HUB_SUSPEND) {
 920                /* Disconnect all the children */
 921                for (i = 0; i < hdev->maxchild; ++i) {
 922                        if (hdev->children[i])
 923                                usb_disconnect(&hdev->children[i]);
 924                }
 925        }
 926
 927        /* Stop khubd and related activity */
 928        usb_kill_urb(hub->urb);
 929        if (hub->has_indicators)
 930                cancel_delayed_work_sync(&hub->leds);
 931        if (hub->tt.hub)
 932                cancel_work_sync(&hub->tt.clear_work);
 933}
 934
 935/* caller has locked the hub device */
 936static int hub_pre_reset(struct usb_interface *intf)
 937{
 938        struct usb_hub *hub = usb_get_intfdata(intf);
 939
 940        hub_quiesce(hub, HUB_PRE_RESET);
 941        return 0;
 942}
 943
 944/* caller has locked the hub device */
 945static int hub_post_reset(struct usb_interface *intf)
 946{
 947        struct usb_hub *hub = usb_get_intfdata(intf);
 948
 949        hub_activate(hub, HUB_POST_RESET);
 950        return 0;
 951}
 952
 953static int hub_configure(struct usb_hub *hub,
 954        struct usb_endpoint_descriptor *endpoint)
 955{
 956        struct usb_hcd *hcd;
 957        struct usb_device *hdev = hub->hdev;
 958        struct device *hub_dev = hub->intfdev;
 959        u16 hubstatus, hubchange;
 960        u16 wHubCharacteristics;
 961        unsigned int pipe;
 962        int maxp, ret;
 963        char *message = "out of memory";
 964
 965        hub->buffer = kmalloc(sizeof(*hub->buffer), GFP_KERNEL);
 966        if (!hub->buffer) {
 967                ret = -ENOMEM;
 968                goto fail;
 969        }
 970
 971        hub->status = kmalloc(sizeof(*hub->status), GFP_KERNEL);
 972        if (!hub->status) {
 973                ret = -ENOMEM;
 974                goto fail;
 975        }
 976        mutex_init(&hub->status_mutex);
 977
 978        hub->descriptor = kmalloc(sizeof(*hub->descriptor), GFP_KERNEL);
 979        if (!hub->descriptor) {
 980                ret = -ENOMEM;
 981                goto fail;
 982        }
 983
 984        if (hub_is_superspeed(hdev) && (hdev->parent != NULL)) {
 985                ret = usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
 986                                HUB_SET_DEPTH, USB_RT_HUB,
 987                                hdev->level - 1, 0, NULL, 0,
 988                                USB_CTRL_SET_TIMEOUT);
 989
 990                if (ret < 0) {
 991                        message = "can't set hub depth";
 992                        goto fail;
 993                }
 994        }
 995
 996        /* Request the entire hub descriptor.
 997         * hub->descriptor can handle USB_MAXCHILDREN ports,
 998         * but the hub can/will return fewer bytes here.
 999         */
1000        ret = get_hub_descriptor(hdev, hub->descriptor);
1001        if (ret < 0) {
1002                message = "can't read hub descriptor";
1003                goto fail;
1004        } else if (hub->descriptor->bNbrPorts > USB_MAXCHILDREN) {
1005                message = "hub has too many ports!";
1006                ret = -ENODEV;
1007                goto fail;
1008        }
1009
1010        hdev->maxchild = hub->descriptor->bNbrPorts;
1011        dev_info (hub_dev, "%d port%s detected\n", hdev->maxchild,
1012                (hdev->maxchild == 1) ? "" : "s");
1013
1014        hub->port_owners = kzalloc(hdev->maxchild * sizeof(void *), GFP_KERNEL);
1015        if (!hub->port_owners) {
1016                ret = -ENOMEM;
1017                goto fail;
1018        }
1019
1020        wHubCharacteristics = le16_to_cpu(hub->descriptor->wHubCharacteristics);
1021
1022        /* FIXME for USB 3.0, skip for now */
1023        if ((wHubCharacteristics & HUB_CHAR_COMPOUND) &&
1024                        !(hub_is_superspeed(hdev))) {
1025                int     i;
1026                char    portstr [USB_MAXCHILDREN + 1];
1027
1028                for (i = 0; i < hdev->maxchild; i++)
1029                        portstr[i] = hub->descriptor->u.hs.DeviceRemovable
1030                                    [((i + 1) / 8)] & (1 << ((i + 1) % 8))
1031                                ? 'F' : 'R';
1032                portstr[hdev->maxchild] = 0;
1033                dev_dbg(hub_dev, "compound device; port removable status: %s\n", portstr);
1034        } else
1035                dev_dbg(hub_dev, "standalone hub\n");
1036
1037        switch (wHubCharacteristics & HUB_CHAR_LPSM) {
1038                case 0x00:
1039                        dev_dbg(hub_dev, "ganged power switching\n");
1040                        break;
1041                case 0x01:
1042                        dev_dbg(hub_dev, "individual port power switching\n");
1043                        break;
1044                case 0x02:
1045                case 0x03:
1046                        dev_dbg(hub_dev, "no power switching (usb 1.0)\n");
1047                        break;
1048        }
1049
1050        switch (wHubCharacteristics & HUB_CHAR_OCPM) {
1051                case 0x00:
1052                        dev_dbg(hub_dev, "global over-current protection\n");
1053                        break;
1054                case 0x08:
1055                        dev_dbg(hub_dev, "individual port over-current protection\n");
1056                        break;
1057                case 0x10:
1058                case 0x18:
1059                        dev_dbg(hub_dev, "no over-current protection\n");
1060                        break;
1061        }
1062
1063        spin_lock_init (&hub->tt.lock);
1064        INIT_LIST_HEAD (&hub->tt.clear_list);
1065        INIT_WORK(&hub->tt.clear_work, hub_tt_work);
1066        switch (hdev->descriptor.bDeviceProtocol) {
1067                case 0:
1068                        break;
1069                case 1:
1070                        dev_dbg(hub_dev, "Single TT\n");
1071                        hub->tt.hub = hdev;
1072                        break;
1073                case 2:
1074                        ret = usb_set_interface(hdev, 0, 1);
1075                        if (ret == 0) {
1076                                dev_dbg(hub_dev, "TT per port\n");
1077                                hub->tt.multi = 1;
1078                        } else
1079                                dev_err(hub_dev, "Using single TT (err %d)\n",
1080                                        ret);
1081                        hub->tt.hub = hdev;
1082                        break;
1083                case 3:
1084                        /* USB 3.0 hubs don't have a TT */
1085                        break;
1086                default:
1087                        dev_dbg(hub_dev, "Unrecognized hub protocol %d\n",
1088                                hdev->descriptor.bDeviceProtocol);
1089                        break;
1090        }
1091
1092        /* Note 8 FS bit times == (8 bits / 12000000 bps) ~= 666ns */
1093        switch (wHubCharacteristics & HUB_CHAR_TTTT) {
1094                case HUB_TTTT_8_BITS:
1095                        if (hdev->descriptor.bDeviceProtocol != 0) {
1096                                hub->tt.think_time = 666;
1097                                dev_dbg(hub_dev, "TT requires at most %d "
1098                                                "FS bit times (%d ns)\n",
1099                                        8, hub->tt.think_time);
1100                        }
1101                        break;
1102                case HUB_TTTT_16_BITS:
1103                        hub->tt.think_time = 666 * 2;
1104                        dev_dbg(hub_dev, "TT requires at most %d "
1105                                        "FS bit times (%d ns)\n",
1106                                16, hub->tt.think_time);
1107                        break;
1108                case HUB_TTTT_24_BITS:
1109                        hub->tt.think_time = 666 * 3;
1110                        dev_dbg(hub_dev, "TT requires at most %d "
1111                                        "FS bit times (%d ns)\n",
1112                                24, hub->tt.think_time);
1113                        break;
1114                case HUB_TTTT_32_BITS:
1115                        hub->tt.think_time = 666 * 4;
1116                        dev_dbg(hub_dev, "TT requires at most %d "
1117                                        "FS bit times (%d ns)\n",
1118                                32, hub->tt.think_time);
1119                        break;
1120        }
1121
1122        /* probe() zeroes hub->indicator[] */
1123        if (wHubCharacteristics & HUB_CHAR_PORTIND) {
1124                hub->has_indicators = 1;
1125                dev_dbg(hub_dev, "Port indicators are supported\n");
1126        }
1127
1128        dev_dbg(hub_dev, "power on to power good time: %dms\n",
1129                hub->descriptor->bPwrOn2PwrGood * 2);
1130
1131        /* power budgeting mostly matters with bus-powered hubs,
1132         * and battery-powered root hubs (may provide just 8 mA).
1133         */
1134        ret = usb_get_status(hdev, USB_RECIP_DEVICE, 0, &hubstatus);
1135        if (ret < 2) {
1136                message = "can't get hub status";
1137                goto fail;
1138        }
1139        le16_to_cpus(&hubstatus);
1140        if (hdev == hdev->bus->root_hub) {
1141                if (hdev->bus_mA == 0 || hdev->bus_mA >= 500)
1142                        hub->mA_per_port = 500;
1143                else {
1144                        hub->mA_per_port = hdev->bus_mA;
1145                        hub->limited_power = 1;
1146                }
1147        } else if ((hubstatus & (1 << USB_DEVICE_SELF_POWERED)) == 0) {
1148                dev_dbg(hub_dev, "hub controller current requirement: %dmA\n",
1149                        hub->descriptor->bHubContrCurrent);
1150                hub->limited_power = 1;
1151                if (hdev->maxchild > 0) {
1152                        int remaining = hdev->bus_mA -
1153                                        hub->descriptor->bHubContrCurrent;
1154
1155                        if (remaining < hdev->maxchild * 100)
1156                                dev_warn(hub_dev,
1157                                        "insufficient power available "
1158                                        "to use all downstream ports\n");
1159                        hub->mA_per_port = 100;         /* 7.2.1.1 */
1160                }
1161        } else {        /* Self-powered external hub */
1162                /* FIXME: What about battery-powered external hubs that
1163                 * provide less current per port? */
1164                hub->mA_per_port = 500;
1165        }
1166        if (hub->mA_per_port < 500)
1167                dev_dbg(hub_dev, "%umA bus power budget for each child\n",
1168                                hub->mA_per_port);
1169
1170        /* Update the HCD's internal representation of this hub before khubd
1171         * starts getting port status changes for devices under the hub.
1172         */
1173        hcd = bus_to_hcd(hdev->bus);
1174        if (hcd->driver->update_hub_device) {
1175                ret = hcd->driver->update_hub_device(hcd, hdev,
1176                                &hub->tt, GFP_KERNEL);
1177                if (ret < 0) {
1178                        message = "can't update HCD hub info";
1179                        goto fail;
1180                }
1181        }
1182
1183        ret = hub_hub_status(hub, &hubstatus, &hubchange);
1184        if (ret < 0) {
1185                message = "can't get hub status";
1186                goto fail;
1187        }
1188
1189        /* local power status reports aren't always correct */
1190        if (hdev->actconfig->desc.bmAttributes & USB_CONFIG_ATT_SELFPOWER)
1191                dev_dbg(hub_dev, "local power source is %s\n",
1192                        (hubstatus & HUB_STATUS_LOCAL_POWER)
1193                        ? "lost (inactive)" : "good");
1194
1195        if ((wHubCharacteristics & HUB_CHAR_OCPM) == 0)
1196                dev_dbg(hub_dev, "%sover-current condition exists\n",
1197                        (hubstatus & HUB_STATUS_OVERCURRENT) ? "" : "no ");
1198
1199        /* set up the interrupt endpoint
1200         * We use the EP's maxpacket size instead of (PORTS+1+7)/8
1201         * bytes as USB2.0[11.12.3] says because some hubs are known
1202         * to send more data (and thus cause overflow). For root hubs,
1203         * maxpktsize is defined in hcd.c's fake endpoint descriptors
1204         * to be big enough for at least USB_MAXCHILDREN ports. */
1205        pipe = usb_rcvintpipe(hdev, endpoint->bEndpointAddress);
1206        maxp = usb_maxpacket(hdev, pipe, usb_pipeout(pipe));
1207
1208        if (maxp > sizeof(*hub->buffer))
1209                maxp = sizeof(*hub->buffer);
1210
1211        hub->urb = usb_alloc_urb(0, GFP_KERNEL);
1212        if (!hub->urb) {
1213                ret = -ENOMEM;
1214                goto fail;
1215        }
1216
1217        usb_fill_int_urb(hub->urb, hdev, pipe, *hub->buffer, maxp, hub_irq,
1218                hub, endpoint->bInterval);
1219
1220        /* maybe cycle the hub leds */
1221        if (hub->has_indicators && blinkenlights)
1222                hub->indicator [0] = INDICATOR_CYCLE;
1223
1224        hub_activate(hub, HUB_INIT);
1225        return 0;
1226
1227fail:
1228        dev_err (hub_dev, "config failed, %s (err %d)\n",
1229                        message, ret);
1230        /* hub_disconnect() frees urb and descriptor */
1231        return ret;
1232}
1233
1234static void hub_release(struct kref *kref)
1235{
1236        struct usb_hub *hub = container_of(kref, struct usb_hub, kref);
1237
1238        usb_put_intf(to_usb_interface(hub->intfdev));
1239        kfree(hub);
1240}
1241
1242static unsigned highspeed_hubs;
1243
1244static void hub_disconnect(struct usb_interface *intf)
1245{
1246        struct usb_hub *hub = usb_get_intfdata (intf);
1247
1248        /* Take the hub off the event list and don't let it be added again */
1249        spin_lock_irq(&hub_event_lock);
1250        if (!list_empty(&hub->event_list)) {
1251                list_del_init(&hub->event_list);
1252                usb_autopm_put_interface_no_suspend(intf);
1253        }
1254        hub->disconnected = 1;
1255        spin_unlock_irq(&hub_event_lock);
1256
1257        /* Disconnect all children and quiesce the hub */
1258        hub->error = 0;
1259        hub_quiesce(hub, HUB_DISCONNECT);
1260
1261        usb_set_intfdata (intf, NULL);
1262        hub->hdev->maxchild = 0;
1263
1264        if (hub->hdev->speed == USB_SPEED_HIGH)
1265                highspeed_hubs--;
1266
1267        usb_free_urb(hub->urb);
1268        kfree(hub->port_owners);
1269        kfree(hub->descriptor);
1270        kfree(hub->status);
1271        kfree(hub->buffer);
1272
1273        kref_put(&hub->kref, hub_release);
1274}
1275
1276static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
1277{
1278        struct usb_host_interface *desc;
1279        struct usb_endpoint_descriptor *endpoint;
1280        struct usb_device *hdev;
1281        struct usb_hub *hub;
1282
1283        desc = intf->cur_altsetting;
1284        hdev = interface_to_usbdev(intf);
1285
1286        /* Hubs have proper suspend/resume support.  USB 3.0 device suspend is
1287         * different from USB 2.0/1.1 device suspend, and unfortunately we
1288         * don't support it yet.  So leave autosuspend disabled for USB 3.0
1289         * external hubs for now.  Enable autosuspend for USB 3.0 roothubs,
1290         * since that isn't a "real" hub.
1291         */
1292        if (!hub_is_superspeed(hdev) || !hdev->parent)
1293                usb_enable_autosuspend(hdev);
1294
1295        if (hdev->level == MAX_TOPO_LEVEL) {
1296                dev_err(&intf->dev,
1297                        "Unsupported bus topology: hub nested too deep\n");
1298                return -E2BIG;
1299        }
1300
1301#ifdef  CONFIG_USB_OTG_BLACKLIST_HUB
1302        if (hdev->parent) {
1303                dev_warn(&intf->dev, "ignoring external hub\n");
1304                return -ENODEV;
1305        }
1306#endif
1307
1308        /* Some hubs have a subclass of 1, which AFAICT according to the */
1309        /*  specs is not defined, but it works */
1310        if ((desc->desc.bInterfaceSubClass != 0) &&
1311            (desc->desc.bInterfaceSubClass != 1)) {
1312descriptor_error:
1313                dev_err (&intf->dev, "bad descriptor, ignoring hub\n");
1314                return -EIO;
1315        }
1316
1317        /* Multiple endpoints? What kind of mutant ninja-hub is this? */
1318        if (desc->desc.bNumEndpoints != 1)
1319                goto descriptor_error;
1320
1321        endpoint = &desc->endpoint[0].desc;
1322
1323        /* If it's not an interrupt in endpoint, we'd better punt! */
1324        if (!usb_endpoint_is_int_in(endpoint))
1325                goto descriptor_error;
1326
1327        /* We found a hub */
1328        dev_info (&intf->dev, "USB hub found\n");
1329
1330        hub = kzalloc(sizeof(*hub), GFP_KERNEL);
1331        if (!hub) {
1332                dev_dbg (&intf->dev, "couldn't kmalloc hub struct\n");
1333                return -ENOMEM;
1334        }
1335
1336        kref_init(&hub->kref);
1337        INIT_LIST_HEAD(&hub->event_list);
1338        hub->intfdev = &intf->dev;
1339        hub->hdev = hdev;
1340        INIT_DELAYED_WORK(&hub->leds, led_work);
1341        INIT_DELAYED_WORK(&hub->init_work, NULL);
1342        usb_get_intf(intf);
1343
1344        usb_set_intfdata (intf, hub);
1345        intf->needs_remote_wakeup = 1;
1346
1347        if (hdev->speed == USB_SPEED_HIGH)
1348                highspeed_hubs++;
1349
1350        if (hub_configure(hub, endpoint) >= 0)
1351                return 0;
1352
1353        hub_disconnect (intf);
1354        return -ENODEV;
1355}
1356
1357/* No BKL needed */
1358static int
1359hub_ioctl(struct usb_interface *intf, unsigned int code, void *user_data)
1360{
1361        struct usb_device *hdev = interface_to_usbdev (intf);
1362
1363        /* assert ifno == 0 (part of hub spec) */
1364        switch (code) {
1365        case USBDEVFS_HUB_PORTINFO: {
1366                struct usbdevfs_hub_portinfo *info = user_data;
1367                int i;
1368
1369                spin_lock_irq(&device_state_lock);
1370                if (hdev->devnum <= 0)
1371                        info->nports = 0;
1372                else {
1373                        info->nports = hdev->maxchild;
1374                        for (i = 0; i < info->nports; i++) {
1375                                if (hdev->children[i] == NULL)
1376                                        info->port[i] = 0;
1377                                else
1378                                        info->port[i] =
1379                                                hdev->children[i]->devnum;
1380                        }
1381                }
1382                spin_unlock_irq(&device_state_lock);
1383
1384                return info->nports + 1;
1385                }
1386
1387        default:
1388                return -ENOSYS;
1389        }
1390}
1391
1392/*
1393 * Allow user programs to claim ports on a hub.  When a device is attached
1394 * to one of these "claimed" ports, the program will "own" the device.
1395 */
1396static int find_port_owner(struct usb_device *hdev, unsigned port1,
1397                void ***ppowner)
1398{
1399        if (hdev->state == USB_STATE_NOTATTACHED)
1400                return -ENODEV;
1401        if (port1 == 0 || port1 > hdev->maxchild)
1402                return -EINVAL;
1403
1404        /* This assumes that devices not managed by the hub driver
1405         * will always have maxchild equal to 0.
1406         */
1407        *ppowner = &(hdev_to_hub(hdev)->port_owners[port1 - 1]);
1408        return 0;
1409}
1410
1411/* In the following three functions, the caller must hold hdev's lock */
1412int usb_hub_claim_port(struct usb_device *hdev, unsigned port1, void *owner)
1413{
1414        int rc;
1415        void **powner;
1416
1417        rc = find_port_owner(hdev, port1, &powner);
1418        if (rc)
1419                return rc;
1420        if (*powner)
1421                return -EBUSY;
1422        *powner = owner;
1423        return rc;
1424}
1425
1426int usb_hub_release_port(struct usb_device *hdev, unsigned port1, void *owner)
1427{
1428        int rc;
1429        void **powner;
1430
1431        rc = find_port_owner(hdev, port1, &powner);
1432        if (rc)
1433                return rc;
1434        if (*powner != owner)
1435                return -ENOENT;
1436        *powner = NULL;
1437        return rc;
1438}
1439
1440void usb_hub_release_all_ports(struct usb_device *hdev, void *owner)
1441{
1442        int n;
1443        void **powner;
1444
1445        n = find_port_owner(hdev, 1, &powner);
1446        if (n == 0) {
1447                for (; n < hdev->maxchild; (++n, ++powner)) {
1448                        if (*powner == owner)
1449                                *powner = NULL;
1450                }
1451        }
1452}
1453
1454/* The caller must hold udev's lock */
1455bool usb_device_is_owned(struct usb_device *udev)
1456{
1457        struct usb_hub *hub;
1458
1459        if (udev->state == USB_STATE_NOTATTACHED || !udev->parent)
1460                return false;
1461        hub = hdev_to_hub(udev->parent);
1462        return !!hub->port_owners[udev->portnum - 1];
1463}
1464
1465
1466static void recursively_mark_NOTATTACHED(struct usb_device *udev)
1467{
1468        int i;
1469
1470        for (i = 0; i < udev->maxchild; ++i) {
1471                if (udev->children[i])
1472                        recursively_mark_NOTATTACHED(udev->children[i]);
1473        }
1474        if (udev->state == USB_STATE_SUSPENDED)
1475                udev->active_duration -= jiffies;
1476        udev->state = USB_STATE_NOTATTACHED;
1477}
1478
1479/**
1480 * usb_set_device_state - change a device's current state (usbcore, hcds)
1481 * @udev: pointer to device whose state should be changed
1482 * @new_state: new state value to be stored
1483 *
1484 * udev->state is _not_ fully protected by the device lock.  Although
1485 * most transitions are made only while holding the lock, the state can
1486 * can change to USB_STATE_NOTATTACHED at almost any time.  This
1487 * is so that devices can be marked as disconnected as soon as possible,
1488 * without having to wait for any semaphores to be released.  As a result,
1489 * all changes to any device's state must be protected by the
1490 * device_state_lock spinlock.
1491 *
1492 * Once a device has been added to the device tree, all changes to its state
1493 * should be made using this routine.  The state should _not_ be set directly.
1494 *
1495 * If udev->state is already USB_STATE_NOTATTACHED then no change is made.
1496 * Otherwise udev->state is set to new_state, and if new_state is
1497 * USB_STATE_NOTATTACHED then all of udev's descendants' states are also set
1498 * to USB_STATE_NOTATTACHED.
1499 */
1500void usb_set_device_state(struct usb_device *udev,
1501                enum usb_device_state new_state)
1502{
1503        unsigned long flags;
1504        int wakeup = -1;
1505
1506        spin_lock_irqsave(&device_state_lock, flags);
1507        if (udev->state == USB_STATE_NOTATTACHED)
1508                ;       /* do nothing */
1509        else if (new_state != USB_STATE_NOTATTACHED) {
1510
1511                /* root hub wakeup capabilities are managed out-of-band
1512                 * and may involve silicon errata ... ignore them here.
1513                 */
1514                if (udev->parent) {
1515                        if (udev->state == USB_STATE_SUSPENDED
1516                                        || new_state == USB_STATE_SUSPENDED)
1517                                ;       /* No change to wakeup settings */
1518                        else if (new_state == USB_STATE_CONFIGURED)
1519                                wakeup = udev->actconfig->desc.bmAttributes
1520                                         & USB_CONFIG_ATT_WAKEUP;
1521                        else
1522                                wakeup = 0;
1523                }
1524                if (udev->state == USB_STATE_SUSPENDED &&
1525                        new_state != USB_STATE_SUSPENDED)
1526                        udev->active_duration -= jiffies;
1527                else if (new_state == USB_STATE_SUSPENDED &&
1528                                udev->state != USB_STATE_SUSPENDED)
1529                        udev->active_duration += jiffies;
1530                udev->state = new_state;
1531        } else
1532                recursively_mark_NOTATTACHED(udev);
1533        spin_unlock_irqrestore(&device_state_lock, flags);
1534        if (wakeup >= 0)
1535                device_set_wakeup_capable(&udev->dev, wakeup);
1536}
1537EXPORT_SYMBOL_GPL(usb_set_device_state);
1538
1539/*
1540 * Choose a device number.
1541 *
1542 * Device numbers are used as filenames in usbfs.  On USB-1.1 and
1543 * USB-2.0 buses they are also used as device addresses, however on
1544 * USB-3.0 buses the address is assigned by the controller hardware
1545 * and it usually is not the same as the device number.
1546 *
1547 * WUSB devices are simple: they have no hubs behind, so the mapping
1548 * device <-> virtual port number becomes 1:1. Why? to simplify the
1549 * life of the device connection logic in
1550 * drivers/usb/wusbcore/devconnect.c. When we do the initial secret
1551 * handshake we need to assign a temporary address in the unauthorized
1552 * space. For simplicity we use the first virtual port number found to
1553 * be free [drivers/usb/wusbcore/devconnect.c:wusbhc_devconnect_ack()]
1554 * and that becomes it's address [X < 128] or its unauthorized address
1555 * [X | 0x80].
1556 *
1557 * We add 1 as an offset to the one-based USB-stack port number
1558 * (zero-based wusb virtual port index) for two reasons: (a) dev addr
1559 * 0 is reserved by USB for default address; (b) Linux's USB stack
1560 * uses always #1 for the root hub of the controller. So USB stack's
1561 * port #1, which is wusb virtual-port #0 has address #2.
1562 *
1563 * Devices connected under xHCI are not as simple.  The host controller
1564 * supports virtualization, so the hardware assigns device addresses and
1565 * the HCD must setup data structures before issuing a set address
1566 * command to the hardware.
1567 */
1568static void choose_devnum(struct usb_device *udev)
1569{
1570        int             devnum;
1571        struct usb_bus  *bus = udev->bus;
1572
1573        /* If khubd ever becomes multithreaded, this will need a lock */
1574        if (udev->wusb) {
1575                devnum = udev->portnum + 1;
1576                BUG_ON(test_bit(devnum, bus->devmap.devicemap));
1577        } else {
1578                /* Try to allocate the next devnum beginning at
1579                 * bus->devnum_next. */
1580                devnum = find_next_zero_bit(bus->devmap.devicemap, 128,
1581                                            bus->devnum_next);
1582                if (devnum >= 128)
1583                        devnum = find_next_zero_bit(bus->devmap.devicemap,
1584                                                    128, 1);
1585                bus->devnum_next = ( devnum >= 127 ? 1 : devnum + 1);
1586        }
1587        if (devnum < 128) {
1588                set_bit(devnum, bus->devmap.devicemap);
1589                udev->devnum = devnum;
1590        }
1591}
1592
1593static void release_devnum(struct usb_device *udev)
1594{
1595        if (udev->devnum > 0) {
1596                clear_bit(udev->devnum, udev->bus->devmap.devicemap);
1597                udev->devnum = -1;
1598        }
1599}
1600
1601static void update_devnum(struct usb_device *udev, int devnum)
1602{
1603        /* The address for a WUSB device is managed by wusbcore. */
1604        if (!udev->wusb)
1605                udev->devnum = devnum;
1606}
1607
1608static void hub_free_dev(struct usb_device *udev)
1609{
1610        struct usb_hcd *hcd = bus_to_hcd(udev->bus);
1611
1612        /* Root hubs aren't real devices, so don't free HCD resources */
1613        if (hcd->driver->free_dev && udev->parent)
1614                hcd->driver->free_dev(hcd, udev);
1615}
1616
1617/**
1618 * usb_disconnect - disconnect a device (usbcore-internal)
1619 * @pdev: pointer to device being disconnected
1620 * Context: !in_interrupt ()
1621 *
1622 * Something got disconnected. Get rid of it and all of its children.
1623 *
1624 * If *pdev is a normal device then the parent hub must already be locked.
1625 * If *pdev is a root hub then this routine will acquire the
1626 * usb_bus_list_lock on behalf of the caller.
1627 *
1628 * Only hub drivers (including virtual root hub drivers for host
1629 * controllers) should ever call this.
1630 *
1631 * This call is synchronous, and may not be used in an interrupt context.
1632 */
1633void usb_disconnect(struct usb_device **pdev)
1634{
1635        struct usb_device       *udev = *pdev;
1636        int                     i;
1637        struct usb_hcd          *hcd = bus_to_hcd(udev->bus);
1638
1639        if (!udev) {
1640                pr_debug ("%s nodev\n", __func__);
1641                return;
1642        }
1643
1644        /* mark the device as inactive, so any further urb submissions for
1645         * this device (and any of its children) will fail immediately.
1646         * this quiesces everything except pending urbs.
1647         */
1648        usb_set_device_state(udev, USB_STATE_NOTATTACHED);
1649        dev_info(&udev->dev, "USB disconnect, device number %d\n",
1650                        udev->devnum);
1651
1652        usb_lock_device(udev);
1653
1654        /* Free up all the children before we remove this device */
1655        for (i = 0; i < USB_MAXCHILDREN; i++) {
1656                if (udev->children[i])
1657                        usb_disconnect(&udev->children[i]);
1658        }
1659
1660        /* deallocate hcd/hardware state ... nuking all pending urbs and
1661         * cleaning up all state associated with the current configuration
1662         * so that the hardware is now fully quiesced.
1663         */
1664        dev_dbg (&udev->dev, "unregistering device\n");
1665        mutex_lock(hcd->bandwidth_mutex);
1666        usb_disable_device(udev, 0);
1667        mutex_unlock(hcd->bandwidth_mutex);
1668        usb_hcd_synchronize_unlinks(udev);
1669
1670        usb_remove_ep_devs(&udev->ep0);
1671        usb_unlock_device(udev);
1672
1673        /* Unregister the device.  The device driver is responsible
1674         * for de-configuring the device and invoking the remove-device
1675         * notifier chain (used by usbfs and possibly others).
1676         */
1677        device_del(&udev->dev);
1678
1679        /* Free the device number and delete the parent's children[]
1680         * (or root_hub) pointer.
1681         */
1682        release_devnum(udev);
1683
1684        /* Avoid races with recursively_mark_NOTATTACHED() */
1685        spin_lock_irq(&device_state_lock);
1686        *pdev = NULL;
1687        spin_unlock_irq(&device_state_lock);
1688
1689        hub_free_dev(udev);
1690
1691        put_device(&udev->dev);
1692}
1693
1694#ifdef CONFIG_USB_ANNOUNCE_NEW_DEVICES
1695static void show_string(struct usb_device *udev, char *id, char *string)
1696{
1697        if (!string)
1698                return;
1699        dev_printk(KERN_INFO, &udev->dev, "%s: %s\n", id, string);
1700}
1701
1702static void announce_device(struct usb_device *udev)
1703{
1704        dev_info(&udev->dev, "New USB device found, idVendor=%04x, idProduct=%04x\n",
1705                le16_to_cpu(udev->descriptor.idVendor),
1706                le16_to_cpu(udev->descriptor.idProduct));
1707        dev_info(&udev->dev,
1708                "New USB device strings: Mfr=%d, Product=%d, SerialNumber=%d\n",
1709                udev->descriptor.iManufacturer,
1710                udev->descriptor.iProduct,
1711                udev->descriptor.iSerialNumber);
1712        show_string(udev, "Product", udev->product);
1713        show_string(udev, "Manufacturer", udev->manufacturer);
1714        show_string(udev, "SerialNumber", udev->serial);
1715}
1716#else
1717static inline void announce_device(struct usb_device *udev) { }
1718#endif
1719
1720#ifdef  CONFIG_USB_OTG
1721#include "otg_whitelist.h"
1722#endif
1723
1724/**
1725 * usb_enumerate_device_otg - FIXME (usbcore-internal)
1726 * @udev: newly addressed device (in ADDRESS state)
1727 *
1728 * Finish enumeration for On-The-Go devices
1729 */
1730static int usb_enumerate_device_otg(struct usb_device *udev)
1731{
1732        int err = 0;
1733
1734#ifdef  CONFIG_USB_OTG
1735        /*
1736         * OTG-aware devices on OTG-capable root hubs may be able to use SRP,
1737         * to wake us after we've powered off VBUS; and HNP, switching roles
1738         * "host" to "peripheral".  The OTG descriptor helps figure this out.
1739         */
1740        if (!udev->bus->is_b_host
1741                        && udev->config
1742                        && udev->parent == udev->bus->root_hub) {
1743                struct usb_otg_descriptor       *desc = NULL;
1744                struct usb_bus                  *bus = udev->bus;
1745
1746                /* descriptor may appear anywhere in config */
1747                if (__usb_get_extra_descriptor (udev->rawdescriptors[0],
1748                                        le16_to_cpu(udev->config[0].desc.wTotalLength),
1749                                        USB_DT_OTG, (void **) &desc) == 0) {
1750                        if (desc->bmAttributes & USB_OTG_HNP) {
1751                                unsigned                port1 = udev->portnum;
1752
1753                                dev_info(&udev->dev,
1754                                        "Dual-Role OTG device on %sHNP port\n",
1755                                        (port1 == bus->otg_port)
1756                                                ? "" : "non-");
1757
1758                                /* enable HNP before suspend, it's simpler */
1759                                if (port1 == bus->otg_port)
1760                                        bus->b_hnp_enable = 1;
1761                                err = usb_control_msg(udev,
1762                                        usb_sndctrlpipe(udev, 0),
1763                                        USB_REQ_SET_FEATURE, 0,
1764                                        bus->b_hnp_enable
1765                                                ? USB_DEVICE_B_HNP_ENABLE
1766                                                : USB_DEVICE_A_ALT_HNP_SUPPORT,
1767                                        0, NULL, 0, USB_CTRL_SET_TIMEOUT);
1768                                if (err < 0) {
1769                                        /* OTG MESSAGE: report errors here,
1770                                         * customize to match your product.
1771                                         */
1772                                        dev_info(&udev->dev,
1773                                                "can't set HNP mode: %d\n",
1774                                                err);
1775                                        bus->b_hnp_enable = 0;
1776                                }
1777                        }
1778                }
1779        }
1780
1781        if (!is_targeted(udev)) {
1782
1783                /* Maybe it can talk to us, though we can't talk to it.
1784                 * (Includes HNP test device.)
1785                 */
1786                if (udev->bus->b_hnp_enable || udev->bus->is_b_host) {
1787                        err = usb_port_suspend(udev, PMSG_SUSPEND);
1788                        if (err < 0)
1789                                dev_dbg(&udev->dev, "HNP fail, %d\n", err);
1790                }
1791                err = -ENOTSUPP;
1792                goto fail;
1793        }
1794fail:
1795#endif
1796        return err;
1797}
1798
1799
1800/**
1801 * usb_enumerate_device - Read device configs/intfs/otg (usbcore-internal)
1802 * @udev: newly addressed device (in ADDRESS state)
1803 *
1804 * This is only called by usb_new_device() and usb_authorize_device()
1805 * and FIXME -- all comments that apply to them apply here wrt to
1806 * environment.
1807 *
1808 * If the device is WUSB and not authorized, we don't attempt to read
1809 * the string descriptors, as they will be errored out by the device
1810 * until it has been authorized.
1811 */
1812static int usb_enumerate_device(struct usb_device *udev)
1813{
1814        int err;
1815
1816        if (udev->config == NULL) {
1817                err = usb_get_configuration(udev);
1818                if (err < 0) {
1819                        dev_err(&udev->dev, "can't read configurations, error %d\n",
1820                                err);
1821                        goto fail;
1822                }
1823        }
1824        if (udev->wusb == 1 && udev->authorized == 0) {
1825                udev->product = kstrdup("n/a (unauthorized)", GFP_KERNEL);
1826                udev->manufacturer = kstrdup("n/a (unauthorized)", GFP_KERNEL);
1827                udev->serial = kstrdup("n/a (unauthorized)", GFP_KERNEL);
1828        }
1829        else {
1830                /* read the standard strings and cache them if present */
1831                udev->product = usb_cache_string(udev, udev->descriptor.iProduct);
1832                udev->manufacturer = usb_cache_string(udev,
1833                                                      udev->descriptor.iManufacturer);
1834                udev->serial = usb_cache_string(udev, udev->descriptor.iSerialNumber);
1835        }
1836        err = usb_enumerate_device_otg(udev);
1837fail:
1838        return err;
1839}
1840
1841
1842/**
1843 * usb_new_device - perform initial device setup (usbcore-internal)
1844 * @udev: newly addressed device (in ADDRESS state)
1845 *
1846 * This is called with devices which have been detected but not fully
1847 * enumerated.  The device descriptor is available, but not descriptors
1848 * for any device configuration.  The caller must have locked either
1849 * the parent hub (if udev is a normal device) or else the
1850 * usb_bus_list_lock (if udev is a root hub).  The parent's pointer to
1851 * udev has already been installed, but udev is not yet visible through
1852 * sysfs or other filesystem code.
1853 *
1854 * It will return if the device is configured properly or not.  Zero if
1855 * the interface was registered with the driver core; else a negative
1856 * errno value.
1857 *
1858 * This call is synchronous, and may not be used in an interrupt context.
1859 *
1860 * Only the hub driver or root-hub registrar should ever call this.
1861 */
1862int usb_new_device(struct usb_device *udev)
1863{
1864        int err;
1865
1866        if (udev->parent) {
1867                /* Initialize non-root-hub device wakeup to disabled;
1868                 * device (un)configuration controls wakeup capable
1869                 * sysfs power/wakeup controls wakeup enabled/disabled
1870                 */
1871                device_init_wakeup(&udev->dev, 0);
1872        }
1873
1874        /* Tell the runtime-PM framework the device is active */
1875        pm_runtime_set_active(&udev->dev);
1876        pm_runtime_get_noresume(&udev->dev);
1877        pm_runtime_use_autosuspend(&udev->dev);
1878        pm_runtime_enable(&udev->dev);
1879
1880        /* By default, forbid autosuspend for all devices.  It will be
1881         * allowed for hubs during binding.
1882         */
1883        usb_disable_autosuspend(udev);
1884
1885        err = usb_enumerate_device(udev);       /* Read descriptors */
1886        if (err < 0)
1887                goto fail;
1888        dev_dbg(&udev->dev, "udev %d, busnum %d, minor = %d\n",
1889                        udev->devnum, udev->bus->busnum,
1890                        (((udev->bus->busnum-1) * 128) + (udev->devnum-1)));
1891        /* export the usbdev device-node for libusb */
1892        udev->dev.devt = MKDEV(USB_DEVICE_MAJOR,
1893                        (((udev->bus->busnum-1) * 128) + (udev->devnum-1)));
1894
1895        /* Tell the world! */
1896        announce_device(udev);
1897
1898        device_enable_async_suspend(&udev->dev);
1899        /* Register the device.  The device driver is responsible
1900         * for configuring the device and invoking the add-device
1901         * notifier chain (used by usbfs and possibly others).
1902         */
1903        err = device_add(&udev->dev);
1904        if (err) {
1905                dev_err(&udev->dev, "can't device_add, error %d\n", err);
1906                goto fail;
1907        }
1908
1909        (void) usb_create_ep_devs(&udev->dev, &udev->ep0, udev);
1910        usb_mark_last_busy(udev);
1911        pm_runtime_put_sync_autosuspend(&udev->dev);
1912        return err;
1913
1914fail:
1915        usb_set_device_state(udev, USB_STATE_NOTATTACHED);
1916        pm_runtime_disable(&udev->dev);
1917        pm_runtime_set_suspended(&udev->dev);
1918        return err;
1919}
1920
1921
1922/**
1923 * usb_deauthorize_device - deauthorize a device (usbcore-internal)
1924 * @usb_dev: USB device
1925 *
1926 * Move the USB device to a very basic state where interfaces are disabled
1927 * and the device is in fact unconfigured and unusable.
1928 *
1929 * We share a lock (that we have) with device_del(), so we need to
1930 * defer its call.
1931 */
1932int usb_deauthorize_device(struct usb_device *usb_dev)
1933{
1934        usb_lock_device(usb_dev);
1935        if (usb_dev->authorized == 0)
1936                goto out_unauthorized;
1937
1938        usb_dev->authorized = 0;
1939        usb_set_configuration(usb_dev, -1);
1940
1941        kfree(usb_dev->product);
1942        usb_dev->product = kstrdup("n/a (unauthorized)", GFP_KERNEL);
1943        kfree(usb_dev->manufacturer);
1944        usb_dev->manufacturer = kstrdup("n/a (unauthorized)", GFP_KERNEL);
1945        kfree(usb_dev->serial);
1946        usb_dev->serial = kstrdup("n/a (unauthorized)", GFP_KERNEL);
1947
1948        usb_destroy_configuration(usb_dev);
1949        usb_dev->descriptor.bNumConfigurations = 0;
1950
1951out_unauthorized:
1952        usb_unlock_device(usb_dev);
1953        return 0;
1954}
1955
1956
1957int usb_authorize_device(struct usb_device *usb_dev)
1958{
1959        int result = 0, c;
1960
1961        usb_lock_device(usb_dev);
1962        if (usb_dev->authorized == 1)
1963                goto out_authorized;
1964
1965        result = usb_autoresume_device(usb_dev);
1966        if (result < 0) {
1967                dev_err(&usb_dev->dev,
1968                        "can't autoresume for authorization: %d\n", result);
1969                goto error_autoresume;
1970        }
1971        result = usb_get_device_descriptor(usb_dev, sizeof(usb_dev->descriptor));
1972        if (result < 0) {
1973                dev_err(&usb_dev->dev, "can't re-read device descriptor for "
1974                        "authorization: %d\n", result);
1975                goto error_device_descriptor;
1976        }
1977
1978        kfree(usb_dev->product);
1979        usb_dev->product = NULL;
1980        kfree(usb_dev->manufacturer);
1981        usb_dev->manufacturer = NULL;
1982        kfree(usb_dev->serial);
1983        usb_dev->serial = NULL;
1984
1985        usb_dev->authorized = 1;
1986        result = usb_enumerate_device(usb_dev);
1987        if (result < 0)
1988                goto error_enumerate;
1989        /* Choose and set the configuration.  This registers the interfaces
1990         * with the driver core and lets interface drivers bind to them.
1991         */
1992        c = usb_choose_configuration(usb_dev);
1993        if (c >= 0) {
1994                result = usb_set_configuration(usb_dev, c);
1995                if (result) {
1996                        dev_err(&usb_dev->dev,
1997                                "can't set config #%d, error %d\n", c, result);
1998                        /* This need not be fatal.  The user can try to
1999                         * set other configurations. */
2000                }
2001        }
2002        dev_info(&usb_dev->dev, "authorized to connect\n");
2003
2004error_enumerate:
2005error_device_descriptor:
2006        usb_autosuspend_device(usb_dev);
2007error_autoresume:
2008out_authorized:
2009        usb_unlock_device(usb_dev);     // complements locktree
2010        return result;
2011}
2012
2013
2014/* Returns 1 if @hub is a WUSB root hub, 0 otherwise */
2015static unsigned hub_is_wusb(struct usb_hub *hub)
2016{
2017        struct usb_hcd *hcd;
2018        if (hub->hdev->parent != NULL)  /* not a root hub? */
2019                return 0;
2020        hcd = container_of(hub->hdev->bus, struct usb_hcd, self);
2021        return hcd->wireless;
2022}
2023
2024
2025#define PORT_RESET_TRIES        5
2026#define SET_ADDRESS_TRIES       2
2027#define GET_DESCRIPTOR_TRIES    2
2028#define SET_CONFIG_TRIES        (2 * (use_both_schemes + 1))
2029#define USE_NEW_SCHEME(i)       ((i) / 2 == old_scheme_first)
2030
2031#define HUB_ROOT_RESET_TIME     50      /* times are in msec */
2032#define HUB_SHORT_RESET_TIME    10
2033#define HUB_LONG_RESET_TIME     200
2034#define HUB_RESET_TIMEOUT       500
2035
2036static int hub_port_wait_reset(struct usb_hub *hub, int port1,
2037                                struct usb_device *udev, unsigned int delay)
2038{
2039        int delay_time, ret;
2040        u16 portstatus;
2041        u16 portchange;
2042
2043        for (delay_time = 0;
2044                        delay_time < HUB_RESET_TIMEOUT;
2045                        delay_time += delay) {
2046                /* wait to give the device a chance to reset */
2047                msleep(delay);
2048
2049                /* read and decode port status */
2050                ret = hub_port_status(hub, port1, &portstatus, &portchange);
2051                if (ret < 0)
2052                        return ret;
2053
2054                /* Device went away? */
2055                if (!(portstatus & USB_PORT_STAT_CONNECTION))
2056                        return -ENOTCONN;
2057
2058                /* bomb out completely if the connection bounced */
2059                if ((portchange & USB_PORT_STAT_C_CONNECTION))
2060                        return -ENOTCONN;
2061
2062                /* if we`ve finished resetting, then break out of the loop */
2063                if (!(portstatus & USB_PORT_STAT_RESET) &&
2064                    (portstatus & USB_PORT_STAT_ENABLE)) {
2065                        if (hub_is_wusb(hub))
2066                                udev->speed = USB_SPEED_WIRELESS;
2067                        else if (hub_is_superspeed(hub->hdev))
2068                                udev->speed = USB_SPEED_SUPER;
2069                        else if (portstatus & USB_PORT_STAT_HIGH_SPEED)
2070                                udev->speed = USB_SPEED_HIGH;
2071                        else if (portstatus & USB_PORT_STAT_LOW_SPEED)
2072                                udev->speed = USB_SPEED_LOW;
2073                        else
2074                                udev->speed = USB_SPEED_FULL;
2075                        return 0;
2076                }
2077
2078                /* switch to the long delay after two short delay failures */
2079                if (delay_time >= 2 * HUB_SHORT_RESET_TIME)
2080                        delay = HUB_LONG_RESET_TIME;
2081
2082                dev_dbg (hub->intfdev,
2083                        "port %d not reset yet, waiting %dms\n",
2084                        port1, delay);
2085        }
2086
2087        return -EBUSY;
2088}
2089
2090static int hub_port_reset(struct usb_hub *hub, int port1,
2091                                struct usb_device *udev, unsigned int delay)
2092{
2093        int i, status;
2094        struct usb_hcd *hcd;
2095
2096        hcd = bus_to_hcd(udev->bus);
2097        /* Block EHCI CF initialization during the port reset.
2098         * Some companion controllers don't like it when they mix.
2099         */
2100        down_read(&ehci_cf_port_reset_rwsem);
2101
2102        /* Reset the port */
2103        for (i = 0; i < PORT_RESET_TRIES; i++) {
2104                status = set_port_feature(hub->hdev,
2105                                port1, USB_PORT_FEAT_RESET);
2106                if (status)
2107                        dev_err(hub->intfdev,
2108                                        "cannot reset port %d (err = %d)\n",
2109                                        port1, status);
2110                else {
2111                        status = hub_port_wait_reset(hub, port1, udev, delay);
2112                        if (status && status != -ENOTCONN)
2113                                dev_dbg(hub->intfdev,
2114                                                "port_wait_reset: err = %d\n",
2115                                                status);
2116                }
2117
2118                /* return on disconnect or reset */
2119                switch (status) {
2120                case 0:
2121                        /* TRSTRCY = 10 ms; plus some extra */
2122                        msleep(10 + 40);
2123                        update_devnum(udev, 0);
2124                        if (hcd->driver->reset_device) {
2125                                status = hcd->driver->reset_device(hcd, udev);
2126                                if (status < 0) {
2127                                        dev_err(&udev->dev, "Cannot reset "
2128                                                        "HCD device state\n");
2129                                        break;
2130                                }
2131                        }
2132                        /* FALL THROUGH */
2133                case -ENOTCONN:
2134                case -ENODEV:
2135                        clear_port_feature(hub->hdev,
2136                                port1, USB_PORT_FEAT_C_RESET);
2137                        /* FIXME need disconnect() for NOTATTACHED device */
2138                        usb_set_device_state(udev, status
2139                                        ? USB_STATE_NOTATTACHED
2140                                        : USB_STATE_DEFAULT);
2141                        goto done;
2142                }
2143
2144                dev_dbg (hub->intfdev,
2145                        "port %d not enabled, trying reset again...\n",
2146                        port1);
2147                delay = HUB_LONG_RESET_TIME;
2148        }
2149
2150        dev_err (hub->intfdev,
2151                "Cannot enable port %i.  Maybe the USB cable is bad?\n",
2152                port1);
2153
2154 done:
2155        up_read(&ehci_cf_port_reset_rwsem);
2156        return status;
2157}
2158
2159/* Warm reset a USB3 protocol port */
2160static int hub_port_warm_reset(struct usb_hub *hub, int port)
2161{
2162        int ret;
2163        u16 portstatus, portchange;
2164
2165        if (!hub_is_superspeed(hub->hdev)) {
2166                dev_err(hub->intfdev, "only USB3 hub support warm reset\n");
2167                return -EINVAL;
2168        }
2169
2170        /* Warm reset the port */
2171        ret = set_port_feature(hub->hdev,
2172                                port, USB_PORT_FEAT_BH_PORT_RESET);
2173        if (ret) {
2174                dev_err(hub->intfdev, "cannot warm reset port %d\n", port);
2175                return ret;
2176        }
2177
2178        msleep(20);
2179        ret = hub_port_status(hub, port, &portstatus, &portchange);
2180
2181        if (portchange & USB_PORT_STAT_C_RESET)
2182                clear_port_feature(hub->hdev, port, USB_PORT_FEAT_C_RESET);
2183
2184        if (portchange & USB_PORT_STAT_C_BH_RESET)
2185                clear_port_feature(hub->hdev, port,
2186                                        USB_PORT_FEAT_C_BH_PORT_RESET);
2187
2188        if (portchange & USB_PORT_STAT_C_LINK_STATE)
2189                clear_port_feature(hub->hdev, port,
2190                                        USB_PORT_FEAT_C_PORT_LINK_STATE);
2191
2192        return ret;
2193}
2194
2195/* Check if a port is power on */
2196static int port_is_power_on(struct usb_hub *hub, unsigned portstatus)
2197{
2198        int ret = 0;
2199
2200        if (hub_is_superspeed(hub->hdev)) {
2201                if (portstatus & USB_SS_PORT_STAT_POWER)
2202                        ret = 1;
2203        } else {
2204                if (portstatus & USB_PORT_STAT_POWER)
2205                        ret = 1;
2206        }
2207
2208        return ret;
2209}
2210
2211#ifdef  CONFIG_PM
2212
2213/* Check if a port is suspended(USB2.0 port) or in U3 state(USB3.0 port) */
2214static int port_is_suspended(struct usb_hub *hub, unsigned portstatus)
2215{
2216        int ret = 0;
2217
2218        if (hub_is_superspeed(hub->hdev)) {
2219                if ((portstatus & USB_PORT_STAT_LINK_STATE)
2220                                == USB_SS_PORT_LS_U3)
2221                        ret = 1;
2222        } else {
2223                if (portstatus & USB_PORT_STAT_SUSPEND)
2224                        ret = 1;
2225        }
2226
2227        return ret;
2228}
2229
2230/* Determine whether the device on a port is ready for a normal resume,
2231 * is ready for a reset-resume, or should be disconnected.
2232 */
2233static int check_port_resume_type(struct usb_device *udev,
2234                struct usb_hub *hub, int port1,
2235                int status, unsigned portchange, unsigned portstatus)
2236{
2237        /* Is the device still present? */
2238        if (status || port_is_suspended(hub, portstatus) ||
2239                        !port_is_power_on(hub, portstatus) ||
2240                        !(portstatus & USB_PORT_STAT_CONNECTION)) {
2241                if (status >= 0)
2242                        status = -ENODEV;
2243        }
2244
2245        /* Can't do a normal resume if the port isn't enabled,
2246         * so try a reset-resume instead.
2247         */
2248        else if (!(portstatus & USB_PORT_STAT_ENABLE) && !udev->reset_resume) {
2249                if (udev->persist_enabled)
2250                        udev->reset_resume = 1;
2251                else
2252                        status = -ENODEV;
2253        }
2254
2255        if (status) {
2256                dev_dbg(hub->intfdev,
2257                                "port %d status %04x.%04x after resume, %d\n",
2258                                port1, portchange, portstatus, status);
2259        } else if (udev->reset_resume) {
2260
2261                /* Late port handoff can set status-change bits */
2262                if (portchange & USB_PORT_STAT_C_CONNECTION)
2263                        clear_port_feature(hub->hdev, port1,
2264                                        USB_PORT_FEAT_C_CONNECTION);
2265                if (portchange & USB_PORT_STAT_C_ENABLE)
2266                        clear_port_feature(hub->hdev, port1,
2267                                        USB_PORT_FEAT_C_ENABLE);
2268        }
2269
2270        return status;
2271}
2272
2273#ifdef  CONFIG_USB_SUSPEND
2274
2275/*
2276 * usb_port_suspend - suspend a usb device's upstream port
2277 * @udev: device that's no longer in active use, not a root hub
2278 * Context: must be able to sleep; device not locked; pm locks held
2279 *
2280 * Suspends a USB device that isn't in active use, conserving power.
2281 * Devices may wake out of a suspend, if anything important happens,
2282 * using the remote wakeup mechanism.  They may also be taken out of
2283 * suspend by the host, using usb_port_resume().  It's also routine
2284 * to disconnect devices while they are suspended.
2285 *
2286 * This only affects the USB hardware for a device; its interfaces
2287 * (and, for hubs, child devices) must already have been suspended.
2288 *
2289 * Selective port suspend reduces power; most suspended devices draw
2290 * less than 500 uA.  It's also used in OTG, along with remote wakeup.
2291 * All devices below the suspended port are also suspended.
2292 *
2293 * Devices leave suspend state when the host wakes them up.  Some devices
2294 * also support "remote wakeup", where the device can activate the USB
2295 * tree above them to deliver data, such as a keypress or packet.  In
2296 * some cases, this wakes the USB host.
2297 *
2298 * Suspending OTG devices may trigger HNP, if that's been enabled
2299 * between a pair of dual-role devices.  That will change roles, such
2300 * as from A-Host to A-Peripheral or from B-Host back to B-Peripheral.
2301 *
2302 * Devices on USB hub ports have only one "suspend" state, corresponding
2303 * to ACPI D2, "may cause the device to lose some context".
2304 * State transitions include:
2305 *
2306 *   - suspend, resume ... when the VBUS power link stays live
2307 *   - suspend, disconnect ... VBUS lost
2308 *
2309 * Once VBUS drop breaks the circuit, the port it's using has to go through
2310 * normal re-enumeration procedures, starting with enabling VBUS power.
2311 * Other than re-initializing the hub (plug/unplug, except for root hubs),
2312 * Linux (2.6) currently has NO mechanisms to initiate that:  no khubd
2313 * timer, no SRP, no requests through sysfs.
2314 *
2315 * If CONFIG_USB_SUSPEND isn't enabled, devices only really suspend when
2316 * the root hub for their bus goes into global suspend ... so we don't
2317 * (falsely) update the device power state to say it suspended.
2318 *
2319 * Returns 0 on success, else negative errno.
2320 */
2321int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
2322{
2323        struct usb_hub  *hub = hdev_to_hub(udev->parent);
2324        int             port1 = udev->portnum;
2325        int             status;
2326
2327        // dev_dbg(hub->intfdev, "suspend port %d\n", port1);
2328
2329        /* enable remote wakeup when appropriate; this lets the device
2330         * wake up the upstream hub (including maybe the root hub).
2331         *
2332         * NOTE:  OTG devices may issue remote wakeup (or SRP) even when
2333         * we don't explicitly enable it here.
2334         */
2335        if (udev->do_remote_wakeup) {
2336                status = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2337                                USB_REQ_SET_FEATURE, USB_RECIP_DEVICE,
2338                                USB_DEVICE_REMOTE_WAKEUP, 0,
2339                                NULL, 0,
2340                                USB_CTRL_SET_TIMEOUT);
2341                if (status) {
2342                        dev_dbg(&udev->dev, "won't remote wakeup, status %d\n",
2343                                        status);
2344                        /* bail if autosuspend is requested */
2345                        if (msg.event & PM_EVENT_AUTO)
2346                                return status;
2347                }
2348        }
2349
2350        /* see 7.1.7.6 */
2351        if (hub_is_superspeed(hub->hdev))
2352                status = set_port_feature(hub->hdev,
2353                                port1 | (USB_SS_PORT_LS_U3 << 3),
2354                                USB_PORT_FEAT_LINK_STATE);
2355        else
2356                status = set_port_feature(hub->hdev, port1,
2357                                                USB_PORT_FEAT_SUSPEND);
2358        if (status) {
2359                dev_dbg(hub->intfdev, "can't suspend port %d, status %d\n",
2360                                port1, status);
2361                /* paranoia:  "should not happen" */
2362                if (udev->do_remote_wakeup)
2363                        (void) usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
2364                                USB_REQ_CLEAR_FEATURE, USB_RECIP_DEVICE,
2365                                USB_DEVICE_REMOTE_WAKEUP, 0,
2366                                NULL, 0,
2367                                USB_CTRL_SET_TIMEOUT);
2368
2369                /* System sleep transitions should never fail */
2370                if (!(msg.event & PM_EVENT_AUTO))
2371                        status = 0;
2372        } else {
2373                /* device has up to 10 msec to fully suspend */
2374                dev_dbg(&udev->dev, "usb %ssuspend\n",
2375                                (msg.event & PM_EVENT_AUTO ? "auto-" : ""));
2376                usb_set_device_state(udev, USB_STATE_SUSPENDED);
2377                msleep(10);
2378        }
2379        usb_mark_last_busy(hub->hdev);
2380        return status;
2381}
2382
2383/*
2384 * If the USB "suspend" state is in use (rather than "global suspend"),
2385 * many devices will be individually taken out of suspend state using
2386 * special "resume" signaling.  This routine kicks in shortly after
2387 * hardware resume signaling is finished, either because of selective
2388 * resume (by host) or remote wakeup (by device) ... now see what changed
2389 * in the tree that's rooted at this device.
2390 *
2391 * If @udev->reset_resume is set then the device is reset before the
2392 * status check is done.
2393 */
2394static int finish_port_resume(struct usb_device *udev)
2395{
2396        int     status = 0;
2397        u16     devstatus;
2398
2399        /* caller owns the udev device lock */
2400        dev_dbg(&udev->dev, "%s\n",
2401                udev->reset_resume ? "finish reset-resume" : "finish resume");
2402
2403        /* usb ch9 identifies four variants of SUSPENDED, based on what
2404         * state the device resumes to.  Linux currently won't see the
2405         * first two on the host side; they'd be inside hub_port_init()
2406         * during many timeouts, but khubd can't suspend until later.
2407         */
2408        usb_set_device_state(udev, udev->actconfig
2409                        ? USB_STATE_CONFIGURED
2410                        : USB_STATE_ADDRESS);
2411
2412        /* 10.5.4.5 says not to reset a suspended port if the attached
2413         * device is enabled for remote wakeup.  Hence the reset
2414         * operation is carried out here, after the port has been
2415         * resumed.
2416         */
2417        if (udev->reset_resume)
2418 retry_reset_resume:
2419                status = usb_reset_and_verify_device(udev);
2420
2421        /* 10.5.4.5 says be sure devices in the tree are still there.
2422         * For now let's assume the device didn't go crazy on resume,
2423         * and device drivers will know about any resume quirks.
2424         */
2425        if (status == 0) {
2426                devstatus = 0;
2427                status = usb_get_status(udev, USB_RECIP_DEVICE, 0, &devstatus);
2428                if (status >= 0)
2429                        status = (status > 0 ? 0 : -ENODEV);
2430
2431                /* If a normal resume failed, try doing a reset-resume */
2432                if (status && !udev->reset_resume && udev->persist_enabled) {
2433                        dev_dbg(&udev->dev, "retry with reset-resume\n");
2434                        udev->reset_resume = 1;
2435                        goto retry_reset_resume;
2436                }
2437        }
2438
2439        if (status) {
2440                dev_dbg(&udev->dev, "gone after usb resume? status %d\n",
2441                                status);
2442        } else if (udev->actconfig) {
2443                le16_to_cpus(&devstatus);
2444                if (devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP)) {
2445                        status = usb_control_msg(udev,
2446                                        usb_sndctrlpipe(udev, 0),
2447                                        USB_REQ_CLEAR_FEATURE,
2448                                                USB_RECIP_DEVICE,
2449                                        USB_DEVICE_REMOTE_WAKEUP, 0,
2450                                        NULL, 0,
2451                                        USB_CTRL_SET_TIMEOUT);
2452                        if (status)
2453                                dev_dbg(&udev->dev,
2454                                        "disable remote wakeup, status %d\n",
2455                                        status);
2456                }
2457                status = 0;
2458        }
2459        return status;
2460}
2461
2462/*
2463 * usb_port_resume - re-activate a suspended usb device's upstream port
2464 * @udev: device to re-activate, not a root hub
2465 * Context: must be able to sleep; device not locked; pm locks held
2466 *
2467 * This will re-activate the suspended device, increasing power usage
2468 * while letting drivers communicate again with its endpoints.
2469 * USB resume explicitly guarantees that the power session between
2470 * the host and the device is the same as it was when the device
2471 * suspended.
2472 *
2473 * If @udev->reset_resume is set then this routine won't check that the
2474 * port is still enabled.  Furthermore, finish_port_resume() above will
2475 * reset @udev.  The end result is that a broken power session can be
2476 * recovered and @udev will appear to persist across a loss of VBUS power.
2477 *
2478 * For example, if a host controller doesn't maintain VBUS suspend current
2479 * during a system sleep or is reset when the system wakes up, all the USB
2480 * power sessions below it will be broken.  This is especially troublesome
2481 * for mass-storage devices containing mounted filesystems, since the
2482 * device will appear to have disconnected and all the memory mappings
2483 * to it will be lost.  Using the USB_PERSIST facility, the device can be
2484 * made to appear as if it had not disconnected.
2485 *
2486 * This facility can be dangerous.  Although usb_reset_and_verify_device() makes
2487 * every effort to insure that the same device is present after the
2488 * reset as before, it cannot provide a 100% guarantee.  Furthermore it's
2489 * quite possible for a device to remain unaltered but its media to be
2490 * changed.  If the user replaces a flash memory card while the system is
2491 * asleep, he will have only himself to blame when the filesystem on the
2492 * new card is corrupted and the system crashes.
2493 *
2494 * Returns 0 on success, else negative errno.
2495 */
2496int usb_port_resume(struct usb_device *udev, pm_message_t msg)
2497{
2498        struct usb_hub  *hub = hdev_to_hub(udev->parent);
2499        int             port1 = udev->portnum;
2500        int             status;
2501        u16             portchange, portstatus;
2502
2503        /* Skip the initial Clear-Suspend step for a remote wakeup */
2504        status = hub_port_status(hub, port1, &portstatus, &portchange);
2505        if (status == 0 && !port_is_suspended(hub, portstatus))
2506                goto SuspendCleared;
2507
2508        // dev_dbg(hub->intfdev, "resume port %d\n", port1);
2509
2510        set_bit(port1, hub->busy_bits);
2511
2512        /* see 7.1.7.7; affects power usage, but not budgeting */
2513        if (hub_is_superspeed(hub->hdev))
2514                status = set_port_feature(hub->hdev,
2515                                port1 | (USB_SS_PORT_LS_U0 << 3),
2516                                USB_PORT_FEAT_LINK_STATE);
2517        else
2518                status = clear_port_feature(hub->hdev,
2519                                port1, USB_PORT_FEAT_SUSPEND);
2520        if (status) {
2521                dev_dbg(hub->intfdev, "can't resume port %d, status %d\n",
2522                                port1, status);
2523        } else {
2524                /* drive resume for at least 20 msec */
2525                dev_dbg(&udev->dev, "usb %sresume\n",
2526                                (msg.event & PM_EVENT_AUTO ? "auto-" : ""));
2527                msleep(25);
2528
2529                /* Virtual root hubs can trigger on GET_PORT_STATUS to
2530                 * stop resume signaling.  Then finish the resume
2531                 * sequence.
2532                 */
2533                status = hub_port_status(hub, port1, &portstatus, &portchange);
2534
2535                /* TRSMRCY = 10 msec */
2536                msleep(10);
2537        }
2538
2539 SuspendCleared:
2540        if (status == 0) {
2541                if (hub_is_superspeed(hub->hdev)) {
2542                        if (portchange & USB_PORT_STAT_C_LINK_STATE)
2543                                clear_port_feature(hub->hdev, port1,
2544                                        USB_PORT_FEAT_C_PORT_LINK_STATE);
2545                } else {
2546                        if (portchange & USB_PORT_STAT_C_SUSPEND)
2547                                clear_port_feature(hub->hdev, port1,
2548                                                USB_PORT_FEAT_C_SUSPEND);
2549                }
2550        }
2551
2552        clear_bit(port1, hub->busy_bits);
2553
2554        status = check_port_resume_type(udev,
2555                        hub, port1, status, portchange, portstatus);
2556        if (status == 0)
2557                status = finish_port_resume(udev);
2558        if (status < 0) {
2559                dev_dbg(&udev->dev, "can't resume, status %d\n", status);
2560                hub_port_logical_disconnect(hub, port1);
2561        }
2562        return status;
2563}
2564
2565/* caller has locked udev */
2566int usb_remote_wakeup(struct usb_device *udev)
2567{
2568        int     status = 0;
2569
2570        if (udev->state == USB_STATE_SUSPENDED) {
2571                dev_dbg(&udev->dev, "usb %sresume\n", "wakeup-");
2572                status = usb_autoresume_device(udev);
2573                if (status == 0) {
2574                        /* Let the drivers do their thing, then... */
2575                        usb_autosuspend_device(udev);
2576                }
2577        }
2578        return status;
2579}
2580
2581#else   /* CONFIG_USB_SUSPEND */
2582
2583/* When CONFIG_USB_SUSPEND isn't set, we never suspend or resume any ports. */
2584
2585int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
2586{
2587        return 0;
2588}
2589
2590/* However we may need to do a reset-resume */
2591
2592int usb_port_resume(struct usb_device *udev, pm_message_t msg)
2593{
2594        struct usb_hub  *hub = hdev_to_hub(udev->parent);
2595        int             port1 = udev->portnum;
2596        int             status;
2597        u16             portchange, portstatus;
2598
2599        status = hub_port_status(hub, port1, &portstatus, &portchange);
2600        status = check_port_resume_type(udev,
2601                        hub, port1, status, portchange, portstatus);
2602
2603        if (status) {
2604                dev_dbg(&udev->dev, "can't resume, status %d\n", status);
2605                hub_port_logical_disconnect(hub, port1);
2606        } else if (udev->reset_resume) {
2607                dev_dbg(&udev->dev, "reset-resume\n");
2608                status = usb_reset_and_verify_device(udev);
2609        }
2610        return status;
2611}
2612
2613#endif
2614
2615static int hub_suspend(struct usb_interface *intf, pm_message_t msg)
2616{
2617        struct usb_hub          *hub = usb_get_intfdata (intf);
2618        struct usb_device       *hdev = hub->hdev;
2619        unsigned                port1;
2620
2621        /* Warn if children aren't already suspended */
2622        for (port1 = 1; port1 <= hdev->maxchild; port1++) {
2623                struct usb_device       *udev;
2624
2625                udev = hdev->children [port1-1];
2626                if (udev && udev->can_submit) {
2627                        dev_warn(&intf->dev, "port %d nyet suspended\n", port1);
2628                        if (msg.event & PM_EVENT_AUTO)
2629                                return -EBUSY;
2630                }
2631        }
2632
2633        dev_dbg(&intf->dev, "%s\n", __func__);
2634
2635        /* stop khubd and related activity */
2636        hub_quiesce(hub, HUB_SUSPEND);
2637        return 0;
2638}
2639
2640static int hub_resume(struct usb_interface *intf)
2641{
2642        struct usb_hub *hub = usb_get_intfdata(intf);
2643
2644        dev_dbg(&intf->dev, "%s\n", __func__);
2645        hub_activate(hub, HUB_RESUME);
2646        return 0;
2647}
2648
2649static int hub_reset_resume(struct usb_interface *intf)
2650{
2651        struct usb_hub *hub = usb_get_intfdata(intf);
2652
2653        dev_dbg(&intf->dev, "%s\n", __func__);
2654        hub_activate(hub, HUB_RESET_RESUME);
2655        return 0;
2656}
2657
2658/**
2659 * usb_root_hub_lost_power - called by HCD if the root hub lost Vbus power
2660 * @rhdev: struct usb_device for the root hub
2661 *
2662 * The USB host controller driver calls this function when its root hub
2663 * is resumed and Vbus power has been interrupted or the controller
2664 * has been reset.  The routine marks @rhdev as having lost power.
2665 * When the hub driver is resumed it will take notice and carry out
2666 * power-session recovery for all the "USB-PERSIST"-enabled child devices;
2667 * the others will be disconnected.
2668 */
2669void usb_root_hub_lost_power(struct usb_device *rhdev)
2670{
2671        dev_warn(&rhdev->dev, "root hub lost power or was reset\n");
2672        rhdev->reset_resume = 1;
2673}
2674EXPORT_SYMBOL_GPL(usb_root_hub_lost_power);
2675
2676#else   /* CONFIG_PM */
2677
2678#define hub_suspend             NULL
2679#define hub_resume              NULL
2680#define hub_reset_resume        NULL
2681#endif
2682
2683
2684/* USB 2.0 spec, 7.1.7.3 / fig 7-29:
2685 *
2686 * Between connect detection and reset signaling there must be a delay
2687 * of 100ms at least for debounce and power-settling.  The corresponding
2688 * timer shall restart whenever the downstream port detects a disconnect.
2689 * 
2690 * Apparently there are some bluetooth and irda-dongles and a number of
2691 * low-speed devices for which this debounce period may last over a second.
2692 * Not covered by the spec - but easy to deal with.
2693 *
2694 * This implementation uses a 1500ms total debounce timeout; if the
2695 * connection isn't stable by then it returns -ETIMEDOUT.  It checks
2696 * every 25ms for transient disconnects.  When the port status has been
2697 * unchanged for 100ms it returns the port status.
2698 */
2699static int hub_port_debounce(struct usb_hub *hub, int port1)
2700{
2701        int ret;
2702        int total_time, stable_time = 0;
2703        u16 portchange, portstatus;
2704        unsigned connection = 0xffff;
2705
2706        for (total_time = 0; ; total_time += HUB_DEBOUNCE_STEP) {
2707                ret = hub_port_status(hub, port1, &portstatus, &portchange);
2708                if (ret < 0)
2709                        return ret;
2710
2711                if (!(portchange & USB_PORT_STAT_C_CONNECTION) &&
2712                     (portstatus & USB_PORT_STAT_CONNECTION) == connection) {
2713                        stable_time += HUB_DEBOUNCE_STEP;
2714                        if (stable_time >= HUB_DEBOUNCE_STABLE)
2715                                break;
2716                } else {
2717                        stable_time = 0;
2718                        connection = portstatus & USB_PORT_STAT_CONNECTION;
2719                }
2720
2721                if (portchange & USB_PORT_STAT_C_CONNECTION) {
2722                        clear_port_feature(hub->hdev, port1,
2723                                        USB_PORT_FEAT_C_CONNECTION);
2724                }
2725
2726                if (total_time >= HUB_DEBOUNCE_TIMEOUT)
2727                        break;
2728                msleep(HUB_DEBOUNCE_STEP);
2729        }
2730
2731        dev_dbg (hub->intfdev,
2732                "debounce: port %d: total %dms stable %dms status 0x%x\n",
2733                port1, total_time, stable_time, portstatus);
2734
2735        if (stable_time < HUB_DEBOUNCE_STABLE)
2736                return -ETIMEDOUT;
2737        return portstatus;
2738}
2739
2740void usb_ep0_reinit(struct usb_device *udev)
2741{
2742        usb_disable_endpoint(udev, 0 + USB_DIR_IN, true);
2743        usb_disable_endpoint(udev, 0 + USB_DIR_OUT, true);
2744        usb_enable_endpoint(udev, &udev->ep0, true);
2745}
2746EXPORT_SYMBOL_GPL(usb_ep0_reinit);
2747
2748#define usb_sndaddr0pipe()      (PIPE_CONTROL << 30)
2749#define usb_rcvaddr0pipe()      ((PIPE_CONTROL << 30) | USB_DIR_IN)
2750
2751static int hub_set_address(struct usb_device *udev, int devnum)
2752{
2753        int retval;
2754        struct usb_hcd *hcd = bus_to_hcd(udev->bus);
2755
2756        /*
2757         * The host controller will choose the device address,
2758         * instead of the core having chosen it earlier
2759         */
2760        if (!hcd->driver->address_device && devnum <= 1)
2761                return -EINVAL;
2762        if (udev->state == USB_STATE_ADDRESS)
2763                return 0;
2764        if (udev->state != USB_STATE_DEFAULT)
2765                return -EINVAL;
2766        if (hcd->driver->address_device)
2767                retval = hcd->driver->address_device(hcd, udev);
2768        else
2769                retval = usb_control_msg(udev, usb_sndaddr0pipe(),
2770                                USB_REQ_SET_ADDRESS, 0, devnum, 0,
2771                                NULL, 0, USB_CTRL_SET_TIMEOUT);
2772        if (retval == 0) {
2773                update_devnum(udev, devnum);
2774                /* Device now using proper address. */
2775                usb_set_device_state(udev, USB_STATE_ADDRESS);
2776                usb_ep0_reinit(udev);
2777        }
2778        return retval;
2779}
2780
2781/* Reset device, (re)assign address, get device descriptor.
2782 * Device connection must be stable, no more debouncing needed.
2783 * Returns device in USB_STATE_ADDRESS, except on error.
2784 *
2785 * If this is called for an already-existing device (as part of
2786 * usb_reset_and_verify_device), the caller must own the device lock.  For a
2787 * newly detected device that is not accessible through any global
2788 * pointers, it's not necessary to lock the device.
2789 */
2790static int
2791hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
2792                int retry_counter)
2793{
2794        static DEFINE_MUTEX(usb_address0_mutex);
2795
2796        struct usb_device       *hdev = hub->hdev;
2797        struct usb_hcd          *hcd = bus_to_hcd(hdev->bus);
2798        int                     i, j, retval;
2799        unsigned                delay = HUB_SHORT_RESET_TIME;
2800        enum usb_device_speed   oldspeed = udev->speed;
2801        char                    *speed, *type;
2802        int                     devnum = udev->devnum;
2803
2804        /* root hub ports have a slightly longer reset period
2805         * (from USB 2.0 spec, section 7.1.7.5)
2806         */
2807        if (!hdev->parent) {
2808                delay = HUB_ROOT_RESET_TIME;
2809                if (port1 == hdev->bus->otg_port)
2810                        hdev->bus->b_hnp_enable = 0;
2811        }
2812
2813        /* Some low speed devices have problems with the quick delay, so */
2814        /*  be a bit pessimistic with those devices. RHbug #23670 */
2815        if (oldspeed == USB_SPEED_LOW)
2816                delay = HUB_LONG_RESET_TIME;
2817
2818        mutex_lock(&usb_address0_mutex);
2819
2820        /* Reset the device; full speed may morph to high speed */
2821        /* FIXME a USB 2.0 device may morph into SuperSpeed on reset. */
2822        retval = hub_port_reset(hub, port1, udev, delay);
2823        if (retval < 0)         /* error or disconnect */
2824                goto fail;
2825        /* success, speed is known */
2826
2827        retval = -ENODEV;
2828
2829        if (oldspeed != USB_SPEED_UNKNOWN && oldspeed != udev->speed) {
2830                dev_dbg(&udev->dev, "device reset changed speed!\n");
2831                goto fail;
2832        }
2833        oldspeed = udev->speed;
2834
2835        /* USB 2.0 section 5.5.3 talks about ep0 maxpacket ...
2836         * it's fixed size except for full speed devices.
2837         * For Wireless USB devices, ep0 max packet is always 512 (tho
2838         * reported as 0xff in the device descriptor). WUSB1.0[4.8.1].
2839         */
2840        switch (udev->speed) {
2841        case USB_SPEED_SUPER:
2842        case USB_SPEED_WIRELESS:        /* fixed at 512 */
2843                udev->ep0.desc.wMaxPacketSize = cpu_to_le16(512);
2844                break;
2845        case USB_SPEED_HIGH:            /* fixed at 64 */
2846                udev->ep0.desc.wMaxPacketSize = cpu_to_le16(64);
2847                break;
2848        case USB_SPEED_FULL:            /* 8, 16, 32, or 64 */
2849                /* to determine the ep0 maxpacket size, try to read
2850                 * the device descriptor to get bMaxPacketSize0 and
2851                 * then correct our initial guess.
2852                 */
2853                udev->ep0.desc.wMaxPacketSize = cpu_to_le16(64);
2854                break;
2855        case USB_SPEED_LOW:             /* fixed at 8 */
2856                udev->ep0.desc.wMaxPacketSize = cpu_to_le16(8);
2857                break;
2858        default:
2859                goto fail;
2860        }
2861 
2862        type = "";
2863        switch (udev->speed) {
2864        case USB_SPEED_LOW:     speed = "low";  break;
2865        case USB_SPEED_FULL:    speed = "full"; break;
2866        case USB_SPEED_HIGH:    speed = "high"; break;
2867        case USB_SPEED_SUPER:
2868                                speed = "super";
2869                                break;
2870        case USB_SPEED_WIRELESS:
2871                                speed = "variable";
2872                                type = "Wireless ";
2873                                break;
2874        default:                speed = "?";    break;
2875        }
2876        if (udev->speed != USB_SPEED_SUPER)
2877                dev_info(&udev->dev,
2878                                "%s %s speed %sUSB device number %d using %s\n",
2879                                (udev->config) ? "reset" : "new", speed, type,
2880                                devnum, udev->bus->controller->driver->name);
2881
2882        /* Set up TT records, if needed  */
2883        if (hdev->tt) {
2884                udev->tt = hdev->tt;
2885                udev->ttport = hdev->ttport;
2886        } else if (udev->speed != USB_SPEED_HIGH
2887                        && hdev->speed == USB_SPEED_HIGH) {
2888                if (!hub->tt.hub) {
2889                        dev_err(&udev->dev, "parent hub has no TT\n");
2890                        retval = -EINVAL;
2891                        goto fail;
2892                }
2893                udev->tt = &hub->tt;
2894                udev->ttport = port1;
2895        }
2896 
2897        /* Why interleave GET_DESCRIPTOR and SET_ADDRESS this way?
2898         * Because device hardware and firmware is sometimes buggy in
2899         * this area, and this is how Linux has done it for ages.
2900         * Change it cautiously.
2901         *
2902         * NOTE:  If USE_NEW_SCHEME() is true we will start by issuing
2903         * a 64-byte GET_DESCRIPTOR request.  This is what Windows does,
2904         * so it may help with some non-standards-compliant devices.
2905         * Otherwise we start with SET_ADDRESS and then try to read the
2906         * first 8 bytes of the device descriptor to get the ep0 maxpacket
2907         * value.
2908         */
2909        for (i = 0; i < GET_DESCRIPTOR_TRIES; (++i, msleep(100))) {
2910                if (USE_NEW_SCHEME(retry_counter) && !(hcd->driver->flags & HCD_USB3)) {
2911                        struct usb_device_descriptor *buf;
2912                        int r = 0;
2913
2914#define GET_DESCRIPTOR_BUFSIZE  64
2915                        buf = kmalloc(GET_DESCRIPTOR_BUFSIZE, GFP_NOIO);
2916                        if (!buf) {
2917                                retval = -ENOMEM;
2918                                continue;
2919                        }
2920
2921                        /* Retry on all errors; some devices are flakey.
2922                         * 255 is for WUSB devices, we actually need to use
2923                         * 512 (WUSB1.0[4.8.1]).
2924                         */
2925                        for (j = 0; j < 3; ++j) {
2926                                buf->bMaxPacketSize0 = 0;
2927                                r = usb_control_msg(udev, usb_rcvaddr0pipe(),
2928                                        USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,
2929                                        USB_DT_DEVICE << 8, 0,
2930                                        buf, GET_DESCRIPTOR_BUFSIZE,
2931                                        initial_descriptor_timeout);
2932                                switch (buf->bMaxPacketSize0) {
2933                                case 8: case 16: case 32: case 64: case 255:
2934                                        if (buf->bDescriptorType ==
2935                                                        USB_DT_DEVICE) {
2936                                                r = 0;
2937                                                break;
2938                                        }
2939                                        /* FALL THROUGH */
2940                                default:
2941                                        if (r == 0)
2942                                                r = -EPROTO;
2943                                        break;
2944                                }
2945                                if (r == 0)
2946                                        break;
2947                        }
2948                        udev->descriptor.bMaxPacketSize0 =
2949                                        buf->bMaxPacketSize0;
2950                        kfree(buf);
2951
2952                        retval = hub_port_reset(hub, port1, udev, delay);
2953                        if (retval < 0)         /* error or disconnect */
2954                                goto fail;
2955                        if (oldspeed != udev->speed) {
2956                                dev_dbg(&udev->dev,
2957                                        "device reset changed speed!\n");
2958                                retval = -ENODEV;
2959                                goto fail;
2960                        }
2961                        if (r) {
2962                                dev_err(&udev->dev,
2963                                        "device descriptor read/64, error %d\n",
2964                                        r);
2965                                retval = -EMSGSIZE;
2966                                continue;
2967                        }
2968#undef GET_DESCRIPTOR_BUFSIZE
2969                }
2970
2971                /*
2972                 * If device is WUSB, we already assigned an
2973                 * unauthorized address in the Connect Ack sequence;
2974                 * authorization will assign the final address.
2975                 */
2976                if (udev->wusb == 0) {
2977                        for (j = 0; j < SET_ADDRESS_TRIES; ++j) {
2978                                retval = hub_set_address(udev, devnum);
2979                                if (retval >= 0)
2980                                        break;
2981                                msleep(200);
2982                        }
2983                        if (retval < 0) {
2984                                dev_err(&udev->dev,
2985                                        "device not accepting address %d, error %d\n",
2986                                        devnum, retval);
2987                                goto fail;
2988                        }
2989                        if (udev->speed == USB_SPEED_SUPER) {
2990                                devnum = udev->devnum;
2991                                dev_info(&udev->dev,
2992                                                "%s SuperSpeed USB device number %d using %s\n",
2993                                                (udev->config) ? "reset" : "new",
2994                                                devnum, udev->bus->controller->driver->name);
2995                        }
2996
2997                        /* cope with hardware quirkiness:
2998                         *  - let SET_ADDRESS settle, some device hardware wants it
2999                         *  - read ep0 maxpacket even for high and low speed,
3000                         */
3001                        msleep(10);
3002                        if (USE_NEW_SCHEME(retry_counter) && !(hcd->driver->flags & HCD_USB3))
3003                                break;
3004                }
3005
3006                retval = usb_get_device_descriptor(udev, 8);
3007                if (retval < 8) {
3008                        dev_err(&udev->dev,
3009                                        "device descriptor read/8, error %d\n",
3010                                        retval);
3011                        if (retval >= 0)
3012                                retval = -EMSGSIZE;
3013                } else {
3014                        retval = 0;
3015                        break;
3016                }
3017        }
3018        if (retval)
3019                goto fail;
3020
3021        if (udev->descriptor.bMaxPacketSize0 == 0xff ||
3022                        udev->speed == USB_SPEED_SUPER)
3023                i = 512;
3024        else
3025                i = udev->descriptor.bMaxPacketSize0;
3026        if (le16_to_cpu(udev->ep0.desc.wMaxPacketSize) != i) {
3027                if (udev->speed == USB_SPEED_LOW ||
3028                                !(i == 8 || i == 16 || i == 32 || i == 64)) {
3029                        dev_err(&udev->dev, "Invalid ep0 maxpacket: %d\n", i);
3030                        retval = -EMSGSIZE;
3031                        goto fail;
3032                }
3033                if (udev->speed == USB_SPEED_FULL)
3034                        dev_dbg(&udev->dev, "ep0 maxpacket = %d\n", i);
3035                else
3036                        dev_warn(&udev->dev, "Using ep0 maxpacket: %d\n", i);
3037                udev->ep0.desc.wMaxPacketSize = cpu_to_le16(i);
3038                usb_ep0_reinit(udev);
3039        }
3040  
3041        retval = usb_get_device_descriptor(udev, USB_DT_DEVICE_SIZE);
3042        if (retval < (signed)sizeof(udev->descriptor)) {
3043                dev_err(&udev->dev, "device descriptor read/all, error %d\n",
3044                        retval);
3045                if (retval >= 0)
3046                        retval = -ENOMSG;
3047                goto fail;
3048        }
3049
3050        retval = 0;
3051        /* notify HCD that we have a device connected and addressed */
3052        if (hcd->driver->update_device)
3053                hcd->driver->update_device(hcd, udev);
3054fail:
3055        if (retval) {
3056                hub_port_disable(hub, port1, 0);
3057                update_devnum(udev, devnum);    /* for disconnect processing */
3058        }
3059        mutex_unlock(&usb_address0_mutex);
3060        return retval;
3061}
3062
3063static void
3064check_highspeed (struct usb_hub *hub, struct usb_device *udev, int port1)
3065{
3066        struct usb_qualifier_descriptor *qual;
3067        int                             status;
3068
3069        qual = kmalloc (sizeof *qual, GFP_KERNEL);
3070        if (qual == NULL)
3071                return;
3072
3073        status = usb_get_descriptor (udev, USB_DT_DEVICE_QUALIFIER, 0,
3074                        qual, sizeof *qual);
3075        if (status == sizeof *qual) {
3076                dev_info(&udev->dev, "not running at top speed; "
3077                        "connect to a high speed hub\n");
3078                /* hub LEDs are probably harder to miss than syslog */
3079                if (hub->has_indicators) {
3080                        hub->indicator[port1-1] = INDICATOR_GREEN_BLINK;
3081                        schedule_delayed_work (&hub->leds, 0);
3082                }
3083        }
3084        kfree(qual);
3085}
3086
3087static unsigned
3088hub_power_remaining (struct usb_hub *hub)
3089{
3090        struct usb_device *hdev = hub->hdev;
3091        int remaining;
3092        int port1;
3093
3094        if (!hub->limited_power)
3095                return 0;
3096
3097        remaining = hdev->bus_mA - hub->descriptor->bHubContrCurrent;
3098        for (port1 = 1; port1 <= hdev->maxchild; ++port1) {
3099                struct usb_device       *udev = hdev->children[port1 - 1];
3100                int                     delta;
3101
3102                if (!udev)
3103                        continue;
3104
3105                /* Unconfigured devices may not use more than 100mA,
3106                 * or 8mA for OTG ports */
3107                if (udev->actconfig)
3108                        delta = udev->actconfig->desc.bMaxPower * 2;
3109                else if (port1 != udev->bus->otg_port || hdev->parent)
3110                        delta = 100;
3111                else
3112                        delta = 8;
3113                if (delta > hub->mA_per_port)
3114                        dev_warn(&udev->dev,
3115                                 "%dmA is over %umA budget for port %d!\n",
3116                                 delta, hub->mA_per_port, port1);
3117                remaining -= delta;
3118        }
3119        if (remaining < 0) {
3120                dev_warn(hub->intfdev, "%dmA over power budget!\n",
3121                        - remaining);
3122                remaining = 0;
3123        }
3124        return remaining;
3125}
3126
3127/* Handle physical or logical connection change events.
3128 * This routine is called when:
3129 *      a port connection-change occurs;
3130 *      a port enable-change occurs (often caused by EMI);
3131 *      usb_reset_and_verify_device() encounters changed descriptors (as from
3132 *              a firmware download)
3133 * caller already locked the hub
3134 */
3135static void hub_port_connect_change(struct usb_hub *hub, int port1,
3136                                        u16 portstatus, u16 portchange)
3137{
3138        struct usb_device *hdev = hub->hdev;
3139        struct device *hub_dev = hub->intfdev;
3140        struct usb_hcd *hcd = bus_to_hcd(hdev->bus);
3141        unsigned wHubCharacteristics =
3142                        le16_to_cpu(hub->descriptor->wHubCharacteristics);
3143        struct usb_device *udev;
3144        int status, i;
3145
3146        dev_dbg (hub_dev,
3147                "port %d, status %04x, change %04x, %s\n",
3148                port1, portstatus, portchange, portspeed(hub, portstatus));
3149
3150        if (hub->has_indicators) {
3151                set_port_led(hub, port1, HUB_LED_AUTO);
3152                hub->indicator[port1-1] = INDICATOR_AUTO;
3153        }
3154
3155#ifdef  CONFIG_USB_OTG
3156        /* during HNP, don't repeat the debounce */
3157        if (hdev->bus->is_b_host)
3158                portchange &= ~(USB_PORT_STAT_C_CONNECTION |
3159                                USB_PORT_STAT_C_ENABLE);
3160#endif
3161
3162        /* Try to resuscitate an existing device */
3163        udev = hdev->children[port1-1];
3164        if ((portstatus & USB_PORT_STAT_CONNECTION) && udev &&
3165                        udev->state != USB_STATE_NOTATTACHED) {
3166                usb_lock_device(udev);
3167                if (portstatus & USB_PORT_STAT_ENABLE) {
3168                        status = 0;             /* Nothing to do */
3169
3170#ifdef CONFIG_USB_SUSPEND
3171                } else if (udev->state == USB_STATE_SUSPENDED &&
3172                                udev->persist_enabled) {
3173                        /* For a suspended device, treat this as a
3174                         * remote wakeup event.
3175                         */
3176                        status = usb_remote_wakeup(udev);
3177#endif
3178
3179                } else {
3180                        status = -ENODEV;       /* Don't resuscitate */
3181                }
3182                usb_unlock_device(udev);
3183
3184                if (status == 0) {
3185                        clear_bit(port1, hub->change_bits);
3186                        return;
3187                }
3188        }
3189
3190        /* Disconnect any existing devices under this port */
3191        if (udev)
3192                usb_disconnect(&hdev->children[port1-1]);
3193        clear_bit(port1, hub->change_bits);
3194
3195        /* We can forget about a "removed" device when there's a physical
3196         * disconnect or the connect status changes.
3197         */
3198        if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
3199                        (portchange & USB_PORT_STAT_C_CONNECTION))
3200                clear_bit(port1, hub->removed_bits);
3201
3202        if (portchange & (USB_PORT_STAT_C_CONNECTION |
3203                                USB_PORT_STAT_C_ENABLE)) {
3204                status = hub_port_debounce(hub, port1);
3205                if (status < 0) {
3206                        if (printk_ratelimit())
3207                                dev_err(hub_dev, "connect-debounce failed, "
3208                                                "port %d disabled\n", port1);
3209                        portstatus &= ~USB_PORT_STAT_CONNECTION;
3210                } else {
3211                        portstatus = status;
3212                }
3213        }
3214
3215        /* Return now if debouncing failed or nothing is connected or
3216         * the device was "removed".
3217         */
3218        if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
3219                        test_bit(port1, hub->removed_bits)) {
3220
3221                /* maybe switch power back on (e.g. root hub was reset) */
3222                if ((wHubCharacteristics & HUB_CHAR_LPSM) < 2
3223                                && !port_is_power_on(hub, portstatus))
3224                        set_port_feature(hdev, port1, USB_PORT_FEAT_POWER);
3225
3226                if (portstatus & USB_PORT_STAT_ENABLE)
3227                        goto done;
3228                return;
3229        }
3230
3231        for (i = 0; i < SET_CONFIG_TRIES; i++) {
3232
3233                /* reallocate for each attempt, since references
3234                 * to the previous one can escape in various ways
3235                 */
3236                udev = usb_alloc_dev(hdev, hdev->bus, port1);
3237                if (!udev) {
3238                        dev_err (hub_dev,
3239                                "couldn't allocate port %d usb_device\n",
3240                                port1);
3241                        goto done;
3242                }
3243
3244                usb_set_device_state(udev, USB_STATE_POWERED);
3245                udev->bus_mA = hub->mA_per_port;
3246                udev->level = hdev->level + 1;
3247                udev->wusb = hub_is_wusb(hub);
3248
3249                /* Only USB 3.0 devices are connected to SuperSpeed hubs. */
3250                if (hub_is_superspeed(hub->hdev))
3251                        udev->speed = USB_SPEED_SUPER;
3252                else
3253                        udev->speed = USB_SPEED_UNKNOWN;
3254
3255                choose_devnum(udev);
3256                if (udev->devnum <= 0) {
3257                        status = -ENOTCONN;     /* Don't retry */
3258                        goto loop;
3259                }
3260
3261                /* reset (non-USB 3.0 devices) and get descriptor */
3262                status = hub_port_init(hub, udev, port1, i);
3263                if (status < 0)
3264                        goto loop;
3265
3266                usb_detect_quirks(udev);
3267                if (udev->quirks & USB_QUIRK_DELAY_INIT)
3268                        msleep(1000);
3269
3270                /* consecutive bus-powered hubs aren't reliable; they can
3271                 * violate the voltage drop budget.  if the new child has
3272                 * a "powered" LED, users should notice we didn't enable it
3273                 * (without reading syslog), even without per-port LEDs
3274                 * on the parent.
3275                 */
3276                if (udev->descriptor.bDeviceClass == USB_CLASS_HUB
3277                                && udev->bus_mA <= 100) {
3278                        u16     devstat;
3279
3280                        status = usb_get_status(udev, USB_RECIP_DEVICE, 0,
3281                                        &devstat);
3282                        if (status < 2) {
3283                                dev_dbg(&udev->dev, "get status %d ?\n", status);
3284                                goto loop_disable;
3285                        }
3286                        le16_to_cpus(&devstat);
3287                        if ((devstat & (1 << USB_DEVICE_SELF_POWERED)) == 0) {
3288                                dev_err(&udev->dev,
3289                                        "can't connect bus-powered hub "
3290                                        "to this port\n");
3291                                if (hub->has_indicators) {
3292                                        hub->indicator[port1-1] =
3293                                                INDICATOR_AMBER_BLINK;
3294                                        schedule_delayed_work (&hub->leds, 0);
3295                                }
3296                                status = -ENOTCONN;     /* Don't retry */
3297                                goto loop_disable;
3298                        }
3299                }
3300 
3301                /* check for devices running slower than they could */
3302                if (le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0200
3303                                && udev->speed == USB_SPEED_FULL
3304                                && highspeed_hubs != 0)
3305                        check_highspeed (hub, udev, port1);
3306
3307                /* Store the parent's children[] pointer.  At this point
3308                 * udev becomes globally accessible, although presumably
3309                 * no one will look at it until hdev is unlocked.
3310                 */
3311                status = 0;
3312
3313                /* We mustn't add new devices if the parent hub has
3314                 * been disconnected; we would race with the
3315                 * recursively_mark_NOTATTACHED() routine.
3316                 */
3317                spin_lock_irq(&device_state_lock);
3318                if (hdev->state == USB_STATE_NOTATTACHED)
3319                        status = -ENOTCONN;
3320                else
3321                        hdev->children[port1-1] = udev;
3322                spin_unlock_irq(&device_state_lock);
3323
3324                /* Run it through the hoops (find a driver, etc) */
3325                if (!status) {
3326                        status = usb_new_device(udev);
3327                        if (status) {
3328                                spin_lock_irq(&device_state_lock);
3329                                hdev->children[port1-1] = NULL;
3330                                spin_unlock_irq(&device_state_lock);
3331                        }
3332                }
3333
3334                if (status)
3335                        goto loop_disable;
3336
3337                status = hub_power_remaining(hub);
3338                if (status)
3339                        dev_dbg(hub_dev, "%dmA power budget left\n", status);
3340
3341                return;
3342
3343loop_disable:
3344                hub_port_disable(hub, port1, 1);
3345loop:
3346                usb_ep0_reinit(udev);
3347                release_devnum(udev);
3348                hub_free_dev(udev);
3349                usb_put_dev(udev);
3350                if ((status == -ENOTCONN) || (status == -ENOTSUPP))
3351                        break;
3352        }
3353        if (hub->hdev->parent ||
3354                        !hcd->driver->port_handed_over ||
3355                        !(hcd->driver->port_handed_over)(hcd, port1))
3356                dev_err(hub_dev, "unable to enumerate USB device on port %d\n",
3357                                port1);
3358 
3359done:
3360        hub_port_disable(hub, port1, 1);
3361        if (hcd->driver->relinquish_port && !hub->hdev->parent)
3362                hcd->driver->relinquish_port(hcd, port1);
3363}
3364
3365static void hub_events(void)
3366{
3367        struct list_head *tmp;
3368        struct usb_device *hdev;
3369        struct usb_interface *intf;
3370        struct usb_hub *hub;
3371        struct device *hub_dev;
3372        u16 hubstatus;
3373        u16 hubchange;
3374        u16 portstatus;
3375        u16 portchange;
3376        int i, ret;
3377        int connect_change;
3378
3379        /*
3380         *  We restart the list every time to avoid a deadlock with
3381         * deleting hubs downstream from this one. This should be
3382         * safe since we delete the hub from the event list.
3383         * Not the most efficient, but avoids deadlocks.
3384         */
3385        while (1) {
3386
3387                /* Grab the first entry at the beginning of the list */
3388                spin_lock_irq(&hub_event_lock);
3389                if (list_empty(&hub_event_list)) {
3390                        spin_unlock_irq(&hub_event_lock);
3391                        break;
3392                }
3393
3394                tmp = hub_event_list.next;
3395                list_del_init(tmp);
3396
3397                hub = list_entry(tmp, struct usb_hub, event_list);
3398                kref_get(&hub->kref);
3399                spin_unlock_irq(&hub_event_lock);
3400
3401                hdev = hub->hdev;
3402                hub_dev = hub->intfdev;
3403                intf = to_usb_interface(hub_dev);
3404                dev_dbg(hub_dev, "state %d ports %d chg %04x evt %04x\n",
3405                                hdev->state, hub->descriptor
3406                                        ? hub->descriptor->bNbrPorts
3407                                        : 0,
3408                                /* NOTE: expects max 15 ports... */
3409                                (u16) hub->change_bits[0],
3410                                (u16) hub->event_bits[0]);
3411
3412                /* Lock the device, then check to see if we were
3413                 * disconnected while waiting for the lock to succeed. */
3414                usb_lock_device(hdev);
3415                if (unlikely(hub->disconnected))
3416                        goto loop_disconnected;
3417
3418                /* If the hub has died, clean up after it */
3419                if (hdev->state == USB_STATE_NOTATTACHED) {
3420                        hub->error = -ENODEV;
3421                        hub_quiesce(hub, HUB_DISCONNECT);
3422                        goto loop;
3423                }
3424
3425                /* Autoresume */
3426                ret = usb_autopm_get_interface(intf);
3427                if (ret) {
3428                        dev_dbg(hub_dev, "Can't autoresume: %d\n", ret);
3429                        goto loop;
3430                }
3431
3432                /* If this is an inactive hub, do nothing */
3433                if (hub->quiescing)
3434                        goto loop_autopm;
3435
3436                if (hub->error) {
3437                        dev_dbg (hub_dev, "resetting for error %d\n",
3438                                hub->error);
3439
3440                        ret = usb_reset_device(hdev);
3441                        if (ret) {
3442                                dev_dbg (hub_dev,
3443                                        "error resetting hub: %d\n", ret);
3444                                goto loop_autopm;
3445                        }
3446
3447                        hub->nerrors = 0;
3448                        hub->error = 0;
3449                }
3450
3451                /* deal with port status changes */
3452                for (i = 1; i <= hub->descriptor->bNbrPorts; i++) {
3453                        if (test_bit(i, hub->busy_bits))
3454                                continue;
3455                        connect_change = test_bit(i, hub->change_bits);
3456                        if (!test_and_clear_bit(i, hub->event_bits) &&
3457                                        !connect_change)
3458                                continue;
3459
3460                        ret = hub_port_status(hub, i,
3461                                        &portstatus, &portchange);
3462                        if (ret < 0)
3463                                continue;
3464
3465                        if (portchange & USB_PORT_STAT_C_CONNECTION) {
3466                                clear_port_feature(hdev, i,
3467                                        USB_PORT_FEAT_C_CONNECTION);
3468                                connect_change = 1;
3469                        }
3470
3471                        if (portchange & USB_PORT_STAT_C_ENABLE) {
3472                                if (!connect_change)
3473                                        dev_dbg (hub_dev,
3474                                                "port %d enable change, "
3475                                                "status %08x\n",
3476                                                i, portstatus);
3477                                clear_port_feature(hdev, i,
3478                                        USB_PORT_FEAT_C_ENABLE);
3479
3480                                /*
3481                                 * EM interference sometimes causes badly
3482                                 * shielded USB devices to be shutdown by
3483                                 * the hub, this hack enables them again.
3484                                 * Works at least with mouse driver. 
3485                                 */
3486                                if (!(portstatus & USB_PORT_STAT_ENABLE)
3487                                    && !connect_change
3488                                    && hdev->children[i-1]) {
3489                                        dev_err (hub_dev,
3490                                            "port %i "
3491                                            "disabled by hub (EMI?), "
3492                                            "re-enabling...\n",
3493                                                i);
3494                                        connect_change = 1;
3495                                }
3496                        }
3497
3498                        if (portchange & USB_PORT_STAT_C_SUSPEND) {
3499                                struct usb_device *udev;
3500
3501                                clear_port_feature(hdev, i,
3502                                        USB_PORT_FEAT_C_SUSPEND);
3503                                udev = hdev->children[i-1];
3504                                if (udev) {
3505                                        /* TRSMRCY = 10 msec */
3506                                        msleep(10);
3507
3508                                        usb_lock_device(udev);
3509                                        ret = usb_remote_wakeup(hdev->
3510                                                        children[i-1]);
3511                                        usb_unlock_device(udev);
3512                                        if (ret < 0)
3513                                                connect_change = 1;
3514                                } else {
3515                                        ret = -ENODEV;
3516                                        hub_port_disable(hub, i, 1);
3517                                }
3518                                dev_dbg (hub_dev,
3519                                        "resume on port %d, status %d\n",
3520                                        i, ret);
3521                        }
3522                        
3523                        if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
3524                                u16 status = 0;
3525                                u16 unused;
3526
3527                                dev_dbg(hub_dev, "over-current change on port "
3528                                        "%d\n", i);
3529                                clear_port_feature(hdev, i,
3530                                        USB_PORT_FEAT_C_OVER_CURRENT);
3531                                msleep(100);    /* Cool down */
3532                                hub_power_on(hub, true);
3533                                hub_port_status(hub, i, &status, &unused);
3534                                if (status & USB_PORT_STAT_OVERCURRENT)
3535                                        dev_err(hub_dev, "over-current "
3536                                                "condition on port %d\n", i);
3537                        }
3538
3539                        if (portchange & USB_PORT_STAT_C_RESET) {
3540                                dev_dbg (hub_dev,
3541                                        "reset change on port %d\n",
3542                                        i);
3543                                clear_port_feature(hdev, i,
3544                                        USB_PORT_FEAT_C_RESET);
3545                        }
3546                        if ((portchange & USB_PORT_STAT_C_BH_RESET) &&
3547                                        hub_is_superspeed(hub->hdev)) {
3548                                dev_dbg(hub_dev,
3549                                        "warm reset change on port %d\n",
3550                                        i);
3551                                clear_port_feature(hdev, i,
3552                                        USB_PORT_FEAT_C_BH_PORT_RESET);
3553                        }
3554                        if (portchange & USB_PORT_STAT_C_LINK_STATE) {
3555                                clear_port_feature(hub->hdev, i,
3556                                                USB_PORT_FEAT_C_PORT_LINK_STATE);
3557                        }
3558                        if (portchange & USB_PORT_STAT_C_CONFIG_ERROR) {
3559                                dev_warn(hub_dev,
3560                                        "config error on port %d\n",
3561                                        i);
3562                                clear_port_feature(hub->hdev, i,
3563                                                USB_PORT_FEAT_C_PORT_CONFIG_ERROR);
3564                        }
3565
3566                        /* Warm reset a USB3 protocol port if it's in
3567                         * SS.Inactive state.
3568                         */
3569                        if (hub_is_superspeed(hub->hdev) &&
3570                                (portstatus & USB_PORT_STAT_LINK_STATE)
3571                                        == USB_SS_PORT_LS_SS_INACTIVE) {
3572                                dev_dbg(hub_dev, "warm reset port %d\n", i);
3573                                hub_port_warm_reset(hub, i);
3574                        }
3575
3576                        if (connect_change)
3577                                hub_port_connect_change(hub, i,
3578                                                portstatus, portchange);
3579                } /* end for i */
3580
3581                /* deal with hub status changes */
3582                if (test_and_clear_bit(0, hub->event_bits) == 0)
3583                        ;       /* do nothing */
3584                else if (hub_hub_status(hub, &hubstatus, &hubchange) < 0)
3585                        dev_err (hub_dev, "get_hub_status failed\n");
3586                else {
3587                        if (hubchange & HUB_CHANGE_LOCAL_POWER) {
3588                                dev_dbg (hub_dev, "power change\n");
3589                                clear_hub_feature(hdev, C_HUB_LOCAL_POWER);
3590                                if (hubstatus & HUB_STATUS_LOCAL_POWER)
3591                                        /* FIXME: Is this always true? */
3592                                        hub->limited_power = 1;
3593                                else
3594                                        hub->limited_power = 0;
3595                        }
3596                        if (hubchange & HUB_CHANGE_OVERCURRENT) {
3597                                u16 status = 0;
3598                                u16 unused;
3599
3600                                dev_dbg(hub_dev, "over-current change\n");
3601                                clear_hub_feature(hdev, C_HUB_OVER_CURRENT);
3602                                msleep(500);    /* Cool down */
3603                                hub_power_on(hub, true);
3604                                hub_hub_status(hub, &status, &unused);
3605                                if (status & HUB_STATUS_OVERCURRENT)
3606                                        dev_err(hub_dev, "over-current "
3607                                                "condition\n");
3608                        }
3609                }
3610
3611 loop_autopm:
3612                /* Balance the usb_autopm_get_interface() above */
3613                usb_autopm_put_interface_no_suspend(intf);
3614 loop:
3615                /* Balance the usb_autopm_get_interface_no_resume() in
3616                 * kick_khubd() and allow autosuspend.
3617                 */
3618                usb_autopm_put_interface(intf);
3619 loop_disconnected:
3620                usb_unlock_device(hdev);
3621                kref_put(&hub->kref, hub_release);
3622
3623        } /* end while (1) */
3624}
3625
3626static int hub_thread(void *__unused)
3627{
3628        /* khubd needs to be freezable to avoid intefering with USB-PERSIST
3629         * port handover.  Otherwise it might see that a full-speed device
3630         * was gone before the EHCI controller had handed its port over to
3631         * the companion full-speed controller.
3632         */
3633        set_freezable();
3634
3635        do {
3636                hub_events();
3637                wait_event_freezable(khubd_wait,
3638                                !list_empty(&hub_event_list) ||
3639                                kthread_should_stop());
3640        } while (!kthread_should_stop() || !list_empty(&hub_event_list));
3641
3642        pr_debug("%s: khubd exiting\n", usbcore_name);
3643        return 0;
3644}
3645
3646static const struct usb_device_id hub_id_table[] = {
3647    { .match_flags = USB_DEVICE_ID_MATCH_DEV_CLASS,
3648      .bDeviceClass = USB_CLASS_HUB},
3649    { .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS,
3650      .bInterfaceClass = USB_CLASS_HUB},
3651    { }                                         /* Terminating entry */
3652};
3653
3654MODULE_DEVICE_TABLE (usb, hub_id_table);
3655
3656static struct usb_driver hub_driver = {
3657        .name =         "hub",
3658        .probe =        hub_probe,
3659        .disconnect =   hub_disconnect,
3660        .suspend =      hub_suspend,
3661        .resume =       hub_resume,
3662        .reset_resume = hub_reset_resume,
3663        .pre_reset =    hub_pre_reset,
3664        .post_reset =   hub_post_reset,
3665        .unlocked_ioctl = hub_ioctl,
3666        .id_table =     hub_id_table,
3667        .supports_autosuspend = 1,
3668};
3669
3670int usb_hub_init(void)
3671{
3672        if (usb_register(&hub_driver) < 0) {
3673                printk(KERN_ERR "%s: can't register hub driver\n",
3674                        usbcore_name);
3675                return -1;
3676        }
3677
3678        khubd_task = kthread_run(hub_thread, NULL, "khubd");
3679        if (!IS_ERR(khubd_task))
3680                return 0;
3681
3682        /* Fall through if kernel_thread failed */
3683        usb_deregister(&hub_driver);
3684        printk(KERN_ERR "%s: can't start khubd\n", usbcore_name);
3685
3686        return -1;
3687}
3688
3689void usb_hub_cleanup(void)
3690{
3691        kthread_stop(khubd_task);
3692
3693        /*
3694         * Hub resources are freed for us by usb_deregister. It calls
3695         * usb_driver_purge on every device which in turn calls that
3696         * devices disconnect function if it is using this driver.
3697         * The hub_disconnect function takes care of releasing the
3698         * individual hub resources. -greg
3699         */
3700        usb_deregister(&hub_driver);
3701} /* usb_hub_cleanup() */
3702
3703static int descriptors_changed(struct usb_device *udev,
3704                struct usb_device_descriptor *old_device_descriptor)
3705{
3706        int             changed = 0;
3707        unsigned        index;
3708        unsigned        serial_len = 0;
3709        unsigned        len;
3710        unsigned        old_length;
3711        int             length;
3712        char            *buf;
3713
3714        if (memcmp(&udev->descriptor, old_device_descriptor,
3715                        sizeof(*old_device_descriptor)) != 0)
3716                return 1;
3717
3718        /* Since the idVendor, idProduct, and bcdDevice values in the
3719         * device descriptor haven't changed, we will assume the
3720         * Manufacturer and Product strings haven't changed either.
3721         * But the SerialNumber string could be different (e.g., a
3722         * different flash card of the same brand).
3723         */
3724        if (udev->serial)
3725                serial_len = strlen(udev->serial) + 1;
3726
3727        len = serial_len;
3728        for (index = 0; index < udev->descriptor.bNumConfigurations; index++) {
3729                old_length = le16_to_cpu(udev->config[index].desc.wTotalLength);
3730                len = max(len, old_length);
3731        }
3732
3733        buf = kmalloc(len, GFP_NOIO);
3734        if (buf == NULL) {
3735                dev_err(&udev->dev, "no mem to re-read configs after reset\n");
3736                /* assume the worst */
3737                return 1;
3738        }
3739        for (index = 0; index < udev->descriptor.bNumConfigurations; index++) {
3740                old_length = le16_to_cpu(udev->config[index].desc.wTotalLength);
3741                length = usb_get_descriptor(udev, USB_DT_CONFIG, index, buf,
3742                                old_length);
3743                if (length != old_length) {
3744                        dev_dbg(&udev->dev, "config index %d, error %d\n",
3745                                        index, length);
3746                        changed = 1;
3747                        break;
3748                }
3749                if (memcmp (buf, udev->rawdescriptors[index], old_length)
3750                                != 0) {
3751                        dev_dbg(&udev->dev, "config index %d changed (#%d)\n",
3752                                index,
3753                                ((struct usb_config_descriptor *) buf)->
3754                                        bConfigurationValue);
3755                        changed = 1;
3756                        break;
3757                }
3758        }
3759
3760        if (!changed && serial_len) {
3761                length = usb_string(udev, udev->descriptor.iSerialNumber,
3762                                buf, serial_len);
3763                if (length + 1 != serial_len) {
3764                        dev_dbg(&udev->dev, "serial string error %d\n",
3765                                        length);
3766                        changed = 1;
3767                } else if (memcmp(buf, udev->serial, length) != 0) {
3768                        dev_dbg(&udev->dev, "serial string changed\n");
3769                        changed = 1;
3770                }
3771        }
3772
3773        kfree(buf);
3774        return changed;
3775}
3776
3777/**
3778 * usb_reset_and_verify_device - perform a USB port reset to reinitialize a device
3779 * @udev: device to reset (not in SUSPENDED or NOTATTACHED state)
3780 *
3781 * WARNING - don't use this routine to reset a composite device
3782 * (one with multiple interfaces owned by separate drivers)!
3783 * Use usb_reset_device() instead.
3784 *
3785 * Do a port reset, reassign the device's address, and establish its
3786 * former operating configuration.  If the reset fails, or the device's
3787 * descriptors change from their values before the reset, or the original
3788 * configuration and altsettings cannot be restored, a flag will be set
3789 * telling khubd to pretend the device has been disconnected and then
3790 * re-connected.  All drivers will be unbound, and the device will be
3791 * re-enumerated and probed all over again.
3792 *
3793 * Returns 0 if the reset succeeded, -ENODEV if the device has been
3794 * flagged for logical disconnection, or some other negative error code
3795 * if the reset wasn't even attempted.
3796 *
3797 * The caller must own the device lock.  For example, it's safe to use
3798 * this from a driver probe() routine after downloading new firmware.
3799 * For calls that might not occur during probe(), drivers should lock
3800 * the device using usb_lock_device_for_reset().
3801 *
3802 * Locking exception: This routine may also be called from within an
3803 * autoresume handler.  Such usage won't conflict with other tasks
3804 * holding the device lock because these tasks should always call
3805 * usb_autopm_resume_device(), thereby preventing any unwanted autoresume.
3806 */
3807static int usb_reset_and_verify_device(struct usb_device *udev)
3808{
3809        struct usb_device               *parent_hdev = udev->parent;
3810        struct usb_hub                  *parent_hub;
3811        struct usb_hcd                  *hcd = bus_to_hcd(udev->bus);
3812        struct usb_device_descriptor    descriptor = udev->descriptor;
3813        int                             i, ret = 0;
3814        int                             port1 = udev->portnum;
3815
3816        if (udev->state == USB_STATE_NOTATTACHED ||
3817                        udev->state == USB_STATE_SUSPENDED) {
3818                dev_dbg(&udev->dev, "device reset not allowed in state %d\n",
3819                                udev->state);
3820                return -EINVAL;
3821        }
3822
3823        if (!parent_hdev) {
3824                /* this requires hcd-specific logic; see ohci_restart() */
3825                dev_dbg(&udev->dev, "%s for root hub!\n", __func__);
3826                return -EISDIR;
3827        }
3828        parent_hub = hdev_to_hub(parent_hdev);
3829
3830        set_bit(port1, parent_hub->busy_bits);
3831        for (i = 0; i < SET_CONFIG_TRIES; ++i) {
3832
3833                /* ep0 maxpacket size may change; let the HCD know about it.
3834                 * Other endpoints will be handled by re-enumeration. */
3835                usb_ep0_reinit(udev);
3836                ret = hub_port_init(parent_hub, udev, port1, i);
3837                if (ret >= 0 || ret == -ENOTCONN || ret == -ENODEV)
3838                        break;
3839        }
3840        clear_bit(port1, parent_hub->busy_bits);
3841
3842        if (ret < 0)
3843                goto re_enumerate;
3844 
3845        /* Device might have changed firmware (DFU or similar) */
3846        if (descriptors_changed(udev, &descriptor)) {
3847                dev_info(&udev->dev, "device firmware changed\n");
3848                udev->descriptor = descriptor;  /* for disconnect() calls */
3849                goto re_enumerate;
3850        }
3851
3852        /* Restore the device's previous configuration */
3853        if (!udev->actconfig)
3854                goto done;
3855
3856        mutex_lock(hcd->bandwidth_mutex);
3857        ret = usb_hcd_alloc_bandwidth(udev, udev->actconfig, NULL, NULL);
3858        if (ret < 0) {
3859                dev_warn(&udev->dev,
3860                                "Busted HC?  Not enough HCD resources for "
3861                                "old configuration.\n");
3862                mutex_unlock(hcd->bandwidth_mutex);
3863                goto re_enumerate;
3864        }
3865        ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
3866                        USB_REQ_SET_CONFIGURATION, 0,
3867                        udev->actconfig->desc.bConfigurationValue, 0,
3868                        NULL, 0, USB_CTRL_SET_TIMEOUT);
3869        if (ret < 0) {
3870                dev_err(&udev->dev,
3871                        "can't restore configuration #%d (error=%d)\n",
3872                        udev->actconfig->desc.bConfigurationValue, ret);
3873                mutex_unlock(hcd->bandwidth_mutex);
3874                goto re_enumerate;
3875        }
3876        mutex_unlock(hcd->bandwidth_mutex);
3877        usb_set_device_state(udev, USB_STATE_CONFIGURED);
3878
3879        /* Put interfaces back into the same altsettings as before.
3880         * Don't bother to send the Set-Interface request for interfaces
3881         * that were already in altsetting 0; besides being unnecessary,
3882         * many devices can't handle it.  Instead just reset the host-side
3883         * endpoint state.
3884         */
3885        for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) {
3886                struct usb_host_config *config = udev->actconfig;
3887                struct usb_interface *intf = config->interface[i];
3888                struct usb_interface_descriptor *desc;
3889
3890                desc = &intf->cur_altsetting->desc;
3891                if (desc->bAlternateSetting == 0) {
3892                        usb_disable_interface(udev, intf, true);
3893                        usb_enable_interface(udev, intf, true);
3894                        ret = 0;
3895                } else {
3896                        /* Let the bandwidth allocation function know that this
3897                         * device has been reset, and it will have to use
3898                         * alternate setting 0 as the current alternate setting.
3899                         */
3900                        intf->resetting_device = 1;
3901                        ret = usb_set_interface(udev, desc->bInterfaceNumber,
3902                                        desc->bAlternateSetting);
3903                        intf->resetting_device = 0;
3904                }
3905                if (ret < 0) {
3906                        dev_err(&udev->dev, "failed to restore interface %d "
3907                                "altsetting %d (error=%d)\n",
3908                                desc->bInterfaceNumber,
3909                                desc->bAlternateSetting,
3910                                ret);
3911                        goto re_enumerate;
3912                }
3913        }
3914
3915done:
3916        return 0;
3917 
3918re_enumerate:
3919        hub_port_logical_disconnect(parent_hub, port1);
3920        return -ENODEV;
3921}
3922
3923/**
3924 * usb_reset_device - warn interface drivers and perform a USB port reset
3925 * @udev: device to reset (not in SUSPENDED or NOTATTACHED state)
3926 *
3927 * Warns all drivers bound to registered interfaces (using their pre_reset
3928 * method), performs the port reset, and then lets the drivers know that
3929 * the reset is over (using their post_reset method).
3930 *
3931 * Return value is the same as for usb_reset_and_verify_device().
3932 *
3933 * The caller must own the device lock.  For example, it's safe to use
3934 * this from a driver probe() routine after downloading new firmware.
3935 * For calls that might not occur during probe(), drivers should lock
3936 * the device using usb_lock_device_for_reset().
3937 *
3938 * If an interface is currently being probed or disconnected, we assume
3939 * its driver knows how to handle resets.  For all other interfaces,
3940 * if the driver doesn't have pre_reset and post_reset methods then
3941 * we attempt to unbind it and rebind afterward.
3942 */
3943int usb_reset_device(struct usb_device *udev)
3944{
3945        int ret;
3946        int i;
3947        struct usb_host_config *config = udev->actconfig;
3948
3949        if (udev->state == USB_STATE_NOTATTACHED ||
3950                        udev->state == USB_STATE_SUSPENDED) {
3951                dev_dbg(&udev->dev, "device reset not allowed in state %d\n",
3952                                udev->state);
3953                return -EINVAL;
3954        }
3955
3956        /* Prevent autosuspend during the reset */
3957        usb_autoresume_device(udev);
3958
3959        if (config) {
3960                for (i = 0; i < config->desc.bNumInterfaces; ++i) {
3961                        struct usb_interface *cintf = config->interface[i];
3962                        struct usb_driver *drv;
3963                        int unbind = 0;
3964
3965                        if (cintf->dev.driver) {
3966                                drv = to_usb_driver(cintf->dev.driver);
3967                                if (drv->pre_reset && drv->post_reset)
3968                                        unbind = (drv->pre_reset)(cintf);
3969                                else if (cintf->condition ==
3970                                                USB_INTERFACE_BOUND)
3971                                        unbind = 1;
3972                                if (unbind)
3973                                        usb_forced_unbind_intf(cintf);
3974                        }
3975                }
3976        }
3977
3978        ret = usb_reset_and_verify_device(udev);
3979
3980        if (config) {
3981                for (i = config->desc.bNumInterfaces - 1; i >= 0; --i) {
3982                        struct usb_interface *cintf = config->interface[i];
3983                        struct usb_driver *drv;
3984                        int rebind = cintf->needs_binding;
3985
3986                        if (!rebind && cintf->dev.driver) {
3987                                drv = to_usb_driver(cintf->dev.driver);
3988                                if (drv->post_reset)
3989                                        rebind = (drv->post_reset)(cintf);
3990                                else if (cintf->condition ==
3991                                                USB_INTERFACE_BOUND)
3992                                        rebind = 1;
3993                        }
3994                        if (ret == 0 && rebind)
3995                                usb_rebind_intf(cintf);
3996                }
3997        }
3998
3999        usb_autosuspend_device(udev);
4000        return ret;
4001}
4002EXPORT_SYMBOL_GPL(usb_reset_device);
4003
4004
4005/**
4006 * usb_queue_reset_device - Reset a USB device from an atomic context
4007 * @iface: USB interface belonging to the device to reset
4008 *
4009 * This function can be used to reset a USB device from an atomic
4010 * context, where usb_reset_device() won't work (as it blocks).
4011 *
4012 * Doing a reset via this method is functionally equivalent to calling
4013 * usb_reset_device(), except for the fact that it is delayed to a
4014 * workqueue. This means that any drivers bound to other interfaces
4015 * might be unbound, as well as users from usbfs in user space.
4016 *
4017 * Corner cases:
4018 *
4019 * - Scheduling two resets at the same time from two different drivers
4020 *   attached to two different interfaces of the same device is
4021 *   possible; depending on how the driver attached to each interface
4022 *   handles ->pre_reset(), the second reset might happen or not.
4023 *
4024 * - If a driver is unbound and it had a pending reset, the reset will
4025 *   be cancelled.
4026 *
4027 * - This function can be called during .probe() or .disconnect()
4028 *   times. On return from .disconnect(), any pending resets will be
4029 *   cancelled.
4030 *
4031 * There is no no need to lock/unlock the @reset_ws as schedule_work()
4032 * does its own.
4033 *
4034 * NOTE: We don't do any reference count tracking because it is not
4035 *     needed. The lifecycle of the work_struct is tied to the
4036 *     usb_interface. Before destroying the interface we cancel the
4037 *     work_struct, so the fact that work_struct is queued and or
4038 *     running means the interface (and thus, the device) exist and
4039 *     are referenced.
4040 */
4041void usb_queue_reset_device(struct usb_interface *iface)
4042{
4043        schedule_work(&iface->reset_ws);
4044}
4045EXPORT_SYMBOL_GPL(usb_queue_reset_device);
4046