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