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