Version:  2.0.40 2.2.26 2.4.37 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17

Linux/drivers/usb/misc/usbtest.c

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

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us