linux/drivers/usb/gadget/udc/dummy_hcd.c
<<
>>
Prefs
   1/*
   2 * dummy_hcd.c -- Dummy/Loopback USB host and device emulator driver.
   3 *
   4 * Maintainer: Alan Stern <stern@rowland.harvard.edu>
   5 *
   6 * Copyright (C) 2003 David Brownell
   7 * Copyright (C) 2003-2005 Alan Stern
   8 *
   9 * This program is free software; you can redistribute it and/or modify
  10 * it under the terms of the GNU General Public License as published by
  11 * the Free Software Foundation; either version 2 of the License, or
  12 * (at your option) any later version.
  13 */
  14
  15
  16/*
  17 * This exposes a device side "USB gadget" API, driven by requests to a
  18 * Linux-USB host controller driver.  USB traffic is simulated; there's
  19 * no need for USB hardware.  Use this with two other drivers:
  20 *
  21 *  - Gadget driver, responding to requests (slave);
  22 *  - Host-side device driver, as already familiar in Linux.
  23 *
  24 * Having this all in one kernel can help some stages of development,
  25 * bypassing some hardware (and driver) issues.  UML could help too.
  26 */
  27
  28#include <linux/module.h>
  29#include <linux/kernel.h>
  30#include <linux/delay.h>
  31#include <linux/ioport.h>
  32#include <linux/slab.h>
  33#include <linux/errno.h>
  34#include <linux/init.h>
  35#include <linux/timer.h>
  36#include <linux/list.h>
  37#include <linux/interrupt.h>
  38#include <linux/platform_device.h>
  39#include <linux/usb.h>
  40#include <linux/usb/gadget.h>
  41#include <linux/usb/hcd.h>
  42#include <linux/scatterlist.h>
  43
  44#include <asm/byteorder.h>
  45#include <linux/io.h>
  46#include <asm/irq.h>
  47#include <asm/unaligned.h>
  48
  49#define DRIVER_DESC     "USB Host+Gadget Emulator"
  50#define DRIVER_VERSION  "02 May 2005"
  51
  52#define POWER_BUDGET    500     /* in mA; use 8 for low-power port testing */
  53
  54static const char       driver_name[] = "dummy_hcd";
  55static const char       driver_desc[] = "USB Host+Gadget Emulator";
  56
  57static const char       gadget_name[] = "dummy_udc";
  58
  59MODULE_DESCRIPTION(DRIVER_DESC);
  60MODULE_AUTHOR("David Brownell");
  61MODULE_LICENSE("GPL");
  62
  63struct dummy_hcd_module_parameters {
  64        bool is_super_speed;
  65        bool is_high_speed;
  66        unsigned int num;
  67};
  68
  69static struct dummy_hcd_module_parameters mod_data = {
  70        .is_super_speed = false,
  71        .is_high_speed = true,
  72        .num = 1,
  73};
  74module_param_named(is_super_speed, mod_data.is_super_speed, bool, S_IRUGO);
  75MODULE_PARM_DESC(is_super_speed, "true to simulate SuperSpeed connection");
  76module_param_named(is_high_speed, mod_data.is_high_speed, bool, S_IRUGO);
  77MODULE_PARM_DESC(is_high_speed, "true to simulate HighSpeed connection");
  78module_param_named(num, mod_data.num, uint, S_IRUGO);
  79MODULE_PARM_DESC(num, "number of emulated controllers");
  80/*-------------------------------------------------------------------------*/
  81
  82/* gadget side driver data structres */
  83struct dummy_ep {
  84        struct list_head                queue;
  85        unsigned long                   last_io;        /* jiffies timestamp */
  86        struct usb_gadget               *gadget;
  87        const struct usb_endpoint_descriptor *desc;
  88        struct usb_ep                   ep;
  89        unsigned                        halted:1;
  90        unsigned                        wedged:1;
  91        unsigned                        already_seen:1;
  92        unsigned                        setup_stage:1;
  93        unsigned                        stream_en:1;
  94};
  95
  96struct dummy_request {
  97        struct list_head                queue;          /* ep's requests */
  98        struct usb_request              req;
  99};
 100
 101static inline struct dummy_ep *usb_ep_to_dummy_ep(struct usb_ep *_ep)
 102{
 103        return container_of(_ep, struct dummy_ep, ep);
 104}
 105
 106static inline struct dummy_request *usb_request_to_dummy_request
 107                (struct usb_request *_req)
 108{
 109        return container_of(_req, struct dummy_request, req);
 110}
 111
 112/*-------------------------------------------------------------------------*/
 113
 114/*
 115 * Every device has ep0 for control requests, plus up to 30 more endpoints,
 116 * in one of two types:
 117 *
 118 *   - Configurable:  direction (in/out), type (bulk, iso, etc), and endpoint
 119 *     number can be changed.  Names like "ep-a" are used for this type.
 120 *
 121 *   - Fixed Function:  in other cases.  some characteristics may be mutable;
 122 *     that'd be hardware-specific.  Names like "ep12out-bulk" are used.
 123 *
 124 * Gadget drivers are responsible for not setting up conflicting endpoint
 125 * configurations, illegal or unsupported packet lengths, and so on.
 126 */
 127
 128static const char ep0name[] = "ep0";
 129
 130static const struct {
 131        const char *name;
 132        const struct usb_ep_caps caps;
 133} ep_info[] = {
 134#define EP_INFO(_name, _caps) \
 135        { \
 136                .name = _name, \
 137                .caps = _caps, \
 138        }
 139
 140        /* everyone has ep0 */
 141        EP_INFO(ep0name,
 142                USB_EP_CAPS(USB_EP_CAPS_TYPE_CONTROL, USB_EP_CAPS_DIR_ALL)),
 143        /* act like a pxa250: fifteen fixed function endpoints */
 144        EP_INFO("ep1in-bulk",
 145                USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_IN)),
 146        EP_INFO("ep2out-bulk",
 147                USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_OUT)),
 148        EP_INFO("ep3in-iso",
 149                USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_IN)),
 150        EP_INFO("ep4out-iso",
 151                USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_OUT)),
 152        EP_INFO("ep5in-int",
 153                USB_EP_CAPS(USB_EP_CAPS_TYPE_INT, USB_EP_CAPS_DIR_IN)),
 154        EP_INFO("ep6in-bulk",
 155                USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_IN)),
 156        EP_INFO("ep7out-bulk",
 157                USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_OUT)),
 158        EP_INFO("ep8in-iso",
 159                USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_IN)),
 160        EP_INFO("ep9out-iso",
 161                USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_OUT)),
 162        EP_INFO("ep10in-int",
 163                USB_EP_CAPS(USB_EP_CAPS_TYPE_INT, USB_EP_CAPS_DIR_IN)),
 164        EP_INFO("ep11in-bulk",
 165                USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_IN)),
 166        EP_INFO("ep12out-bulk",
 167                USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_OUT)),
 168        EP_INFO("ep13in-iso",
 169                USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_IN)),
 170        EP_INFO("ep14out-iso",
 171                USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_OUT)),
 172        EP_INFO("ep15in-int",
 173                USB_EP_CAPS(USB_EP_CAPS_TYPE_INT, USB_EP_CAPS_DIR_IN)),
 174        /* or like sa1100: two fixed function endpoints */
 175        EP_INFO("ep1out-bulk",
 176                USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_OUT)),
 177        EP_INFO("ep2in-bulk",
 178                USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_IN)),
 179        /* and now some generic EPs so we have enough in multi config */
 180        EP_INFO("ep3out",
 181                USB_EP_CAPS(USB_EP_CAPS_TYPE_ALL, USB_EP_CAPS_DIR_OUT)),
 182        EP_INFO("ep4in",
 183                USB_EP_CAPS(USB_EP_CAPS_TYPE_ALL, USB_EP_CAPS_DIR_IN)),
 184        EP_INFO("ep5out",
 185                USB_EP_CAPS(USB_EP_CAPS_TYPE_ALL, USB_EP_CAPS_DIR_OUT)),
 186        EP_INFO("ep6out",
 187                USB_EP_CAPS(USB_EP_CAPS_TYPE_ALL, USB_EP_CAPS_DIR_OUT)),
 188        EP_INFO("ep7in",
 189                USB_EP_CAPS(USB_EP_CAPS_TYPE_ALL, USB_EP_CAPS_DIR_IN)),
 190        EP_INFO("ep8out",
 191                USB_EP_CAPS(USB_EP_CAPS_TYPE_ALL, USB_EP_CAPS_DIR_OUT)),
 192        EP_INFO("ep9in",
 193                USB_EP_CAPS(USB_EP_CAPS_TYPE_ALL, USB_EP_CAPS_DIR_IN)),
 194        EP_INFO("ep10out",
 195                USB_EP_CAPS(USB_EP_CAPS_TYPE_ALL, USB_EP_CAPS_DIR_OUT)),
 196        EP_INFO("ep11out",
 197                USB_EP_CAPS(USB_EP_CAPS_TYPE_ALL, USB_EP_CAPS_DIR_OUT)),
 198        EP_INFO("ep12in",
 199                USB_EP_CAPS(USB_EP_CAPS_TYPE_ALL, USB_EP_CAPS_DIR_IN)),
 200        EP_INFO("ep13out",
 201                USB_EP_CAPS(USB_EP_CAPS_TYPE_ALL, USB_EP_CAPS_DIR_OUT)),
 202        EP_INFO("ep14in",
 203                USB_EP_CAPS(USB_EP_CAPS_TYPE_ALL, USB_EP_CAPS_DIR_IN)),
 204        EP_INFO("ep15out",
 205                USB_EP_CAPS(USB_EP_CAPS_TYPE_ALL, USB_EP_CAPS_DIR_OUT)),
 206
 207#undef EP_INFO
 208};
 209
 210#define DUMMY_ENDPOINTS ARRAY_SIZE(ep_info)
 211
 212/*-------------------------------------------------------------------------*/
 213
 214#define FIFO_SIZE               64
 215
 216struct urbp {
 217        struct urb              *urb;
 218        struct list_head        urbp_list;
 219        struct sg_mapping_iter  miter;
 220        u32                     miter_started;
 221};
 222
 223
 224enum dummy_rh_state {
 225        DUMMY_RH_RESET,
 226        DUMMY_RH_SUSPENDED,
 227        DUMMY_RH_RUNNING
 228};
 229
 230struct dummy_hcd {
 231        struct dummy                    *dum;
 232        enum dummy_rh_state             rh_state;
 233        struct timer_list               timer;
 234        u32                             port_status;
 235        u32                             old_status;
 236        unsigned long                   re_timeout;
 237
 238        struct usb_device               *udev;
 239        struct list_head                urbp_list;
 240        struct urbp                     *next_frame_urbp;
 241
 242        u32                             stream_en_ep;
 243        u8                              num_stream[30 / 2];
 244
 245        unsigned                        active:1;
 246        unsigned                        old_active:1;
 247        unsigned                        resuming:1;
 248};
 249
 250struct dummy {
 251        spinlock_t                      lock;
 252
 253        /*
 254         * SLAVE/GADGET side support
 255         */
 256        struct dummy_ep                 ep[DUMMY_ENDPOINTS];
 257        int                             address;
 258        int                             callback_usage;
 259        struct usb_gadget               gadget;
 260        struct usb_gadget_driver        *driver;
 261        struct dummy_request            fifo_req;
 262        u8                              fifo_buf[FIFO_SIZE];
 263        u16                             devstatus;
 264        unsigned                        ints_enabled:1;
 265        unsigned                        udc_suspended:1;
 266        unsigned                        pullup:1;
 267
 268        /*
 269         * MASTER/HOST side support
 270         */
 271        struct dummy_hcd                *hs_hcd;
 272        struct dummy_hcd                *ss_hcd;
 273};
 274
 275static inline struct dummy_hcd *hcd_to_dummy_hcd(struct usb_hcd *hcd)
 276{
 277        return (struct dummy_hcd *) (hcd->hcd_priv);
 278}
 279
 280static inline struct usb_hcd *dummy_hcd_to_hcd(struct dummy_hcd *dum)
 281{
 282        return container_of((void *) dum, struct usb_hcd, hcd_priv);
 283}
 284
 285static inline struct device *dummy_dev(struct dummy_hcd *dum)
 286{
 287        return dummy_hcd_to_hcd(dum)->self.controller;
 288}
 289
 290static inline struct device *udc_dev(struct dummy *dum)
 291{
 292        return dum->gadget.dev.parent;
 293}
 294
 295static inline struct dummy *ep_to_dummy(struct dummy_ep *ep)
 296{
 297        return container_of(ep->gadget, struct dummy, gadget);
 298}
 299
 300static inline struct dummy_hcd *gadget_to_dummy_hcd(struct usb_gadget *gadget)
 301{
 302        struct dummy *dum = container_of(gadget, struct dummy, gadget);
 303        if (dum->gadget.speed == USB_SPEED_SUPER)
 304                return dum->ss_hcd;
 305        else
 306                return dum->hs_hcd;
 307}
 308
 309static inline struct dummy *gadget_dev_to_dummy(struct device *dev)
 310{
 311        return container_of(dev, struct dummy, gadget.dev);
 312}
 313
 314/*-------------------------------------------------------------------------*/
 315
 316/* SLAVE/GADGET SIDE UTILITY ROUTINES */
 317
 318/* called with spinlock held */
 319static void nuke(struct dummy *dum, struct dummy_ep *ep)
 320{
 321        while (!list_empty(&ep->queue)) {
 322                struct dummy_request    *req;
 323
 324                req = list_entry(ep->queue.next, struct dummy_request, queue);
 325                list_del_init(&req->queue);
 326                req->req.status = -ESHUTDOWN;
 327
 328                spin_unlock(&dum->lock);
 329                usb_gadget_giveback_request(&ep->ep, &req->req);
 330                spin_lock(&dum->lock);
 331        }
 332}
 333
 334/* caller must hold lock */
 335static void stop_activity(struct dummy *dum)
 336{
 337        int i;
 338
 339        /* prevent any more requests */
 340        dum->address = 0;
 341
 342        /* The timer is left running so that outstanding URBs can fail */
 343
 344        /* nuke any pending requests first, so driver i/o is quiesced */
 345        for (i = 0; i < DUMMY_ENDPOINTS; ++i)
 346                nuke(dum, &dum->ep[i]);
 347
 348        /* driver now does any non-usb quiescing necessary */
 349}
 350
 351/**
 352 * set_link_state_by_speed() - Sets the current state of the link according to
 353 *      the hcd speed
 354 * @dum_hcd: pointer to the dummy_hcd structure to update the link state for
 355 *
 356 * This function updates the port_status according to the link state and the
 357 * speed of the hcd.
 358 */
 359static void set_link_state_by_speed(struct dummy_hcd *dum_hcd)
 360{
 361        struct dummy *dum = dum_hcd->dum;
 362
 363        if (dummy_hcd_to_hcd(dum_hcd)->speed == HCD_USB3) {
 364                if ((dum_hcd->port_status & USB_SS_PORT_STAT_POWER) == 0) {
 365                        dum_hcd->port_status = 0;
 366                } else if (!dum->pullup || dum->udc_suspended) {
 367                        /* UDC suspend must cause a disconnect */
 368                        dum_hcd->port_status &= ~(USB_PORT_STAT_CONNECTION |
 369                                                USB_PORT_STAT_ENABLE);
 370                        if ((dum_hcd->old_status &
 371                             USB_PORT_STAT_CONNECTION) != 0)
 372                                dum_hcd->port_status |=
 373                                        (USB_PORT_STAT_C_CONNECTION << 16);
 374                } else {
 375                        /* device is connected and not suspended */
 376                        dum_hcd->port_status |= (USB_PORT_STAT_CONNECTION |
 377                                                 USB_PORT_STAT_SPEED_5GBPS) ;
 378                        if ((dum_hcd->old_status &
 379                             USB_PORT_STAT_CONNECTION) == 0)
 380                                dum_hcd->port_status |=
 381                                        (USB_PORT_STAT_C_CONNECTION << 16);
 382                        if ((dum_hcd->port_status & USB_PORT_STAT_ENABLE) &&
 383                            (dum_hcd->port_status &
 384                             USB_PORT_STAT_LINK_STATE) == USB_SS_PORT_LS_U0 &&
 385                            dum_hcd->rh_state != DUMMY_RH_SUSPENDED)
 386                                dum_hcd->active = 1;
 387                }
 388        } else {
 389                if ((dum_hcd->port_status & USB_PORT_STAT_POWER) == 0) {
 390                        dum_hcd->port_status = 0;
 391                } else if (!dum->pullup || dum->udc_suspended) {
 392                        /* UDC suspend must cause a disconnect */
 393                        dum_hcd->port_status &= ~(USB_PORT_STAT_CONNECTION |
 394                                                USB_PORT_STAT_ENABLE |
 395                                                USB_PORT_STAT_LOW_SPEED |
 396                                                USB_PORT_STAT_HIGH_SPEED |
 397                                                USB_PORT_STAT_SUSPEND);
 398                        if ((dum_hcd->old_status &
 399                             USB_PORT_STAT_CONNECTION) != 0)
 400                                dum_hcd->port_status |=
 401                                        (USB_PORT_STAT_C_CONNECTION << 16);
 402                } else {
 403                        dum_hcd->port_status |= USB_PORT_STAT_CONNECTION;
 404                        if ((dum_hcd->old_status &
 405                             USB_PORT_STAT_CONNECTION) == 0)
 406                                dum_hcd->port_status |=
 407                                        (USB_PORT_STAT_C_CONNECTION << 16);
 408                        if ((dum_hcd->port_status & USB_PORT_STAT_ENABLE) == 0)
 409                                dum_hcd->port_status &= ~USB_PORT_STAT_SUSPEND;
 410                        else if ((dum_hcd->port_status &
 411                                  USB_PORT_STAT_SUSPEND) == 0 &&
 412                                        dum_hcd->rh_state != DUMMY_RH_SUSPENDED)
 413                                dum_hcd->active = 1;
 414                }
 415        }
 416}
 417
 418/* caller must hold lock */
 419static void set_link_state(struct dummy_hcd *dum_hcd)
 420{
 421        struct dummy *dum = dum_hcd->dum;
 422        unsigned int power_bit;
 423
 424        dum_hcd->active = 0;
 425        if (dum->pullup)
 426                if ((dummy_hcd_to_hcd(dum_hcd)->speed == HCD_USB3 &&
 427                     dum->gadget.speed != USB_SPEED_SUPER) ||
 428                    (dummy_hcd_to_hcd(dum_hcd)->speed != HCD_USB3 &&
 429                     dum->gadget.speed == USB_SPEED_SUPER))
 430                        return;
 431
 432        set_link_state_by_speed(dum_hcd);
 433        power_bit = (dummy_hcd_to_hcd(dum_hcd)->speed == HCD_USB3 ?
 434                        USB_SS_PORT_STAT_POWER : USB_PORT_STAT_POWER);
 435
 436        if ((dum_hcd->port_status & USB_PORT_STAT_ENABLE) == 0 ||
 437             dum_hcd->active)
 438                dum_hcd->resuming = 0;
 439
 440        /* Currently !connected or in reset */
 441        if ((dum_hcd->port_status & power_bit) == 0 ||
 442                        (dum_hcd->port_status & USB_PORT_STAT_RESET) != 0) {
 443                unsigned int disconnect = power_bit &
 444                                dum_hcd->old_status & (~dum_hcd->port_status);
 445                unsigned int reset = USB_PORT_STAT_RESET &
 446                                (~dum_hcd->old_status) & dum_hcd->port_status;
 447
 448                /* Report reset and disconnect events to the driver */
 449                if (dum->ints_enabled && (disconnect || reset)) {
 450                        stop_activity(dum);
 451                        ++dum->callback_usage;
 452                        spin_unlock(&dum->lock);
 453                        if (reset)
 454                                usb_gadget_udc_reset(&dum->gadget, dum->driver);
 455                        else
 456                                dum->driver->disconnect(&dum->gadget);
 457                        spin_lock(&dum->lock);
 458                        --dum->callback_usage;
 459                }
 460        } else if (dum_hcd->active != dum_hcd->old_active &&
 461                        dum->ints_enabled) {
 462                ++dum->callback_usage;
 463                spin_unlock(&dum->lock);
 464                if (dum_hcd->old_active && dum->driver->suspend)
 465                        dum->driver->suspend(&dum->gadget);
 466                else if (!dum_hcd->old_active &&  dum->driver->resume)
 467                        dum->driver->resume(&dum->gadget);
 468                spin_lock(&dum->lock);
 469                --dum->callback_usage;
 470        }
 471
 472        dum_hcd->old_status = dum_hcd->port_status;
 473        dum_hcd->old_active = dum_hcd->active;
 474}
 475
 476/*-------------------------------------------------------------------------*/
 477
 478/* SLAVE/GADGET SIDE DRIVER
 479 *
 480 * This only tracks gadget state.  All the work is done when the host
 481 * side tries some (emulated) i/o operation.  Real device controller
 482 * drivers would do real i/o using dma, fifos, irqs, timers, etc.
 483 */
 484
 485#define is_enabled(dum) \
 486        (dum->port_status & USB_PORT_STAT_ENABLE)
 487
 488static int dummy_enable(struct usb_ep *_ep,
 489                const struct usb_endpoint_descriptor *desc)
 490{
 491        struct dummy            *dum;
 492        struct dummy_hcd        *dum_hcd;
 493        struct dummy_ep         *ep;
 494        unsigned                max;
 495        int                     retval;
 496
 497        ep = usb_ep_to_dummy_ep(_ep);
 498        if (!_ep || !desc || ep->desc || _ep->name == ep0name
 499                        || desc->bDescriptorType != USB_DT_ENDPOINT)
 500                return -EINVAL;
 501        dum = ep_to_dummy(ep);
 502        if (!dum->driver)
 503                return -ESHUTDOWN;
 504
 505        dum_hcd = gadget_to_dummy_hcd(&dum->gadget);
 506        if (!is_enabled(dum_hcd))
 507                return -ESHUTDOWN;
 508
 509        /*
 510         * For HS/FS devices only bits 0..10 of the wMaxPacketSize represent the
 511         * maximum packet size.
 512         * For SS devices the wMaxPacketSize is limited by 1024.
 513         */
 514        max = usb_endpoint_maxp(desc);
 515
 516        /* drivers must not request bad settings, since lower levels
 517         * (hardware or its drivers) may not check.  some endpoints
 518         * can't do iso, many have maxpacket limitations, etc.
 519         *
 520         * since this "hardware" driver is here to help debugging, we
 521         * have some extra sanity checks.  (there could be more though,
 522         * especially for "ep9out" style fixed function ones.)
 523         */
 524        retval = -EINVAL;
 525        switch (usb_endpoint_type(desc)) {
 526        case USB_ENDPOINT_XFER_BULK:
 527                if (strstr(ep->ep.name, "-iso")
 528                                || strstr(ep->ep.name, "-int")) {
 529                        goto done;
 530                }
 531                switch (dum->gadget.speed) {
 532                case USB_SPEED_SUPER:
 533                        if (max == 1024)
 534                                break;
 535                        goto done;
 536                case USB_SPEED_HIGH:
 537                        if (max == 512)
 538                                break;
 539                        goto done;
 540                case USB_SPEED_FULL:
 541                        if (max == 8 || max == 16 || max == 32 || max == 64)
 542                                /* we'll fake any legal size */
 543                                break;
 544                        /* save a return statement */
 545                default:
 546                        goto done;
 547                }
 548                break;
 549        case USB_ENDPOINT_XFER_INT:
 550                if (strstr(ep->ep.name, "-iso")) /* bulk is ok */
 551                        goto done;
 552                /* real hardware might not handle all packet sizes */
 553                switch (dum->gadget.speed) {
 554                case USB_SPEED_SUPER:
 555                case USB_SPEED_HIGH:
 556                        if (max <= 1024)
 557                                break;
 558                        /* save a return statement */
 559                case USB_SPEED_FULL:
 560                        if (max <= 64)
 561                                break;
 562                        /* save a return statement */
 563                default:
 564                        if (max <= 8)
 565                                break;
 566                        goto done;
 567                }
 568                break;
 569        case USB_ENDPOINT_XFER_ISOC:
 570                if (strstr(ep->ep.name, "-bulk")
 571                                || strstr(ep->ep.name, "-int"))
 572                        goto done;
 573                /* real hardware might not handle all packet sizes */
 574                switch (dum->gadget.speed) {
 575                case USB_SPEED_SUPER:
 576                case USB_SPEED_HIGH:
 577                        if (max <= 1024)
 578                                break;
 579                        /* save a return statement */
 580                case USB_SPEED_FULL:
 581                        if (max <= 1023)
 582                                break;
 583                        /* save a return statement */
 584                default:
 585                        goto done;
 586                }
 587                break;
 588        default:
 589                /* few chips support control except on ep0 */
 590                goto done;
 591        }
 592
 593        _ep->maxpacket = max;
 594        if (usb_ss_max_streams(_ep->comp_desc)) {
 595                if (!usb_endpoint_xfer_bulk(desc)) {
 596                        dev_err(udc_dev(dum), "Can't enable stream support on "
 597                                        "non-bulk ep %s\n", _ep->name);
 598                        return -EINVAL;
 599                }
 600                ep->stream_en = 1;
 601        }
 602        ep->desc = desc;
 603
 604        dev_dbg(udc_dev(dum), "enabled %s (ep%d%s-%s) maxpacket %d stream %s\n",
 605                _ep->name,
 606                desc->bEndpointAddress & 0x0f,
 607                (desc->bEndpointAddress & USB_DIR_IN) ? "in" : "out",
 608                ({ char *val;
 609                 switch (usb_endpoint_type(desc)) {
 610                 case USB_ENDPOINT_XFER_BULK:
 611                         val = "bulk";
 612                         break;
 613                 case USB_ENDPOINT_XFER_ISOC:
 614                         val = "iso";
 615                         break;
 616                 case USB_ENDPOINT_XFER_INT:
 617                         val = "intr";
 618                         break;
 619                 default:
 620                         val = "ctrl";
 621                         break;
 622                 } val; }),
 623                max, ep->stream_en ? "enabled" : "disabled");
 624
 625        /* at this point real hardware should be NAKing transfers
 626         * to that endpoint, until a buffer is queued to it.
 627         */
 628        ep->halted = ep->wedged = 0;
 629        retval = 0;
 630done:
 631        return retval;
 632}
 633
 634static int dummy_disable(struct usb_ep *_ep)
 635{
 636        struct dummy_ep         *ep;
 637        struct dummy            *dum;
 638        unsigned long           flags;
 639
 640        ep = usb_ep_to_dummy_ep(_ep);
 641        if (!_ep || !ep->desc || _ep->name == ep0name)
 642                return -EINVAL;
 643        dum = ep_to_dummy(ep);
 644
 645        spin_lock_irqsave(&dum->lock, flags);
 646        ep->desc = NULL;
 647        ep->stream_en = 0;
 648        nuke(dum, ep);
 649        spin_unlock_irqrestore(&dum->lock, flags);
 650
 651        dev_dbg(udc_dev(dum), "disabled %s\n", _ep->name);
 652        return 0;
 653}
 654
 655static struct usb_request *dummy_alloc_request(struct usb_ep *_ep,
 656                gfp_t mem_flags)
 657{
 658        struct dummy_request    *req;
 659
 660        if (!_ep)
 661                return NULL;
 662
 663        req = kzalloc(sizeof(*req), mem_flags);
 664        if (!req)
 665                return NULL;
 666        INIT_LIST_HEAD(&req->queue);
 667        return &req->req;
 668}
 669
 670static void dummy_free_request(struct usb_ep *_ep, struct usb_request *_req)
 671{
 672        struct dummy_request    *req;
 673
 674        if (!_ep || !_req) {
 675                WARN_ON(1);
 676                return;
 677        }
 678
 679        req = usb_request_to_dummy_request(_req);
 680        WARN_ON(!list_empty(&req->queue));
 681        kfree(req);
 682}
 683
 684static void fifo_complete(struct usb_ep *ep, struct usb_request *req)
 685{
 686}
 687
 688static int dummy_queue(struct usb_ep *_ep, struct usb_request *_req,
 689                gfp_t mem_flags)
 690{
 691        struct dummy_ep         *ep;
 692        struct dummy_request    *req;
 693        struct dummy            *dum;
 694        struct dummy_hcd        *dum_hcd;
 695        unsigned long           flags;
 696
 697        req = usb_request_to_dummy_request(_req);
 698        if (!_req || !list_empty(&req->queue) || !_req->complete)
 699                return -EINVAL;
 700
 701        ep = usb_ep_to_dummy_ep(_ep);
 702        if (!_ep || (!ep->desc && _ep->name != ep0name))
 703                return -EINVAL;
 704
 705        dum = ep_to_dummy(ep);
 706        dum_hcd = gadget_to_dummy_hcd(&dum->gadget);
 707        if (!dum->driver || !is_enabled(dum_hcd))
 708                return -ESHUTDOWN;
 709
 710#if 0
 711        dev_dbg(udc_dev(dum), "ep %p queue req %p to %s, len %d buf %p\n",
 712                        ep, _req, _ep->name, _req->length, _req->buf);
 713#endif
 714        _req->status = -EINPROGRESS;
 715        _req->actual = 0;
 716        spin_lock_irqsave(&dum->lock, flags);
 717
 718        /* implement an emulated single-request FIFO */
 719        if (ep->desc && (ep->desc->bEndpointAddress & USB_DIR_IN) &&
 720                        list_empty(&dum->fifo_req.queue) &&
 721                        list_empty(&ep->queue) &&
 722                        _req->length <= FIFO_SIZE) {
 723                req = &dum->fifo_req;
 724                req->req = *_req;
 725                req->req.buf = dum->fifo_buf;
 726                memcpy(dum->fifo_buf, _req->buf, _req->length);
 727                req->req.context = dum;
 728                req->req.complete = fifo_complete;
 729
 730                list_add_tail(&req->queue, &ep->queue);
 731                spin_unlock(&dum->lock);
 732                _req->actual = _req->length;
 733                _req->status = 0;
 734                usb_gadget_giveback_request(_ep, _req);
 735                spin_lock(&dum->lock);
 736        }  else
 737                list_add_tail(&req->queue, &ep->queue);
 738        spin_unlock_irqrestore(&dum->lock, flags);
 739
 740        /* real hardware would likely enable transfers here, in case
 741         * it'd been left NAKing.
 742         */
 743        return 0;
 744}
 745
 746static int dummy_dequeue(struct usb_ep *_ep, struct usb_request *_req)
 747{
 748        struct dummy_ep         *ep;
 749        struct dummy            *dum;
 750        int                     retval = -EINVAL;
 751        unsigned long           flags;
 752        struct dummy_request    *req = NULL;
 753
 754        if (!_ep || !_req)
 755                return retval;
 756        ep = usb_ep_to_dummy_ep(_ep);
 757        dum = ep_to_dummy(ep);
 758
 759        if (!dum->driver)
 760                return -ESHUTDOWN;
 761
 762        local_irq_save(flags);
 763        spin_lock(&dum->lock);
 764        list_for_each_entry(req, &ep->queue, queue) {
 765                if (&req->req == _req) {
 766                        list_del_init(&req->queue);
 767                        _req->status = -ECONNRESET;
 768                        retval = 0;
 769                        break;
 770                }
 771        }
 772        spin_unlock(&dum->lock);
 773
 774        if (retval == 0) {
 775                dev_dbg(udc_dev(dum),
 776                                "dequeued req %p from %s, len %d buf %p\n",
 777                                req, _ep->name, _req->length, _req->buf);
 778                usb_gadget_giveback_request(_ep, _req);
 779        }
 780        local_irq_restore(flags);
 781        return retval;
 782}
 783
 784static int
 785dummy_set_halt_and_wedge(struct usb_ep *_ep, int value, int wedged)
 786{
 787        struct dummy_ep         *ep;
 788        struct dummy            *dum;
 789
 790        if (!_ep)
 791                return -EINVAL;
 792        ep = usb_ep_to_dummy_ep(_ep);
 793        dum = ep_to_dummy(ep);
 794        if (!dum->driver)
 795                return -ESHUTDOWN;
 796        if (!value)
 797                ep->halted = ep->wedged = 0;
 798        else if (ep->desc && (ep->desc->bEndpointAddress & USB_DIR_IN) &&
 799                        !list_empty(&ep->queue))
 800                return -EAGAIN;
 801        else {
 802                ep->halted = 1;
 803                if (wedged)
 804                        ep->wedged = 1;
 805        }
 806        /* FIXME clear emulated data toggle too */
 807        return 0;
 808}
 809
 810static int
 811dummy_set_halt(struct usb_ep *_ep, int value)
 812{
 813        return dummy_set_halt_and_wedge(_ep, value, 0);
 814}
 815
 816static int dummy_set_wedge(struct usb_ep *_ep)
 817{
 818        if (!_ep || _ep->name == ep0name)
 819                return -EINVAL;
 820        return dummy_set_halt_and_wedge(_ep, 1, 1);
 821}
 822
 823static const struct usb_ep_ops dummy_ep_ops = {
 824        .enable         = dummy_enable,
 825        .disable        = dummy_disable,
 826
 827        .alloc_request  = dummy_alloc_request,
 828        .free_request   = dummy_free_request,
 829
 830        .queue          = dummy_queue,
 831        .dequeue        = dummy_dequeue,
 832
 833        .set_halt       = dummy_set_halt,
 834        .set_wedge      = dummy_set_wedge,
 835};
 836
 837/*-------------------------------------------------------------------------*/
 838
 839/* there are both host and device side versions of this call ... */
 840static int dummy_g_get_frame(struct usb_gadget *_gadget)
 841{
 842        struct timespec64 ts64;
 843
 844        ktime_get_ts64(&ts64);
 845        return ts64.tv_nsec / NSEC_PER_MSEC;
 846}
 847
 848static int dummy_wakeup(struct usb_gadget *_gadget)
 849{
 850        struct dummy_hcd *dum_hcd;
 851
 852        dum_hcd = gadget_to_dummy_hcd(_gadget);
 853        if (!(dum_hcd->dum->devstatus & ((1 << USB_DEVICE_B_HNP_ENABLE)
 854                                | (1 << USB_DEVICE_REMOTE_WAKEUP))))
 855                return -EINVAL;
 856        if ((dum_hcd->port_status & USB_PORT_STAT_CONNECTION) == 0)
 857                return -ENOLINK;
 858        if ((dum_hcd->port_status & USB_PORT_STAT_SUSPEND) == 0 &&
 859                         dum_hcd->rh_state != DUMMY_RH_SUSPENDED)
 860                return -EIO;
 861
 862        /* FIXME: What if the root hub is suspended but the port isn't? */
 863
 864        /* hub notices our request, issues downstream resume, etc */
 865        dum_hcd->resuming = 1;
 866        dum_hcd->re_timeout = jiffies + msecs_to_jiffies(20);
 867        mod_timer(&dummy_hcd_to_hcd(dum_hcd)->rh_timer, dum_hcd->re_timeout);
 868        return 0;
 869}
 870
 871static int dummy_set_selfpowered(struct usb_gadget *_gadget, int value)
 872{
 873        struct dummy    *dum;
 874
 875        _gadget->is_selfpowered = (value != 0);
 876        dum = gadget_to_dummy_hcd(_gadget)->dum;
 877        if (value)
 878                dum->devstatus |= (1 << USB_DEVICE_SELF_POWERED);
 879        else
 880                dum->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED);
 881        return 0;
 882}
 883
 884static void dummy_udc_update_ep0(struct dummy *dum)
 885{
 886        if (dum->gadget.speed == USB_SPEED_SUPER)
 887                dum->ep[0].ep.maxpacket = 9;
 888        else
 889                dum->ep[0].ep.maxpacket = 64;
 890}
 891
 892static int dummy_pullup(struct usb_gadget *_gadget, int value)
 893{
 894        struct dummy_hcd *dum_hcd;
 895        struct dummy    *dum;
 896        unsigned long   flags;
 897
 898        dum = gadget_dev_to_dummy(&_gadget->dev);
 899        dum_hcd = gadget_to_dummy_hcd(_gadget);
 900
 901        spin_lock_irqsave(&dum->lock, flags);
 902        dum->pullup = (value != 0);
 903        set_link_state(dum_hcd);
 904        spin_unlock_irqrestore(&dum->lock, flags);
 905
 906        usb_hcd_poll_rh_status(dummy_hcd_to_hcd(dum_hcd));
 907        return 0;
 908}
 909
 910static void dummy_udc_set_speed(struct usb_gadget *_gadget,
 911                enum usb_device_speed speed)
 912{
 913        struct dummy    *dum;
 914
 915        dum = gadget_dev_to_dummy(&_gadget->dev);
 916
 917         if (mod_data.is_super_speed)
 918                 dum->gadget.speed = min_t(u8, USB_SPEED_SUPER, speed);
 919         else if (mod_data.is_high_speed)
 920                 dum->gadget.speed = min_t(u8, USB_SPEED_HIGH, speed);
 921         else
 922                 dum->gadget.speed = USB_SPEED_FULL;
 923
 924        dummy_udc_update_ep0(dum);
 925
 926        if (dum->gadget.speed < speed)
 927                dev_dbg(udc_dev(dum), "This device can perform faster"
 928                        " if you connect it to a %s port...\n",
 929                        usb_speed_string(speed));
 930}
 931
 932static int dummy_udc_start(struct usb_gadget *g,
 933                struct usb_gadget_driver *driver);
 934static int dummy_udc_stop(struct usb_gadget *g);
 935
 936static const struct usb_gadget_ops dummy_ops = {
 937        .get_frame      = dummy_g_get_frame,
 938        .wakeup         = dummy_wakeup,
 939        .set_selfpowered = dummy_set_selfpowered,
 940        .pullup         = dummy_pullup,
 941        .udc_start      = dummy_udc_start,
 942        .udc_stop       = dummy_udc_stop,
 943        .udc_set_speed  = dummy_udc_set_speed,
 944};
 945
 946/*-------------------------------------------------------------------------*/
 947
 948/* "function" sysfs attribute */
 949static ssize_t function_show(struct device *dev, struct device_attribute *attr,
 950                char *buf)
 951{
 952        struct dummy    *dum = gadget_dev_to_dummy(dev);
 953
 954        if (!dum->driver || !dum->driver->function)
 955                return 0;
 956        return scnprintf(buf, PAGE_SIZE, "%s\n", dum->driver->function);
 957}
 958static DEVICE_ATTR_RO(function);
 959
 960/*-------------------------------------------------------------------------*/
 961
 962/*
 963 * Driver registration/unregistration.
 964 *
 965 * This is basically hardware-specific; there's usually only one real USB
 966 * device (not host) controller since that's how USB devices are intended
 967 * to work.  So most implementations of these api calls will rely on the
 968 * fact that only one driver will ever bind to the hardware.  But curious
 969 * hardware can be built with discrete components, so the gadget API doesn't
 970 * require that assumption.
 971 *
 972 * For this emulator, it might be convenient to create a usb slave device
 973 * for each driver that registers:  just add to a big root hub.
 974 */
 975
 976static int dummy_udc_start(struct usb_gadget *g,
 977                struct usb_gadget_driver *driver)
 978{
 979        struct dummy_hcd        *dum_hcd = gadget_to_dummy_hcd(g);
 980        struct dummy            *dum = dum_hcd->dum;
 981
 982        if (driver->max_speed == USB_SPEED_UNKNOWN)
 983                return -EINVAL;
 984
 985        /*
 986         * SLAVE side init ... the layer above hardware, which
 987         * can't enumerate without help from the driver we're binding.
 988         */
 989
 990        spin_lock_irq(&dum->lock);
 991        dum->devstatus = 0;
 992        dum->driver = driver;
 993        dum->ints_enabled = 1;
 994        spin_unlock_irq(&dum->lock);
 995
 996        return 0;
 997}
 998
 999static int dummy_udc_stop(struct usb_gadget *g)
