linux/drivers/usb/misc/usbtest.c
<<
>>
Prefs
   1#include <linux/kernel.h>
   2#include <linux/errno.h>
   3#include <linux/init.h>
   4#include <linux/slab.h>
   5#include <linux/mm.h>
   6#include <linux/module.h>
   7#include <linux/moduleparam.h>
   8#include <linux/scatterlist.h>
   9#include <linux/mutex.h>
  10#include <linux/timer.h>
  11#include <linux/usb.h>
  12
  13#define SIMPLE_IO_TIMEOUT       10000   /* in milliseconds */
  14
  15/*-------------------------------------------------------------------------*/
  16
  17static int override_alt = -1;
  18module_param_named(alt, override_alt, int, 0644);
  19MODULE_PARM_DESC(alt, ">= 0 to override altsetting selection");
  20
  21/*-------------------------------------------------------------------------*/
  22
  23/* FIXME make these public somewhere; usbdevfs.h? */
  24struct usbtest_param {
  25        /* inputs */
  26        unsigned                test_num;       /* 0..(TEST_CASES-1) */
  27        unsigned                iterations;
  28        unsigned                length;
  29        unsigned                vary;
  30        unsigned                sglen;
  31
  32        /* outputs */
  33        struct timeval          duration;
  34};
  35#define USBTEST_REQUEST _IOWR('U', 100, struct usbtest_param)
  36
  37/*-------------------------------------------------------------------------*/
  38
  39#define GENERIC         /* let probe() bind using module params */
  40
  41/* Some devices that can be used for testing will have "real" drivers.
  42 * Entries for those need to be enabled here by hand, after disabling
  43 * that "real" driver.
  44 */
  45//#define       IBOT2           /* grab iBOT2 webcams */
  46//#define       KEYSPAN_19Qi    /* grab un-renumerated serial adapter */
  47
  48/*-------------------------------------------------------------------------*/
  49
  50struct usbtest_info {
  51        const char              *name;
  52        u8                      ep_in;          /* bulk/intr source */
  53        u8                      ep_out;         /* bulk/intr sink */
  54        unsigned                autoconf:1;
  55        unsigned                ctrl_out:1;
  56        unsigned                iso:1;          /* try iso in/out */
  57        int                     alt;
  58};
  59
  60/* this is accessed only through usbfs ioctl calls.
  61 * one ioctl to issue a test ... one lock per device.
  62 * tests create other threads if they need them.
  63 * urbs and buffers are allocated dynamically,
  64 * and data generated deterministically.
  65 */
  66struct usbtest_dev {
  67        struct usb_interface    *intf;
  68        struct usbtest_info     *info;
  69        int                     in_pipe;
  70        int                     out_pipe;
  71        int                     in_iso_pipe;
  72        int                     out_iso_pipe;
  73        struct usb_endpoint_descriptor  *iso_in, *iso_out;
  74        struct mutex            lock;
  75
  76#define TBUF_SIZE       256
  77        u8                      *buf;
  78};
  79
  80static struct usb_device *testdev_to_usbdev(struct usbtest_dev *test)
  81{
  82        return interface_to_usbdev(test->intf);
  83}
  84
  85/* set up all urbs so they can be used with either bulk or interrupt */
  86#define INTERRUPT_RATE          1       /* msec/transfer */
  87
  88#define ERROR(tdev, fmt, args...) \
  89        dev_err(&(tdev)->intf->dev , fmt , ## args)
  90#define WARNING(tdev, fmt, args...) \
  91        dev_warn(&(tdev)->intf->dev , fmt , ## args)
  92
  93#define GUARD_BYTE      0xA5
  94
  95/*-------------------------------------------------------------------------*/
  96
  97static int
  98get_endpoints(struct usbtest_dev *dev, struct usb_interface *intf)
  99{
 100        int                             tmp;
 101        struct usb_host_interface       *alt;
 102        struct usb_host_endpoint        *in, *out;
 103        struct usb_host_endpoint        *iso_in, *iso_out;
 104        struct usb_device               *udev;
 105
 106        for (tmp = 0; tmp < intf->num_altsetting; tmp++) {
 107                unsigned        ep;
 108
 109                in = out = NULL;
 110                iso_in = iso_out = NULL;
 111                alt = intf->altsetting + tmp;
 112
 113                if (override_alt >= 0 &&
 114                                override_alt != alt->desc.bAlternateSetting)
 115                        continue;
 116
 117                /* take the first altsetting with in-bulk + out-bulk;
 118                 * ignore other endpoints and altsettings.
 119                 */
 120                for (ep = 0; ep < alt->desc.bNumEndpoints; ep++) {
 121                        struct usb_host_endpoint        *e;
 122
 123                        e = alt->endpoint + ep;
 124                        switch (usb_endpoint_type(&e->desc)) {
 125                        case USB_ENDPOINT_XFER_BULK:
 126                                break;
 127                        case USB_ENDPOINT_XFER_ISOC:
 128                                if (dev->info->iso)
 129                                        goto try_iso;
 130                                /* FALLTHROUGH */
 131                        default:
 132                                continue;
 133                        }
 134                        if (usb_endpoint_dir_in(&e->desc)) {
 135                                if (!in)
 136                                        in = e;
 137                        } else {
 138                                if (!out)
 139                                        out = e;
 140                        }
 141                        continue;
 142try_iso:
 143                        if (usb_endpoint_dir_in(&e->desc)) {
 144                                if (!iso_in)
 145                                        iso_in = e;
 146                        } else {
 147                                if (!iso_out)
 148                                        iso_out = e;
 149                        }
 150                }
 151                if ((in && out)  ||  iso_in || iso_out)
 152                        goto found;
 153        }
 154        return -EINVAL;
 155
 156found:
 157        udev = testdev_to_usbdev(dev);
 158        dev->info->alt = alt->desc.bAlternateSetting;
 159        if (alt->desc.bAlternateSetting != 0) {
 160                tmp = usb_set_interface(udev,
 161                                alt->desc.bInterfaceNumber,
 162                                alt->desc.bAlternateSetting);
 163                if (tmp < 0)
 164                        return tmp;
 165        }
 166
 167        if (in) {
 168                dev->in_pipe = usb_rcvbulkpipe(udev,
 169                        in->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
 170                dev->out_pipe = usb_sndbulkpipe(udev,
 171                        out->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
 172        }
 173        if (iso_in) {
 174                dev->iso_in = &iso_in->desc;
 175                dev->in_iso_pipe = usb_rcvisocpipe(udev,
 176                                iso_in->desc.bEndpointAddress
 177                                        & USB_ENDPOINT_NUMBER_MASK);
 178        }
 179
 180        if (iso_out) {
 181                dev->iso_out = &iso_out->desc;
 182                dev->out_iso_pipe = usb_sndisocpipe(udev,
 183                                iso_out->desc.bEndpointAddress
 184                                        & USB_ENDPOINT_NUMBER_MASK);
 185        }
 186        return 0;
 187}
 188
 189/*-------------------------------------------------------------------------*/
 190
 191/* Support for testing basic non-queued I/O streams.
 192 *
 193 * These just package urbs as requests that can be easily canceled.
 194 * Each urb's data buffer is dynamically allocated; callers can fill
 195 * them with non-zero test data (or test for it) when appropriate.
 196 */
 197
 198static void simple_callback(struct urb *urb)
 199{
 200        complete(urb->context);
 201}
 202
 203static struct urb *usbtest_alloc_urb(
 204        struct usb_device       *udev,
 205        int                     pipe,
 206        unsigned long           bytes,
 207        unsigned                transfer_flags,
 208        unsigned                offset)
 209{
 210        struct urb              *urb;
 211
 212        urb = usb_alloc_urb(0, GFP_KERNEL);
 213        if (!urb)
 214                return urb;
 215        usb_fill_bulk_urb(urb, udev, pipe, NULL, bytes, simple_callback, NULL);
 216        urb->interval = (udev->speed == USB_SPEED_HIGH)
 217                        ? (INTERRUPT_RATE << 3)
 218                        : INTERRUPT_RATE;
 219        urb->transfer_flags = transfer_flags;
 220        if (usb_pipein(pipe))
 221                urb->transfer_flags |= URB_SHORT_NOT_OK;
 222
 223        if (urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)
 224                urb->transfer_buffer = usb_alloc_coherent(udev, bytes + offset,
 225                        GFP_KERNEL, &urb->transfer_dma);
 226        else
 227                urb->transfer_buffer = kmalloc(bytes + offset, GFP_KERNEL);
 228
 229        if (!urb->transfer_buffer) {
 230                usb_free_urb(urb);
 231                return NULL;
 232        }
 233
 234        /* To test unaligned transfers add an offset and fill the
 235                unused memory with a guard value */
 236        if (offset) {
 237                memset(urb->transfer_buffer, GUARD_BYTE, offset);
 238                urb->transfer_buffer += offset;
 239                if (urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)
 240                        urb->transfer_dma += offset;
 241        }
 242
 243        /* For inbound transfers use guard byte so that test fails if
 244                data not correctly copied */
 245        memset(urb->transfer_buffer,
 246                        usb_pipein(urb->pipe) ? GUARD_BYTE : 0,
 247                        bytes);
 248        return urb;
 249}
 250
 251static struct urb *simple_alloc_urb(
 252        struct usb_device       *udev,
 253        int                     pipe,
 254        unsigned long           bytes)
 255{
 256        return usbtest_alloc_urb(udev, pipe, bytes, URB_NO_TRANSFER_DMA_MAP, 0);
 257}
 258
 259static unsigned pattern;
 260static unsigned mod_pattern;
 261module_param_named(pattern, mod_pattern, uint, S_IRUGO | S_IWUSR);
 262MODULE_PARM_DESC(mod_pattern, "i/o pattern (0 == zeroes)");
 263
 264static inline void simple_fill_buf(struct urb *urb)
 265{
 266        unsigned        i;
 267        u8              *buf = urb->transfer_buffer;
 268        unsigned        len = urb->transfer_buffer_length;
 269
 270        switch (pattern) {
 271        default:
 272                /* FALLTHROUGH */
 273        case 0:
 274                memset(buf, 0, len);
 275                break;
 276        case 1:                 /* mod63 */
 277                for (i = 0; i < len; i++)
 278                        *buf++ = (u8) (i % 63);
 279                break;
 280        }
 281}
 282
 283static inline unsigned long buffer_offset(void *buf)
 284{
 285        return (unsigned long)buf & (ARCH_KMALLOC_MINALIGN - 1);
 286}
 287
 288static int check_guard_bytes(struct usbtest_dev *tdev, struct urb *urb)
 289{
 290        u8 *buf = urb->transfer_buffer;
 291        u8 *guard = buf - buffer_offset(buf);
 292        unsigned i;
 293
 294        for (i = 0; guard < buf; i++, guard++) {
 295                if (*guard != GUARD_BYTE) {
 296                        ERROR(tdev, "guard byte[%d] %d (not %d)\n",
 297                                i, *guard, GUARD_BYTE);
 298                        return -EINVAL;
 299                }
 300        }
 301        return 0;
 302}
 303
 304static int simple_check_buf(struct usbtest_dev *tdev, struct urb *urb)
 305{
 306        unsigned        i;
 307        u8              expected;
 308        u8              *buf = urb->transfer_buffer;
 309        unsigned        len = urb->actual_length;
 310
 311        int ret = check_guard_bytes(tdev, urb);
 312        if (ret)
 313                return ret;
 314
 315        for (i = 0; i < len; i++, buf++) {
 316                switch (pattern) {
 317                /* all-zeroes has no synchronization issues */
 318                case 0:
 319                        expected = 0;
 320                        break;
 321                /* mod63 stays in sync with short-terminated transfers,
 322                 * or otherwise when host and gadget agree on how large
 323                 * each usb transfer request should be.  resync is done
 324                 * with set_interface or set_config.
 325                 */
 326                case 1:                 /* mod63 */
 327                        expected = i % 63;
 328                        break;
 329                /* always fail unsupported patterns */
 330                default:
 331                        expected = !*buf;
 332                        break;
 333                }
 334                if (*buf == expected)
 335                        continue;
 336                ERROR(tdev, "buf[%d] = %d (not %d)\n", i, *buf, expected);
 337                return -EINVAL;
 338        }
 339        return 0;
 340}
 341
 342static void simple_free_urb(struct urb *urb)
 343{
 344        unsigned long offset = buffer_offset(urb->transfer_buffer);
 345
 346        if (urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)
 347                usb_free_coherent(
 348                        urb->dev,
 349                        urb->transfer_buffer_length + offset,
 350                        urb->transfer_buffer - offset,
 351                        urb->transfer_dma - offset);
 352        else
 353                kfree(urb->transfer_buffer - offset);
 354        usb_free_urb(urb);
 355}
 356
 357static int simple_io(
 358        struct usbtest_dev      *tdev,
 359        struct urb              *urb,
 360        int                     iterations,
 361        int                     vary,
 362        int                     expected,
 363        const char              *label
 364)
 365{
 366        struct usb_device       *udev = urb->dev;
 367        int                     max = urb->transfer_buffer_length;
 368        struct completion       completion;
 369        int                     retval = 0;
 370        unsigned long           expire;
 371
 372        urb->context = &completion;
 373        while (retval == 0 && iterations-- > 0) {
 374                init_completion(&completion);
 375                if (usb_pipeout(urb->pipe)) {
 376                        simple_fill_buf(urb);
 377                        urb->transfer_flags |= URB_ZERO_PACKET;
 378                }
 379                retval = usb_submit_urb(urb, GFP_KERNEL);
 380                if (retval != 0)
 381                        break;
 382
 383                expire = msecs_to_jiffies(SIMPLE_IO_TIMEOUT);
 384                if (!wait_for_completion_timeout(&completion, expire)) {
 385                        usb_kill_urb(urb);
 386                        retval = (urb->status == -ENOENT ?
 387                                  -ETIMEDOUT : urb->status);
 388                } else {
 389                        retval = urb->status;
 390                }
 391
 392                urb->dev = udev;
 393                if (retval == 0 && usb_pipein(urb->pipe))
 394                        retval = simple_check_buf(tdev, urb);
 395
 396                if (vary) {
 397                        int     len = urb->transfer_buffer_length;
 398
 399                        len += vary;
 400                        len %= max;
 401                        if (len == 0)
 402                                len = (vary < max) ? vary : max;
 403                        urb->transfer_buffer_length = len;
 404                }
 405
 406                /* FIXME if endpoint halted, clear halt (and log) */
 407        }
 408        urb->transfer_buffer_length = max;
 409
 410        if (expected != retval)
 411                dev_err(&udev->dev,
 412                        "%s failed, iterations left %d, status %d (not %d)\n",
 413                                label, iterations, retval, expected);
 414        return retval;
 415}
 416
 417
 418/*-------------------------------------------------------------------------*/
 419
 420/* We use scatterlist primitives to test queued I/O.
 421 * Yes, this also tests the scatterlist primitives.
 422 */
 423
 424static void free_sglist(struct scatterlist *sg, int nents)
 425{
 426        unsigned                i;
 427
 428        if (!sg)
 429                return;
 430        for (i = 0; i < nents; i++) {
 431                if (!sg_page(&sg[i]))
 432                        continue;
 433                kfree(sg_virt(&sg[i]));
 434        }
 435        kfree(sg);
 436}
 437
 438static struct scatterlist *
 439alloc_sglist(int nents, int max, int vary)
 440{
 441        struct scatterlist      *sg;
 442        unsigned                i;
 443        unsigned                size = max;
 444
 445        if (max == 0)
 446                return NULL;
 447
 448        sg = kmalloc_array(nents, sizeof(*sg), GFP_KERNEL);
 449        if (!sg)
 450                return NULL;
 451        sg_init_table(sg, nents);
 452
 453        for (i = 0; i < nents; i++) {
 454                char            *buf;
 455                unsigned        j;
 456
 457                buf = kzalloc(size, GFP_KERNEL);
 458                if (!buf) {
 459                        free_sglist(sg, i);
 460                        return NULL;
 461                }
 462
 463                /* kmalloc pages are always physically contiguous! */
 464                sg_set_buf(&sg[i], buf, size);
 465
 466                switch (pattern) {
 467                case 0:
 468                        /* already zeroed */
 469                        break;
 470                case 1:
 471                        for (j = 0; j < size; j++)
 472                                *buf++ = (u8) (j % 63);
 473                        break;
 474                }
 475
 476                if (vary) {
 477                        size += vary;
 478                        size %= max;
 479                        if (size == 0)
 480                                size = (vary < max) ? vary : max;
 481                }
 482        }
 483
 484        return sg;
 485}
 486
 487static void sg_timeout(unsigned long _req)
 488{
 489        struct usb_sg_request   *req = (struct usb_sg_request *) _req;
 490
 491        req->status = -ETIMEDOUT;
 492        usb_sg_cancel(req);
 493}
 494
 495static int perform_sglist(
 496        struct usbtest_dev      *tdev,
 497        unsigned                iterations,
 498        int                     pipe,
 499        struct usb_sg_request   *req,
 500        struct scatterlist      *sg,
 501        int                     nents
 502)
 503{
 504        struct usb_device       *udev = testdev_to_usbdev(tdev);
 505        int                     retval = 0;
 506        struct timer_list       sg_timer;
 507
 508        setup_timer_on_stack(&sg_timer, sg_timeout, (unsigned long) req);
 509
 510        while (retval == 0 && iterations-- > 0) {
 511                retval = usb_sg_init(req, udev, pipe,
 512                                (udev->speed == USB_SPEED_HIGH)
 513                                        ? (INTERRUPT_RATE << 3)
 514                                        : INTERRUPT_RATE,
 515                                sg, nents, 0, GFP_KERNEL);
 516
 517                if (retval)
 518                        break;
 519                mod_timer(&sg_timer, jiffies +
 520                                msecs_to_jiffies(SIMPLE_IO_TIMEOUT));
 521                usb_sg_wait(req);
 522                del_timer_sync(&sg_timer);
 523                retval = req->status;
 524
 525                /* FIXME check resulting data pattern */
 526
 527                /* FIXME if endpoint halted, clear halt (and log) */
 528        }
 529
 530        /* FIXME for unlink or fault handling tests, don't report
 531         * failure if retval is as we expected ...
 532         */
 533        if (retval)
 534                ERROR(tdev, "perform_sglist failed, "
 535                                "iterations left %d, status %d\n",
 536                                iterations, retval);
 537        return retval;
 538}
 539
 540
 541/*-------------------------------------------------------------------------*/
 542
 543/* unqueued control message testing
 544 *
 545 * there's a nice set of device functional requirements in chapter 9 of the
 546 * usb 2.0 spec, which we can apply to ANY device, even ones that don't use
 547 * special test firmware.
 548 *
 549 * we know the device is configured (or suspended) by the time it's visible
 550 * through usbfs.  we can't change that, so we won't test enumeration (which
 551 * worked 'well enough' to get here, this time), power management (ditto),
 552 * or remote wakeup (which needs human interaction).
 553 */
 554
 555static unsigned realworld = 1;
 556module_param(realworld, uint, 0);
 557MODULE_PARM_DESC(realworld, "clear to demand stricter spec compliance");
 558
 559static int get_altsetting(struct usbtest_dev *dev)
 560{
 561        struct usb_interface    *iface = dev->intf;
 562        struct usb_device       *udev = interface_to_usbdev(iface);
 563        int                     retval;
 564
 565        retval = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
 566                        USB_REQ_GET_INTERFACE, USB_DIR_IN|USB_RECIP_INTERFACE,
 567                        0, iface->altsetting[0].desc.bInterfaceNumber,
 568                        dev->buf, 1, USB_CTRL_GET_TIMEOUT);
 569        switch (retval) {
 570        case 1:
 571                return dev->buf[0];
 572        case 0:
 573                retval = -ERANGE;
 574                /* FALLTHROUGH */
 575        default:
 576                return retval;
 577        }
 578}
 579
 580static int set_altsetting(struct usbtest_dev *dev, int alternate)
 581{
 582        struct usb_interface            *iface = dev->intf;
 583        struct usb_device               *udev;
 584
 585        if (alternate < 0 || alternate >= 256)
 586                return -EINVAL;
 587
 588        udev = interface_to_usbdev(iface);
 589        return usb_set_interface(udev,
 590                        iface->altsetting[0].desc.bInterfaceNumber,
 591                        alternate);
 592}
 593
 594static int is_good_config(struct usbtest_dev *tdev, int len)
 595{
 596        struct usb_config_descriptor    *config;
 597
 598        if (len < sizeof(*config))
 599                return 0;
 600        config = (struct usb_config_descriptor *) tdev->buf;
 601
 602        switch (config->bDescriptorType) {
 603        case USB_DT_CONFIG:
 604        case USB_DT_OTHER_SPEED_CONFIG:
 605                if (config->bLength != 9) {
 606                        ERROR(tdev, "bogus config descriptor length\n");
 607                        return 0;
 608                }
 609                /* this bit 'must be 1' but often isn't */
 610                if (!realworld && !(config->bmAttributes & 0x80)) {
 611                        ERROR(tdev, "high bit of config attributes not set\n");
 612                        return 0;
 613                }
 614                if (config->bmAttributes & 0x1f) {      /* reserved == 0 */
 615                        ERROR(tdev, "reserved config bits set\n");
 616                        return 0;
 617                }
 618                break;
 619        default:
 620                return 0;
 621        }
 622
 623        if (le16_to_cpu(config->wTotalLength) == len)   /* read it all */
 624                return 1;
 625        if (le16_to_cpu(config->wTotalLength) >= TBUF_SIZE)     /* max partial read */
 626                return 1;
 627        ERROR(tdev, "bogus config descriptor read size\n");
 628        return 0;
 629}
 630
 631static int is_good_ext(struct usbtest_dev *tdev, u8 *buf)
 632{
 633        struct usb_ext_cap_descriptor *ext;
 634        u32 attr;
 635
 636        ext = (struct usb_ext_cap_descriptor *) buf;
 637
 638        if (ext->bLength != USB_DT_USB_EXT_CAP_SIZE) {
 639                ERROR(tdev, "bogus usb 2.0 extension descriptor length\n");
 640                return 0;
 641        }
 642
 643        attr = le32_to_cpu(ext->bmAttributes);
 644        /* bits[1:15] is used and others are reserved */
 645        if (attr & ~0xfffe) {   /* reserved == 0 */
 646                ERROR(tdev, "reserved bits set\n");
 647                return 0;
 648        }
 649
 650        return 1;
 651}
 652
 653static int is_good_ss_cap(struct usbtest_dev *tdev, u8 *buf)
 654{
 655        struct usb_ss_cap_descriptor *ss;
 656
 657        ss = (struct usb_ss_cap_descriptor *) buf;
 658
 659        if (ss->bLength != USB_DT_USB_SS_CAP_SIZE) {
 660                ERROR(tdev, "bogus superspeed device capability descriptor length\n");
 661                return 0;
 662        }
 663
 664        /*
 665         * only bit[1] of bmAttributes is used for LTM and others are
 666         * reserved
 667         */
 668        if (ss->bmAttributes & ~0x02) { /* reserved == 0 */
 669                ERROR(tdev, "reserved bits set in bmAttributes\n");
 670                return 0;
 671        }
 672
 673        /* bits[0:3] of wSpeedSupported is used and others are reserved */
 674        if (le16_to_cpu(ss->wSpeedSupported) & ~0x0f) { /* reserved == 0 */
 675                ERROR(tdev, "reserved bits set in wSpeedSupported\n");
 676                return 0;
 677        }
 678
 679        return 1;
 680}
 681
 682static int is_good_con_id(struct usbtest_dev *tdev, u8 *buf)
 683{
 684        struct usb_ss_container_id_descriptor *con_id;
 685
 686        con_id = (struct usb_ss_container_id_descriptor *) buf;
 687
 688        if (con_id->bLength != USB_DT_USB_SS_CONTN_ID_SIZE) {
 689                ERROR(tdev, "bogus container id descriptor length\n");
 690                return 0;
 691        }
 692
 693        if (con_id->bReserved) {        /* reserved == 0 */
 694                ERROR(tdev, "reserved bits set\n");
 695                return 0;
 696        }
 697
 698        return 1;
 699}
 700
 701/* sanity test for standard requests working with usb_control_mesg() and some
 702 * of the utility functions which use it.
 703 *
 704 * this doesn't test how endpoint halts behave or data toggles get set, since
 705 * we won't do I/O to bulk/interrupt endpoints here (which is how to change
 706 * halt or toggle).  toggle testing is impractical without support from hcds.
 707 *
 708 * this avoids failing devices linux would normally work with, by not testing
 709 * config/altsetting operations for devices that only support their defaults.
 710 * such devices rarely support those needless operations.
 711 *
 712 * NOTE that since this is a sanity test, it's not examining boundary cases
 713 * to see if usbcore, hcd, and device all behave right.  such testing would
 714 * involve varied read sizes and other operation sequences.
 715 */
 716static int ch9_postconfig(struct usbtest_dev *dev)
 717{
 718        struct usb_interface    *iface = dev->intf;
 719        struct usb_device       *udev = interface_to_usbdev(iface);
 720        int                     i, alt, retval;
 721
 722        /* [9.2.3] if there's more than one altsetting, we need to be able to
 723         * set and get each one.  mostly trusts the descriptors from usbcore.
 724         */
 725        for (i = 0; i < iface->num_altsetting; i++) {
 726
 727                /* 9.2.3 constrains the range here */
 728                alt = iface->altsetting[i].desc.bAlternateSetting;
 729                if (alt < 0 || alt >= iface->num_altsetting) {
 730                        dev_err(&iface->dev,
 731                                        "invalid alt [%d].bAltSetting = %d\n",
 732                                        i, alt);
 733                }
 734
 735                /* [real world] get/set unimplemented if there's only one */
 736                if (realworld && iface->num_altsetting == 1)
 737                        continue;
 738
 739                /* [9.4.10] set_interface */
 740                retval = set_altsetting(dev, alt);
 741                if (retval) {
 742                        dev_err(&iface->dev, "can't set_interface = %d, %d\n",
 743                                        alt, retval);
 744                        return retval;
 745                }
 746
 747                /* [9.4.4] get_interface always works */
 748                retval = get_altsetting(dev);
 749                if (retval != alt) {
 750                        dev_err(&iface->dev, "get alt should be %d, was %d\n",
 751                                        alt, retval);
 752                        return (retval < 0) ? retval : -EDOM;
 753                }
 754
 755        }
 756
 757        /* [real world] get_config unimplemented if there's only one */
 758        if (!realworld || udev->descriptor.bNumConfigurations != 1) {
 759                int     expected = udev->actconfig->desc.bConfigurationValue;
 760
 761                /* [9.4.2] get_configuration always works
 762                 * ... although some cheap devices (like one TI Hub I've got)
 763                 * won't return config descriptors except before set_config.
 764                 */
 765                retval = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
 766                                USB_REQ_GET_CONFIGURATION,
 767                                USB_DIR_IN | USB_RECIP_DEVICE,
 768                                0, 0, dev->buf, 1, USB_CTRL_GET_TIMEOUT);
 769                if (retval != 1 || dev->buf[0] != expected) {
 770                        dev_err(&iface->dev, "get config --> %d %d (1 %d)\n",
 771                                retval, dev->buf[0], expected);
 772                        return (retval < 0) ? retval : -EDOM;
 773                }
 774        }
 775
 776        /* there's always [9.4.3] a device descriptor [9.6.1] */
 777        retval = usb_get_descriptor(udev, USB_DT_DEVICE, 0,
 778                        dev->buf, sizeof(udev->descriptor));
 779        if (retval != sizeof(udev->descriptor)) {
 780                dev_err(&iface->dev, "dev descriptor --> %d\n", retval);
 781                return (retval < 0) ? retval : -EDOM;
 782        }
 783
 784        /*
 785         * there's always [9.4.3] a bos device descriptor [9.6.2] in USB
 786         * 3.0 spec
 787         */
 788        if (le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0210) {
 789                struct usb_bos_descriptor *bos = NULL;
 790                struct usb_dev_cap_header *header = NULL;
 791                unsigned total, num, length;
 792                u8 *buf;
 793
 794                retval = usb_get_descriptor(udev, USB_DT_BOS, 0, dev->buf,
 795                                sizeof(*udev->bos->desc));
 796                if (retval != sizeof(*udev->bos->desc)) {
 797                        dev_err(&iface->dev, "bos descriptor --> %d\n", retval);
 798                        return (retval < 0) ? retval : -EDOM;
 799                }
 800
 801                bos = (struct usb_bos_descriptor *)dev->buf;
 802                total = le16_to_cpu(bos->wTotalLength);
 803                num = bos->bNumDeviceCaps;
 804
 805                if (total > TBUF_SIZE)
 806                        total = TBUF_SIZE;
 807
 808                /*
 809                 * get generic device-level capability descriptors [9.6.2]
 810                 * in USB 3.0 spec
 811                 */
 812                retval = usb_get_descriptor(udev, USB_DT_BOS, 0, dev->buf,
 813                                total);
 814                if (retval != total) {
 815                        dev_err(&iface->dev, "bos descriptor set --> %d\n",
 816                                        retval);
 817                        return (retval < 0) ? retval : -EDOM;
 818                }
 819
 820                length = sizeof(*udev->bos->desc);
 821                buf = dev->buf;
 822                for (i = 0; i < num; i++) {
 823                        buf += length;
 824                        if (buf + sizeof(struct usb_dev_cap_header) >
 825                                        dev->buf + total)
 826                                break;
 827
 828                        header = (struct usb_dev_cap_header *)buf;
 829                        length = header->bLength;
 830
 831                        if (header->bDescriptorType !=
 832                                        USB_DT_DEVICE_CAPABILITY) {
 833                                dev_warn(&udev->dev, "not device capability descriptor, skip\n");
 834                                continue;
 835                        }
 836
 837                        switch (header->bDevCapabilityType) {
 838                        case USB_CAP_TYPE_EXT:
 839                                if (buf + USB_DT_USB_EXT_CAP_SIZE >
 840                                                dev->buf + total ||
 841                                                !is_good_ext(dev, buf)) {
 842                                        dev_err(&iface->dev, "bogus usb 2.0 extension descriptor\n");
 843                                        return -EDOM;
 844                                }
 845                                break;
 846                        case USB_SS_CAP_TYPE:
 847                                if (buf + USB_DT_USB_SS_CAP_SIZE >
 848                                                dev->buf + total ||
 849                                                !is_good_ss_cap(dev, buf)) {
 850                                        dev_err(&iface->dev, "bogus superspeed device capability descriptor\n");
 851                                        return -EDOM;
 852                                }
 853                                break;
 854                        case CONTAINER_ID_TYPE:
 855                                if (buf + USB_DT_USB_SS_CONTN_ID_SIZE >
 856                                                dev->buf + total ||
 857                                                !is_good_con_id(dev, buf)) {
 858                                        dev_err(&iface->dev, "bogus container id descriptor\n");
 859                                        return -EDOM;
 860                                }
 861                                break;
 862                        default:
 863                                break;
 864                        }
 865                }
 866        }
 867
 868        /* there's always [9.4.3] at least one config descriptor [9.6.3] */
 869        for (i = 0; i < udev->descriptor.bNumConfigurations; i++) {
 870                retval = usb_get_descriptor(udev, USB_DT_CONFIG, i,
 871                                dev->buf, TBUF_SIZE);
 872                if (!is_good_config(dev, retval)) {
 873                        dev_err(&iface->dev,
 874                                        "config [%d] descriptor --> %d\n",
 875                                        i, retval);
 876                        return (retval < 0) ? retval : -EDOM;
 877                }
 878
 879                /* FIXME cross-checking udev->config[i] to make sure usbcore
 880                 * parsed it right (etc) would be good testing paranoia
 881                 */
 882        }
 883
 884        /* and sometimes [9.2.6.6] speed dependent descriptors */
 885        if (le16_to_cpu(udev->descriptor.bcdUSB) == 0x0200) {
 886                struct usb_qualifier_descriptor *d = NULL;
 887
 888                /* device qualifier [9.6.2] */
 889                retval = usb_get_descriptor(udev,
 890                                USB_DT_DEVICE_QUALIFIER, 0, dev->buf,
 891                                sizeof(struct usb_qualifier_descriptor));
 892                if (retval == -EPIPE) {
 893                        if (udev->speed == USB_SPEED_HIGH) {
 894                                dev_err(&iface->dev,
 895                                                "hs dev qualifier --> %d\n",
 896                                                retval);
 897                                return (retval < 0) ? retval : -EDOM;
 898                        }
 899                        /* usb2.0 but not high-speed capable; fine */
 900                } else if (retval != sizeof(struct usb_qualifier_descriptor)) {
 901                        dev_err(&iface->dev, "dev qualifier --> %d\n", retval);
 902                        return (retval < 0) ? retval : -EDOM;
 903                } else
 904                        d = (struct usb_qualifier_descriptor *) dev->buf;
 905
 906                /* might not have [9.6.2] any other-speed configs [9.6.4] */
 907                if (d) {
 908                        unsigned max = d->bNumConfigurations;
 909                        for (i = 0; i < max; i++) {
 910                                retval = usb_get_descriptor(udev,
 911                                        USB_DT_OTHER_SPEED_CONFIG, i,
 912                                        dev->buf, TBUF_SIZE);
 913                                if (!is_good_config(dev, retval)) {
 914                                        dev_err(&iface->dev,
 915                                                "other speed config --> %d\n",
 916                                                retval);
 917                                        return (retval < 0) ? retval : -EDOM;
 918                                }
 919                        }
 920                }
 921        }
 922        /* FIXME fetch strings from at least the device descriptor */
 923
 924        /* [9.4.5] get_status always works */
 925        retval = usb_get_status(udev, USB_RECIP_DEVICE, 0, dev->buf);
 926        if (retval) {
 927                dev_err(&iface->dev, "get dev status --> %d\n", retval);
 928                return retval;
 929        }
 930
 931        /* FIXME configuration.bmAttributes says if we could try to set/clear
 932         * the device's remote wakeup feature ... if we can, test that here
 933         */
 934
 935        retval = usb_get_status(udev, USB_RECIP_INTERFACE,
 936                        iface->altsetting[0].desc.bInterfaceNumber, dev->buf);
 937        if (retval) {
 938                dev_err(&iface->dev, "get interface status --> %d\n", retval);
 939                return retval;
 940        }
 941        /* FIXME get status for each endpoint in the interface */
 942
 943        return 0;
 944}
 945
 946/*-------------------------------------------------------------------------*/
 947
 948/* use ch9 requests to test whether:
 949 *   (a) queues work for control, keeping N subtests queued and
 950 *       active (auto-resubmit) for M loops through the queue.
 951 *   (b) protocol stalls (control-only) will autorecover.
 952 *       it's not like bulk/intr; no halt clearing.
 953 *   (c) short control reads are reported and handled.
 954 *   (d) queues are always processed in-order
 955 */
 956
 957struct ctrl_ctx {
 958        spinlock_t              lock;
 959        struct usbtest_dev      *dev;
 960        struct completion       complete;
 961        unsigned                count;
 962        unsigned                pending;
 963        int                     status;
 964        struct urb              **urb;
 965        struct usbtest_param    *param;
 966        int                     last;
 967};
 968
 969#define NUM_SUBCASES    16              /* how many test subcases here? */
 970
 971struct subcase {
 972        struct usb_ctrlrequest  setup;
 973        int                     number;
 974        int                     expected;
 975};
 976
 977static void ctrl_complete(struct urb *urb)
 978{
 979        struct ctrl_ctx         *ctx = urb->context;
 980        struct usb_ctrlrequest  *reqp;
 981        struct subcase          *subcase;
 982        int                     status = urb->status;
 983
 984        reqp = (struct usb_ctrlrequest *)urb->setup_packet;
 985        subcase = container_of(reqp, struct subcase, setup);
 986
 987        spin_lock(&ctx->lock);
 988        ctx->count--;
 989        ctx->pending--;
 990
 991        /* queue must transfer and complete in fifo order, unless
 992         * usb_unlink_urb() is used to unlink something not at the
 993         * physical queue head (not tested).
 994         */
 995        if (subcase->number > 0) {
 996                if ((subcase->number - ctx->last) != 1) {
 997                        ERROR(ctx->dev,
 998                                "subcase %d completed out of order, last %d\n",
 999                                subcase->number, ctx->last);
1000                        status = -EDOM;
1001                        ctx->last = subcase->number;
1002                        goto error;
1003                }
1004        }
1005        ctx->last = subcase->number;
1006
1007        /* succeed or fault in only one way? */
1008        if (status == subcase->expected)
1009                status = 0;
1010
1011        /* async unlink for cleanup? */
1012        else if (status != -ECONNRESET) {
1013
1014                /* some faults are allowed, not required */
1015                if (subcase->expected > 0 && (
1016                          ((status == -subcase->expected        /* happened */
1017                           || status == 0))))                   /* didn't */
1018                        status = 0;
1019                /* sometimes more than one fault is allowed */
1020                else if (subcase->number == 12 && status == -EPIPE)
1021                        status = 0;
1022                else
1023                        ERROR(ctx->dev, "subtest %d error, status %d\n",
1024                                        subcase->number, status);
1025        }
1026
1027        /* unexpected status codes mean errors; ideally, in hardware */
1028        if (status) {
1029error:
1030                if (ctx->status == 0) {
1031                        int             i;
1032
1033                        ctx->status = status;
1034                        ERROR(ctx->dev, "control queue %02x.%02x, err %d, "
1035                                        "%d left, subcase %d, len %d/%d\n",
1036                                        reqp->bRequestType, reqp->bRequest,
1037                                        status, ctx->count, subcase->number,
1038                                        urb->actual_length,
1039                                        urb->transfer_buffer_length);
1040
1041                        /* FIXME this "unlink everything" exit route should
1042                         * be a separate test case.
1043                         */
1044
1045                        /* unlink whatever's still pending */
1046                        for (i = 1; i < ctx->param->sglen; i++) {
1047                                struct urb *u = ctx->urb[
1048                                                        (i + subcase->number)
1049                                                        % ctx->param->sglen];
1050
1051                                if (u == urb || !u->dev)
1052                                        continue;
1053                                spin_unlock(&ctx->lock);
1054                                status = usb_unlink_urb(u);
1055                                spin_lock(&ctx->lock);
1056                                switch (status) {
1057                                case -EINPROGRESS:
1058                                case -EBUSY:
1059                                case -EIDRM:
1060                                        continue;
1061                                default:
1062                                        ERROR(ctx->dev, "urb unlink --> %d\n",
1063                                                        status);
1064                                }
1065                        }
1066                        status = ctx->status;
1067                }
1068        }
1069
1070        /* resubmit if we need to, else mark this as done */
1071        if ((status == 0) && (ctx->pending < ctx->count)) {
1072                status = usb_submit_urb(urb, GFP_ATOMIC);
1073                if (status != 0) {
1074                        ERROR(ctx->dev,
1075                                "can't resubmit ctrl %02x.%02x, err %d\n",
1076                                reqp->bRequestType, reqp->bRequest, status);
1077                        urb->dev = NULL;
1078                } else
1079                        ctx->pending++;
1080        } else
1081                urb->dev = NULL;
1082
1083        /* signal completion when nothing's queued */
1084        if (ctx->pending == 0)
1085                complete(&ctx->complete);
1086        spin_unlock(&ctx->lock);
1087}
1088
1089static int
1090test_ctrl_queue(struct usbtest_dev *dev, struct usbtest_param *param)
1091{
1092        struct usb_device       *udev = testdev_to_usbdev(dev);
1093        struct urb              **urb;
1094        struct ctrl_ctx         context;
1095        int                     i;
1096
1097        if (param->sglen == 0 || param->iterations > UINT_MAX / param->sglen)
1098                return -EOPNOTSUPP;
1099
1100        spin_lock_init(&context.lock);
1101        context.dev = dev;
1102        init_completion(&context.complete);
1103        context.count = param->sglen * param->iterations;
1104        context.pending = 0;
1105        context.status = -ENOMEM;
1106        context.param = param;
1107        context.last = -1;
1108
1109        /* allocate and init the urbs we'll queue.
1110         * as with bulk/intr sglists, sglen is the queue depth; it also
1111         * controls which subtests run (more tests than sglen) or rerun.
1112         */
1113        urb = kcalloc(param->sglen, sizeof(struct urb *), GFP_KERNEL);
1114        if (!urb)
1115                return -ENOMEM;
1116        for (i = 0; i < param->sglen; i++) {
1117                int                     pipe = usb_rcvctrlpipe(udev, 0);
1118                unsigned                len;
1119                struct urb              *u;
1120                struct usb_ctrlrequest  req;
1121                struct subcase          *reqp;
1122
1123                /* sign of this variable means:
1124                 *  -: tested code must return this (negative) error code
1125                 *  +: tested code may return this (negative too) error code
1126                 */
1127                int                     expected = 0;
1128
1129                /* requests here are mostly expected to succeed on any
1130                 * device, but some are chosen to trigger protocol stalls
1131                 * or short reads.
1132                 */
1133                memset(&req, 0, sizeof(req));
1134                req.bRequest = USB_REQ_GET_DESCRIPTOR;
1135                req.bRequestType = USB_DIR_IN|USB_RECIP_DEVICE;
1136
1137                switch (i % NUM_SUBCASES) {
1138                case 0:         /* get device descriptor */
1139                        req.wValue = cpu_to_le16(USB_DT_DEVICE << 8);
1140                        len = sizeof(struct usb_device_descriptor);
1141                        break;
1142                case 1:         /* get first config descriptor (only) */
1143                        req.wValue = cpu_to_le16((USB_DT_CONFIG << 8) | 0);
1144                        len = sizeof(struct usb_config_descriptor);
1145                        break;
1146                case 2:         /* get altsetting (OFTEN STALLS) */
1147                        req.bRequest = USB_REQ_GET_INTERFACE;
1148                        req.bRequestType = USB_DIR_IN|USB_RECIP_INTERFACE;
1149                        /* index = 0 means first interface */
1150                        len = 1;
1151                        expected = EPIPE;
1152                        break;
1153                case 3:         /* get interface status */
1154                        req.bRequest = USB_REQ_GET_STATUS;
1155                        req.bRequestType = USB_DIR_IN|USB_RECIP_INTERFACE;
1156                        /* interface 0 */
1157                        len = 2;
1158                        break;
1159                case 4:         /* get device status */
1160                        req.bRequest = USB_REQ_GET_STATUS;
1161                        req.bRequestType = USB_DIR_IN|USB_RECIP_DEVICE;
1162                        len = 2;
1163                        break;
1164                case 5:         /* get device qualifier (MAY STALL) */
1165                        req.wValue = cpu_to_le16 (USB_DT_DEVICE_QUALIFIER << 8);
1166                        len = sizeof(struct usb_qualifier_descriptor);
1167                        if (udev->speed != USB_SPEED_HIGH)
1168                                expected = EPIPE;
1169                        break;
1170                case 6:         /* get first config descriptor, plus interface */
1171                        req.wValue = cpu_to_le16((USB_DT_CONFIG << 8) | 0);
1172                        len = sizeof(struct usb_config_descriptor);
1173                        len += sizeof(struct usb_interface_descriptor);
1174                        break;
1175                case 7:         /* get interface descriptor (ALWAYS STALLS) */
1176                        req.wValue = cpu_to_le16 (USB_DT_INTERFACE << 8);
1177                        /* interface == 0 */
1178                        len = sizeof(struct usb_interface_descriptor);
1179                        expected = -EPIPE;
1180                        break;
1181                /* NOTE: two consecutive stalls in the queue here.
1182                 *  that tests fault recovery a bit more aggressively. */
1183                case 8:         /* clear endpoint halt (MAY STALL) */
1184                        req.bRequest = USB_REQ_CLEAR_FEATURE;
1185                        req.bRequestType = USB_RECIP_ENDPOINT;
1186                        /* wValue 0 == ep halt */
1187                        /* wIndex 0 == ep0 (shouldn't halt!) */
1188                        len = 0;
1189                        pipe = usb_sndctrlpipe(udev, 0);
1190                        expected = EPIPE;
1191                        break;
1192                case 9:         /* get endpoint status */
1193                        req.bRequest = USB_REQ_GET_STATUS;
1194                        req.bRequestType = USB_DIR_IN|USB_RECIP_ENDPOINT;
1195                        /* endpoint 0 */
1196                        len = 2;
1197                        break;
1198                case 10:        /* trigger short read (EREMOTEIO) */
1199                        req.wValue = cpu_to_le16((USB_DT_CONFIG << 8) | 0);
1200                        len = 1024;
1201                        expected = -EREMOTEIO;
1202                        break;
1203                /* NOTE: two consecutive _different_ faults in the queue. */
1204                case 11:        /* get endpoint descriptor (ALWAYS STALLS) */
1205                        req.wValue = cpu_to_le16(USB_DT_ENDPOINT << 8);
1206                        /* endpoint == 0 */
1207                        len = sizeof(struct usb_interface_descriptor);
1208                        expected = EPIPE;
1209                        break;
1210                /* NOTE: sometimes even a third fault in the queue! */
1211                case 12:        /* get string 0 descriptor (MAY STALL) */
1212                        req.wValue = cpu_to_le16(USB_DT_STRING << 8);
1213                        /* string == 0, for language IDs */
1214                        len = sizeof(struct usb_interface_descriptor);
1215                        /* may succeed when > 4 languages */
1216                        expected = EREMOTEIO;   /* or EPIPE, if no strings */
1217                        break;
1218                case 13:        /* short read, resembling case 10 */
1219                        req.wValue = cpu_to_le16((USB_DT_CONFIG << 8) | 0);
1220                        /* last data packet "should" be DATA1, not DATA0 */
1221                        if (udev->speed == USB_SPEED_SUPER)
1222                                len = 1024 - 512;
1223                        else
1224                                len = 1024 - udev->descriptor.bMaxPacketSize0;
1225                        expected = -EREMOTEIO;
1226                        break;
1227                case 14:        /* short read; try to fill the last packet */
1228                        req.wValue = cpu_to_le16((USB_DT_DEVICE << 8) | 0);
1229                        /* device descriptor size == 18 bytes */
1230                        len = udev->descriptor.bMaxPacketSize0;
1231                        if (udev->speed == USB_SPEED_SUPER)
1232                                len = 512;
1233                        switch (len) {
1234                        case 8:
1235                                len = 24;
1236                                break;
1237                        case 16:
1238                                len = 32;
1239                                break;
1240                        }
1241                        expected = -EREMOTEIO;
1242                        break;
1243                case 15:
1244                        req.wValue = cpu_to_le16(USB_DT_BOS << 8);
1245                        if (udev->bos)
1246                                len = le16_to_cpu(udev->bos->desc->wTotalLength);
1247                        else
1248                                len = sizeof(struct usb_bos_descriptor);
1249                        if (le16_to_cpu(udev->descriptor.bcdUSB) < 0x0201)
1250                                expected = -EPIPE;
1251                        break;
1252                default:
1253                        ERROR(dev, "bogus number of ctrl queue testcases!\n");
1254                        context.status = -EINVAL;
1255                        goto cleanup;
1256                }
1257                req.wLength = cpu_to_le16(len);
1258                urb[i] = u = simple_alloc_urb(udev, pipe, len);
1259                if (!u)
1260                        goto cleanup;
1261
1262                reqp = kmalloc(sizeof(*reqp), GFP_KERNEL);
1263                if (!reqp)
1264                        goto cleanup;
1265                reqp->setup = req;
1266                reqp->number = i % NUM_SUBCASES;
1267                reqp->expected = expected;
1268                u->setup_packet = (char *) &reqp->setup;
1269
1270                u->context = &context;
1271                u->complete = ctrl_complete;
1272        }
1273
1274        /* queue the urbs */
1275        context.urb = urb;
1276        spin_lock_irq(&context.lock);
1277        for (i = 0; i < param->sglen; i++) {
1278                context.status = usb_submit_urb(urb[i], GFP_ATOMIC);
1279                if (context.status != 0) {
1280                        ERROR(dev, "can't submit urb[%d], status %d\n",
1281                                        i, context.status);
1282                        context.count = context.pending;
1283                        break;
1284                }
1285                context.pending++;
1286        }
1287        spin_unlock_irq(&context.lock);
1288
1289        /* FIXME  set timer and time out; provide a disconnect hook */
1290
1291        /* wait for the last one to complete */
1292        if (context.pending > 0)
1293                wait_for_completion(&context.complete);
1294
1295cleanup:
1296        for (i = 0; i < param->sglen; i++) {
1297                if (!urb[i])
1298                        continue;
1299                urb[i]->dev = udev;
1300                kfree(urb[i]->setup_packet);
1301                simple_free_urb(urb[i]);
1302        }
1303        kfree(urb);
1304        return context.status;
1305}
1306#undef NUM_SUBCASES
1307
1308
1309/*-------------------------------------------------------------------------*/
1310
1311static void unlink1_callback(struct urb *urb)
1312{
1313        int     status = urb->status;
1314
1315        /* we "know" -EPIPE (stall) never happens */
1316        if (!status)
1317                status = usb_submit_urb(urb, GFP_ATOMIC);
1318        if (status) {
1319                urb->status = status;
1320                complete(urb->context);
1321        }
1322}
1323
1324static int unlink1(struct usbtest_dev *dev, int pipe, int size, int async)
1325{
1326        struct urb              *urb;
1327        struct completion       completion;
1328        int                     retval = 0;
1329
1330        init_completion(&completion);
1331        urb = simple_alloc_urb(testdev_to_usbdev(dev), pipe, size);
1332        if (!urb)
1333                return -ENOMEM;
1334        urb->context = &completion;
1335        urb->complete = unlink1_callback;
1336
1337        if (usb_pipeout(urb->pipe)) {
1338                simple_fill_buf(urb);
1339                urb->transfer_flags |= URB_ZERO_PACKET;
1340        }
1341
1342        /* keep the endpoint busy.  there are lots of hc/hcd-internal
1343         * states, and testing should get to all of them over time.
1344         *
1345         * FIXME want additional tests for when endpoint is STALLing
1346         * due to errors, or is just NAKing requests.
1347         */
1348        retval = usb_submit_urb(urb, GFP_KERNEL);
1349        if (retval != 0) {
1350                dev_err(&dev->intf->dev, "submit fail %d\n", retval);
1351                return retval;
1352        }
1353
1354        /* unlinking that should always work.  variable delay tests more
1355         * hcd states and code paths, even with little other system load.
1356         */
1357        msleep(jiffies % (2 * INTERRUPT_RATE));
1358        if (async) {
1359                while (!completion_done(&completion)) {
1360                        retval = usb_unlink_urb(urb);
1361
1362                        if (retval == 0 && usb_pipein(urb->pipe))
1363                                retval = simple_check_buf(dev, urb);
1364
1365                        switch (retval) {
1366                        case -EBUSY:
1367                        case -EIDRM:
1368                                /* we can't unlink urbs while they're completing
1369                                 * or if they've completed, and we haven't
1370                                 * resubmitted. "normal" drivers would prevent
1371                                 * resubmission, but since we're testing unlink
1372                                 * paths, we can't.
1373                                 */
1374                                ERROR(dev, "unlink retry\n");
1375                                continue;
1376                        case 0:
1377                        case -EINPROGRESS:
1378                                break;
1379
1380                        default:
1381                                dev_err(&dev->intf->dev,
1382                                        "unlink fail %d\n", retval);
1383                                return retval;
1384                        }
1385
1386                        break;
1387                }
1388        } else
1389                usb_kill_urb(urb);
1390
1391        wait_for_completion(&completion);
1392        retval = urb->status;
1393        simple_free_urb(urb);
1394
1395        if (async)
1396                return (retval == -ECONNRESET) ? 0 : retval - 1000;
1397        else
1398                return (retval == -ENOENT || retval == -EPERM) ?
1399                                0 : retval - 2000;
1400}
1401
1402static int unlink_simple(struct usbtest_dev *dev, int pipe, int len)
1403{
1404        int                     retval = 0;
1405
1406        /* test sync and async paths */
1407        retval = unlink1(dev, pipe, len, 1);
1408        if (!retval)
1409                retval = unlink1(dev, pipe, len, 0);
1410        return retval;
1411}
1412
1413/*-------------------------------------------------------------------------*/
1414
1415struct queued_ctx {
1416        struct completion       complete;
1417        atomic_t                pending;
1418        unsigned                num;
1419        int                     status;
1420        struct urb              **urbs;
1421};
1422
1423static void unlink_queued_callback(struct urb *urb)
1424{
1425        int                     status = urb->status;
1426        struct queued_ctx       *ctx = urb->context;
1427
1428        if (ctx->status)
1429                goto done;
1430        if (urb == ctx->urbs[ctx->num - 4] || urb == ctx->urbs[ctx->num - 2]) {
1431                if (status == -ECONNRESET)
1432                        goto done;
1433                /* What error should we report if the URB completed normally? */
1434        }
1435        if (status != 0)
1436                ctx->status = status;
1437
1438 done:
1439        if (atomic_dec_and_test(&ctx->pending))
1440                complete(&ctx->complete);
1441}
1442
1443static int unlink_queued(struct usbtest_dev *dev, int pipe, unsigned num,
1444                unsigned size)
1445{
1446        struct queued_ctx       ctx;
1447        struct usb_device       *udev = testdev_to_usbdev(dev);
1448        void                    *buf;
1449        dma_addr_t              buf_dma;
1450        int                     i;
1451        int                     retval = -ENOMEM;
1452
1453        init_completion(&ctx.complete);
1454        atomic_set(&ctx.pending, 1);    /* One more than the actual value */
1455        ctx.num = num;
1456        ctx.status = 0;
1457
1458        buf = usb_alloc_coherent(udev, size, GFP_KERNEL, &buf_dma);
1459        if (!buf)
1460                return retval;
1461        memset(buf, 0, size);
1462
1463        /* Allocate and init the urbs we'll queue */
1464        ctx.urbs = kcalloc(num, sizeof(struct urb *), GFP_KERNEL);
1465        if (!ctx.urbs)
1466                goto free_buf;
1467        for (i = 0; i < num; i++) {
1468                ctx.urbs[i] = usb_alloc_urb(0, GFP_KERNEL);
1469                if (!ctx.urbs[i])
1470                        goto free_urbs;
1471                usb_fill_bulk_urb(ctx.urbs[i], udev, pipe, buf, size,
1472                                unlink_queued_callback, &ctx);
1473                ctx.urbs[i]->transfer_dma = buf_dma;
1474                ctx.urbs[i]->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
1475
1476                if (usb_pipeout(ctx.urbs[i]->pipe)) {
1477                        simple_fill_buf(ctx.urbs[i]);
1478                        ctx.urbs[i]->transfer_flags |= URB_ZERO_PACKET;
1479                }
1480        }
1481
1482        /* Submit all the URBs and then unlink URBs num - 4 and num - 2. */
1483        for (i = 0; i < num; i++) {
1484                atomic_inc(&ctx.pending);
1485                retval = usb_submit_urb(ctx.urbs[i], GFP_KERNEL);
1486                if (retval != 0) {
1487                        dev_err(&dev->intf->dev, "submit urbs[%d] fail %d\n",
1488                                        i, retval);
1489                        atomic_dec(&ctx.pending);
1490                        ctx.status = retval;
1491                        break;
1492                }
1493        }
1494        if (i == num) {
1495                usb_unlink_urb(ctx.urbs[num - 4]);
1496                usb_unlink_urb(ctx.urbs[num - 2]);
1497        } else {
1498                while (--i >= 0)
1499                        usb_unlink_urb(ctx.urbs[i]);
1500        }
1501
1502        if (atomic_dec_and_test(&ctx.pending))          /* The extra count */
1503                complete(&ctx.complete);
1504        wait_for_completion(&ctx.complete);
1505        retval = ctx.status;
1506
1507 free_urbs:
1508        for (i = 0; i < num; i++)
1509                usb_free_urb(ctx.urbs[i]);
1510        kfree(ctx.urbs);
1511 free_buf:
1512        usb_free_coherent(udev, size, buf, buf_dma);
1513        return retval;
1514}
1515
1516/*-------------------------------------------------------------------------*/
1517
1518static int verify_not_halted(struct usbtest_dev *tdev, int ep, struct urb *urb)
1519{
1520        int     retval;
1521        u16     status;
1522
1523        /* shouldn't look or act halted */
1524        retval = usb_get_status(urb->dev, USB_RECIP_ENDPOINT, ep, &status);
1525        if (retval < 0) {
1526                ERROR(tdev, "ep %02x couldn't get no-halt status, %d\n",
1527                                ep, retval);
1528                return retval;
1529        }
1530        if (status != 0) {
1531                ERROR(tdev, "ep %02x bogus status: %04x != 0\n", ep, status);
1532                return -EINVAL;
1533        }
1534        retval = simple_io(tdev, urb, 1, 0, 0, __func__);
1535        if (retval != 0)
1536                return -EINVAL;
1537        return 0;
1538}
1539
1540static int verify_halted(struct usbtest_dev *tdev, int ep, struct urb *urb)
1541{
1542        int     retval;
1543        u16     status;
1544
1545        /* should look and act halted */
1546        retval = usb_get_status(urb->dev, USB_RECIP_ENDPOINT, ep, &status);
1547        if (retval < 0) {
1548                ERROR(tdev, "ep %02x couldn't get halt status, %d\n",
1549                                ep, retval);
1550                return retval;
1551        }
1552        if (status != 1) {
1553                ERROR(tdev, "ep %02x bogus status: %04x != 1\n", ep, status);
1554                return -EINVAL;
1555        }
1556        retval = simple_io(tdev, urb, 1, 0, -EPIPE, __func__);
1557        if (retval != -EPIPE)
1558                return -EINVAL;
1559        retval = simple_io(tdev, urb, 1, 0, -EPIPE, "verify_still_halted");
1560        if (retval != -EPIPE)
1561                return -EINVAL;
1562        return 0;
1563}
1564
1565static int test_halt(struct usbtest_dev *tdev, int ep, struct urb *urb)
1566{
1567        int     retval;
1568
1569        /* shouldn't look or act halted now */
1570        retval = verify_not_halted(tdev, ep, urb);
1571        if (retval < 0)
1572                return retval;
1573
1574        /* set halt (protocol test only), verify it worked */
1575        retval = usb_control_msg(urb->dev, usb_sndctrlpipe(urb->dev, 0),
1576                        USB_REQ_SET_FEATURE, USB_RECIP_ENDPOINT,
1577                        USB_ENDPOINT_HALT, ep,
1578                        NULL, 0, USB_CTRL_SET_TIMEOUT);
1579        if (retval < 0) {
1580                ERROR(tdev, "ep %02x couldn't set halt, %d\n", ep, retval);
1581                return retval;
1582        }
1583        retval = verify_halted(tdev, ep, urb);
1584        if (retval < 0) {
1585                int ret;
1586
1587                /* clear halt anyways, else further tests will fail */
1588                ret = usb_clear_halt(urb->dev, urb->pipe);
1589                if (ret)
1590                        ERROR(tdev, "ep %02x couldn't clear halt, %d\n",
1591                              ep, ret);
1592
1593                return retval;
1594        }
1595
1596        /* clear halt (tests API + protocol), verify it worked */
1597        retval = usb_clear_halt(urb->dev, urb->pipe);
1598        if (retval < 0) {
1599                ERROR(tdev, "ep %02x couldn't clear halt, %d\n", ep, retval);
1600                return retval;
1601        }
1602        retval = verify_not_halted(tdev, ep, urb);
1603        if (retval < 0)
1604                return retval;
1605
1606        /* NOTE:  could also verify SET_INTERFACE clear halts ... */
1607
1608        return 0;
1609}
1610
1611static int halt_simple(struct usbtest_dev *dev)
1612{
1613        int                     ep;
1614        int                     retval = 0;
1615        struct urb              *urb;
1616        struct usb_device       *udev = testdev_to_usbdev(dev);
1617
1618        if (udev->speed == USB_SPEED_SUPER)
1619                urb = simple_alloc_urb(udev, 0, 1024);
1620        else
1621                urb = simple_alloc_urb(udev, 0, 512);
1622        if (urb == NULL)
1623                return -ENOMEM;
1624
1625        if (dev->in_pipe) {
1626                ep = usb_pipeendpoint(dev->in_pipe) | USB_DIR_IN;
1627                urb->pipe = dev->in_pipe;
1628                retval = test_halt(dev, ep, urb);
1629                if (retval < 0)
1630                        goto done;
1631        }
1632
1633        if (dev->out_pipe) {
1634                ep = usb_pipeendpoint(dev->out_pipe);
1635                urb->pipe = dev->out_pipe;
1636                retval = test_halt(dev, ep, urb);
1637        }
1638done:
1639        simple_free_urb(urb);
1640        return retval;
1641}
1642
1643/*-------------------------------------------------------------------------*/
1644
1645/* Control OUT tests use the vendor control requests from Intel's
1646 * USB 2.0 compliance test device:  write a buffer, read it back.
1647 *
1648 * Intel's spec only _requires_ that it work for one packet, which
1649 * is pretty weak.   Some HCDs place limits here; most devices will
1650 * need to be able to handle more than one OUT data packet.  We'll
1651 * try whatever we're told to try.
1652 */
1653static int ctrl_out(struct usbtest_dev *dev,
1654                unsigned count, unsigned length, unsigned vary, unsigned offset)
1655{
1656        unsigned                i, j, len;
1657        int                     retval;
1658        u8                      *buf;
1659        char                    *what = "?";
1660        struct usb_device       *udev;
1661
1662        if (length < 1 || length > 0xffff || vary >= length)
1663                return -EINVAL;
1664
1665        buf = kmalloc(length + offset, GFP_KERNEL);
1666        if (!buf)
1667                return -ENOMEM;
1668
1669        buf += offset;
1670        udev = testdev_to_usbdev(dev);
1671        len = length;
1672        retval = 0;
1673
1674        /* NOTE:  hardware might well act differently if we pushed it
1675         * with lots back-to-back queued requests.
1676         */
1677        for (i = 0; i < count; i++) {
1678                /* write patterned data */
1679                for (j = 0; j < len; j++)
1680                        buf[j] = i + j;
1681                retval = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
1682                                0x5b, USB_DIR_OUT|USB_TYPE_VENDOR,
1683                                0, 0, buf, len, USB_CTRL_SET_TIMEOUT);
1684                if (retval != len) {
1685                        what = "write";
1686                        if (retval >= 0) {
1687                                ERROR(dev, "ctrl_out, wlen %d (expected %d)\n",
1688                                                retval, len);
1689                                retval = -EBADMSG;
1690                        }
1691                        break;
1692                }
1693
1694                /* read it back -- assuming nothing intervened!!  */
1695                retval = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
1696                                0x5c, USB_DIR_IN|USB_TYPE_VENDOR,
1697                                0, 0, buf, len, USB_CTRL_GET_TIMEOUT);
1698                if (retval != len) {
1699                        what = "read";
1700                        if (retval >= 0) {
1701                                ERROR(dev, "ctrl_out, rlen %d (expected %d)\n",
1702                                                retval, len);
1703                                retval = -EBADMSG;
1704                        }
1705                        break;
1706                }
1707
1708                /* fail if we can't verify */
1709                for (j = 0; j < len; j++) {
1710                        if (buf[j] != (u8) (i + j)) {
1711                                ERROR(dev, "ctrl_out, byte %d is %d not %d\n",
1712                                        j, buf[j], (u8) i + j);
1713                                retval = -EBADMSG;
1714                                break;
1715                        }
1716                }
1717                if (retval < 0) {
1718                        what = "verify";
1719                        break;
1720                }
1721
1722                len += vary;
1723
1724                /* [real world] the "zero bytes IN" case isn't really used.
1725                 * hardware can easily trip up in this weird case, since its
1726                 * status stage is IN, not OUT like other ep0in transfers.
1727                 */
1728                if (len > length)
1729                        len = realworld ? 1 : 0;
1730        }
1731
1732        if (retval < 0)
1733                ERROR(dev, "ctrl_out %s failed, code %d, count %d\n",
1734                        what, retval, i);
1735
1736        kfree(buf - offset);
1737        return retval;
1738}
1739
1740/*-------------------------------------------------------------------------*/
1741
1742/* ISO tests ... mimics common usage
1743 *  - buffer length is split into N packets (mostly maxpacket sized)
1744 *  - multi-buffers according to sglen
1745 */
1746
1747struct iso_context {
1748        unsigned                count;
1749        unsigned                pending;
1750        spinlock_t              lock;
1751        struct completion       done;
1752        int                     submit_error;
1753        unsigned long           errors;
1754        unsigned long           packet_count;
1755        struct usbtest_dev      *dev;
1756};
1757
1758static void iso_callback(struct urb *urb)
1759{
1760        struct iso_context      *ctx = urb->context;
1761
1762        spin_lock(&ctx->lock);
1763        ctx->count--;
1764
1765        ctx->packet_count += urb->number_of_packets;
1766        if (urb->error_count > 0)
1767                ctx->errors += urb->error_count;
1768        else if (urb->status != 0)
1769                ctx->errors += urb->number_of_packets;
1770        else if (urb->actual_length != urb->transfer_buffer_length)
1771                ctx->errors++;
1772        else if (check_guard_bytes(ctx->dev, urb) != 0)
1773                ctx->errors++;
1774
1775        if (urb->status == 0 && ctx->count > (ctx->pending - 1)
1776                        && !ctx->submit_error) {
1777                int status = usb_submit_urb(urb, GFP_ATOMIC);
1778                switch (status) {
1779                case 0:
1780                        goto done;
1781                default:
1782                        dev_err(&ctx->dev->intf->dev,
1783                                        "iso resubmit err %d\n",
1784                                        status);
1785                        /* FALLTHROUGH */
1786                case -ENODEV:                   /* disconnected */
1787                case -ESHUTDOWN:                /* endpoint disabled */
1788                        ctx->submit_error = 1;
1789                        break;
1790                }
1791        }
1792
1793        ctx->pending--;
1794        if (ctx->pending == 0) {
1795                if (ctx->errors)
1796                        dev_err(&ctx->dev->intf->dev,
1797                                "iso test, %lu errors out of %lu\n",
1798                                ctx->errors, ctx->packet_count);
1799                complete(&ctx->done);
1800        }
1801done:
1802        spin_unlock(&ctx->lock);
1803}
1804
1805static struct urb *iso_alloc_urb(
1806        struct usb_device       *udev,
1807        int                     pipe,
1808        struct usb_endpoint_descriptor  *desc,
1809        long                    bytes,
1810        unsigned offset
1811)
1812{
1813        struct urb              *urb;
1814        unsigned                i, maxp, packets;
1815
1816        if (bytes < 0 || !desc)
1817                return NULL;
1818        maxp = 0x7ff & usb_endpoint_maxp(desc);
1819        maxp *= 1 + (0x3 & (usb_endpoint_maxp(desc) >> 11));
1820        packets = DIV_ROUND_UP(bytes, maxp);
1821
1822        urb = usb_alloc_urb(packets, GFP_KERNEL);
1823        if (!urb)
1824                return urb;
1825        urb->dev = udev;
1826        urb->pipe = pipe;
1827
1828        urb->number_of_packets = packets;
1829        urb->transfer_buffer_length = bytes;
1830        urb->transfer_buffer = usb_alloc_coherent(udev, bytes + offset,
1831                                                        GFP_KERNEL,
1832                                                        &urb->transfer_dma);
1833        if (!urb->transfer_buffer) {
1834                usb_free_urb(urb);
1835                return NULL;
1836        }
1837        if (offset) {
1838                memset(urb->transfer_buffer, GUARD_BYTE, offset);
1839                urb->transfer_buffer += offset;
1840                urb->transfer_dma += offset;
1841        }
1842        /* For inbound transfers use guard byte so that test fails if
1843                data not correctly copied */
1844        memset(urb->transfer_buffer,
1845                        usb_pipein(urb->pipe) ? GUARD_BYTE : 0,
1846                        bytes);
1847
1848        for (i = 0; i < packets; i++) {
1849                /* here, only the last packet will be short */
1850                urb->iso_frame_desc[i].length = min((unsigned) bytes, maxp);
1851                bytes -= urb->iso_frame_desc[i].length;
1852
1853                urb->iso_frame_desc[i].offset = maxp * i;
1854        }
1855
1856        urb->complete = iso_callback;
1857        /* urb->context = SET BY CALLER */
1858        urb->interval = 1 << (desc->bInterval - 1);
1859        urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
1860        return urb;
1861}
1862
1863static int
1864test_iso_queue(struct usbtest_dev *dev, struct usbtest_param *param,
1865                int pipe, struct usb_endpoint_descriptor *desc, unsigned offset)
1866{
1867        struct iso_context      context;
1868        struct usb_device       *udev;
1869        unsigned                i;
1870        unsigned long           packets = 0;
1871        int                     status = 0;
1872        struct urb              *urbs[10];      /* FIXME no limit */
1873
1874        if (param->sglen > 10)
1875                return -EDOM;
1876
1877        memset(&context, 0, sizeof(context));
1878        context.count = param->iterations * param->sglen;
1879        context.dev = dev;
1880        init_completion(&context.done);
1881        spin_lock_init(&context.lock);
1882
1883        memset(urbs, 0, sizeof(urbs));
1884        udev = testdev_to_usbdev(dev);
1885        dev_info(&dev->intf->dev,
1886                "... iso period %d %sframes, wMaxPacket %04x\n",
1887                1 << (desc->bInterval - 1),
1888                (udev->speed == USB_SPEED_HIGH) ? "micro" : "",
1889                usb_endpoint_maxp(desc));
1890
1891        for (i = 0; i < param->sglen; i++) {
1892                urbs[i] = iso_alloc_urb(udev, pipe, desc,
1893                                        param->length, offset);
1894                if (!urbs[i]) {
1895                        status = -ENOMEM;
1896                        goto fail;
1897                }
1898                packets += urbs[i]->number_of_packets;
1899                urbs[i]->context = &context;
1900        }
1901        packets *= param->iterations;
1902        dev_info(&dev->intf->dev,
1903                "... total %lu msec (%lu packets)\n",
1904                (packets * (1 << (desc->bInterval - 1)))
1905                        / ((udev->speed == USB_SPEED_HIGH) ? 8 : 1),
1906                packets);
1907
1908        spin_lock_irq(&context.lock);
1909        for (i = 0; i < param->sglen; i++) {
1910                ++context.pending;
1911                status = usb_submit_urb(urbs[i], GFP_ATOMIC);
1912                if (status < 0) {
1913                        ERROR(dev, "submit iso[%d], error %d\n", i, status);
1914                        if (i == 0) {
1915                                spin_unlock_irq(&context.lock);
1916                                goto fail;
1917                        }
1918
1919                        simple_free_urb(urbs[i]);
1920                        urbs[i] = NULL;
1921                        context.pending--;
1922                        context.submit_error = 1;
1923                        break;
1924                }
1925        }
1926        spin_unlock_irq(&context.lock);
1927
1928        wait_for_completion(&context.done);
1929
1930        for (i = 0; i < param->sglen; i++) {
1931                if (urbs[i])
1932                        simple_free_urb(urbs[i]);
1933        }
1934        /*
1935         * Isochronous transfers are expected to fail sometimes.  As an
1936         * arbitrary limit, we will report an error if any submissions
1937         * fail or if the transfer failure rate is > 10%.
1938         */
1939        if (status != 0)
1940                ;
1941        else if (context.submit_error)
1942                status = -EACCES;
1943        else if (context.errors > context.packet_count / 10)
1944                status = -EIO;
1945        return status;
1946
1947fail:
1948        for (i = 0; i < param->sglen; i++) {
1949                if (urbs[i])
1950                        simple_free_urb(urbs[i]);
1951        }
1952        return status;
1953}
1954
1955static int test_unaligned_bulk(
1956        struct usbtest_dev *tdev,
1957        int pipe,
1958        unsigned length,
1959        int iterations,
1960        unsigned transfer_flags,
1961        const char *label)
1962{
1963        int retval;
1964        struct urb *urb = usbtest_alloc_urb(
1965                testdev_to_usbdev(tdev), pipe, length, transfer_flags, 1);
1966
1967        if (!urb)
1968                return -ENOMEM;
1969
1970        retval = simple_io(tdev, urb, iterations, 0, 0, label);
1971        simple_free_urb(urb);
1972        return retval;
1973}
1974
1975/*-------------------------------------------------------------------------*/
1976
1977/* We only have this one interface to user space, through usbfs.
1978 * User mode code can scan usbfs to find N different devices (maybe on
1979 * different busses) to use when testing, and allocate one thread per
1980 * test.  So discovery is simplified, and we have no device naming issues.
1981 *
1982 * Don't use these only as stress/load tests.  Use them along with with
1983 * other USB bus activity:  plugging, unplugging, mousing, mp3 playback,
1984 * video capture, and so on.  Run different tests at different times, in
1985 * different sequences.  Nothing here should interact with other devices,
1986 * except indirectly by consuming USB bandwidth and CPU resources for test
1987 * threads and request completion.  But the only way to know that for sure
1988 * is to test when HC queues are in use by many devices.
1989 *
1990 * WARNING:  Because usbfs grabs udev->dev.sem before calling this ioctl(),
1991 * it locks out usbcore in certain code paths.  Notably, if you disconnect
1992 * the device-under-test, khubd will wait block forever waiting for the
1993 * ioctl to complete ... so that usb_disconnect() can abort the pending
1994 * urbs and then call usbtest_disconnect().  To abort a test, you're best
1995 * off just killing the userspace task and waiting for it to exit.
1996 */
1997
1998static int
1999usbtest_ioctl(struct usb_interface *intf, unsigned int code, void *buf)
2000{
2001        struct usbtest_dev      *dev = usb_get_intfdata(intf);
2002        struct usb_device       *udev = testdev_to_usbdev(dev);
2003        struct usbtest_param    *param = buf;
2004        int                     retval = -EOPNOTSUPP;
2005        struct urb              *urb;
2006        struct scatterlist      *sg;
2007        struct usb_sg_request   req;
2008        struct timeval          start;
2009        unsigned                i;
2010
2011        /* FIXME USBDEVFS_CONNECTINFO doesn't say how fast the device is. */
2012
2013        pattern = mod_pattern;
2014
2015        if (code != USBTEST_REQUEST)
2016                return -EOPNOTSUPP;
2017
2018        if (param->iterations <= 0)
2019                return -EINVAL;
2020
2021        if (mutex_lock_interruptible(&dev->lock))
2022                return -ERESTARTSYS;
2023
2024        /* FIXME: What if a system sleep starts while a test is running? */
2025
2026        /* some devices, like ez-usb default devices, need a non-default
2027         * altsetting to have any active endpoints.  some tests change
2028         * altsettings; force a default so most tests don't need to check.
2029         */
2030        if (dev->info->alt >= 0) {
2031                int     res;
2032
2033                if (intf->altsetting->desc.bInterfaceNumber) {
2034                        mutex_unlock(&dev->lock);
2035                        return -ENODEV;
2036                }
2037                res = set_altsetting(dev, dev->info->alt);
2038                if (res) {
2039                        dev_err(&intf->dev,
2040                                        "set altsetting to %d failed, %d\n",
2041                                        dev->info->alt, res);
2042                        mutex_unlock(&dev->lock);
2043                        return res;
2044                }
2045        }
2046
2047        /*
2048         * Just a bunch of test cases that every HCD is expected to handle.
2049         *
2050         * Some may need specific firmware, though it'd be good to have
2051         * one firmware image to handle all the test cases.
2052         *
2053         * FIXME add more tests!  cancel requests, verify the data, control
2054         * queueing, concurrent read+write threads, and so on.
2055         */
2056        do_gettimeofday(&start);
2057        switch (param->test_num) {
2058
2059        case 0:
2060                dev_info(&intf->dev, "TEST 0:  NOP\n");
2061                retval = 0;
2062                break;
2063
2064        /* Simple non-queued bulk I/O tests */
2065        case 1:
2066                if (dev->out_pipe == 0)
2067                        break;
2068                dev_info(&intf->dev,
2069                                "TEST 1:  write %d bytes %u times\n",
2070                                param->length, param->iterations);
2071                urb = simple_alloc_urb(udev, dev->out_pipe, param->length);
2072                if (!urb) {
2073                        retval = -ENOMEM;
2074                        break;
2075                }
2076                /* FIRMWARE:  bulk sink (maybe accepts short writes) */
2077                retval = simple_io(dev, urb, param->iterations, 0, 0, "test1");
2078                simple_free_urb(urb);
2079                break;
2080        case 2:
2081                if (dev->in_pipe == 0)
2082                        break;
2083                dev_info(&intf->dev,
2084                                "TEST 2:  read %d bytes %u times\n",
2085                                param->length, param->iterations);
2086                urb = simple_alloc_urb(udev, dev->in_pipe, param->length);
2087                if (!urb) {
2088                        retval = -ENOMEM;
2089                        break;
2090                }
2091                /* FIRMWARE:  bulk source (maybe generates short writes) */
2092                retval = simple_io(dev, urb, param->iterations, 0, 0, "test2");
2093                simple_free_urb(urb);
2094                break;
2095        case 3:
2096                if (dev->out_pipe == 0 || param->vary == 0)
2097                        break;
2098                dev_info(&intf->dev,
2099                                "TEST 3:  write/%d 0..%d bytes %u times\n",
2100                                param->vary, param->length, param->iterations);
2101                urb = simple_alloc_urb(udev, dev->out_pipe, param->length);
2102                if (!urb) {
2103                        retval = -ENOMEM;
2104                        break;
2105                }
2106                /* FIRMWARE:  bulk sink (maybe accepts short writes) */
2107                retval = simple_io(dev, urb, param->iterations, param->vary,
2108                                        0, "test3");
2109                simple_free_urb(urb);
2110                break;
2111        case 4:
2112                if (dev->in_pipe == 0 || param->vary == 0)
2113                        break;
2114                dev_info(&intf->dev,
2115                                "TEST 4:  read/%d 0..%d bytes %u times\n",
2116                                param->vary, param->length, param->iterations);
2117                urb = simple_alloc_urb(udev, dev->in_pipe, param->length);
2118                if (!urb) {
2119                        retval = -ENOMEM;
2120                        break;
2121                }
2122                /* FIRMWARE:  bulk source (maybe generates short writes) */
2123                retval = simple_io(dev, urb, param->iterations, param->vary,
2124                                        0, "test4");
2125                simple_free_urb(urb);
2126                break;
2127
2128        /* Queued bulk I/O tests */
2129        case 5:
2130                if (dev->out_pipe == 0 || param->sglen == 0)
2131                        break;
2132                dev_info(&intf->dev,
2133                        "TEST 5:  write %d sglists %d entries of %d bytes\n",
2134                                param->iterations,
2135                                param->sglen, param->length);
2136                sg = alloc_sglist(param->sglen, param->length, 0);
2137                if (!sg) {
2138                        retval = -ENOMEM;
2139                        break;
2140                }
2141                /* FIRMWARE:  bulk sink (maybe accepts short writes) */
2142                retval = perform_sglist(dev, param->iterations, dev->out_pipe,
2143                                &req, sg, param->sglen);
2144                free_sglist(sg, param->sglen);
2145                break;
2146
2147        case 6:
2148                if (dev->in_pipe == 0 || param->sglen == 0)
2149                        break;
2150                dev_info(&intf->dev,
2151                        "TEST 6:  read %d sglists %d entries of %d bytes\n",
2152                                param->iterations,
2153                                param->sglen, param->length);
2154                sg = alloc_sglist(param->sglen, param->length, 0);
2155                if (!sg) {
2156                        retval = -ENOMEM;
2157                        break;
2158                }
2159                /* FIRMWARE:  bulk source (maybe generates short writes) */
2160                retval = perform_sglist(dev, param->iterations, dev->in_pipe,
2161                                &req, sg, param->sglen);
2162                free_sglist(sg, param->sglen);
2163                break;
2164        case 7:
2165                if (dev->out_pipe == 0 || param->sglen == 0 || param->vary == 0)
2166                        break;
2167                dev_info(&intf->dev,
2168                        "TEST 7:  write/%d %d sglists %d entries 0..%d bytes\n",
2169                                param->vary, param->iterations,
2170                                param->sglen, param->length);
2171                sg = alloc_sglist(param->sglen, param->length, param->vary);
2172                if (!sg) {
2173                        retval = -ENOMEM;
2174                        break;
2175                }
2176                /* FIRMWARE:  bulk sink (maybe accepts short writes) */
2177                retval = perform_sglist(dev, param->iterations, dev->out_pipe,
2178                                &req, sg, param->sglen);
2179                free_sglist(sg, param->sglen);
2180                break;
2181        case 8:
2182                if (dev->in_pipe == 0 || param->sglen == 0 || param->vary == 0)
2183                        break;
2184                dev_info(&intf->dev,
2185                        "TEST 8:  read/%d %d sglists %d entries 0..%d bytes\n",
2186                                param->vary, param->iterations,
2187                                param->sglen, param->length);
2188                sg = alloc_sglist(param->sglen, param->length, param->vary);
2189                if (!sg) {
2190                        retval = -ENOMEM;
2191                        break;
2192                }
2193                /* FIRMWARE:  bulk source (maybe generates short writes) */
2194                retval = perform_sglist(dev, param->iterations, dev->in_pipe,
2195                                &req, sg, param->sglen);
2196                free_sglist(sg, param->sglen);
2197                break;
2198
2199        /* non-queued sanity tests for control (chapter 9 subset) */
2200        case 9:
2201                retval = 0;
2202                dev_info(&intf->dev,
2203                        "TEST 9:  ch9 (subset) control tests, %d times\n",
2204                                param->iterations);
2205                for (i = param->iterations; retval == 0 && i--; /* NOP */)
2206                        retval = ch9_postconfig(dev);
2207                if (retval)
2208                        dev_err(&intf->dev, "ch9 subset failed, "
2209                                        "iterations left %d\n", i);
2210                break;
2211
2212        /* queued control messaging */
2213        case 10:
2214                retval = 0;
2215                dev_info(&intf->dev,
2216                                "TEST 10:  queue %d control calls, %d times\n",
2217                                param->sglen,
2218                                param->iterations);
2219                retval = test_ctrl_queue(dev, param);
2220                break;
2221
2222        /* simple non-queued unlinks (ring with one urb) */
2223        case 11:
2224                if (dev->in_pipe == 0 || !param->length)
2225                        break;
2226                retval = 0;
2227                dev_info(&intf->dev, "TEST 11:  unlink %d reads of %d\n",
2228                                param->iterations, param->length);
2229                for (i = param->iterations; retval == 0 && i--; /* NOP */)
2230                        retval = unlink_simple(dev, dev->in_pipe,
2231                                                param->length);
2232                if (retval)
2233                        dev_err(&intf->dev, "unlink reads failed %d, "
2234                                "iterations left %d\n", retval, i);
2235                break;
2236        case 12:
2237                if (dev->out_pipe == 0 || !param->length)
2238                        break;
2239                retval = 0;
2240                dev_info(&intf->dev, "TEST 12:  unlink %d writes of %d\n",
2241                                param->iterations, param->length);
2242                for (i = param->iterations; retval == 0 && i--; /* NOP */)
2243                        retval = unlink_simple(dev, dev->out_pipe,
2244                                                param->length);
2245                if (retval)
2246                        dev_err(&intf->dev, "unlink writes failed %d, "
2247                                "iterations left %d\n", retval, i);
2248                break;
2249
2250        /* ep halt tests */
2251        case 13:
2252                if (dev->out_pipe == 0 && dev->in_pipe == 0)
2253                        break;
2254                retval = 0;
2255                dev_info(&intf->dev, "TEST 13:  set/clear %d halts\n",
2256                                param->iterations);
2257                for (i = param->iterations; retval == 0 && i--; /* NOP */)
2258                        retval = halt_simple(dev);
2259
2260                if (retval)
2261                        ERROR(dev, "halts failed, iterations left %d\n", i);
2262                break;
2263
2264        /* control write tests */
2265        case 14:
2266                if (!dev->info->ctrl_out)
2267                        break;
2268                dev_info(&intf->dev, "TEST 14:  %d ep0out, %d..%d vary %d\n",
2269                                param->iterations,
2270                                realworld ? 1 : 0, param->length,
2271                                param->vary);
2272                retval = ctrl_out(dev, param->iterations,
2273                                param->length, param->vary, 0);
2274                break;
2275
2276        /* iso write tests */
2277        case 15:
2278                if (dev->out_iso_pipe == 0 || param->sglen == 0)
2279                        break;
2280                dev_info(&intf->dev,
2281                        "TEST 15:  write %d iso, %d entries of %d bytes\n",
2282                                param->iterations,
2283                                param->sglen, param->length);
2284                /* FIRMWARE:  iso sink */
2285                retval = test_iso_queue(dev, param,
2286                                dev->out_iso_pipe, dev->iso_out, 0);
2287                break;
2288
2289        /* iso read tests */
2290        case 16:
2291                if (dev->in_iso_pipe == 0 || param->sglen == 0)
2292                        break;
2293                dev_info(&intf->dev,
2294                        "TEST 16:  read %d iso, %d entries of %d bytes\n",
2295                                param->iterations,
2296                                param->sglen, param->length);
2297                /* FIRMWARE:  iso source */
2298                retval = test_iso_queue(dev, param,
2299                                dev->in_iso_pipe, dev->iso_in, 0);
2300                break;
2301
2302        /* FIXME scatterlist cancel (needs helper thread) */
2303
2304        /* Tests for bulk I/O using DMA mapping by core and odd address */
2305        case 17:
2306                if (dev->out_pipe == 0)
2307                        break;
2308                dev_info(&intf->dev,
2309                        "TEST 17:  write odd addr %d bytes %u times core map\n",
2310                        param->length, param->iterations);
2311
2312                retval = test_unaligned_bulk(
2313                                dev, dev->out_pipe,
2314                                param->length, param->iterations,
2315                                0, "test17");
2316                break;
2317
2318        case 18:
2319                if (dev->in_pipe == 0)
2320                        break;
2321                dev_info(&intf->dev,
2322                        "TEST 18:  read odd addr %d bytes %u times core map\n",
2323                        param->length, param->iterations);
2324
2325                retval = test_unaligned_bulk(
2326                                dev, dev->in_pipe,
2327                                param->length, param->iterations,
2328                                0, "test18");
2329                break;
2330
2331        /* Tests for bulk I/O using premapped coherent buffer and odd address */
2332        case 19:
2333                if (dev->out_pipe == 0)
2334                        break;
2335                dev_info(&intf->dev,
2336                        "TEST 19:  write odd addr %d bytes %u times premapped\n",
2337                        param->length, param->iterations);
2338
2339                retval = test_unaligned_bulk(
2340                                dev, dev->out_pipe,
2341                                param->length, param->iterations,
2342                                URB_NO_TRANSFER_DMA_MAP, "test19");
2343                break;
2344
2345        case 20:
2346                if (dev->in_pipe == 0)
2347                        break;
2348                dev_info(&intf->dev,
2349                        "TEST 20:  read odd addr %d bytes %u times premapped\n",
2350                        param->length, param->iterations);
2351
2352                retval = test_unaligned_bulk(
2353                                dev, dev->in_pipe,
2354                                param->length, param->iterations,
2355                                URB_NO_TRANSFER_DMA_MAP, "test20");
2356                break;
2357
2358        /* control write tests with unaligned buffer */
2359        case 21:
2360                if (!dev->info->ctrl_out)
2361                        break;
2362                dev_info(&intf->dev,
2363                                "TEST 21:  %d ep0out odd addr, %d..%d vary %d\n",
2364                                param->iterations,
2365                                realworld ? 1 : 0, param->length,
2366                                param->vary);
2367                retval = ctrl_out(dev, param->iterations,
2368                                param->length, param->vary, 1);
2369                break;
2370
2371        /* unaligned iso tests */
2372        case 22:
2373                if (dev->out_iso_pipe == 0 || param->sglen == 0)
2374                        break;
2375                dev_info(&intf->dev,
2376                        "TEST 22:  write %d iso odd, %d entries of %d bytes\n",
2377                                param->iterations,
2378                                param->sglen, param->length);
2379                retval = test_iso_queue(dev, param,
2380                                dev->out_iso_pipe, dev->iso_out, 1);
2381                break;
2382
2383        case 23:
2384                if (dev->in_iso_pipe == 0 || param->sglen == 0)
2385                        break;
2386                dev_info(&intf->dev,
2387                        "TEST 23:  read %d iso odd, %d entries of %d bytes\n",
2388                                param->iterations,
2389                                param->sglen, param->length);
2390                retval = test_iso_queue(dev, param,
2391                                dev->in_iso_pipe, dev->iso_in, 1);
2392                break;
2393
2394        /* unlink URBs from a bulk-OUT queue */
2395        case 24:
2396                if (dev->out_pipe == 0 || !param->length || param->sglen < 4)
2397                        break;
2398                retval = 0;
2399                dev_info(&intf->dev, "TEST 24:  unlink from %d queues of "
2400                                "%d %d-byte writes\n",
2401                                param->iterations, param->sglen, param->length);
2402                for (i = param->iterations; retval == 0 && i > 0; --i) {
2403                        retval = unlink_queued(dev, dev->out_pipe,
2404                                                param->sglen, param->length);
2405                        if (retval) {
2406                                dev_err(&intf->dev,
2407                                        "unlink queued writes failed %d, "
2408                                        "iterations left %d\n", retval, i);
2409                                break;
2410                        }
2411                }
2412                break;
2413
2414        }
2415        do_gettimeofday(&param->duration);
2416        param->duration.tv_sec -= start.tv_sec;
2417        param->duration.tv_usec -= start.tv_usec;
2418        if (param->duration.tv_usec < 0) {
2419                param->duration.tv_usec += 1000 * 1000;
2420                param->duration.tv_sec -= 1;
2421        }
2422        mutex_unlock(&dev->lock);
2423        return retval;
2424}
2425
2426/*-------------------------------------------------------------------------*/
2427
2428static unsigned force_interrupt;
2429module_param(force_interrupt, uint, 0);
2430MODULE_PARM_DESC(force_interrupt, "0 = test default; else interrupt");
2431
2432#ifdef  GENERIC
2433static unsigned short vendor;
2434module_param(vendor, ushort, 0);
2435MODULE_PARM_DESC(vendor, "vendor code (from usb-if)");
2436
2437static unsigned short product;
2438module_param(product, ushort, 0);
2439MODULE_PARM_DESC(product, "product code (from vendor)");
2440#endif
2441
2442static int
2443usbtest_probe(struct usb_interface *intf, const struct usb_device_id *id)
2444{
2445        struct usb_device       *udev;
2446        struct usbtest_dev      *dev;
2447        struct usbtest_info     *info;
2448        char                    *rtest, *wtest;
2449        char                    *irtest, *iwtest;
2450
2451        udev = interface_to_usbdev(intf);
2452
2453#ifdef  GENERIC
2454        /* specify devices by module parameters? */
2455        if (id->match_flags == 0) {
2456                /* vendor match required, product match optional */
2457                if (!vendor || le16_to_cpu(udev->descriptor.idVendor) != (u16)vendor)
2458                        return -ENODEV;
2459                if (product && le16_to_cpu(udev->descriptor.idProduct) != (u16)product)
2460                        return -ENODEV;
2461                dev_info(&intf->dev, "matched module params, "
2462                                        "vend=0x%04x prod=0x%04x\n",
2463                                le16_to_cpu(udev->descriptor.idVendor),
2464                                le16_to_cpu(udev->descriptor.idProduct));
2465        }
2466#endif
2467
2468        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
2469        if (!dev)
2470                return -ENOMEM;
2471        info = (struct usbtest_info *) id->driver_info;
2472        dev->info = info;
2473        mutex_init(&dev->lock);
2474
2475        dev->intf = intf;
2476
2477        /* cacheline-aligned scratch for i/o */
2478        dev->buf = kmalloc(TBUF_SIZE, GFP_KERNEL);
2479        if (dev->buf == NULL) {
2480                kfree(dev);
2481                return -ENOMEM;
2482        }
2483
2484        /* NOTE this doesn't yet test the handful of difference that are
2485         * visible with high speed interrupts:  bigger maxpacket (1K) and
2486         * "high bandwidth" modes (up to 3 packets/uframe).
2487         */
2488        rtest = wtest = "";
2489        irtest = iwtest = "";
2490        if (force_interrupt || udev->speed == USB_SPEED_LOW) {
2491                if (info->ep_in) {
2492                        dev->in_pipe = usb_rcvintpipe(udev, info->ep_in);
2493                        rtest = " intr-in";
2494                }
2495                if (info->ep_out) {
2496                        dev->out_pipe = usb_sndintpipe(udev, info->ep_out);
2497                        wtest = " intr-out";
2498                }
2499        } else {
2500                if (override_alt >= 0 || info->autoconf) {
2501                        int status;
2502
2503                        status = get_endpoints(dev, intf);
2504                        if (status < 0) {
2505                                WARNING(dev, "couldn't get endpoints, %d\n",
2506                                                status);
2507                                kfree(dev->buf);
2508                                kfree(dev);
2509                                return status;
2510                        }
2511                        /* may find bulk or ISO pipes */
2512                } else {
2513                        if (info->ep_in)
2514                                dev->in_pipe = usb_rcvbulkpipe(udev,
2515                                                        info->ep_in);
2516                        if (info->ep_out)
2517                                dev->out_pipe = usb_sndbulkpipe(udev,
2518                                                        info->ep_out);
2519                }
2520                if (dev->in_pipe)
2521                        rtest = " bulk-in";
2522                if (dev->out_pipe)
2523                        wtest = " bulk-out";
2524                if (dev->in_iso_pipe)
2525                        irtest = " iso-in";
2526                if (dev->out_iso_pipe)
2527                        iwtest = " iso-out";
2528        }
2529
2530        usb_set_intfdata(intf, dev);
2531        dev_info(&intf->dev, "%s\n", info->name);
2532        dev_info(&intf->dev, "%s {control%s%s%s%s%s} tests%s\n",
2533                        usb_speed_string(udev->speed),
2534                        info->ctrl_out ? " in/out" : "",
2535                        rtest, wtest,
2536                        irtest, iwtest,
2537                        info->alt >= 0 ? " (+alt)" : "");
2538        return 0;
2539}
2540
2541static int usbtest_suspend(struct usb_interface *intf, pm_message_t message)
2542{
2543        return 0;
2544}
2545
2546static int usbtest_resume(struct usb_interface *intf)
2547{
2548        return 0;
2549}
2550
2551
2552static void usbtest_disconnect(struct usb_interface *intf)
2553{
2554        struct usbtest_dev      *dev = usb_get_intfdata(intf);
2555
2556        usb_set_intfdata(intf, NULL);
2557        dev_dbg(&intf->dev, "disconnect\n");
2558        kfree(dev);
2559}
2560
2561/* Basic testing only needs a device that can source or sink bulk traffic.
2562 * Any device can test control transfers (default with GENERIC binding).
2563 *
2564 * Several entries work with the default EP0 implementation that's built
2565 * into EZ-USB chips.  There's a default vendor ID which can be overridden
2566 * by (very) small config EEPROMS, but otherwise all these devices act
2567 * identically until firmware is loaded:  only EP0 works.  It turns out
2568 * to be easy to make other endpoints work, without modifying that EP0
2569 * behavior.  For now, we expect that kind of firmware.
2570 */
2571
2572/* an21xx or fx versions of ez-usb */
2573static struct usbtest_info ez1_info = {
2574        .name           = "EZ-USB device",
2575        .ep_in          = 2,
2576        .ep_out         = 2,
2577        .alt            = 1,
2578};
2579
2580/* fx2 version of ez-usb */
2581static struct usbtest_info ez2_info = {
2582        .name           = "FX2 device",
2583        .ep_in          = 6,
2584        .ep_out         = 2,
2585        .alt            = 1,
2586};
2587
2588/* ezusb family device with dedicated usb test firmware,
2589 */
2590static struct usbtest_info fw_info = {
2591        .name           = "usb test device",
2592        .ep_in          = 2,
2593        .ep_out         = 2,
2594        .alt            = 1,
2595        .autoconf       = 1,            /* iso and ctrl_out need autoconf */
2596        .ctrl_out       = 1,
2597        .iso            = 1,            /* iso_ep's are #8 in/out */
2598};
2599
2600/* peripheral running Linux and 'zero.c' test firmware, or
2601 * its user-mode cousin. different versions of this use
2602 * different hardware with the same vendor/product codes.
2603 * host side MUST rely on the endpoint descriptors.
2604 */
2605static struct usbtest_info gz_info = {
2606        .name           = "Linux gadget zero",
2607        .autoconf       = 1,
2608        .ctrl_out       = 1,
2609        .iso            = 1,
2610        .alt            = 0,
2611};
2612
2613static struct usbtest_info um_info = {
2614        .name           = "Linux user mode test driver",
2615        .autoconf       = 1,
2616        .alt            = -1,
2617};
2618
2619static struct usbtest_info um2_info = {
2620        .name           = "Linux user mode ISO test driver",
2621        .autoconf       = 1,
2622        .iso            = 1,
2623        .alt            = -1,
2624};
2625
2626#ifdef IBOT2
2627/* this is a nice source of high speed bulk data;
2628 * uses an FX2, with firmware provided in the device
2629 */
2630static struct usbtest_info ibot2_info = {
2631        .name           = "iBOT2 webcam",
2632        .ep_in          = 2,
2633        .alt            = -1,
2634};
2635#endif
2636
2637#ifdef GENERIC
2638/* we can use any device to test control traffic */
2639static struct usbtest_info generic_info = {
2640        .name           = "Generic USB device",
2641        .alt            = -1,
2642};
2643#endif
2644
2645
2646static const struct usb_device_id id_table[] = {
2647
2648        /*-------------------------------------------------------------*/
2649
2650        /* EZ-USB devices which download firmware to replace (or in our
2651         * case augment) the default device implementation.
2652         */
2653
2654        /* generic EZ-USB FX controller */
2655        { USB_DEVICE(0x0547, 0x2235),
2656                .driver_info = (unsigned long) &ez1_info,
2657        },
2658
2659        /* CY3671 development board with EZ-USB FX */
2660        { USB_DEVICE(0x0547, 0x0080),
2661                .driver_info = (unsigned long) &ez1_info,
2662        },
2663
2664        /* generic EZ-USB FX2 controller (or development board) */
2665        { USB_DEVICE(0x04b4, 0x8613),
2666                .driver_info = (unsigned long) &ez2_info,
2667        },
2668
2669        /* re-enumerated usb test device firmware */
2670        { USB_DEVICE(0xfff0, 0xfff0),
2671                .driver_info = (unsigned long) &fw_info,
2672        },
2673
2674        /* "Gadget Zero" firmware runs under Linux */
2675        { USB_DEVICE(0x0525, 0xa4a0),
2676                .driver_info = (unsigned long) &gz_info,
2677        },
2678
2679        /* so does a user-mode variant */
2680        { USB_DEVICE(0x0525, 0xa4a4),
2681                .driver_info = (unsigned long) &um_info,
2682        },
2683
2684        /* ... and a user-mode variant that talks iso */
2685        { USB_DEVICE(0x0525, 0xa4a3),
2686                .driver_info = (unsigned long) &um2_info,
2687        },
2688
2689#ifdef KEYSPAN_19Qi
2690        /* Keyspan 19qi uses an21xx (original EZ-USB) */
2691        /* this does not coexist with the real Keyspan 19qi driver! */
2692        { USB_DEVICE(0x06cd, 0x010b),
2693                .driver_info = (unsigned long) &ez1_info,
2694        },
2695#endif
2696
2697        /*-------------------------------------------------------------*/
2698
2699#ifdef IBOT2
2700        /* iBOT2 makes a nice source of high speed bulk-in data */
2701        /* this does not coexist with a real iBOT2 driver! */
2702        { USB_DEVICE(0x0b62, 0x0059),
2703                .driver_info = (unsigned long) &ibot2_info,
2704        },
2705#endif
2706
2707        /*-------------------------------------------------------------*/
2708
2709#ifdef GENERIC
2710        /* module params can specify devices to use for control tests */
2711        { .driver_info = (unsigned long) &generic_info, },
2712#endif
2713
2714        /*-------------------------------------------------------------*/
2715
2716        { }
2717};
2718MODULE_DEVICE_TABLE(usb, id_table);
2719
2720static struct usb_driver usbtest_driver = {
2721        .name =         "usbtest",
2722        .id_table =     id_table,
2723        .probe =        usbtest_probe,
2724        .unlocked_ioctl = usbtest_ioctl,
2725        .disconnect =   usbtest_disconnect,
2726        .suspend =      usbtest_suspend,
2727        .resume =       usbtest_resume,
2728};
2729
2730/*-------------------------------------------------------------------------*/
2731
2732static int __init usbtest_init(void)
2733{
2734#ifdef GENERIC
2735        if (vendor)
2736                pr_debug("params: vend=0x%04x prod=0x%04x\n", vendor, product);
2737#endif
2738        return usb_register(&usbtest_driver);
2739}
2740module_init(usbtest_init);
2741
2742static void __exit usbtest_exit(void)
2743{
2744        usb_deregister(&usbtest_driver);
2745}
2746module_exit(usbtest_exit);
2747
2748MODULE_DESCRIPTION("USB Core/HCD Testing Driver");
2749MODULE_LICENSE("GPL");
2750
2751