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