1000{
1001        struct dummy_hcd        *dum_hcd = gadget_to_dummy_hcd(g);
1002        struct dummy            *dum = dum_hcd->dum;
1003
1004        spin_lock_irq(&dum->lock);
1005        dum->ints_enabled = 0;
1006        stop_activity(dum);
1007
1008        /* emulate synchronize_irq(): wait for callbacks to finish */
1009        while (dum->callback_usage > 0) {
1010                spin_unlock_irq(&dum->lock);
1011                usleep_range(1000, 2000);
1012                spin_lock_irq(&dum->lock);
1013        }
1014
1015        dum->driver = NULL;
1016        spin_unlock_irq(&dum->lock);
1017
1018        return 0;
1019}
1020
1021#undef is_enabled
1022
1023/* The gadget structure is stored inside the hcd structure and will be
1024 * released along with it. */
1025static void init_dummy_udc_hw(struct dummy *dum)
1026{
1027        int i;
1028
1029        INIT_LIST_HEAD(&dum->gadget.ep_list);
1030        for (i = 0; i < DUMMY_ENDPOINTS; i++) {
1031                struct dummy_ep *ep = &dum->ep[i];
1032
1033                if (!ep_info[i].name)
1034                        break;
1035                ep->ep.name = ep_info[i].name;
1036                ep->ep.caps = ep_info[i].caps;
1037                ep->ep.ops = &dummy_ep_ops;
1038                list_add_tail(&ep->ep.ep_list, &dum->gadget.ep_list);
1039                ep->halted = ep->wedged = ep->already_seen =
1040                                ep->setup_stage = 0;
1041                usb_ep_set_maxpacket_limit(&ep->ep, ~0);
1042                ep->ep.max_streams = 16;
1043                ep->last_io = jiffies;
1044                ep->gadget = &dum->gadget;
1045                ep->desc = NULL;
1046                INIT_LIST_HEAD(&ep->queue);
1047        }
1048
1049        dum->gadget.ep0 = &dum->ep[0].ep;
1050        list_del_init(&dum->ep[0].ep.ep_list);
1051        INIT_LIST_HEAD(&dum->fifo_req.queue);
1052
1053#ifdef CONFIG_USB_OTG
1054        dum->gadget.is_otg = 1;
1055#endif
1056}
1057
1058static int dummy_udc_probe(struct platform_device *pdev)
1059{
1060        struct dummy    *dum;
1061        int             rc;
1062
1063        dum = *((void **)dev_get_platdata(&pdev->dev));
1064        /* Clear usb_gadget region for new registration to udc-core */
1065        memzero_explicit(&dum->gadget, sizeof(struct usb_gadget));
1066        dum->gadget.name = gadget_name;
1067        dum->gadget.ops = &dummy_ops;
1068        if (mod_data.is_super_speed)
1069                dum->gadget.max_speed = USB_SPEED_SUPER;
1070        else if (mod_data.is_high_speed)
1071                dum->gadget.max_speed = USB_SPEED_HIGH;
1072        else
1073                dum->gadget.max_speed = USB_SPEED_FULL;
1074
1075        dum->gadget.dev.parent = &pdev->dev;
1076        init_dummy_udc_hw(dum);
1077
1078        rc = usb_add_gadget_udc(&pdev->dev, &dum->gadget);
1079        if (rc < 0)
1080                goto err_udc;
1081
1082        rc = device_create_file(&dum->gadget.dev, &dev_attr_function);
1083        if (rc < 0)
1084                goto err_dev;
1085        platform_set_drvdata(pdev, dum);
1086        return rc;
1087
1088err_dev:
1089        usb_del_gadget_udc(&dum->gadget);
1090err_udc:
1091        return rc;
1092}
1093
1094static int dummy_udc_remove(struct platform_device *pdev)
1095{
1096        struct dummy    *dum = platform_get_drvdata(pdev);
1097
1098        device_remove_file(&dum->gadget.dev, &dev_attr_function);
1099        usb_del_gadget_udc(&dum->gadget);
1100        return 0;
1101}
1102
1103static void dummy_udc_pm(struct dummy *dum, struct dummy_hcd *dum_hcd,
1104                int suspend)
1105{
1106        spin_lock_irq(&dum->lock);
1107        dum->udc_suspended = suspend;
1108        set_link_state(dum_hcd);
1109        spin_unlock_irq(&dum->lock);
1110}
1111
1112static int dummy_udc_suspend(struct platform_device *pdev, pm_message_t state)
1113{
1114        struct dummy            *dum = platform_get_drvdata(pdev);
1115        struct dummy_hcd        *dum_hcd = gadget_to_dummy_hcd(&dum->gadget);
1116
1117        dev_dbg(&pdev->dev, "%s\n", __func__);
1118        dummy_udc_pm(dum, dum_hcd, 1);
1119        usb_hcd_poll_rh_status(dummy_hcd_to_hcd(dum_hcd));
1120        return 0;
1121}
1122
1123static int dummy_udc_resume(struct platform_device *pdev)
1124{
1125        struct dummy            *dum = platform_get_drvdata(pdev);
1126        struct dummy_hcd        *dum_hcd = gadget_to_dummy_hcd(&dum->gadget);
1127
1128        dev_dbg(&pdev->dev, "%s\n", __func__);
1129        dummy_udc_pm(dum, dum_hcd, 0);
1130        usb_hcd_poll_rh_status(dummy_hcd_to_hcd(dum_hcd));
1131        return 0;
1132}
1133
1134static struct platform_driver dummy_udc_driver = {
1135        .probe          = dummy_udc_probe,
1136        .remove         = dummy_udc_remove,
1137        .suspend        = dummy_udc_suspend,
1138        .resume         = dummy_udc_resume,
1139        .driver         = {
1140                .name   = (char *) gadget_name,
1141        },
1142};
1143
1144/*-------------------------------------------------------------------------*/
1145
1146static unsigned int dummy_get_ep_idx(const struct usb_endpoint_descriptor *desc)
1147{
1148        unsigned int index;
1149
1150        index = usb_endpoint_num(desc) << 1;
1151        if (usb_endpoint_dir_in(desc))
1152                index |= 1;
1153        return index;
1154}
1155
1156/* MASTER/HOST SIDE DRIVER
1157 *
1158 * this uses the hcd framework to hook up to host side drivers.
1159 * its root hub will only have one device, otherwise it acts like
1160 * a normal host controller.
1161 *
1162 * when urbs are queued, they're just stuck on a list that we
1163 * scan in a timer callback.  that callback connects writes from
1164 * the host with reads from the device, and so on, based on the
1165 * usb 2.0 rules.
1166 */
1167
1168static int dummy_ep_stream_en(struct dummy_hcd *dum_hcd, struct urb *urb)
1169{
1170        const struct usb_endpoint_descriptor *desc = &urb->ep->desc;
1171        u32 index;
1172
1173        if (!usb_endpoint_xfer_bulk(desc))
1174                return 0;
1175
1176        index = dummy_get_ep_idx(desc);
1177        return (1 << index) & dum_hcd->stream_en_ep;
1178}
1179
1180/*
1181 * The max stream number is saved as a nibble so for the 30 possible endpoints
1182 * we only 15 bytes of memory. Therefore we are limited to max 16 streams (0
1183 * means we use only 1 stream). The maximum according to the spec is 16bit so
1184 * if the 16 stream limit is about to go, the array size should be incremented
1185 * to 30 elements of type u16.
1186 */
1187static int get_max_streams_for_pipe(struct dummy_hcd *dum_hcd,
1188                unsigned int pipe)
1189{
1190        int max_streams;
1191
1192        max_streams = dum_hcd->num_stream[usb_pipeendpoint(pipe)];
1193        if (usb_pipeout(pipe))
1194                max_streams >>= 4;
1195        else
1196                max_streams &= 0xf;
1197        max_streams++;
1198        return max_streams;
1199}
1200
1201static void set_max_streams_for_pipe(struct dummy_hcd *dum_hcd,
1202                unsigned int pipe, unsigned int streams)
1203{
1204        int max_streams;
1205
1206        streams--;
1207        max_streams = dum_hcd->num_stream[usb_pipeendpoint(pipe)];
1208        if (usb_pipeout(pipe)) {
1209                streams <<= 4;
1210                max_streams &= 0xf;
1211        } else {
1212                max_streams &= 0xf0;
1213        }
1214        max_streams |= streams;
1215        dum_hcd->num_stream[usb_pipeendpoint(pipe)] = max_streams;
1216}
1217
1218static int dummy_validate_stream(struct dummy_hcd *dum_hcd, struct urb *urb)
1219{
1220        unsigned int max_streams;
1221        int enabled;
1222
1223        enabled = dummy_ep_stream_en(dum_hcd, urb);
1224        if (!urb->stream_id) {
1225                if (enabled)
1226                        return -EINVAL;
1227                return 0;
1228        }
1229        if (!enabled)
1230                return -EINVAL;
1231
1232        max_streams = get_max_streams_for_pipe(dum_hcd,
1233                        usb_pipeendpoint(urb->pipe));
1234        if (urb->stream_id > max_streams) {
1235                dev_err(dummy_dev(dum_hcd), "Stream id %d is out of range.\n",
1236                                urb->stream_id);
1237                BUG();
1238                return -EINVAL;
1239        }
1240        return 0;
1241}
1242
1243static int dummy_urb_enqueue(
1244        struct usb_hcd                  *hcd,
1245        struct urb                      *urb,
1246        gfp_t                           mem_flags
1247) {
1248        struct dummy_hcd *dum_hcd;
1249        struct urbp     *urbp;
1250        unsigned long   flags;
1251        int             rc;
1252
1253        urbp = kmalloc(sizeof *urbp, mem_flags);
1254        if (!urbp)
1255                return -ENOMEM;
1256        urbp->urb = urb;
1257        urbp->miter_started = 0;
1258
1259        dum_hcd = hcd_to_dummy_hcd(hcd);
1260        spin_lock_irqsave(&dum_hcd->dum->lock, flags);
1261
1262        rc = dummy_validate_stream(dum_hcd, urb);
1263        if (rc) {
1264                kfree(urbp);
1265                goto done;
1266        }
1267
1268        rc = usb_hcd_link_urb_to_ep(hcd, urb);
1269        if (rc) {
1270                kfree(urbp);
1271                goto done;
1272        }
1273
1274        if (!dum_hcd->udev) {
1275                dum_hcd->udev = urb->dev;
1276                usb_get_dev(dum_hcd->udev);
1277        } else if (unlikely(dum_hcd->udev != urb->dev))
1278                dev_err(dummy_dev(dum_hcd), "usb_device address has changed!\n");
1279
1280        list_add_tail(&urbp->urbp_list, &dum_hcd->urbp_list);
1281        urb->hcpriv = urbp;
1282        if (!dum_hcd->next_frame_urbp)
1283                dum_hcd->next_frame_urbp = urbp;
1284        if (usb_pipetype(urb->pipe) == PIPE_CONTROL)
1285                urb->error_count = 1;           /* mark as a new urb */
1286
1287        /* kick the scheduler, it'll do the rest */
1288        if (!timer_pending(&dum_hcd->timer))
1289                mod_timer(&dum_hcd->timer, jiffies + 1);
1290
1291 done:
1292        spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
1293        return rc;
1294}
1295
1296static int dummy_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
1297{
1298        struct dummy_hcd *dum_hcd;
1299        unsigned long   flags;
1300        int             rc;
1301
1302        /* giveback happens automatically in timer callback,
1303         * so make sure the callback happens */
1304        dum_hcd = hcd_to_dummy_hcd(hcd);
1305        spin_lock_irqsave(&dum_hcd->dum->lock, flags);
1306
1307        rc = usb_hcd_check_unlink_urb(hcd, urb, status);
1308        if (!rc && dum_hcd->rh_state != DUMMY_RH_RUNNING &&
1309                        !list_empty(&dum_hcd->urbp_list))
1310                mod_timer(&dum_hcd->timer, jiffies);
1311
1312        spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
1313        return rc;
1314}
1315
1316static int dummy_perform_transfer(struct urb *urb, struct dummy_request *req,
1317                u32 len)
1318{
1319        void *ubuf, *rbuf;
1320        struct urbp *urbp = urb->hcpriv;
1321        int to_host;
1322        struct sg_mapping_iter *miter = &urbp->miter;
1323        u32 trans = 0;
1324        u32 this_sg;
1325        bool next_sg;
1326
1327        to_host = usb_pipein(urb->pipe);
1328        rbuf = req->req.buf + req->req.actual;
1329
1330        if (!urb->num_sgs) {
1331                ubuf = urb->transfer_buffer + urb->actual_length;
1332                if (to_host)
1333                        memcpy(ubuf, rbuf, len);
1334                else
1335                        memcpy(rbuf, ubuf, len);
1336                return len;
1337        }
1338
1339        if (!urbp->miter_started) {
1340                u32 flags = SG_MITER_ATOMIC;
1341
1342                if (to_host)
1343                        flags |= SG_MITER_TO_SG;
1344                else
1345                        flags |= SG_MITER_FROM_SG;
1346
1347                sg_miter_start(miter, urb->sg, urb->num_sgs, flags);
1348                urbp->miter_started = 1;
1349        }
1350        next_sg = sg_miter_next(miter);
1351        if (next_sg == false) {
1352                WARN_ON_ONCE(1);
1353                return -EINVAL;
1354        }
1355        do {
1356                ubuf = miter->addr;
1357                this_sg = min_t(u32, len, miter->length);
1358                miter->consumed = this_sg;
1359                trans += this_sg;
1360
1361                if (to_host)
1362                        memcpy(ubuf, rbuf, this_sg);
1363                else
1364                        memcpy(rbuf, ubuf, this_sg);
1365                len -= this_sg;
1366
1367                if (!len)
1368                        break;
1369                next_sg = sg_miter_next(miter);
1370                if (next_sg == false) {
1371                        WARN_ON_ONCE(1);
1372                        return -EINVAL;
1373                }
1374
1375                rbuf += this_sg;
1376        } while (1);
1377
1378        sg_miter_stop(miter);
1379        return trans;
1380}
1381
1382/* transfer up to a frame's worth; caller must own lock */
1383static int transfer(struct dummy_hcd *dum_hcd, struct urb *urb,
1384                struct dummy_ep *ep, int limit, int *status)
1385{
1386        struct dummy            *dum = dum_hcd->dum;
1387        struct dummy_request    *req;
1388        int                     sent = 0;
1389
1390top:
1391        /* if there's no request queued, the device is NAKing; return */
1392        list_for_each_entry(req, &ep->queue, queue) {
1393                unsigned        host_len, dev_len, len;
1394                int             is_short, to_host;
1395                int             rescan = 0;
1396
1397                if (dummy_ep_stream_en(dum_hcd, urb)) {
1398                        if ((urb->stream_id != req->req.stream_id))
1399                                continue;
1400                }
1401
1402                /* 1..N packets of ep->ep.maxpacket each ... the last one
1403                 * may be short (including zero length).
1404                 *
1405                 * writer can send a zlp explicitly (length 0) or implicitly
1406                 * (length mod maxpacket zero, and 'zero' flag); they always
1407                 * terminate reads.
1408                 */
1409                host_len = urb->transfer_buffer_length - urb->actual_length;
1410                dev_len = req->req.length - req->req.actual;
1411                len = min(host_len, dev_len);
1412
1413                /* FIXME update emulated data toggle too */
1414
1415                to_host = usb_pipein(urb->pipe);
1416                if (unlikely(len == 0))
1417                        is_short = 1;
1418                else {
1419                        /* not enough bandwidth left? */
1420                        if (limit < ep->ep.maxpacket && limit < len)
1421                                break;
1422                        len = min_t(unsigned, len, limit);
1423                        if (len == 0)
1424                                break;
1425
1426                        /* send multiple of maxpacket first, then remainder */
1427                        if (len >= ep->ep.maxpacket) {
1428                                is_short = 0;
1429                                if (len % ep->ep.maxpacket)
1430                                        rescan = 1;
1431                                len -= len % ep->ep.maxpacket;
1432                        } else {
1433                                is_short = 1;
1434                        }
1435
1436                        len = dummy_perform_transfer(urb, req, len);
1437
1438                        ep->last_io = jiffies;
1439                        if ((int)len < 0) {
1440                                req->req.status = len;
1441                        } else {
1442                                limit -= len;
1443                                sent += len;
1444                                urb->actual_length += len;
1445                                req->req.actual += len;
1446                        }
1447                }
1448
1449                /* short packets terminate, maybe with overflow/underflow.
1450                 * it's only really an error to write too much.
1451                 *
1452                 * partially filling a buffer optionally blocks queue advances
1453                 * (so completion handlers can clean up the queue) but we don't
1454                 * need to emulate such data-in-flight.
1455                 */
1456                if (is_short) {
1457                        if (host_len == dev_len) {
1458                                req->req.status = 0;
1459                                *status = 0;
1460                        } else if (to_host) {
1461                                req->req.status = 0;
1462                                if (dev_len > host_len)
1463                                        *status = -EOVERFLOW;
1464                                else
1465                                        *status = 0;
1466                        } else {
1467                                *status = 0;
1468                                if (host_len > dev_len)
1469                                        req->req.status = -EOVERFLOW;
1470                                else
1471                                        req->req.status = 0;
1472                        }
1473
1474                /*
1475                 * many requests terminate without a short packet.
1476                 * send a zlp if demanded by flags.
1477                 */
1478                } else {
1479                        if (req->req.length == req->req.actual) {
1480                                if (req->req.zero && to_host)
1481                                        rescan = 1;
1482                                else
1483                                        req->req.status = 0;
1484                        }
1485                        if (urb->transfer_buffer_length == urb->actual_length) {
1486                                if (urb->transfer_flags & URB_ZERO_PACKET &&
1487                                    !to_host)
1488                                        rescan = 1;
1489                                else
1490                                        *status = 0;
1491                        }
1492                }
1493
1494                /* device side completion --> continuable */
1495                if (req->req.status != -EINPROGRESS) {
1496                        list_del_init(&req->queue);
1497
1498                        spin_unlock(&dum->lock);
1499                        usb_gadget_giveback_request(&ep->ep, &req->req);
1500                        spin_lock(&dum->lock);
1501
1502                        /* requests might have been unlinked... */
1503                        rescan = 1;
1504                }
1505
1506                /* host side completion --> terminate */
1507                if (*status != -EINPROGRESS)
1508                        break;
1509
1510                /* rescan to continue with any other queued i/o */
1511                if (rescan)
1512                        goto top;
1513        }
1514        return sent;
1515}
1516
1517static int periodic_bytes(struct dummy *dum, struct dummy_ep *ep)
1518{
1519        int     limit = ep->ep.maxpacket;
1520
1521        if (dum->gadget.speed == USB_SPEED_HIGH) {
1522                int     tmp;
1523
1524                /* high bandwidth mode */
1525                tmp = usb_endpoint_maxp_mult(ep->desc);
1526                tmp *= 8 /* applies to entire frame */;
1527                limit += limit * tmp;
1528        }
1529        if (dum->gadget.speed == USB_SPEED_SUPER) {
1530                switch (usb_endpoint_type(ep->desc)) {
1531                case USB_ENDPOINT_XFER_ISOC:
1532                        /* Sec. 4.4.8.2 USB3.0 Spec */
1533                        limit = 3 * 16 * 1024 * 8;
1534                        break;
1535                case USB_ENDPOINT_XFER_INT:
1536                        /* Sec. 4.4.7.2 USB3.0 Spec */
1537                        limit = 3 * 1024 * 8;
1538                        break;
1539                case USB_ENDPOINT_XFER_BULK:
1540                default:
1541                        break;
1542                }
1543        }
1544        return limit;
1545}
1546
1547#define is_active(dum_hcd)      ((dum_hcd->port_status & \
1548                (USB_PORT_STAT_CONNECTION | USB_PORT_STAT_ENABLE | \
1549                        USB_PORT_STAT_SUSPEND)) \
1550                == (USB_PORT_STAT_CONNECTION | USB_PORT_STAT_ENABLE))
1551
1552static struct dummy_ep *find_endpoint(struct dummy *dum, u8 address)
1553{
1554        int             i;
1555
1556        if (!is_active((dum->gadget.speed == USB_SPEED_SUPER ?
1557                        dum->ss_hcd : dum->hs_hcd)))
1558                return NULL;
1559        if (!dum->ints_enabled)
1560                return NULL;
1561        if ((address & ~USB_DIR_IN) == 0)
1562                return &dum->ep[0];
1563        for (i = 1; i < DUMMY_ENDPOINTS; i++) {
1564                struct dummy_ep *ep = &dum->ep[i];
1565
1566                if (!ep->desc)
1567                        continue;
1568                if (ep->desc->bEndpointAddress == address)
1569                        return ep;
1570        }
1571        return NULL;
1572}
1573
1574#undef is_active
1575
1576#define Dev_Request     (USB_TYPE_STANDARD | USB_RECIP_DEVICE)
1577#define Dev_InRequest   (Dev_Request | USB_DIR_IN)
1578#define Intf_Request    (USB_TYPE_STANDARD | USB_RECIP_INTERFACE)
1579#define Intf_InRequest  (Intf_Request | USB_DIR_IN)
1580#define Ep_Request      (USB_TYPE_STANDARD | USB_RECIP_ENDPOINT)
1581#define Ep_InRequest    (Ep_Request | USB_DIR_IN)
1582
1583
1584/**
1585 * handle_control_request() - handles all control transfers
1586 * @dum: pointer to dummy (the_controller)
1587 * @urb: the urb request to handle
1588 * @setup: pointer to the setup data for a USB device control
1589 *       request
1590 * @status: pointer to request handling status
1591 *
1592 * Return 0 - if the request was handled
1593 *        1 - if the request wasn't handles
1594 *        error code on error
1595 */
1596static int handle_control_request(struct dummy_hcd *dum_hcd, struct urb *urb,
1597                                  struct usb_ctrlrequest *setup,
1598                                  int *status)
1599{
1600        struct dummy_ep         *ep2;
1601        struct dummy            *dum = dum_hcd->dum;
1602        int                     ret_val = 1;
1603        unsigned        w_index;
1604        unsigned        w_value;
1605
1606        w_index = le16_to_cpu(setup->wIndex);
1607        w_value = le16_to_cpu(setup->wValue);
1608        switch (setup->bRequest) {
1609        case USB_REQ_SET_ADDRESS:
1610                if (setup->bRequestType != Dev_Request)
1611                        break;
1612                dum->address = w_value;
1613                *status = 0;
1614                dev_dbg(udc_dev(dum), "set_address = %d\n",
1615                                w_value);
1616                ret_val = 0;
1617                break;
1618        case USB_REQ_SET_FEATURE:
1619                if (setup->bRequestType == Dev_Request) {
1620                        ret_val = 0;
1621                        switch (w_value) {
1622                        case USB_DEVICE_REMOTE_WAKEUP:
1623                                break;
1624                        case USB_DEVICE_B_HNP_ENABLE:
1625                                dum->gadget.b_hnp_enable = 1;
1626                                break;
1627                        case USB_DEVICE_A_HNP_SUPPORT:
1628                                dum->gadget.a_hnp_support = 1;
1629                                break;
1630                        case USB_DEVICE_A_ALT_HNP_SUPPORT:
1631                                dum->gadget.a_alt_hnp_support = 1;
1632                                break;
1633                        case USB_DEVICE_U1_ENABLE:
1634                                if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1635                                    HCD_USB3)
1636                                        w_value = USB_DEV_STAT_U1_ENABLED;
1637                                else
1638                                        ret_val = -EOPNOTSUPP;
1639                                break;
1640                        case USB_DEVICE_U2_ENABLE:
1641                                if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1642                                    HCD_USB3)
1643                                        w_value = USB_DEV_STAT_U2_ENABLED;
1644                                else
1645                                        ret_val = -EOPNOTSUPP;
1646                                break;
1647                        case USB_DEVICE_LTM_ENABLE:
1648                                if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1649                                    HCD_USB3)
1650                                        w_value = USB_DEV_STAT_LTM_ENABLED;
1651                                else
1652                                        ret_val = -EOPNOTSUPP;
1653                                break;
1654                        default:
1655                                ret_val = -EOPNOTSUPP;
1656                        }
1657                        if (ret_val == 0) {
1658                                dum->devstatus |= (1 << w_value);
1659                                *status = 0;
1660                        }
1661                } else if (setup->bRequestType == Ep_Request) {
1662                        /* endpoint halt */
1663                        ep2 = find_endpoint(dum, w_index);
1664                        if (!ep2 || ep2->ep.name == ep0name) {
1665                                ret_val = -EOPNOTSUPP;
1666                                break;
1667                        }
1668                        ep2->halted = 1;
1669                        ret_val = 0;
1670                        *status = 0;
1671                }
1672                break;
1673        case USB_REQ_CLEAR_FEATURE:
1674                if (setup->bRequestType == Dev_Request) {
1675                        ret_val = 0;
1676                        switch (w_value) {
1677                        case USB_DEVICE_REMOTE_WAKEUP:
1678                                w_value = USB_DEVICE_REMOTE_WAKEUP;
1679                                break;
1680                        case USB_DEVICE_U1_ENABLE:
1681                                if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1682                                    HCD_USB3)
1683                                        w_value = USB_DEV_STAT_U1_ENABLED;
1684                                else
1685                                        ret_val = -EOPNOTSUPP;
1686                                break;
1687                        case USB_DEVICE_U2_ENABLE:
1688                                if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1689                                    HCD_USB3)
1690                                        w_value = USB_DEV_STAT_U2_ENABLED;
1691                                else
1692                                        ret_val = -EOPNOTSUPP;
1693                                break;
1694                        case USB_DEVICE_LTM_ENABLE:
1695                                if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1696                                    HCD_USB3)
1697                                        w_value = USB_DEV_STAT_LTM_ENABLED;
1698                                else
1699                                        ret_val = -EOPNOTSUPP;
1700                                break;
1701                        default:
1702                                ret_val = -EOPNOTSUPP;
1703                                break;
1704                        }
1705                        if (ret_val == 0) {
1706                                dum->devstatus &= ~(1 << w_value);
1707                                *status = 0;
1708                        }
1709                } else if (setup->bRequestType == Ep_Request) {
1710                        /* endpoint halt */
1711                        ep2 = find_endpoint(dum, w_index);
1712                        if (!ep2) {
1713                                ret_val = -EOPNOTSUPP;
1714                                break;
1715                        }
1716                        if (!ep2->wedged)
1717                                ep2->halted = 0;
1718                        ret_val = 0;
1719                        *status = 0;
1720                }
1721                break;
1722        case USB_REQ_GET_STATUS:
1723                if (setup->bRequestType == Dev_InRequest
1724                                || setup->bRequestType == Intf_InRequest
1725                                || setup->bRequestType == Ep_InRequest) {
1726                        char *buf;
1727                        /*
1728                         * device: remote wakeup, selfpowered
1729                         * interface: nothing
1730                         * endpoint: halt
1731                         */
1732                        buf = (char *)urb->transfer_buffer;
1733                        if (urb->transfer_buffer_length > 0) {
1734                                if (setup->bRequestType == Ep_InRequest) {
1735                                        ep2 = find_endpoint(dum, w_index);
1736                                        if (!ep2) {
1737                                                ret_val = -EOPNOTSUPP;
1738                                                break;
1739                                        }
1740                                        buf[0] = ep2->halted;
1741                                } else if (setup->bRequestType ==
1742                                           Dev_InRequest) {
1743                                        buf[0] = (u8)dum->devstatus;
1744                                } else
1745                                        buf[0] = 0;
1746                        }
1747                        if (urb->transfer_buffer_length > 1)
1748                                buf[1] = 0;
1749                        urb->actual_length = min_t(u32, 2,
1750                                urb->transfer_buffer_length);
1751                        ret_val = 0;
1752                        *status = 0;
1753                }
1754                break;
1755        }
1756        return ret_val;
1757}
1758
1759/* drive both sides of the transfers; looks like irq handlers to
1760 * both drivers except the callbacks aren't in_irq().
1761 */
1762static void dummy_timer(unsigned long _dum_hcd)
1763{
1764        struct dummy_hcd        *dum_hcd = (struct dummy_hcd *) _dum_hcd;
1765        struct dummy            *dum = dum_hcd->dum;
1766        struct urbp             *urbp, *tmp;
1767        unsigned long           flags;
1768        int                     limit, total;
1769        int                     i;
1770
1771        /* simplistic model for one frame's bandwidth */
1772        switch (dum->gadget.speed) {
1773        case USB_SPEED_LOW:
1774                total = 8/*bytes*/ * 12/*packets*/;
1775                break;
1776        case USB_SPEED_FULL:
1777                total = 64/*bytes*/ * 19/*packets*/;
1778                break;
1779        case USB_SPEED_HIGH:
1780                total = 512/*bytes*/ * 13/*packets*/ * 8/*uframes*/;
1781                break;
1782        case USB_SPEED_SUPER:
1783                /* Bus speed is 500000 bytes/ms, so use a little less */
1784                total = 490000;
1785                break;
1786        default:
1787                dev_err(dummy_dev(dum_hcd), "bogus device speed\n");
1788                return;
1789        }
1790
1791        /* FIXME if HZ != 1000 this will probably misbehave ... */
1792
1793        /* look at each urb queued by the host side driver */
1794        spin_lock_irqsave(&dum->lock, flags);
1795
1796        if (!dum_hcd->udev) {
1797                dev_err(dummy_dev(dum_hcd),
1798                                "timer fired with no URBs pending?\n");
1799                spin_unlock_irqrestore(&dum->lock, flags);
1800                return;
1801        }
1802        dum_hcd->next_frame_urbp = NULL;
1803
1804        for (i = 0; i < DUMMY_ENDPOINTS; i++) {
1805                if (!ep_info[i].name)
1806                        break;
1807                dum->ep[i].already_seen = 0;
1808        }
1809
1810restart:
1811        list_for_each_entry_safe(urbp, tmp, &dum_hcd->urbp_list, urbp_list) {
1812                struct urb              *urb;
1813                struct dummy_request    *req;
1814                u8                      address;
1815                struct dummy_ep         *ep = NULL;
1816                int                     type;
1817                int                     status = -EINPROGRESS;
1818
1819                /* stop when we reach URBs queued after the timer interrupt */
1820                if (urbp == dum_hcd->next_frame_urbp)
1821                        break;
1822
1823                urb = urbp->urb;
1824                if (urb->unlinked)
1825                        goto return_urb;
1826                else if (dum_hcd->rh_state != DUMMY_RH_RUNNING)
1827                        continue;
1828                type = usb_pipetype(urb->pipe);
1829
1830                /* used up this frame's non-periodic bandwidth?
1831                 * FIXME there's infinite bandwidth for control and
1832                 * periodic transfers ... unrealistic.
1833                 */
1834                if (total <= 0 && type == PIPE_BULK)
1835                        continue;
1836
1837                /* find the gadget's ep for this request (if configured) */
1838                address = usb_pipeendpoint (urb->pipe);
1839                if (usb_pipein(urb->pipe))
1840                        address |= USB_DIR_IN;
1841                ep = find_endpoint(dum, address);
1842                if (!ep) {
1843                        /* set_configuration() disagreement */
1844                        dev_dbg(dummy_dev(dum_hcd),
1845                                "no ep configured for urb %p\n",
1846                                urb);
1847                        status = -EPROTO;
1848                        goto return_urb;
1849                }
1850
1851                if (ep->already_seen)
1852                        continue;
1853                ep->already_seen = 1;
1854                if (ep == &dum->ep[0] && urb->error_count) {
1855                        ep->setup_stage = 1;    /* a new urb */
1856                        urb->error_count = 0;
1857                }
1858                if (ep->halted && !ep->setup_stage) {
1859                        /* NOTE: must not be iso! */
1860                        dev_dbg(dummy_dev(dum_hcd), "ep %s halted, urb %p\n",
1861                                        ep->ep.name, urb);
1862                        status = -EPIPE;
1863                        goto return_urb;
1864                }
1865                /* FIXME make sure both ends agree on maxpacket */
1866
1867                /* handle control requests */
1868                if (ep == &dum->ep[0] && ep->setup_stage) {
1869                        struct usb_ctrlrequest          setup;
1870                        int                             value = 1;
1871
1872                        setup = *(struct usb_ctrlrequest *) urb->setup_packet;
1873                        /* paranoia, in case of stale queued data */
1874                        list_for_each_entry(req, &ep->queue, queue) {
1875                                list_del_init(&req->queue);
1876                                req->req.status = -EOVERFLOW;
1877                                dev_dbg(udc_dev(dum), "stale req = %p\n",
1878                                                req);
1879
1880                                spin_unlock(&dum->lock);
1881                                usb_gadget_giveback_request(&ep->ep, &req->req);
1882                                spin_lock(&dum->lock);
1883                                ep->already_seen = 0;
1884                                goto restart;
1885                        }
1886
1887                        /* gadget driver never sees set_address or operations
1888                         * on standard feature flags.  some hardware doesn't
1889                         * even expose them.
1890                         */
1891                        ep->last_io = jiffies;
1892                        ep->setup_stage = 0;
1893                        ep->halted = 0;
1894
1895                        value = handle_control_request(dum_hcd, urb, &setup,
1896                                                       &status);
1897
1898                        /* gadget driver handles all other requests.  block
1899                         * until setup() returns; no reentrancy issues etc.
1900                         */
1901                        if (value > 0) {
1902                                ++dum->callback_usage;
1903                                spin_unlock(&dum->lock);
1904                                value = dum->driver->setup(&dum->gadget,
1905                                                &setup);
1906                                spin_lock(&dum->lock);
1907                                --dum->callback_usage;
1908
1909                                if (value >= 0) {
1910                                        /* no delays (max 64KB data stage) */
1911                                        limit = 64*1024;
1912                                        goto treat_control_like_bulk;
1913                                }
1914                                /* error, see below */
1915                        }
1916
1917                        if (value < 0) {
1918                                if (value != -EOPNOTSUPP)
1919                                        dev_dbg(udc_dev(dum),
1920                                                "setup --> %d\n",
1921                                                value);
1922                                status = -EPIPE;
1923                                urb->actual_length = 0;
1924                        }
1925
1926                        goto return_urb;
1927                }
1928
1929                /* non-control requests */
1930                limit = total;
1931                switch (usb_pipetype(urb->pipe)) {
1932                case PIPE_ISOCHRONOUS:
1933                        /* FIXME is it urb->interval since the last xfer?
1934                         * use urb->iso_frame_desc[i].
1935                         * complete whether or not ep has requests queued.
1936                         * report random errors, to debug drivers.
1937                         */
1938                        limit = max(limit, periodic_bytes(dum, ep));
1939                        status = -ENOSYS;
1940                        break;
1941
1942                case PIPE_INTERRUPT:
1943                        /* FIXME is it urb->interval since the last xfer?
1944                         * this almost certainly polls too fast.
1945                         */
1946                        limit = max(limit, periodic_bytes(dum, ep));
1947                        /* FALLTHROUGH */
1948
1949                default:
1950treat_control_like_bulk:
1951                        ep->last_io = jiffies;
1952                        total -= transfer(dum_hcd, urb, ep, limit, &status);
1953                        break;
1954                }
1955
1956                /* incomplete transfer? */
1957                if (status == -EINPROGRESS)
1958                        continue;
1959
1960return_urb:
1961                list_del(&urbp->urbp_list);
1962                kfree(urbp);
1963                if (ep)
1964                        ep->already_seen = ep->setup_stage = 0;
1965
1966                usb_hcd_unlink_urb_from_ep(dummy_hcd_to_hcd(dum_hcd), urb);
1967                spin_unlock(&dum->lock);
1968                usb_hcd_giveback_urb(dummy_hcd_to_hcd(dum_hcd), urb, status);
1969                spin_lock(&dum->lock);
1970
1971                goto restart;
1972        }
1973
1974        if (list_empty(&dum_hcd->urbp_list)) {
1975                usb_put_dev(dum_hcd->udev);
1976                dum_hcd->udev = NULL;
1977        } else if (dum_hcd->rh_state == DUMMY_RH_RUNNING) {
1978                /* want a 1 msec delay here */
1979                mod_timer(&dum_hcd->timer, jiffies + msecs_to_jiffies(1));
1980        }
1981
1982        spin_unlock_irqrestore(&dum->lock, flags);
1983}
1984
1985/*-------------------------------------------------------------------------*/
1986
1987#define PORT_C_MASK \
1988        ((USB_PORT_STAT_C_CONNECTION \
1989        | USB_PORT_STAT_C_ENABLE \
1990        | USB_PORT_STAT_C_SUSPEND \
1991        | USB_PORT_STAT_C_OVERCURRENT \
1992        | USB_PORT_STAT_C_RESET) << 16)
1993
1994static int dummy_hub_status(struct usb_hcd *hcd, char *buf)
1995{
1996        struct dummy_hcd        *dum_hcd;
1997        unsigned long           flags;
1998        int                     retval = 0;
1999
2000        dum_hcd = hcd_to_dummy_hcd(hcd);
2001
2002        spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2003        if (!HCD_HW_ACCESSIBLE(hcd))
2004                goto done;
2005
2006        if (dum_hcd->resuming && time_after_eq(jiffies, dum_hcd->re_timeout)) {
2007                dum_hcd->port_status |= (USB_PORT_STAT_C_SUSPEND << 16);
2008                dum_hcd->port_status &= ~USB_PORT_STAT_SUSPEND;
2009                set_link_state(dum_hcd);
2010        }
2011
2012        if ((dum_hcd->port_status & PORT_C_MASK) != 0) {
2013                *buf = (1 << 1);
2014                dev_dbg(dummy_dev(dum_hcd), "port status 0x%08x has changes\n",
2015                                dum_hcd->port_status);
2016                retval = 1;
2017                if (dum_hcd->rh_state == DUMMY_RH_SUSPENDED)
2018                        usb_hcd_resume_root_hub(hcd);
2019        }
2020done:
2021        spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2022        return retval;
2023}
2024
2025/* usb 3.0 root hub device descriptor */
2026static struct {
2027        struct usb_bos_descriptor bos;
2028        struct usb_ss_cap_descriptor ss_cap;
2029} __packed usb3_bos_desc = {
2030
2031        .bos = {
2032                .bLength                = USB_DT_BOS_SIZE,
2033                .bDescriptorType        = USB_DT_BOS,
2034                .wTotalLength           = cpu_to_le16(sizeof(usb3_bos_desc)),
2035                .bNumDeviceCaps         = 1,
2036        },
2037        .ss_cap = {
2038                .bLength                = USB_DT_USB_SS_CAP_SIZE,
2039                .bDescriptorType        = USB_DT_DEVICE_CAPABILITY,
2040                .bDevCapabilityType     = USB_SS_CAP_TYPE,
2041                .wSpeedSupported        = cpu_to_le16(USB_5GBPS_OPERATION),
2042                .bFunctionalitySupport  = ilog2(USB_5GBPS_OPERATION),
2043        },
2044};
2045
2046static inline void
2047ss_hub_descriptor(struct usb_hub_descriptor *desc)
2048{
2049        memset(desc, 0, sizeof *desc);
2050        desc->bDescriptorType = USB_DT_SS_HUB;
2051        desc->bDescLength = 12;
2052        desc->wHubCharacteristics = cpu_to_le16(
2053                        HUB_CHAR_INDV_PORT_LPSM |
2054                        HUB_CHAR_COMMON_OCPM);
2055        desc->bNbrPorts = 1;
2056        desc->u.ss.bHubHdrDecLat = 0x04; /* Worst case: 0.4 micro sec*/
2057        desc->u.ss.DeviceRemovable = 0;
2058}
2059
2060static inline void hub_descriptor(struct usb_hub_descriptor *desc)
2061{
2062        memset(desc, 0, sizeof *desc);
2063        desc->bDescriptorType = USB_DT_HUB;
2064        desc->bDescLength = 9;
2065        desc->wHubCharacteristics = cpu_to_le16(
2066                        HUB_CHAR_INDV_PORT_LPSM |
2067                        HUB_CHAR_COMMON_OCPM);
2068        desc->bNbrPorts = 1;
2069        desc->u.hs.DeviceRemovable[0] = 0;
2070        desc->u.hs.DeviceRemovable[1] = 0xff;   /* PortPwrCtrlMask */
2071}
2072
2073static int dummy_hub_control(
2074        struct usb_hcd  *hcd,
2075        u16             typeReq,
2076        u16             wValue,
2077        u16             wIndex,
2078        char            *buf,
2079        u16             wLength
2080) {
2081        struct dummy_hcd *dum_hcd;
2082        int             retval = 0;
2083        unsigned long   flags;
2084
2085        if (!HCD_HW_ACCESSIBLE(hcd))
2086                return -ETIMEDOUT;
2087
2088        dum_hcd = hcd_to_dummy_hcd(hcd);
2089
2090        spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2091        switch (typeReq) {
2092        case ClearHubFeature:
2093                break;
2094        case ClearPortFeature:
2095                switch (wValue) {
2096                case USB_PORT_FEAT_SUSPEND:
2097                        if (hcd->speed == HCD_USB3) {
2098                                dev_dbg(dummy_dev(dum_hcd),
2099                                         "USB_PORT_FEAT_SUSPEND req not "
2100                                         "supported for USB 3.0 roothub\n");
2101                                goto error;
2102                        }
2103                        if (dum_hcd->port_status & USB_PORT_STAT_SUSPEND) {
2104                                /* 20msec resume signaling */
2105                                dum_hcd->resuming = 1;
2106                                dum_hcd->re_timeout = jiffies +
2107                                                msecs_to_jiffies(20);
2108                        }
2109                        break;
2110                case USB_PORT_FEAT_POWER:
2111                        dev_dbg(dummy_dev(dum_hcd), "power-off\n");
2112                        if (hcd->speed == HCD_USB3)
2113                                dum_hcd->port_status &= ~USB_SS_PORT_STAT_POWER;
2114                        else
2115                                dum_hcd->port_status &= ~USB_PORT_STAT_POWER;
2116                        set_link_state(dum_hcd);
2117                        break;
2118                default:
2119                        dum_hcd->port_status &= ~(1 << wValue);
2120                        set_link_state(dum_hcd);
2121                }
2122                break;
2123        case GetHubDescriptor:
2124                if (hcd->speed == HCD_USB3 &&
2125                                (wLength < USB_DT_SS_HUB_SIZE ||
2126                                 wValue != (USB_DT_SS_HUB << 8))) {
2127                        dev_dbg(dummy_dev(dum_hcd),
2128                                "Wrong hub descriptor type for "
2129                                "USB 3.0 roothub.\n");
2130                        goto error;
2131                }
2132                if (hcd->speed == HCD_USB3)
2133                        ss_hub_descriptor((struct usb_hub_descriptor *) buf);
2134                else
2135                        hub_descriptor((struct usb_hub_descriptor *) buf);
2136                break;
2137
2138        case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
2139                if (hcd->speed != HCD_USB3)
2140                        goto error;
2141
2142                if ((wValue >> 8) != USB_DT_BOS)
2143                        goto error;
2144
2145                memcpy(buf, &usb3_bos_desc, sizeof(usb3_bos_desc));
2146                retval = sizeof(usb3_bos_desc);
2147                break;
2148
2149        case GetHubStatus:
2150                *(__le32 *) buf = cpu_to_le32(0);
2151                break;
2152        case GetPortStatus:
2153                if (wIndex != 1)
2154                        retval = -EPIPE;
2155
2156                /* whoever resets or resumes must GetPortStatus to
2157                 * complete it!!
2158                 */
2159                if (dum_hcd->resuming &&
2160                                time_after_eq(jiffies, dum_hcd->re_timeout)) {
2161                        dum_hcd->port_status |= (USB_PORT_STAT_C_SUSPEND << 16);
2162                        dum_hcd->port_status &= ~USB_PORT_STAT_SUSPEND;
2163                }
2164                if ((dum_hcd->port_status & USB_PORT_STAT_RESET) != 0 &&
2165                                time_after_eq(jiffies, dum_hcd->re_timeout)) {
2166                        dum_hcd->port_status |= (USB_PORT_STAT_C_RESET << 16);
2167                        dum_hcd->port_status &= ~USB_PORT_STAT_RESET;
2168                        if (dum_hcd->dum->pullup) {
2169                                dum_hcd->port_status |= USB_PORT_STAT_ENABLE;
2170
2171                                if (hcd->speed < HCD_USB3) {
2172                                        switch (dum_hcd->dum->gadget.speed) {
2173                                        case USB_SPEED_HIGH:
2174                                                dum_hcd->port_status |=
2175                                                      USB_PORT_STAT_HIGH_SPEED;
2176                                                break;
2177                                        case USB_SPEED_LOW:
2178                                                dum_hcd->dum->gadget.ep0->
2179                                                        maxpacket = 8;
2180                                                dum_hcd->port_status |=
2181                                                        USB_PORT_STAT_LOW_SPEED;
2182                                                break;
2183                                        default:
2184                                                dum_hcd->dum->gadget.speed =
2185                                                        USB_SPEED_FULL;
2186                                                break;
2187                                        }
2188                                }
2189                        }
2190                }
2191                set_link_state(dum_hcd);
2192                ((__le16 *) buf)[0] = cpu_to_le16(dum_hcd->port_status);
2193                ((__le16 *) buf)[1] = cpu_to_le16(dum_hcd->port_status >> 16);
2194                break;
2195        case SetHubFeature:
2196                retval = -EPIPE;
2197                break;
2198        case SetPortFeature:
2199                switch (wValue) {
2200                case USB_PORT_FEAT_LINK_STATE:
2201                        if (hcd->speed != HCD_USB3) {
2202                                dev_dbg(dummy_dev(dum_hcd),
2203                                         "USB_PORT_FEAT_LINK_STATE req not "
2204                                         "supported for USB 2.0 roothub\n");
2205                                goto error;
2206                        }
2207                        /*
2208                         * Since this is dummy we don't have an actual link so
2209                         * there is nothing to do for the SET_LINK_STATE cmd
2210                         */
2211                        break;
2212                case USB_PORT_FEAT_U1_TIMEOUT:
2213                case USB_PORT_FEAT_U2_TIMEOUT:
2214                        /* TODO: add suspend/resume support! */
2215                        if (hcd->speed != HCD_USB3) {
2216                                dev_dbg(dummy_dev(dum_hcd),
2217                                         "USB_PORT_FEAT_U1/2_TIMEOUT req not "
2218                                         "supported for USB 2.0 roothub\n");
2219                                goto error;
2220                        }
2221                        break;
2222                case USB_PORT_FEAT_SUSPEND:
2223                        /* Applicable only for USB2.0 hub */
2224                        if (hcd->speed == HCD_USB3) {
2225                                dev_dbg(dummy_dev(dum_hcd),
2226                                         "USB_PORT_FEAT_SUSPEND req not "
2227                                         "supported for USB 3.0 roothub\n");
2228                                goto error;
2229                        }
2230                        if (dum_hcd->active) {
2231                                dum_hcd->port_status |= USB_PORT_STAT_SUSPEND;
2232
2233                                /* HNP would happen here; for now we
2234                                 * assume b_bus_req is always true.
2235                                 */
2236                                set_link_state(dum_hcd);
2237                                if (((1 << USB_DEVICE_B_HNP_ENABLE)
2238                                                & dum_hcd->dum->devstatus) != 0)
2239                                        dev_dbg(dummy_dev(dum_hcd),
2240                                                        "no HNP yet!\n");
2241                        }
2242                        break;
2243                case USB_PORT_FEAT_POWER:
2244                        if (hcd->speed == HCD_USB3)
2245                                dum_hcd->port_status |= USB_SS_PORT_STAT_POWER;
2246                        else
2247                                dum_hcd->port_status |= USB_PORT_STAT_POWER;
2248                        set_link_state(dum_hcd);
2249                        break;
2250                case USB_PORT_FEAT_BH_PORT_RESET:
2251                        /* Applicable only for USB3.0 hub */
2252                        if (hcd->speed != HCD_USB3) {
2253                                dev_dbg(dummy_dev(dum_hcd),
2254                                         "USB_PORT_FEAT_BH_PORT_RESET req not "
2255                                         "supported for USB 2.0 roothub\n");
2256                                goto error;
2257                        }
2258                        /* FALLS THROUGH */
2259                case USB_PORT_FEAT_RESET:
2260                        /* if it's already enabled, disable */
2261                        if (hcd->speed == HCD_USB3) {
2262                                dum_hcd->port_status = 0;
2263                                dum_hcd->port_status =
2264                                        (USB_SS_PORT_STAT_POWER |
2265                                         USB_PORT_STAT_CONNECTION |
2266                                         USB_PORT_STAT_RESET);
2267                        } else
2268                                dum_hcd->port_status &= ~(USB_PORT_STAT_ENABLE
2269                                        | USB_PORT_STAT_LOW_SPEED
2270                                        | USB_PORT_STAT_HIGH_SPEED);
2271                        /*
2272                         * We want to reset device status. All but the
2273                         * Self powered feature
2274                         */
2275                        dum_hcd->dum->devstatus &=
2276                                (1 << USB_DEVICE_SELF_POWERED);
2277                        /*
2278                         * FIXME USB3.0: what is the correct reset signaling
2279                         * interval? Is it still 50msec as for HS?
2280                         */
2281                        dum_hcd->re_timeout = jiffies + msecs_to_jiffies(50);
2282                        /* FALLS THROUGH */
2283                default:
2284                        if (hcd->speed == HCD_USB3) {
2285                                if ((dum_hcd->port_status &
2286                                     USB_SS_PORT_STAT_POWER) != 0) {
2287                                        dum_hcd->port_status |= (1 << wValue);
2288                                }
2289                        } else
2290                                if ((dum_hcd->port_status &
2291                                     USB_PORT_STAT_POWER) != 0) {
2292                                        dum_hcd->port_status |= (1 << wValue);
2293                                }
2294                        set_link_state(dum_hcd);
2295                }
2296                break;
2297        case GetPortErrorCount:
2298                if (hcd->speed != HCD_USB3) {
2299                        dev_dbg(dummy_dev(dum_hcd),
2300                                 "GetPortErrorCount req not "
2301                                 "supported for USB 2.0 roothub\n");
2302                        goto error;
2303                }
2304                /* We'll always return 0 since this is a dummy hub */
2305                *(__le32 *) buf = cpu_to_le32(0);
2306                break;
2307        case SetHubDepth:
2308                if (hcd->speed != HCD_USB3) {
2309                        dev_dbg(dummy_dev(dum_hcd),
2310                                 "SetHubDepth req not supported for "
2311                                 "USB 2.0 roothub\n");
2312                        goto error;
2313                }
2314                break;
2315        default:
2316                dev_dbg(dummy_dev(dum_hcd),
2317                        "hub control req%04x v%04x i%04x l%d\n",
2318                        typeReq, wValue, wIndex, wLength);
2319error:
2320                /* "protocol stall" on error */
2321                retval = -EPIPE;
2322        }
2323        spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2324
2325        if ((dum_hcd->port_status & PORT_C_MASK) != 0)
2326                usb_hcd_poll_rh_status(hcd);
2327        return retval;
2328}
2329
2330static int dummy_bus_suspend(struct usb_hcd *hcd)
2331{
2332        struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2333
2334        dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__);
2335
2336        spin_lock_irq(&dum_hcd->dum->lock);
2337        dum_hcd->rh_state = DUMMY_RH_SUSPENDED;
2338        set_link_state(dum_hcd);
2339        hcd->state = HC_STATE_SUSPENDED;
2340        spin_unlock_irq(&dum_hcd->dum->lock);
2341        return 0;
2342}
2343
2344static int dummy_bus_resume(struct usb_hcd *hcd)
2345{
2346        struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2347        int rc = 0;
2348
2349        dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__);
2350
2351        spin_lock_irq(&dum_hcd->dum->lock);
2352        if (!HCD_HW_ACCESSIBLE(hcd)) {
2353                rc = -ESHUTDOWN;
2354        } else {
2355                dum_hcd->rh_state = DUMMY_RH_RUNNING;
2356                set_link_state(dum_hcd);
2357                if (!list_empty(&dum_hcd->urbp_list))
2358                        mod_timer(&dum_hcd->timer, jiffies);
2359                hcd->state = HC_STATE_RUNNING;
2360        }
2361        spin_unlock_irq(&dum_hcd->dum->lock);
2362        return rc;
2363}
2364
2365/*-------------------------------------------------------------------------*/
2366
2367static inline ssize_t show_urb(char *buf, size_t size, struct urb *urb)
2368{
2369        int ep = usb_pipeendpoint(urb->pipe);
2370
2371        return snprintf(buf, size,
2372                "urb/%p %s ep%d%s%s len %d/%d\n",
2373                urb,
2374                ({ char *s;
2375                switch (urb->dev->speed) {
2376                case USB_SPEED_LOW:
2377                        s = "ls";
2378                        break;
2379                case USB_SPEED_FULL:
2380                        s = "fs";
2381                        break;
2382                case USB_SPEED_HIGH:
2383                        s = "hs";
2384                        break;
2385                case USB_SPEED_SUPER:
2386                        s = "ss";
2387                        break;
2388                default:
2389                        s = "?";
2390                        break;
2391                 } s; }),
2392                ep, ep ? (usb_pipein(urb->pipe) ? "in" : "out") : "",
2393                ({ char *s; \
2394                switch (usb_pipetype(urb->pipe)) { \
2395                case PIPE_CONTROL: \
2396                        s = ""; \
2397                        break; \
2398                case PIPE_BULK: \
2399                        s = "-bulk"; \
2400                        break; \
2401                case PIPE_INTERRUPT: \
2402                        s = "-int"; \
2403                        break; \
2404                default: \
2405                        s = "-iso"; \
2406                        break; \
2407                } s; }),
2408                urb->actual_length, urb->transfer_buffer_length);
2409}
2410
2411static ssize_t urbs_show(struct device *dev, struct device_attribute *attr,
2412                char *buf)
2413{
2414        struct usb_hcd          *hcd = dev_get_drvdata(dev);
2415        struct dummy_hcd        *dum_hcd = hcd_to_dummy_hcd(hcd);
2416        struct urbp             *urbp;
2417        size_t                  size = 0;
2418        unsigned long           flags;
2419
2420        spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2421        list_for_each_entry(urbp, &dum_hcd->urbp_list, urbp_list) {
2422                size_t          temp;
2423
2424                temp = show_urb(buf, PAGE_SIZE - size, urbp->urb);
2425                buf += temp;
2426                size += temp;
2427        }
2428        spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2429
2430        return size;
2431}
2432static DEVICE_ATTR_RO(urbs);
2433
2434static int dummy_start_ss(struct dummy_hcd *dum_hcd)
2435{
2436        init_timer(&dum_hcd->timer);
2437        dum_hcd->timer.function = dummy_timer;
2438        dum_hcd->timer.data = (unsigned long)dum_hcd;
2439        dum_hcd->rh_state = DUMMY_RH_RUNNING;
2440        dum_hcd->stream_en_ep = 0;
2441        INIT_LIST_HEAD(&dum_hcd->urbp_list);
2442        dummy_hcd_to_hcd(dum_hcd)->power_budget = POWER_BUDGET;
2443        dummy_hcd_to_hcd(dum_hcd)->state = HC_STATE_RUNNING;
2444        dummy_hcd_to_hcd(dum_hcd)->uses_new_polling = 1;
2445#ifdef CONFIG_USB_OTG
2446        dummy_hcd_to_hcd(dum_hcd)->self.otg_port = 1;
2447#endif
2448        return 0;
2449
2450        /* FIXME 'urbs' should be a per-device thing, maybe in usbcore */
2451        return device_create_file(dummy_dev(dum_hcd), &dev_attr_urbs);
2452}
2453
2454static int dummy_start(struct usb_hcd *hcd)
2455{
2456        struct dummy_hcd        *dum_hcd = hcd_to_dummy_hcd(hcd);
2457
2458        /*
2459         * MASTER side init ... we emulate a root hub that'll only ever
2460         * talk to one device (the slave side).  Also appears in sysfs,
2461         * just like more familiar pci-based HCDs.
2462         */
2463        if (!usb_hcd_is_primary_hcd(hcd))
2464                return dummy_start_ss(dum_hcd);
2465
2466        spin_lock_init(&dum_hcd->dum->lock);
2467        init_timer(&dum_hcd->timer);
2468        dum_hcd->timer.function = dummy_timer;
2469        dum_hcd->timer.data = (unsigned long)dum_hcd;
2470        dum_hcd->rh_state = DUMMY_RH_RUNNING;
2471
2472        INIT_LIST_HEAD(&dum_hcd->urbp_list);
2473
2474        hcd->power_budget = POWER_BUDGET;
2475        hcd->state = HC_STATE_RUNNING;
2476        hcd->uses_new_polling = 1;
2477
2478#ifdef CONFIG_USB_OTG
2479        hcd->self.otg_port = 1;
2480#endif
2481
2482        /* FIXME 'urbs' should be a per-device thing, maybe in usbcore */
2483        return device_create_file(dummy_dev(dum_hcd), &dev_attr_urbs);
2484}
2485
2486static void dummy_stop(struct usb_hcd *hcd)
2487{
2488        device_remove_file(dummy_dev(hcd_to_dummy_hcd(hcd)), &dev_attr_urbs);
2489        dev_info(dummy_dev(hcd_to_dummy_hcd(hcd)), "stopped\n");
2490}
2491
2492/*-------------------------------------------------------------------------*/
2493
2494static int dummy_h_get_frame(struct usb_hcd *hcd)
2495{
2496        return dummy_g_get_frame(NULL);
2497}
2498
2499static int dummy_setup(struct usb_hcd *hcd)
2500{
2501        struct dummy *dum;
2502
2503        dum = *((void **)dev_get_platdata(hcd->self.controller));
2504        hcd->self.sg_tablesize = ~0;
2505        if (usb_hcd_is_primary_hcd(hcd)) {
2506                dum->hs_hcd = hcd_to_dummy_hcd(hcd);
2507                dum->hs_hcd->dum = dum;
2508                /*
2509                 * Mark the first roothub as being USB 2.0.
2510                 * The USB 3.0 roothub will be registered later by
2511                 * dummy_hcd_probe()
2512                 */
2513                hcd->speed = HCD_USB2;
2514                hcd->self.root_hub->speed = USB_SPEED_HIGH;
2515        } else {
2516                dum->ss_hcd = hcd_to_dummy_hcd(hcd);
2517                dum->ss_hcd->dum = dum;
2518                hcd->speed = HCD_USB3;
2519                hcd->self.root_hub->speed = USB_SPEED_SUPER;
2520        }
2521        return 0;
2522}
2523
2524/* Change a group of bulk endpoints to support multiple stream IDs */
2525static int dummy_alloc_streams(struct usb_hcd *hcd, struct usb_device *udev,
2526        struct usb_host_endpoint **eps, unsigned int num_eps,
2527        unsigned int num_streams, gfp_t mem_flags)
2528{
2529        struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2530        unsigned long flags;
2531        int max_stream;
2532        int ret_streams = num_streams;
2533        unsigned int index;
2534        unsigned int i;
2535
2536        if (!num_eps)
2537                return -EINVAL;
2538
2539        spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2540        for (i = 0; i < num_eps; i++) {
2541                index = dummy_get_ep_idx(&eps[i]->desc);
2542                if ((1 << index) & dum_hcd->stream_en_ep) {
2543                        ret_streams = -EINVAL;
2544                        goto out;
2545                }
2546                max_stream = usb_ss_max_streams(&eps[i]->ss_ep_comp);
2547                if (!max_stream) {
2548                        ret_streams = -EINVAL;
2549                        goto out;
2550                }
2551                if (max_stream < ret_streams) {
2552                        dev_dbg(dummy_dev(dum_hcd), "Ep 0x%x only supports %u "
2553                                        "stream IDs.\n",
2554                                        eps[i]->desc.bEndpointAddress,
2555                                        max_stream);
2556                        ret_streams = max_stream;
2557                }
2558        }
2559
2560        for (i = 0; i < num_eps; i++) {
2561                index = dummy_get_ep_idx(&eps[i]->desc);
2562                dum_hcd->stream_en_ep |= 1 << index;
2563                set_max_streams_for_pipe(dum_hcd,
2564                                usb_endpoint_num(&eps[i]->desc), ret_streams);
2565        }
2566out:
2567        spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2568        return ret_streams;
2569}
2570
2571/* Reverts a group of bulk endpoints back to not using stream IDs. */
2572static int dummy_free_streams(struct usb_hcd *hcd, struct usb_device *udev,
2573        struct usb_host_endpoint **eps, unsigned int num_eps,
2574        gfp_t mem_flags)
2575{
2576        struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2577        unsigned long flags;
2578        int ret;
2579        unsigned int index;
2580        unsigned int i;
2581
2582        spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2583        for (i = 0; i < num_eps; i++) {
2584                index = dummy_get_ep_idx(&eps[i]->desc);
2585                if (!((1 << index) & dum_hcd->stream_en_ep)) {
2586                        ret = -EINVAL;
2587                        goto out;
2588                }
2589        }
2590
2591        for (i = 0; i < num_eps; i++) {
2592                index = dummy_get_ep_idx(&eps[i]->desc);
2593                dum_hcd->stream_en_ep &= ~(1 << index);
2594                set_max_streams_for_pipe(dum_hcd,
2595                                usb_endpoint_num(&eps[i]->desc), 0);
2596        }
2597        ret = 0;
2598out:
2599        spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2600        return ret;
2601}
2602
2603static struct hc_driver dummy_hcd = {
2604        .description =          (char *) driver_name,
2605        .product_desc =         "Dummy host controller",
2606        .hcd_priv_size =        sizeof(struct dummy_hcd),
2607
2608        .reset =                dummy_setup,
2609        .start =                dummy_start,
2610        .stop =                 dummy_stop,
2611
2612        .urb_enqueue =          dummy_urb_enqueue,
2613        .urb_dequeue =          dummy_urb_dequeue,
2614
2615        .get_frame_number =     dummy_h_get_frame,
2616
2617        .hub_status_data =      dummy_hub_status,
2618        .hub_control =          dummy_hub_control,
2619        .bus_suspend =          dummy_bus_suspend,
2620        .bus_resume =           dummy_bus_resume,
2621
2622        .alloc_streams =        dummy_alloc_streams,
2623        .free_streams =         dummy_free_streams,
2624};
2625
2626static int dummy_hcd_probe(struct platform_device *pdev)
2627{
2628        struct dummy            *dum;
2629        struct usb_hcd          *hs_hcd;
2630        struct usb_hcd          *ss_hcd;
2631        int                     retval;
2632
2633        dev_info(&pdev->dev, "%s, driver " DRIVER_VERSION "\n", driver_desc);
2634        dum = *((void **)dev_get_platdata(&pdev->dev));
2635
2636        if (mod_data.is_super_speed)
2637                dummy_hcd.flags = HCD_USB3 | HCD_SHARED;
2638        else if (mod_data.is_high_speed)
2639                dummy_hcd.flags = HCD_USB2;
2640        else
2641                dummy_hcd.flags = HCD_USB11;
2642        hs_hcd = usb_create_hcd(&dummy_hcd, &pdev->dev, dev_name(&pdev->dev));
2643        if (!hs_hcd)
2644                return -ENOMEM;
2645        hs_hcd->has_tt = 1;
2646
2647        retval = usb_add_hcd(hs_hcd, 0, 0);
2648        if (retval)
2649                goto put_usb2_hcd;
2650
2651        if (mod_data.is_super_speed) {
2652                ss_hcd = usb_create_shared_hcd(&dummy_hcd, &pdev->dev,
2653                                        dev_name(&pdev->dev), hs_hcd);
2654                if (!ss_hcd) {
2655                        retval = -ENOMEM;
2656                        goto dealloc_usb2_hcd;
2657                }
2658
2659                retval = usb_add_hcd(ss_hcd, 0, 0);
2660                if (retval)
2661                        goto put_usb3_hcd;
2662        }
2663        return 0;
2664
2665put_usb3_hcd:
2666        usb_put_hcd(ss_hcd);
2667dealloc_usb2_hcd:
2668        usb_remove_hcd(hs_hcd);
2669put_usb2_hcd:
2670        usb_put_hcd(hs_hcd);
2671        dum->hs_hcd = dum->ss_hcd = NULL;
2672        return retval;
2673}
2674
2675static int dummy_hcd_remove(struct platform_device *pdev)
2676{
2677        struct dummy            *dum;
2678
2679        dum = hcd_to_dummy_hcd(platform_get_drvdata(pdev))->dum;
2680
2681        if (dum->ss_hcd) {
2682                usb_remove_hcd(dummy_hcd_to_hcd(dum->ss_hcd));
2683                usb_put_hcd(dummy_hcd_to_hcd(dum->ss_hcd));
2684        }
2685
2686        usb_remove_hcd(dummy_hcd_to_hcd(dum->hs_hcd));
2687        usb_put_hcd(dummy_hcd_to_hcd(dum->hs_hcd));
2688
2689        dum->hs_hcd = NULL;
2690        dum->ss_hcd = NULL;
2691
2692        return 0;
2693}
2694
2695static int dummy_hcd_suspend(struct platform_device *pdev, pm_message_t state)
2696{
2697        struct usb_hcd          *hcd;
2698        struct dummy_hcd        *dum_hcd;
2699        int                     rc = 0;
2700
2701        dev_dbg(&pdev->dev, "%s\n", __func__);
2702
2703        hcd = platform_get_drvdata(pdev);
2704        dum_hcd = hcd_to_dummy_hcd(hcd);
2705        if (dum_hcd->rh_state == DUMMY_RH_RUNNING) {
2706                dev_warn(&pdev->dev, "Root hub isn't suspended!\n");
2707                rc = -EBUSY;
2708        } else
2709                clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
2710        return rc;
2711}
2712
2713static int dummy_hcd_resume(struct platform_device *pdev)
2714{
2715        struct usb_hcd          *hcd;
2716
2717        dev_dbg(&pdev->dev, "%s\n", __func__);
2718
2719        hcd = platform_get_drvdata(pdev);
2720        set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
2721        usb_hcd_poll_rh_status(hcd);
2722        return 0;
2723}
2724
2725static struct platform_driver dummy_hcd_driver = {
2726        .probe          = dummy_hcd_probe,
2727        .remove         = dummy_hcd_remove,
2728        .suspend        = dummy_hcd_suspend,
2729        .resume         = dummy_hcd_resume,
2730        .driver         = {
2731                .name   = (char *) driver_name,
2732        },
2733};
2734
2735/*-------------------------------------------------------------------------*/
2736#define MAX_NUM_UDC     2
2737static struct platform_device *the_udc_pdev[MAX_NUM_UDC];
2738static struct platform_device *the_hcd_pdev[MAX_NUM_UDC];
2739
2740static int __init init(void)
2741{
2742        int     retval = -ENOMEM;
2743        int     i;
2744        struct  dummy *dum[MAX_NUM_UDC];
2745
2746        if (usb_disabled())
2747                return -ENODEV;
2748
2749        if (!mod_data.is_high_speed && mod_data.is_super_speed)
2750                return -EINVAL;
2751
2752        if (mod_data.num < 1 || mod_data.num > MAX_NUM_UDC) {
2753                pr_err("Number of emulated UDC must be in range of 1...%d\n",
2754                                MAX_NUM_UDC);
2755                return -EINVAL;
2756        }
2757
2758        for (i = 0; i < mod_data.num; i++) {
2759                the_hcd_pdev[i] = platform_device_alloc(driver_name, i);
2760                if (!the_hcd_pdev[i]) {
2761                        i--;
2762                        while (i >= 0)
2763                                platform_device_put(the_hcd_pdev[i--]);
2764                        return retval;
2765                }
2766        }
2767        for (i = 0; i < mod_data.num; i++) {
2768                the_udc_pdev[i] = platform_device_alloc(gadget_name, i);
2769                if (!the_udc_pdev[i]) {
2770                        i--;
2771                        while (i >= 0)
2772                                platform_device_put(the_udc_pdev[i--]);
2773                        goto err_alloc_udc;
2774                }
2775        }
2776        for (i = 0; i < mod_data.num; i++) {
2777                dum[i] = kzalloc(sizeof(struct dummy), GFP_KERNEL);
2778                if (!dum[i]) {
2779                        retval = -ENOMEM;
2780                        goto err_add_pdata;
2781                }
2782                retval = platform_device_add_data(the_hcd_pdev[i], &dum[i],
2783                                sizeof(void *));
2784                if (retval)
2785                        goto err_add_pdata;
2786                retval = platform_device_add_data(the_udc_pdev[i], &dum[i],
2787                                sizeof(void *));
2788                if (retval)
2789                        goto err_add_pdata;
2790        }
2791
2792        retval = platform_driver_register(&dummy_hcd_driver);
2793        if (retval < 0)
2794                goto err_add_pdata;
2795        retval = platform_driver_register(&dummy_udc_driver);
2796        if (retval < 0)
2797                goto err_register_udc_driver;
2798
2799        for (i = 0; i < mod_data.num; i++) {
2800                retval = platform_device_add(the_hcd_pdev[i]);
2801                if (retval < 0) {
2802                        i--;
2803                        while (i >= 0)
2804                                platform_device_del(the_hcd_pdev[i--]);
2805                        goto err_add_hcd;
2806                }
2807        }
2808        for (i = 0; i < mod_data.num; i++) {
2809                if (!dum[i]->hs_hcd ||
2810                                (!dum[i]->ss_hcd && mod_data.is_super_speed)) {
2811                        /*
2812                         * The hcd was added successfully but its probe
2813                         * function failed for some reason.
2814                         */
2815                        retval = -EINVAL;
2816                        goto err_add_udc;
2817                }
2818        }
2819
2820        for (i = 0; i < mod_data.num; i++) {
2821                retval = platform_device_add(the_udc_pdev[i]);
2822                if (retval < 0) {
2823                        i--;
2824                        while (i >= 0)
2825                                platform_device_del(the_udc_pdev[i--]);
2826                        goto err_add_udc;
2827                }
2828        }
2829
2830        for (i = 0; i < mod_data.num; i++) {
2831                if (!platform_get_drvdata(the_udc_pdev[i])) {
2832                        /*
2833                         * The udc was added successfully but its probe
2834                         * function failed for some reason.
2835                         */
2836                        retval = -EINVAL;
2837                        goto err_probe_udc;
2838                }
2839        }
2840        return retval;
2841
2842err_probe_udc:
2843        for (i = 0; i < mod_data.num; i++)
2844                platform_device_del(the_udc_pdev[i]);
2845err_add_udc:
2846        for (i = 0; i < mod_data.num; i++)
2847                platform_device_del(the_hcd_pdev[i]);
2848err_add_hcd:
2849        platform_driver_unregister(&dummy_udc_driver);
2850err_register_udc_driver:
2851        platform_driver_unregister(&dummy_hcd_driver);
2852err_add_pdata:
2853        for (i = 0; i < mod_data.num; i++)
2854                kfree(dum[i]);
2855        for (i = 0; i < mod_data.num; i++)
2856                platform_device_put(the_udc_pdev[i]);
2857err_alloc_udc:
2858        for (i = 0; i < mod_data.num; i++)
2859                platform_device_put(the_hcd_pdev[i]);
2860        return retval;
2861}
2862module_init(init);
2863
2864static void __exit cleanup(void)
2865{
2866        int i;
2867
2868        for (i = 0; i < mod_data.num; i++) {
2869                struct dummy *dum;
2870
2871                dum = *((void **)dev_get_platdata(&the_udc_pdev[i]->dev));
2872
2873                platform_device_unregister(the_udc_pdev[i]);
2874                platform_device_unregister(the_hcd_pdev[i]);
2875                kfree(dum);
2876        }
2877        platform_driver_unregister(&dummy_udc_driver);
2878        platform_driver_unregister(&dummy_hcd_driver);
2879}
2880module_exit(cleanup);
2881