xref: /freebsd/sys/dev/usb/usb_request.c (revision eb581844e4339a481b679f315bd1cc8da837555e)
1 /* $FreeBSD$ */
2 /*-
3  * Copyright (c) 1998 The NetBSD Foundation, Inc. All rights reserved.
4  * Copyright (c) 1998 Lennart Augustsson. All rights reserved.
5  * Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  */
28 
29 #include <sys/stdint.h>
30 #include <sys/stddef.h>
31 #include <sys/param.h>
32 #include <sys/queue.h>
33 #include <sys/types.h>
34 #include <sys/systm.h>
35 #include <sys/kernel.h>
36 #include <sys/bus.h>
37 #include <sys/linker_set.h>
38 #include <sys/module.h>
39 #include <sys/lock.h>
40 #include <sys/mutex.h>
41 #include <sys/condvar.h>
42 #include <sys/sysctl.h>
43 #include <sys/sx.h>
44 #include <sys/unistd.h>
45 #include <sys/callout.h>
46 #include <sys/malloc.h>
47 #include <sys/priv.h>
48 
49 #include <dev/usb/usb.h>
50 #include <dev/usb/usbdi.h>
51 #include <dev/usb/usbdi_util.h>
52 #include <dev/usb/usb_ioctl.h>
53 #include <dev/usb/usbhid.h>
54 
55 #define	USB_DEBUG_VAR usb_debug
56 
57 #include <dev/usb/usb_core.h>
58 #include <dev/usb/usb_busdma.h>
59 #include <dev/usb/usb_request.h>
60 #include <dev/usb/usb_process.h>
61 #include <dev/usb/usb_transfer.h>
62 #include <dev/usb/usb_debug.h>
63 #include <dev/usb/usb_device.h>
64 #include <dev/usb/usb_util.h>
65 #include <dev/usb/usb_dynamic.h>
66 
67 #include <dev/usb/usb_controller.h>
68 #include <dev/usb/usb_bus.h>
69 #include <sys/ctype.h>
70 
71 #ifdef USB_DEBUG
72 static int usb_pr_poll_delay = USB_PORT_RESET_DELAY;
73 static int usb_pr_recovery_delay = USB_PORT_RESET_RECOVERY;
74 
75 SYSCTL_INT(_hw_usb, OID_AUTO, pr_poll_delay, CTLFLAG_RW,
76     &usb_pr_poll_delay, 0, "USB port reset poll delay in ms");
77 SYSCTL_INT(_hw_usb, OID_AUTO, pr_recovery_delay, CTLFLAG_RW,
78     &usb_pr_recovery_delay, 0, "USB port reset recovery delay in ms");
79 
80 #ifdef USB_REQ_DEBUG
81 /* The following structures are used in connection to fault injection. */
82 struct usb_ctrl_debug {
83 	int bus_index;		/* target bus */
84 	int dev_index;		/* target address */
85 	int ds_fail;		/* fail data stage */
86 	int ss_fail;		/* fail data stage */
87 	int ds_delay;		/* data stage delay in ms */
88 	int ss_delay;		/* status stage delay in ms */
89 	int bmRequestType_value;
90 	int bRequest_value;
91 };
92 
93 struct usb_ctrl_debug_bits {
94 	uint16_t ds_delay;
95 	uint16_t ss_delay;
96 	uint8_t ds_fail:1;
97 	uint8_t ss_fail:1;
98 	uint8_t enabled:1;
99 };
100 
101 /* The default is to disable fault injection. */
102 
103 static struct usb_ctrl_debug usb_ctrl_debug = {
104 	.bus_index = -1,
105 	.dev_index = -1,
106 	.bmRequestType_value = -1,
107 	.bRequest_value = -1,
108 };
109 
110 SYSCTL_INT(_hw_usb, OID_AUTO, ctrl_bus_fail, CTLFLAG_RW,
111     &usb_ctrl_debug.bus_index, 0, "USB controller index to fail");
112 SYSCTL_INT(_hw_usb, OID_AUTO, ctrl_dev_fail, CTLFLAG_RW,
113     &usb_ctrl_debug.dev_index, 0, "USB device address to fail");
114 SYSCTL_INT(_hw_usb, OID_AUTO, ctrl_ds_fail, CTLFLAG_RW,
115     &usb_ctrl_debug.ds_fail, 0, "USB fail data stage");
116 SYSCTL_INT(_hw_usb, OID_AUTO, ctrl_ss_fail, CTLFLAG_RW,
117     &usb_ctrl_debug.ss_fail, 0, "USB fail status stage");
118 SYSCTL_INT(_hw_usb, OID_AUTO, ctrl_ds_delay, CTLFLAG_RW,
119     &usb_ctrl_debug.ds_delay, 0, "USB data stage delay in ms");
120 SYSCTL_INT(_hw_usb, OID_AUTO, ctrl_ss_delay, CTLFLAG_RW,
121     &usb_ctrl_debug.ss_delay, 0, "USB status stage delay in ms");
122 SYSCTL_INT(_hw_usb, OID_AUTO, ctrl_rt_fail, CTLFLAG_RW,
123     &usb_ctrl_debug.bmRequestType_value, 0, "USB bmRequestType to fail");
124 SYSCTL_INT(_hw_usb, OID_AUTO, ctrl_rv_fail, CTLFLAG_RW,
125     &usb_ctrl_debug.bRequest_value, 0, "USB bRequest to fail");
126 
127 /*------------------------------------------------------------------------*
128  *	usbd_get_debug_bits
129  *
130  * This function is only useful in USB host mode.
131  *------------------------------------------------------------------------*/
132 static void
133 usbd_get_debug_bits(struct usb_device *udev, struct usb_device_request *req,
134     struct usb_ctrl_debug_bits *dbg)
135 {
136 	int temp;
137 
138 	memset(dbg, 0, sizeof(*dbg));
139 
140 	/* Compute data stage delay */
141 
142 	temp = usb_ctrl_debug.ds_delay;
143 	if (temp < 0)
144 		temp = 0;
145 	else if (temp > (16*1024))
146 		temp = (16*1024);
147 
148 	dbg->ds_delay = temp;
149 
150 	/* Compute status stage delay */
151 
152 	temp = usb_ctrl_debug.ss_delay;
153 	if (temp < 0)
154 		temp = 0;
155 	else if (temp > (16*1024))
156 		temp = (16*1024);
157 
158 	dbg->ss_delay = temp;
159 
160 	/* Check if this control request should be failed */
161 
162 	if (usbd_get_bus_index(udev) != usb_ctrl_debug.bus_index)
163 		return;
164 
165 	if (usbd_get_device_index(udev) != usb_ctrl_debug.dev_index)
166 		return;
167 
168 	temp = usb_ctrl_debug.bmRequestType_value;
169 
170 	if ((temp != req->bmRequestType) && (temp >= 0) && (temp <= 255))
171 		return;
172 
173 	temp = usb_ctrl_debug.bRequest_value;
174 
175 	if ((temp != req->bRequest) && (temp >= 0) && (temp <= 255))
176 		return;
177 
178 	temp = usb_ctrl_debug.ds_fail;
179 	if (temp)
180 		dbg->ds_fail = 1;
181 
182 	temp = usb_ctrl_debug.ss_fail;
183 	if (temp)
184 		dbg->ss_fail = 1;
185 
186 	dbg->enabled = 1;
187 }
188 #endif	/* USB_REQ_DEBUG */
189 #endif	/* USB_DEBUG */
190 
191 /*------------------------------------------------------------------------*
192  *	usbd_do_request_callback
193  *
194  * This function is the USB callback for generic USB Host control
195  * transfers.
196  *------------------------------------------------------------------------*/
197 void
198 usbd_do_request_callback(struct usb_xfer *xfer, usb_error_t error)
199 {
200 	;				/* workaround for a bug in "indent" */
201 
202 	DPRINTF("st=%u\n", USB_GET_STATE(xfer));
203 
204 	switch (USB_GET_STATE(xfer)) {
205 	case USB_ST_SETUP:
206 		usbd_transfer_submit(xfer);
207 		break;
208 	default:
209 		cv_signal(&xfer->xroot->udev->ctrlreq_cv);
210 		break;
211 	}
212 }
213 
214 /*------------------------------------------------------------------------*
215  *	usb_do_clear_stall_callback
216  *
217  * This function is the USB callback for generic clear stall requests.
218  *------------------------------------------------------------------------*/
219 void
220 usb_do_clear_stall_callback(struct usb_xfer *xfer, usb_error_t error)
221 {
222 	struct usb_device_request req;
223 	struct usb_device *udev;
224 	struct usb_endpoint *ep;
225 	struct usb_endpoint *ep_end;
226 	struct usb_endpoint *ep_first;
227 	uint8_t to;
228 
229 	udev = xfer->xroot->udev;
230 
231 	USB_BUS_LOCK(udev->bus);
232 
233 	/* round robin endpoint clear stall */
234 
235 	ep = udev->ep_curr;
236 	ep_end = udev->endpoints + udev->endpoints_max;
237 	ep_first = udev->endpoints;
238 	to = udev->endpoints_max;
239 
240 	switch (USB_GET_STATE(xfer)) {
241 	case USB_ST_TRANSFERRED:
242 		if (ep == NULL)
243 			goto tr_setup;		/* device was unconfigured */
244 		if (ep->edesc &&
245 		    ep->is_stalled) {
246 			ep->toggle_next = 0;
247 			ep->is_stalled = 0;
248 			/* some hardware needs a callback to clear the data toggle */
249 			usbd_clear_stall_locked(udev, ep);
250 			/* start up the current or next transfer, if any */
251 			usb_command_wrapper(&ep->endpoint_q,
252 			    ep->endpoint_q.curr);
253 		}
254 		ep++;
255 
256 	case USB_ST_SETUP:
257 tr_setup:
258 		if (to == 0)
259 			break;			/* no endpoints - nothing to do */
260 		if ((ep < ep_first) || (ep >= ep_end))
261 			ep = ep_first;	/* endpoint wrapped around */
262 		if (ep->edesc &&
263 		    ep->is_stalled) {
264 
265 			/* setup a clear-stall packet */
266 
267 			req.bmRequestType = UT_WRITE_ENDPOINT;
268 			req.bRequest = UR_CLEAR_FEATURE;
269 			USETW(req.wValue, UF_ENDPOINT_HALT);
270 			req.wIndex[0] = ep->edesc->bEndpointAddress;
271 			req.wIndex[1] = 0;
272 			USETW(req.wLength, 0);
273 
274 			/* copy in the transfer */
275 
276 			usbd_copy_in(xfer->frbuffers, 0, &req, sizeof(req));
277 
278 			/* set length */
279 			usbd_xfer_set_frame_len(xfer, 0, sizeof(req));
280 			xfer->nframes = 1;
281 			USB_BUS_UNLOCK(udev->bus);
282 
283 			usbd_transfer_submit(xfer);
284 
285 			USB_BUS_LOCK(udev->bus);
286 			break;
287 		}
288 		ep++;
289 		to--;
290 		goto tr_setup;
291 
292 	default:
293 		if (xfer->error == USB_ERR_CANCELLED) {
294 			break;
295 		}
296 		goto tr_setup;
297 	}
298 
299 	/* store current endpoint */
300 	udev->ep_curr = ep;
301 	USB_BUS_UNLOCK(udev->bus);
302 }
303 
304 static usb_handle_req_t *
305 usbd_get_hr_func(struct usb_device *udev)
306 {
307 	/* figure out if there is a Handle Request function */
308 	if (udev->flags.usb_mode == USB_MODE_DEVICE)
309 		return (usb_temp_get_desc_p);
310 	else if (udev->parent_hub == NULL)
311 		return (udev->bus->methods->roothub_exec);
312 	else
313 		return (NULL);
314 }
315 
316 /*------------------------------------------------------------------------*
317  *	usbd_do_request_flags and usbd_do_request
318  *
319  * Description of arguments passed to these functions:
320  *
321  * "udev" - this is the "usb_device" structure pointer on which the
322  * request should be performed. It is possible to call this function
323  * in both Host Side mode and Device Side mode.
324  *
325  * "mtx" - if this argument is non-NULL the mutex pointed to by it
326  * will get dropped and picked up during the execution of this
327  * function, hence this function sometimes needs to sleep. If this
328  * argument is NULL it has no effect.
329  *
330  * "req" - this argument must always be non-NULL and points to an
331  * 8-byte structure holding the USB request to be done. The USB
332  * request structure has a bit telling the direction of the USB
333  * request, if it is a read or a write.
334  *
335  * "data" - if the "wLength" part of the structure pointed to by "req"
336  * is non-zero this argument must point to a valid kernel buffer which
337  * can hold at least "wLength" bytes. If "wLength" is zero "data" can
338  * be NULL.
339  *
340  * "flags" - here is a list of valid flags:
341  *
342  *  o USB_SHORT_XFER_OK: allows the data transfer to be shorter than
343  *  specified
344  *
345  *  o USB_DELAY_STATUS_STAGE: allows the status stage to be performed
346  *  at a later point in time. This is tunable by the "hw.usb.ss_delay"
347  *  sysctl. This flag is mostly useful for debugging.
348  *
349  *  o USB_USER_DATA_PTR: treat the "data" pointer like a userland
350  *  pointer.
351  *
352  * "actlen" - if non-NULL the actual transfer length will be stored in
353  * the 16-bit unsigned integer pointed to by "actlen". This
354  * information is mostly useful when the "USB_SHORT_XFER_OK" flag is
355  * used.
356  *
357  * "timeout" - gives the timeout for the control transfer in
358  * milliseconds. A "timeout" value less than 50 milliseconds is
359  * treated like a 50 millisecond timeout. A "timeout" value greater
360  * than 30 seconds is treated like a 30 second timeout. This USB stack
361  * does not allow control requests without a timeout.
362  *
363  * NOTE: This function is thread safe. All calls to
364  * "usbd_do_request_flags" will be serialised by the use of an
365  * internal "sx_lock".
366  *
367  * Returns:
368  *    0: Success
369  * Else: Failure
370  *------------------------------------------------------------------------*/
371 usb_error_t
372 usbd_do_request_flags(struct usb_device *udev, struct mtx *mtx,
373     struct usb_device_request *req, void *data, uint16_t flags,
374     uint16_t *actlen, usb_timeout_t timeout)
375 {
376 #ifdef USB_REQ_DEBUG
377 	struct usb_ctrl_debug_bits dbg;
378 #endif
379 	usb_handle_req_t *hr_func;
380 	struct usb_xfer *xfer;
381 	const void *desc;
382 	int err = 0;
383 	usb_ticks_t start_ticks;
384 	usb_ticks_t delta_ticks;
385 	usb_ticks_t max_ticks;
386 	uint16_t length;
387 	uint16_t temp;
388 	uint16_t acttemp;
389 	uint8_t enum_locked;
390 
391 	if (timeout < 50) {
392 		/* timeout is too small */
393 		timeout = 50;
394 	}
395 	if (timeout > 30000) {
396 		/* timeout is too big */
397 		timeout = 30000;
398 	}
399 	length = UGETW(req->wLength);
400 
401 	enum_locked = usbd_enum_is_locked(udev);
402 
403 	DPRINTFN(5, "udev=%p bmRequestType=0x%02x bRequest=0x%02x "
404 	    "wValue=0x%02x%02x wIndex=0x%02x%02x wLength=0x%02x%02x\n",
405 	    udev, req->bmRequestType, req->bRequest,
406 	    req->wValue[1], req->wValue[0],
407 	    req->wIndex[1], req->wIndex[0],
408 	    req->wLength[1], req->wLength[0]);
409 
410 	/* Check if the device is still alive */
411 	if (udev->state < USB_STATE_POWERED) {
412 		DPRINTF("usb device has gone\n");
413 		return (USB_ERR_NOT_CONFIGURED);
414 	}
415 
416 	/*
417 	 * Set "actlen" to a known value in case the caller does not
418 	 * check the return value:
419 	 */
420 	if (actlen)
421 		*actlen = 0;
422 
423 #if (USB_HAVE_USER_IO == 0)
424 	if (flags & USB_USER_DATA_PTR)
425 		return (USB_ERR_INVAL);
426 #endif
427 	if ((mtx != NULL) && (mtx != &Giant)) {
428 		mtx_unlock(mtx);
429 		mtx_assert(mtx, MA_NOTOWNED);
430 	}
431 
432 	/*
433 	 * We need to allow suspend and resume at this point, else the
434 	 * control transfer will timeout if the device is suspended!
435 	 */
436 	if (enum_locked)
437 		usbd_sr_unlock(udev);
438 
439 	/*
440 	 * Grab the default sx-lock so that serialisation
441 	 * is achieved when multiple threads are involved:
442 	 */
443 	sx_xlock(&udev->ctrl_sx);
444 
445 	hr_func = usbd_get_hr_func(udev);
446 
447 	if (hr_func != NULL) {
448 		DPRINTF("Handle Request function is set\n");
449 
450 		desc = NULL;
451 		temp = 0;
452 
453 		if (!(req->bmRequestType & UT_READ)) {
454 			if (length != 0) {
455 				DPRINTFN(1, "The handle request function "
456 				    "does not support writing data!\n");
457 				err = USB_ERR_INVAL;
458 				goto done;
459 			}
460 		}
461 
462 		/* The root HUB code needs the BUS lock locked */
463 
464 		USB_BUS_LOCK(udev->bus);
465 		err = (hr_func) (udev, req, &desc, &temp);
466 		USB_BUS_UNLOCK(udev->bus);
467 
468 		if (err)
469 			goto done;
470 
471 		if (length > temp) {
472 			if (!(flags & USB_SHORT_XFER_OK)) {
473 				err = USB_ERR_SHORT_XFER;
474 				goto done;
475 			}
476 			length = temp;
477 		}
478 		if (actlen)
479 			*actlen = length;
480 
481 		if (length > 0) {
482 #if USB_HAVE_USER_IO
483 			if (flags & USB_USER_DATA_PTR) {
484 				if (copyout(desc, data, length)) {
485 					err = USB_ERR_INVAL;
486 					goto done;
487 				}
488 			} else
489 #endif
490 				bcopy(desc, data, length);
491 		}
492 		goto done;		/* success */
493 	}
494 
495 	/*
496 	 * Setup a new USB transfer or use the existing one, if any:
497 	 */
498 	usbd_ctrl_transfer_setup(udev);
499 
500 	xfer = udev->ctrl_xfer[0];
501 	if (xfer == NULL) {
502 		/* most likely out of memory */
503 		err = USB_ERR_NOMEM;
504 		goto done;
505 	}
506 
507 #ifdef USB_REQ_DEBUG
508 	/* Get debug bits */
509 	usbd_get_debug_bits(udev, req, &dbg);
510 
511 	/* Check for fault injection */
512 	if (dbg.enabled)
513 		flags |= USB_DELAY_STATUS_STAGE;
514 #endif
515 	USB_XFER_LOCK(xfer);
516 
517 	if (flags & USB_DELAY_STATUS_STAGE)
518 		xfer->flags.manual_status = 1;
519 	else
520 		xfer->flags.manual_status = 0;
521 
522 	if (flags & USB_SHORT_XFER_OK)
523 		xfer->flags.short_xfer_ok = 1;
524 	else
525 		xfer->flags.short_xfer_ok = 0;
526 
527 	xfer->timeout = timeout;
528 
529 	start_ticks = ticks;
530 
531 	max_ticks = USB_MS_TO_TICKS(timeout);
532 
533 	usbd_copy_in(xfer->frbuffers, 0, req, sizeof(*req));
534 
535 	usbd_xfer_set_frame_len(xfer, 0, sizeof(*req));
536 
537 	while (1) {
538 		temp = length;
539 		if (temp > usbd_xfer_max_len(xfer)) {
540 			temp = usbd_xfer_max_len(xfer);
541 		}
542 #ifdef USB_REQ_DEBUG
543 		if (xfer->flags.manual_status) {
544 			if (usbd_xfer_frame_len(xfer, 0) != 0) {
545 				/* Execute data stage separately */
546 				temp = 0;
547 			} else if (temp > 0) {
548 				if (dbg.ds_fail) {
549 					err = USB_ERR_INVAL;
550 					break;
551 				}
552 				if (dbg.ds_delay > 0) {
553 					usb_pause_mtx(
554 					    xfer->xroot->xfer_mtx,
555 				            USB_MS_TO_TICKS(dbg.ds_delay));
556 					/* make sure we don't time out */
557 					start_ticks = ticks;
558 				}
559 			}
560 		}
561 #endif
562 		usbd_xfer_set_frame_len(xfer, 1, temp);
563 
564 		if (temp > 0) {
565 			if (!(req->bmRequestType & UT_READ)) {
566 #if USB_HAVE_USER_IO
567 				if (flags & USB_USER_DATA_PTR) {
568 					USB_XFER_UNLOCK(xfer);
569 					err = usbd_copy_in_user(xfer->frbuffers + 1,
570 					    0, data, temp);
571 					USB_XFER_LOCK(xfer);
572 					if (err) {
573 						err = USB_ERR_INVAL;
574 						break;
575 					}
576 				} else
577 #endif
578 					usbd_copy_in(xfer->frbuffers + 1,
579 					    0, data, temp);
580 			}
581 			usbd_xfer_set_frames(xfer, 2);
582 		} else {
583 			if (usbd_xfer_frame_len(xfer, 0) == 0) {
584 				if (xfer->flags.manual_status) {
585 #ifdef USB_REQ_DEBUG
586 					if (dbg.ss_fail) {
587 						err = USB_ERR_INVAL;
588 						break;
589 					}
590 					if (dbg.ss_delay > 0) {
591 						usb_pause_mtx(
592 						    xfer->xroot->xfer_mtx,
593 						    USB_MS_TO_TICKS(dbg.ss_delay));
594 						/* make sure we don't time out */
595 						start_ticks = ticks;
596 					}
597 #endif
598 					xfer->flags.manual_status = 0;
599 				} else {
600 					break;
601 				}
602 			}
603 			usbd_xfer_set_frames(xfer, 1);
604 		}
605 
606 		usbd_transfer_start(xfer);
607 
608 		while (usbd_transfer_pending(xfer)) {
609 			cv_wait(&udev->ctrlreq_cv,
610 			    xfer->xroot->xfer_mtx);
611 		}
612 
613 		err = xfer->error;
614 
615 		if (err) {
616 			break;
617 		}
618 
619 		/* get actual length of DATA stage */
620 
621 		if (xfer->aframes < 2) {
622 			acttemp = 0;
623 		} else {
624 			acttemp = usbd_xfer_frame_len(xfer, 1);
625 		}
626 
627 		/* check for short packet */
628 
629 		if (temp > acttemp) {
630 			temp = acttemp;
631 			length = temp;
632 		}
633 		if (temp > 0) {
634 			if (req->bmRequestType & UT_READ) {
635 #if USB_HAVE_USER_IO
636 				if (flags & USB_USER_DATA_PTR) {
637 					USB_XFER_UNLOCK(xfer);
638 					err = usbd_copy_out_user(xfer->frbuffers + 1,
639 					    0, data, temp);
640 					USB_XFER_LOCK(xfer);
641 					if (err) {
642 						err = USB_ERR_INVAL;
643 						break;
644 					}
645 				} else
646 #endif
647 					usbd_copy_out(xfer->frbuffers + 1,
648 					    0, data, temp);
649 			}
650 		}
651 		/*
652 		 * Clear "frlengths[0]" so that we don't send the setup
653 		 * packet again:
654 		 */
655 		usbd_xfer_set_frame_len(xfer, 0, 0);
656 
657 		/* update length and data pointer */
658 		length -= temp;
659 		data = USB_ADD_BYTES(data, temp);
660 
661 		if (actlen) {
662 			(*actlen) += temp;
663 		}
664 		/* check for timeout */
665 
666 		delta_ticks = ticks - start_ticks;
667 		if (delta_ticks > max_ticks) {
668 			if (!err) {
669 				err = USB_ERR_TIMEOUT;
670 			}
671 		}
672 		if (err) {
673 			break;
674 		}
675 	}
676 
677 	if (err) {
678 		/*
679 		 * Make sure that the control endpoint is no longer
680 		 * blocked in case of a non-transfer related error:
681 		 */
682 		usbd_transfer_stop(xfer);
683 	}
684 	USB_XFER_UNLOCK(xfer);
685 
686 done:
687 	sx_xunlock(&udev->ctrl_sx);
688 
689 	if (enum_locked)
690 		usbd_sr_lock(udev);
691 
692 	if ((mtx != NULL) && (mtx != &Giant))
693 		mtx_lock(mtx);
694 
695 	return ((usb_error_t)err);
696 }
697 
698 /*------------------------------------------------------------------------*
699  *	usbd_do_request_proc - factored out code
700  *
701  * This function is factored out code. It does basically the same like
702  * usbd_do_request_flags, except it will check the status of the
703  * passed process argument before doing the USB request. If the
704  * process is draining the USB_ERR_IOERROR code will be returned. It
705  * is assumed that the mutex associated with the process is locked
706  * when calling this function.
707  *------------------------------------------------------------------------*/
708 usb_error_t
709 usbd_do_request_proc(struct usb_device *udev, struct usb_process *pproc,
710     struct usb_device_request *req, void *data, uint16_t flags,
711     uint16_t *actlen, usb_timeout_t timeout)
712 {
713 	usb_error_t err;
714 	uint16_t len;
715 
716 	/* get request data length */
717 	len = UGETW(req->wLength);
718 
719 	/* check if the device is being detached */
720 	if (usb_proc_is_gone(pproc)) {
721 		err = USB_ERR_IOERROR;
722 		goto done;
723 	}
724 
725 	/* forward the USB request */
726 	err = usbd_do_request_flags(udev, pproc->up_mtx,
727 	    req, data, flags, actlen, timeout);
728 
729 done:
730 	/* on failure we zero the data */
731 	/* on short packet we zero the unused data */
732 	if ((len != 0) && (req->bmRequestType & UE_DIR_IN)) {
733 		if (err)
734 			memset(data, 0, len);
735 		else if (actlen && *actlen != len)
736 			memset(((uint8_t *)data) + *actlen, 0, len - *actlen);
737 	}
738 	return (err);
739 }
740 
741 /*------------------------------------------------------------------------*
742  *	usbd_req_reset_port
743  *
744  * This function will instruct a USB HUB to perform a reset sequence
745  * on the specified port number.
746  *
747  * Returns:
748  *    0: Success. The USB device should now be at address zero.
749  * Else: Failure. No USB device is present and the USB port should be
750  *       disabled.
751  *------------------------------------------------------------------------*/
752 usb_error_t
753 usbd_req_reset_port(struct usb_device *udev, struct mtx *mtx, uint8_t port)
754 {
755 	struct usb_port_status ps;
756 	usb_error_t err;
757 	uint16_t n;
758 
759 #ifdef USB_DEBUG
760 	uint16_t pr_poll_delay;
761 	uint16_t pr_recovery_delay;
762 
763 #endif
764 	err = usbd_req_set_port_feature(udev, mtx, port, UHF_PORT_RESET);
765 	if (err) {
766 		goto done;
767 	}
768 #ifdef USB_DEBUG
769 	/* range check input parameters */
770 	pr_poll_delay = usb_pr_poll_delay;
771 	if (pr_poll_delay < 1) {
772 		pr_poll_delay = 1;
773 	} else if (pr_poll_delay > 1000) {
774 		pr_poll_delay = 1000;
775 	}
776 	pr_recovery_delay = usb_pr_recovery_delay;
777 	if (pr_recovery_delay > 1000) {
778 		pr_recovery_delay = 1000;
779 	}
780 #endif
781 	n = 0;
782 	while (1) {
783 #ifdef USB_DEBUG
784 		/* wait for the device to recover from reset */
785 		usb_pause_mtx(mtx, USB_MS_TO_TICKS(pr_poll_delay));
786 		n += pr_poll_delay;
787 #else
788 		/* wait for the device to recover from reset */
789 		usb_pause_mtx(mtx, USB_MS_TO_TICKS(USB_PORT_RESET_DELAY));
790 		n += USB_PORT_RESET_DELAY;
791 #endif
792 		err = usbd_req_get_port_status(udev, mtx, &ps, port);
793 		if (err) {
794 			goto done;
795 		}
796 		/* check if reset is complete */
797 		if (UGETW(ps.wPortChange) & UPS_C_PORT_RESET) {
798 			break;
799 		}
800 		/* check for timeout */
801 		if (n > 1000) {
802 			n = 0;
803 			break;
804 		}
805 	}
806 
807 	/* clear port reset first */
808 	err = usbd_req_clear_port_feature(
809 	    udev, mtx, port, UHF_C_PORT_RESET);
810 	if (err) {
811 		goto done;
812 	}
813 	/* check for timeout */
814 	if (n == 0) {
815 		err = USB_ERR_TIMEOUT;
816 		goto done;
817 	}
818 #ifdef USB_DEBUG
819 	/* wait for the device to recover from reset */
820 	usb_pause_mtx(mtx, USB_MS_TO_TICKS(pr_recovery_delay));
821 #else
822 	/* wait for the device to recover from reset */
823 	usb_pause_mtx(mtx, USB_MS_TO_TICKS(USB_PORT_RESET_RECOVERY));
824 #endif
825 
826 done:
827 	DPRINTFN(2, "port %d reset returning error=%s\n",
828 	    port, usbd_errstr(err));
829 	return (err);
830 }
831 
832 /*------------------------------------------------------------------------*
833  *	usbd_req_warm_reset_port
834  *
835  * This function will instruct an USB HUB to perform a warm reset
836  * sequence on the specified port number. This kind of reset is not
837  * mandatory for LOW-, FULL- and HIGH-speed USB HUBs and is targeted
838  * for SUPER-speed USB HUBs.
839  *
840  * Returns:
841  *    0: Success. The USB device should now be available again.
842  * Else: Failure. No USB device is present and the USB port should be
843  *       disabled.
844  *------------------------------------------------------------------------*/
845 usb_error_t
846 usbd_req_warm_reset_port(struct usb_device *udev, struct mtx *mtx, uint8_t port)
847 {
848 	struct usb_port_status ps;
849 	usb_error_t err;
850 	uint16_t n;
851 
852 #ifdef USB_DEBUG
853 	uint16_t pr_poll_delay;
854 	uint16_t pr_recovery_delay;
855 
856 #endif
857 	err = usbd_req_set_port_feature(udev, mtx, port, UHF_BH_PORT_RESET);
858 	if (err) {
859 		goto done;
860 	}
861 #ifdef USB_DEBUG
862 	/* range check input parameters */
863 	pr_poll_delay = usb_pr_poll_delay;
864 	if (pr_poll_delay < 1) {
865 		pr_poll_delay = 1;
866 	} else if (pr_poll_delay > 1000) {
867 		pr_poll_delay = 1000;
868 	}
869 	pr_recovery_delay = usb_pr_recovery_delay;
870 	if (pr_recovery_delay > 1000) {
871 		pr_recovery_delay = 1000;
872 	}
873 #endif
874 	n = 0;
875 	while (1) {
876 #ifdef USB_DEBUG
877 		/* wait for the device to recover from reset */
878 		usb_pause_mtx(mtx, USB_MS_TO_TICKS(pr_poll_delay));
879 		n += pr_poll_delay;
880 #else
881 		/* wait for the device to recover from reset */
882 		usb_pause_mtx(mtx, USB_MS_TO_TICKS(USB_PORT_RESET_DELAY));
883 		n += USB_PORT_RESET_DELAY;
884 #endif
885 		err = usbd_req_get_port_status(udev, mtx, &ps, port);
886 		if (err) {
887 			goto done;
888 		}
889 		/* if the device disappeared, just give up */
890 		if (!(UGETW(ps.wPortStatus) & UPS_CURRENT_CONNECT_STATUS)) {
891 			goto done;
892 		}
893 		/* check if reset is complete */
894 		if (UGETW(ps.wPortChange) & UPS_C_BH_PORT_RESET) {
895 			break;
896 		}
897 		/* check for timeout */
898 		if (n > 1000) {
899 			n = 0;
900 			break;
901 		}
902 	}
903 
904 	/* clear port reset first */
905 	err = usbd_req_clear_port_feature(
906 	    udev, mtx, port, UHF_C_BH_PORT_RESET);
907 	if (err) {
908 		goto done;
909 	}
910 	/* check for timeout */
911 	if (n == 0) {
912 		err = USB_ERR_TIMEOUT;
913 		goto done;
914 	}
915 #ifdef USB_DEBUG
916 	/* wait for the device to recover from reset */
917 	usb_pause_mtx(mtx, USB_MS_TO_TICKS(pr_recovery_delay));
918 #else
919 	/* wait for the device to recover from reset */
920 	usb_pause_mtx(mtx, USB_MS_TO_TICKS(USB_PORT_RESET_RECOVERY));
921 #endif
922 
923 done:
924 	DPRINTFN(2, "port %d warm reset returning error=%s\n",
925 	    port, usbd_errstr(err));
926 	return (err);
927 }
928 
929 /*------------------------------------------------------------------------*
930  *	usbd_req_get_desc
931  *
932  * This function can be used to retrieve USB descriptors. It contains
933  * some additional logic like zeroing of missing descriptor bytes and
934  * retrying an USB descriptor in case of failure. The "min_len"
935  * argument specifies the minimum descriptor length. The "max_len"
936  * argument specifies the maximum descriptor length. If the real
937  * descriptor length is less than the minimum length the missing
938  * byte(s) will be zeroed. The type field, the second byte of the USB
939  * descriptor, will get forced to the correct type. If the "actlen"
940  * pointer is non-NULL, the actual length of the transfer will get
941  * stored in the 16-bit unsigned integer which it is pointing to. The
942  * first byte of the descriptor will not get updated. If the "actlen"
943  * pointer is NULL the first byte of the descriptor will get updated
944  * to reflect the actual length instead. If "min_len" is not equal to
945  * "max_len" then this function will try to retrive the beginning of
946  * the descriptor and base the maximum length on the first byte of the
947  * descriptor.
948  *
949  * Returns:
950  *    0: Success
951  * Else: Failure
952  *------------------------------------------------------------------------*/
953 usb_error_t
954 usbd_req_get_desc(struct usb_device *udev,
955     struct mtx *mtx, uint16_t *actlen, void *desc,
956     uint16_t min_len, uint16_t max_len,
957     uint16_t id, uint8_t type, uint8_t index,
958     uint8_t retries)
959 {
960 	struct usb_device_request req;
961 	uint8_t *buf;
962 	usb_error_t err;
963 
964 	DPRINTFN(4, "id=%d, type=%d, index=%d, max_len=%d\n",
965 	    id, type, index, max_len);
966 
967 	req.bmRequestType = UT_READ_DEVICE;
968 	req.bRequest = UR_GET_DESCRIPTOR;
969 	USETW2(req.wValue, type, index);
970 	USETW(req.wIndex, id);
971 
972 	while (1) {
973 
974 		if ((min_len < 2) || (max_len < 2)) {
975 			err = USB_ERR_INVAL;
976 			goto done;
977 		}
978 		USETW(req.wLength, min_len);
979 
980 		err = usbd_do_request_flags(udev, mtx, &req,
981 		    desc, 0, NULL, 1000);
982 
983 		if (err) {
984 			if (!retries) {
985 				goto done;
986 			}
987 			retries--;
988 
989 			usb_pause_mtx(mtx, hz / 5);
990 
991 			continue;
992 		}
993 		buf = desc;
994 
995 		if (min_len == max_len) {
996 
997 			/* enforce correct length */
998 			if ((buf[0] > min_len) && (actlen == NULL))
999 				buf[0] = min_len;
1000 
1001 			/* enforce correct type */
1002 			buf[1] = type;
1003 
1004 			goto done;
1005 		}
1006 		/* range check */
1007 
1008 		if (max_len > buf[0]) {
1009 			max_len = buf[0];
1010 		}
1011 		/* zero minimum data */
1012 
1013 		while (min_len > max_len) {
1014 			min_len--;
1015 			buf[min_len] = 0;
1016 		}
1017 
1018 		/* set new minimum length */
1019 
1020 		min_len = max_len;
1021 	}
1022 done:
1023 	if (actlen != NULL) {
1024 		if (err)
1025 			*actlen = 0;
1026 		else
1027 			*actlen = min_len;
1028 	}
1029 	return (err);
1030 }
1031 
1032 /*------------------------------------------------------------------------*
1033  *	usbd_req_get_string_any
1034  *
1035  * This function will return the string given by "string_index"
1036  * using the first language ID. The maximum length "len" includes
1037  * the terminating zero. The "len" argument should be twice as
1038  * big pluss 2 bytes, compared with the actual maximum string length !
1039  *
1040  * Returns:
1041  *    0: Success
1042  * Else: Failure
1043  *------------------------------------------------------------------------*/
1044 usb_error_t
1045 usbd_req_get_string_any(struct usb_device *udev, struct mtx *mtx, char *buf,
1046     uint16_t len, uint8_t string_index)
1047 {
1048 	char *s;
1049 	uint8_t *temp;
1050 	uint16_t i;
1051 	uint16_t n;
1052 	uint16_t c;
1053 	uint8_t swap;
1054 	usb_error_t err;
1055 
1056 	if (len == 0) {
1057 		/* should not happen */
1058 		return (USB_ERR_NORMAL_COMPLETION);
1059 	}
1060 	if (string_index == 0) {
1061 		/* this is the language table */
1062 		buf[0] = 0;
1063 		return (USB_ERR_INVAL);
1064 	}
1065 	if (udev->flags.no_strings) {
1066 		buf[0] = 0;
1067 		return (USB_ERR_STALLED);
1068 	}
1069 	err = usbd_req_get_string_desc
1070 	    (udev, mtx, buf, len, udev->langid, string_index);
1071 	if (err) {
1072 		buf[0] = 0;
1073 		return (err);
1074 	}
1075 	temp = (uint8_t *)buf;
1076 
1077 	if (temp[0] < 2) {
1078 		/* string length is too short */
1079 		buf[0] = 0;
1080 		return (USB_ERR_INVAL);
1081 	}
1082 	/* reserve one byte for terminating zero */
1083 	len--;
1084 
1085 	/* find maximum length */
1086 	s = buf;
1087 	n = (temp[0] / 2) - 1;
1088 	if (n > len) {
1089 		n = len;
1090 	}
1091 	/* skip descriptor header */
1092 	temp += 2;
1093 
1094 	/* reset swap state */
1095 	swap = 3;
1096 
1097 	/* convert and filter */
1098 	for (i = 0; (i != n); i++) {
1099 		c = UGETW(temp + (2 * i));
1100 
1101 		/* convert from Unicode, handle buggy strings */
1102 		if (((c & 0xff00) == 0) && (swap & 1)) {
1103 			/* Little Endian, default */
1104 			*s = c;
1105 			swap = 1;
1106 		} else if (((c & 0x00ff) == 0) && (swap & 2)) {
1107 			/* Big Endian */
1108 			*s = c >> 8;
1109 			swap = 2;
1110 		} else {
1111 			/* silently skip bad character */
1112 			continue;
1113 		}
1114 
1115 		/*
1116 		 * Filter by default - We only allow alphanumerical
1117 		 * and a few more to avoid any problems with scripts
1118 		 * and daemons.
1119 		 */
1120 		if (isalpha(*s) ||
1121 		    isdigit(*s) ||
1122 		    *s == '-' ||
1123 		    *s == '+' ||
1124 		    *s == ' ' ||
1125 		    *s == '.' ||
1126 		    *s == ',') {
1127 			/* allowed */
1128 			s++;
1129 		}
1130 		/* silently skip bad character */
1131 	}
1132 	*s = 0;				/* zero terminate resulting string */
1133 	return (USB_ERR_NORMAL_COMPLETION);
1134 }
1135 
1136 /*------------------------------------------------------------------------*
1137  *	usbd_req_get_string_desc
1138  *
1139  * If you don't know the language ID, consider using
1140  * "usbd_req_get_string_any()".
1141  *
1142  * Returns:
1143  *    0: Success
1144  * Else: Failure
1145  *------------------------------------------------------------------------*/
1146 usb_error_t
1147 usbd_req_get_string_desc(struct usb_device *udev, struct mtx *mtx, void *sdesc,
1148     uint16_t max_len, uint16_t lang_id,
1149     uint8_t string_index)
1150 {
1151 	return (usbd_req_get_desc(udev, mtx, NULL, sdesc, 2, max_len, lang_id,
1152 	    UDESC_STRING, string_index, 0));
1153 }
1154 
1155 /*------------------------------------------------------------------------*
1156  *	usbd_req_get_config_desc_ptr
1157  *
1158  * This function is used in device side mode to retrieve the pointer
1159  * to the generated config descriptor. This saves allocating space for
1160  * an additional config descriptor when setting the configuration.
1161  *
1162  * Returns:
1163  *    0: Success
1164  * Else: Failure
1165  *------------------------------------------------------------------------*/
1166 usb_error_t
1167 usbd_req_get_descriptor_ptr(struct usb_device *udev,
1168     struct usb_config_descriptor **ppcd, uint16_t wValue)
1169 {
1170 	struct usb_device_request req;
1171 	usb_handle_req_t *hr_func;
1172 	const void *ptr;
1173 	uint16_t len;
1174 	usb_error_t err;
1175 
1176 	req.bmRequestType = UT_READ_DEVICE;
1177 	req.bRequest = UR_GET_DESCRIPTOR;
1178 	USETW(req.wValue, wValue);
1179 	USETW(req.wIndex, 0);
1180 	USETW(req.wLength, 0);
1181 
1182 	ptr = NULL;
1183 	len = 0;
1184 
1185 	hr_func = usbd_get_hr_func(udev);
1186 
1187 	if (hr_func == NULL)
1188 		err = USB_ERR_INVAL;
1189 	else {
1190 		USB_BUS_LOCK(udev->bus);
1191 		err = (hr_func) (udev, &req, &ptr, &len);
1192 		USB_BUS_UNLOCK(udev->bus);
1193 	}
1194 
1195 	if (err)
1196 		ptr = NULL;
1197 	else if (ptr == NULL)
1198 		err = USB_ERR_INVAL;
1199 
1200 	*ppcd = __DECONST(struct usb_config_descriptor *, ptr);
1201 
1202 	return (err);
1203 }
1204 
1205 /*------------------------------------------------------------------------*
1206  *	usbd_req_get_config_desc
1207  *
1208  * Returns:
1209  *    0: Success
1210  * Else: Failure
1211  *------------------------------------------------------------------------*/
1212 usb_error_t
1213 usbd_req_get_config_desc(struct usb_device *udev, struct mtx *mtx,
1214     struct usb_config_descriptor *d, uint8_t conf_index)
1215 {
1216 	usb_error_t err;
1217 
1218 	DPRINTFN(4, "confidx=%d\n", conf_index);
1219 
1220 	err = usbd_req_get_desc(udev, mtx, NULL, d, sizeof(*d),
1221 	    sizeof(*d), 0, UDESC_CONFIG, conf_index, 0);
1222 	if (err) {
1223 		goto done;
1224 	}
1225 	/* Extra sanity checking */
1226 	if (UGETW(d->wTotalLength) < sizeof(*d)) {
1227 		err = USB_ERR_INVAL;
1228 	}
1229 done:
1230 	return (err);
1231 }
1232 
1233 /*------------------------------------------------------------------------*
1234  *	usbd_req_get_config_desc_full
1235  *
1236  * This function gets the complete USB configuration descriptor and
1237  * ensures that "wTotalLength" is correct.
1238  *
1239  * Returns:
1240  *    0: Success
1241  * Else: Failure
1242  *------------------------------------------------------------------------*/
1243 usb_error_t
1244 usbd_req_get_config_desc_full(struct usb_device *udev, struct mtx *mtx,
1245     struct usb_config_descriptor **ppcd, struct malloc_type *mtype,
1246     uint8_t index)
1247 {
1248 	struct usb_config_descriptor cd;
1249 	struct usb_config_descriptor *cdesc;
1250 	uint16_t len;
1251 	usb_error_t err;
1252 
1253 	DPRINTFN(4, "index=%d\n", index);
1254 
1255 	*ppcd = NULL;
1256 
1257 	err = usbd_req_get_config_desc(udev, mtx, &cd, index);
1258 	if (err) {
1259 		return (err);
1260 	}
1261 	/* get full descriptor */
1262 	len = UGETW(cd.wTotalLength);
1263 	if (len < sizeof(*cdesc)) {
1264 		/* corrupt descriptor */
1265 		return (USB_ERR_INVAL);
1266 	}
1267 	cdesc = malloc(len, mtype, M_WAITOK);
1268 	if (cdesc == NULL) {
1269 		return (USB_ERR_NOMEM);
1270 	}
1271 	err = usbd_req_get_desc(udev, mtx, NULL, cdesc, len, len, 0,
1272 	    UDESC_CONFIG, index, 3);
1273 	if (err) {
1274 		free(cdesc, mtype);
1275 		return (err);
1276 	}
1277 	/* make sure that the device is not fooling us: */
1278 	USETW(cdesc->wTotalLength, len);
1279 
1280 	*ppcd = cdesc;
1281 
1282 	return (0);			/* success */
1283 }
1284 
1285 /*------------------------------------------------------------------------*
1286  *	usbd_req_get_device_desc
1287  *
1288  * Returns:
1289  *    0: Success
1290  * Else: Failure
1291  *------------------------------------------------------------------------*/
1292 usb_error_t
1293 usbd_req_get_device_desc(struct usb_device *udev, struct mtx *mtx,
1294     struct usb_device_descriptor *d)
1295 {
1296 	DPRINTFN(4, "\n");
1297 	return (usbd_req_get_desc(udev, mtx, NULL, d, sizeof(*d),
1298 	    sizeof(*d), 0, UDESC_DEVICE, 0, 3));
1299 }
1300 
1301 /*------------------------------------------------------------------------*
1302  *	usbd_req_get_alt_interface_no
1303  *
1304  * Returns:
1305  *    0: Success
1306  * Else: Failure
1307  *------------------------------------------------------------------------*/
1308 usb_error_t
1309 usbd_req_get_alt_interface_no(struct usb_device *udev, struct mtx *mtx,
1310     uint8_t *alt_iface_no, uint8_t iface_index)
1311 {
1312 	struct usb_interface *iface = usbd_get_iface(udev, iface_index);
1313 	struct usb_device_request req;
1314 
1315 	if ((iface == NULL) || (iface->idesc == NULL))
1316 		return (USB_ERR_INVAL);
1317 
1318 	req.bmRequestType = UT_READ_INTERFACE;
1319 	req.bRequest = UR_GET_INTERFACE;
1320 	USETW(req.wValue, 0);
1321 	req.wIndex[0] = iface->idesc->bInterfaceNumber;
1322 	req.wIndex[1] = 0;
1323 	USETW(req.wLength, 1);
1324 	return (usbd_do_request(udev, mtx, &req, alt_iface_no));
1325 }
1326 
1327 /*------------------------------------------------------------------------*
1328  *	usbd_req_set_alt_interface_no
1329  *
1330  * Returns:
1331  *    0: Success
1332  * Else: Failure
1333  *------------------------------------------------------------------------*/
1334 usb_error_t
1335 usbd_req_set_alt_interface_no(struct usb_device *udev, struct mtx *mtx,
1336     uint8_t iface_index, uint8_t alt_no)
1337 {
1338 	struct usb_interface *iface = usbd_get_iface(udev, iface_index);
1339 	struct usb_device_request req;
1340 
1341 	if ((iface == NULL) || (iface->idesc == NULL))
1342 		return (USB_ERR_INVAL);
1343 
1344 	req.bmRequestType = UT_WRITE_INTERFACE;
1345 	req.bRequest = UR_SET_INTERFACE;
1346 	req.wValue[0] = alt_no;
1347 	req.wValue[1] = 0;
1348 	req.wIndex[0] = iface->idesc->bInterfaceNumber;
1349 	req.wIndex[1] = 0;
1350 	USETW(req.wLength, 0);
1351 	return (usbd_do_request(udev, mtx, &req, 0));
1352 }
1353 
1354 /*------------------------------------------------------------------------*
1355  *	usbd_req_get_device_status
1356  *
1357  * Returns:
1358  *    0: Success
1359  * Else: Failure
1360  *------------------------------------------------------------------------*/
1361 usb_error_t
1362 usbd_req_get_device_status(struct usb_device *udev, struct mtx *mtx,
1363     struct usb_status *st)
1364 {
1365 	struct usb_device_request req;
1366 
1367 	req.bmRequestType = UT_READ_DEVICE;
1368 	req.bRequest = UR_GET_STATUS;
1369 	USETW(req.wValue, 0);
1370 	USETW(req.wIndex, 0);
1371 	USETW(req.wLength, sizeof(*st));
1372 	return (usbd_do_request(udev, mtx, &req, st));
1373 }
1374 
1375 /*------------------------------------------------------------------------*
1376  *	usbd_req_get_hub_descriptor
1377  *
1378  * Returns:
1379  *    0: Success
1380  * Else: Failure
1381  *------------------------------------------------------------------------*/
1382 usb_error_t
1383 usbd_req_get_hub_descriptor(struct usb_device *udev, struct mtx *mtx,
1384     struct usb_hub_descriptor *hd, uint8_t nports)
1385 {
1386 	struct usb_device_request req;
1387 	uint16_t len = (nports + 7 + (8 * 8)) / 8;
1388 
1389 	req.bmRequestType = UT_READ_CLASS_DEVICE;
1390 	req.bRequest = UR_GET_DESCRIPTOR;
1391 	USETW2(req.wValue, UDESC_HUB, 0);
1392 	USETW(req.wIndex, 0);
1393 	USETW(req.wLength, len);
1394 	return (usbd_do_request(udev, mtx, &req, hd));
1395 }
1396 
1397 /*------------------------------------------------------------------------*
1398  *	usbd_req_get_ss_hub_descriptor
1399  *
1400  * Returns:
1401  *    0: Success
1402  * Else: Failure
1403  *------------------------------------------------------------------------*/
1404 usb_error_t
1405 usbd_req_get_ss_hub_descriptor(struct usb_device *udev, struct mtx *mtx,
1406     struct usb_hub_ss_descriptor *hd, uint8_t nports)
1407 {
1408 	struct usb_device_request req;
1409 	uint16_t len = sizeof(*hd) - 32 + 1 + ((nports + 7) / 8);
1410 
1411 	req.bmRequestType = UT_READ_CLASS_DEVICE;
1412 	req.bRequest = UR_GET_DESCRIPTOR;
1413 	USETW2(req.wValue, UDESC_SS_HUB, 0);
1414 	USETW(req.wIndex, 0);
1415 	USETW(req.wLength, len);
1416 	return (usbd_do_request(udev, mtx, &req, hd));
1417 }
1418 
1419 /*------------------------------------------------------------------------*
1420  *	usbd_req_get_hub_status
1421  *
1422  * Returns:
1423  *    0: Success
1424  * Else: Failure
1425  *------------------------------------------------------------------------*/
1426 usb_error_t
1427 usbd_req_get_hub_status(struct usb_device *udev, struct mtx *mtx,
1428     struct usb_hub_status *st)
1429 {
1430 	struct usb_device_request req;
1431 
1432 	req.bmRequestType = UT_READ_CLASS_DEVICE;
1433 	req.bRequest = UR_GET_STATUS;
1434 	USETW(req.wValue, 0);
1435 	USETW(req.wIndex, 0);
1436 	USETW(req.wLength, sizeof(struct usb_hub_status));
1437 	return (usbd_do_request(udev, mtx, &req, st));
1438 }
1439 
1440 /*------------------------------------------------------------------------*
1441  *	usbd_req_set_address
1442  *
1443  * This function is used to set the address for an USB device. After
1444  * port reset the USB device will respond at address zero.
1445  *
1446  * Returns:
1447  *    0: Success
1448  * Else: Failure
1449  *------------------------------------------------------------------------*/
1450 usb_error_t
1451 usbd_req_set_address(struct usb_device *udev, struct mtx *mtx, uint16_t addr)
1452 {
1453 	struct usb_device_request req;
1454 	usb_error_t err;
1455 
1456 	DPRINTFN(6, "setting device address=%d\n", addr);
1457 
1458 	req.bmRequestType = UT_WRITE_DEVICE;
1459 	req.bRequest = UR_SET_ADDRESS;
1460 	USETW(req.wValue, addr);
1461 	USETW(req.wIndex, 0);
1462 	USETW(req.wLength, 0);
1463 
1464 	err = USB_ERR_INVAL;
1465 
1466 	/* check if USB controller handles set address */
1467 	if (udev->bus->methods->set_address != NULL)
1468 		err = (udev->bus->methods->set_address) (udev, mtx, addr);
1469 
1470 	if (err != USB_ERR_INVAL)
1471 		goto done;
1472 
1473 	/* Setting the address should not take more than 1 second ! */
1474 	err = usbd_do_request_flags(udev, mtx, &req, NULL,
1475 	    USB_DELAY_STATUS_STAGE, NULL, 1000);
1476 
1477 done:
1478 	/* allow device time to set new address */
1479 	usb_pause_mtx(mtx,
1480 	    USB_MS_TO_TICKS(USB_SET_ADDRESS_SETTLE));
1481 
1482 	return (err);
1483 }
1484 
1485 /*------------------------------------------------------------------------*
1486  *	usbd_req_get_port_status
1487  *
1488  * Returns:
1489  *    0: Success
1490  * Else: Failure
1491  *------------------------------------------------------------------------*/
1492 usb_error_t
1493 usbd_req_get_port_status(struct usb_device *udev, struct mtx *mtx,
1494     struct usb_port_status *ps, uint8_t port)
1495 {
1496 	struct usb_device_request req;
1497 
1498 	req.bmRequestType = UT_READ_CLASS_OTHER;
1499 	req.bRequest = UR_GET_STATUS;
1500 	USETW(req.wValue, 0);
1501 	req.wIndex[0] = port;
1502 	req.wIndex[1] = 0;
1503 	USETW(req.wLength, sizeof *ps);
1504 	return (usbd_do_request(udev, mtx, &req, ps));
1505 }
1506 
1507 /*------------------------------------------------------------------------*
1508  *	usbd_req_clear_hub_feature
1509  *
1510  * Returns:
1511  *    0: Success
1512  * Else: Failure
1513  *------------------------------------------------------------------------*/
1514 usb_error_t
1515 usbd_req_clear_hub_feature(struct usb_device *udev, struct mtx *mtx,
1516     uint16_t sel)
1517 {
1518 	struct usb_device_request req;
1519 
1520 	req.bmRequestType = UT_WRITE_CLASS_DEVICE;
1521 	req.bRequest = UR_CLEAR_FEATURE;
1522 	USETW(req.wValue, sel);
1523 	USETW(req.wIndex, 0);
1524 	USETW(req.wLength, 0);
1525 	return (usbd_do_request(udev, mtx, &req, 0));
1526 }
1527 
1528 /*------------------------------------------------------------------------*
1529  *	usbd_req_set_hub_feature
1530  *
1531  * Returns:
1532  *    0: Success
1533  * Else: Failure
1534  *------------------------------------------------------------------------*/
1535 usb_error_t
1536 usbd_req_set_hub_feature(struct usb_device *udev, struct mtx *mtx,
1537     uint16_t sel)
1538 {
1539 	struct usb_device_request req;
1540 
1541 	req.bmRequestType = UT_WRITE_CLASS_DEVICE;
1542 	req.bRequest = UR_SET_FEATURE;
1543 	USETW(req.wValue, sel);
1544 	USETW(req.wIndex, 0);
1545 	USETW(req.wLength, 0);
1546 	return (usbd_do_request(udev, mtx, &req, 0));
1547 }
1548 
1549 /*------------------------------------------------------------------------*
1550  *	usbd_req_set_hub_u1_timeout
1551  *
1552  * Returns:
1553  *    0: Success
1554  * Else: Failure
1555  *------------------------------------------------------------------------*/
1556 usb_error_t
1557 usbd_req_set_hub_u1_timeout(struct usb_device *udev, struct mtx *mtx,
1558     uint8_t port, uint8_t timeout)
1559 {
1560 	struct usb_device_request req;
1561 
1562 	req.bmRequestType = UT_WRITE_CLASS_OTHER;
1563 	req.bRequest = UR_SET_FEATURE;
1564 	USETW(req.wValue, UHF_PORT_U1_TIMEOUT);
1565 	req.wIndex[0] = port;
1566 	req.wIndex[1] = timeout;
1567 	USETW(req.wLength, 0);
1568 	return (usbd_do_request(udev, mtx, &req, 0));
1569 }
1570 
1571 /*------------------------------------------------------------------------*
1572  *	usbd_req_set_hub_u2_timeout
1573  *
1574  * Returns:
1575  *    0: Success
1576  * Else: Failure
1577  *------------------------------------------------------------------------*/
1578 usb_error_t
1579 usbd_req_set_hub_u2_timeout(struct usb_device *udev, struct mtx *mtx,
1580     uint8_t port, uint8_t timeout)
1581 {
1582 	struct usb_device_request req;
1583 
1584 	req.bmRequestType = UT_WRITE_CLASS_OTHER;
1585 	req.bRequest = UR_SET_FEATURE;
1586 	USETW(req.wValue, UHF_PORT_U2_TIMEOUT);
1587 	req.wIndex[0] = port;
1588 	req.wIndex[1] = timeout;
1589 	USETW(req.wLength, 0);
1590 	return (usbd_do_request(udev, mtx, &req, 0));
1591 }
1592 
1593 /*------------------------------------------------------------------------*
1594  *	usbd_req_set_hub_depth
1595  *
1596  * Returns:
1597  *    0: Success
1598  * Else: Failure
1599  *------------------------------------------------------------------------*/
1600 usb_error_t
1601 usbd_req_set_hub_depth(struct usb_device *udev, struct mtx *mtx,
1602     uint16_t depth)
1603 {
1604 	struct usb_device_request req;
1605 
1606 	req.bmRequestType = UT_WRITE_CLASS_DEVICE;
1607 	req.bRequest = UR_SET_HUB_DEPTH;
1608 	USETW(req.wValue, depth);
1609 	USETW(req.wIndex, 0);
1610 	USETW(req.wLength, 0);
1611 	return (usbd_do_request(udev, mtx, &req, 0));
1612 }
1613 
1614 /*------------------------------------------------------------------------*
1615  *	usbd_req_clear_port_feature
1616  *
1617  * Returns:
1618  *    0: Success
1619  * Else: Failure
1620  *------------------------------------------------------------------------*/
1621 usb_error_t
1622 usbd_req_clear_port_feature(struct usb_device *udev, struct mtx *mtx,
1623     uint8_t port, uint16_t sel)
1624 {
1625 	struct usb_device_request req;
1626 
1627 	req.bmRequestType = UT_WRITE_CLASS_OTHER;
1628 	req.bRequest = UR_CLEAR_FEATURE;
1629 	USETW(req.wValue, sel);
1630 	req.wIndex[0] = port;
1631 	req.wIndex[1] = 0;
1632 	USETW(req.wLength, 0);
1633 	return (usbd_do_request(udev, mtx, &req, 0));
1634 }
1635 
1636 /*------------------------------------------------------------------------*
1637  *	usbd_req_set_port_feature
1638  *
1639  * Returns:
1640  *    0: Success
1641  * Else: Failure
1642  *------------------------------------------------------------------------*/
1643 usb_error_t
1644 usbd_req_set_port_feature(struct usb_device *udev, struct mtx *mtx,
1645     uint8_t port, uint16_t sel)
1646 {
1647 	struct usb_device_request req;
1648 
1649 	req.bmRequestType = UT_WRITE_CLASS_OTHER;
1650 	req.bRequest = UR_SET_FEATURE;
1651 	USETW(req.wValue, sel);
1652 	req.wIndex[0] = port;
1653 	req.wIndex[1] = 0;
1654 	USETW(req.wLength, 0);
1655 	return (usbd_do_request(udev, mtx, &req, 0));
1656 }
1657 
1658 /*------------------------------------------------------------------------*
1659  *	usbd_req_set_protocol
1660  *
1661  * Returns:
1662  *    0: Success
1663  * Else: Failure
1664  *------------------------------------------------------------------------*/
1665 usb_error_t
1666 usbd_req_set_protocol(struct usb_device *udev, struct mtx *mtx,
1667     uint8_t iface_index, uint16_t report)
1668 {
1669 	struct usb_interface *iface = usbd_get_iface(udev, iface_index);
1670 	struct usb_device_request req;
1671 
1672 	if ((iface == NULL) || (iface->idesc == NULL)) {
1673 		return (USB_ERR_INVAL);
1674 	}
1675 	DPRINTFN(5, "iface=%p, report=%d, endpt=%d\n",
1676 	    iface, report, iface->idesc->bInterfaceNumber);
1677 
1678 	req.bmRequestType = UT_WRITE_CLASS_INTERFACE;
1679 	req.bRequest = UR_SET_PROTOCOL;
1680 	USETW(req.wValue, report);
1681 	req.wIndex[0] = iface->idesc->bInterfaceNumber;
1682 	req.wIndex[1] = 0;
1683 	USETW(req.wLength, 0);
1684 	return (usbd_do_request(udev, mtx, &req, 0));
1685 }
1686 
1687 /*------------------------------------------------------------------------*
1688  *	usbd_req_set_report
1689  *
1690  * Returns:
1691  *    0: Success
1692  * Else: Failure
1693  *------------------------------------------------------------------------*/
1694 usb_error_t
1695 usbd_req_set_report(struct usb_device *udev, struct mtx *mtx, void *data, uint16_t len,
1696     uint8_t iface_index, uint8_t type, uint8_t id)
1697 {
1698 	struct usb_interface *iface = usbd_get_iface(udev, iface_index);
1699 	struct usb_device_request req;
1700 
1701 	if ((iface == NULL) || (iface->idesc == NULL)) {
1702 		return (USB_ERR_INVAL);
1703 	}
1704 	DPRINTFN(5, "len=%d\n", len);
1705 
1706 	req.bmRequestType = UT_WRITE_CLASS_INTERFACE;
1707 	req.bRequest = UR_SET_REPORT;
1708 	USETW2(req.wValue, type, id);
1709 	req.wIndex[0] = iface->idesc->bInterfaceNumber;
1710 	req.wIndex[1] = 0;
1711 	USETW(req.wLength, len);
1712 	return (usbd_do_request(udev, mtx, &req, data));
1713 }
1714 
1715 /*------------------------------------------------------------------------*
1716  *	usbd_req_get_report
1717  *
1718  * Returns:
1719  *    0: Success
1720  * Else: Failure
1721  *------------------------------------------------------------------------*/
1722 usb_error_t
1723 usbd_req_get_report(struct usb_device *udev, struct mtx *mtx, void *data,
1724     uint16_t len, uint8_t iface_index, uint8_t type, uint8_t id)
1725 {
1726 	struct usb_interface *iface = usbd_get_iface(udev, iface_index);
1727 	struct usb_device_request req;
1728 
1729 	if ((iface == NULL) || (iface->idesc == NULL) || (id == 0)) {
1730 		return (USB_ERR_INVAL);
1731 	}
1732 	DPRINTFN(5, "len=%d\n", len);
1733 
1734 	req.bmRequestType = UT_READ_CLASS_INTERFACE;
1735 	req.bRequest = UR_GET_REPORT;
1736 	USETW2(req.wValue, type, id);
1737 	req.wIndex[0] = iface->idesc->bInterfaceNumber;
1738 	req.wIndex[1] = 0;
1739 	USETW(req.wLength, len);
1740 	return (usbd_do_request(udev, mtx, &req, data));
1741 }
1742 
1743 /*------------------------------------------------------------------------*
1744  *	usbd_req_set_idle
1745  *
1746  * Returns:
1747  *    0: Success
1748  * Else: Failure
1749  *------------------------------------------------------------------------*/
1750 usb_error_t
1751 usbd_req_set_idle(struct usb_device *udev, struct mtx *mtx,
1752     uint8_t iface_index, uint8_t duration, uint8_t id)
1753 {
1754 	struct usb_interface *iface = usbd_get_iface(udev, iface_index);
1755 	struct usb_device_request req;
1756 
1757 	if ((iface == NULL) || (iface->idesc == NULL)) {
1758 		return (USB_ERR_INVAL);
1759 	}
1760 	DPRINTFN(5, "%d %d\n", duration, id);
1761 
1762 	req.bmRequestType = UT_WRITE_CLASS_INTERFACE;
1763 	req.bRequest = UR_SET_IDLE;
1764 	USETW2(req.wValue, duration, id);
1765 	req.wIndex[0] = iface->idesc->bInterfaceNumber;
1766 	req.wIndex[1] = 0;
1767 	USETW(req.wLength, 0);
1768 	return (usbd_do_request(udev, mtx, &req, 0));
1769 }
1770 
1771 /*------------------------------------------------------------------------*
1772  *	usbd_req_get_report_descriptor
1773  *
1774  * Returns:
1775  *    0: Success
1776  * Else: Failure
1777  *------------------------------------------------------------------------*/
1778 usb_error_t
1779 usbd_req_get_report_descriptor(struct usb_device *udev, struct mtx *mtx,
1780     void *d, uint16_t size, uint8_t iface_index)
1781 {
1782 	struct usb_interface *iface = usbd_get_iface(udev, iface_index);
1783 	struct usb_device_request req;
1784 
1785 	if ((iface == NULL) || (iface->idesc == NULL)) {
1786 		return (USB_ERR_INVAL);
1787 	}
1788 	req.bmRequestType = UT_READ_INTERFACE;
1789 	req.bRequest = UR_GET_DESCRIPTOR;
1790 	USETW2(req.wValue, UDESC_REPORT, 0);	/* report id should be 0 */
1791 	req.wIndex[0] = iface->idesc->bInterfaceNumber;
1792 	req.wIndex[1] = 0;
1793 	USETW(req.wLength, size);
1794 	return (usbd_do_request(udev, mtx, &req, d));
1795 }
1796 
1797 /*------------------------------------------------------------------------*
1798  *	usbd_req_set_config
1799  *
1800  * This function is used to select the current configuration number in
1801  * both USB device side mode and USB host side mode. When setting the
1802  * configuration the function of the interfaces can change.
1803  *
1804  * Returns:
1805  *    0: Success
1806  * Else: Failure
1807  *------------------------------------------------------------------------*/
1808 usb_error_t
1809 usbd_req_set_config(struct usb_device *udev, struct mtx *mtx, uint8_t conf)
1810 {
1811 	struct usb_device_request req;
1812 
1813 	DPRINTF("setting config %d\n", conf);
1814 
1815 	/* do "set configuration" request */
1816 
1817 	req.bmRequestType = UT_WRITE_DEVICE;
1818 	req.bRequest = UR_SET_CONFIG;
1819 	req.wValue[0] = conf;
1820 	req.wValue[1] = 0;
1821 	USETW(req.wIndex, 0);
1822 	USETW(req.wLength, 0);
1823 	return (usbd_do_request(udev, mtx, &req, 0));
1824 }
1825 
1826 /*------------------------------------------------------------------------*
1827  *	usbd_req_get_config
1828  *
1829  * Returns:
1830  *    0: Success
1831  * Else: Failure
1832  *------------------------------------------------------------------------*/
1833 usb_error_t
1834 usbd_req_get_config(struct usb_device *udev, struct mtx *mtx, uint8_t *pconf)
1835 {
1836 	struct usb_device_request req;
1837 
1838 	req.bmRequestType = UT_READ_DEVICE;
1839 	req.bRequest = UR_GET_CONFIG;
1840 	USETW(req.wValue, 0);
1841 	USETW(req.wIndex, 0);
1842 	USETW(req.wLength, 1);
1843 	return (usbd_do_request(udev, mtx, &req, pconf));
1844 }
1845 
1846 /*------------------------------------------------------------------------*
1847  *	usbd_setup_device_desc
1848  *------------------------------------------------------------------------*/
1849 usb_error_t
1850 usbd_setup_device_desc(struct usb_device *udev, struct mtx *mtx)
1851 {
1852 	usb_error_t err;
1853 
1854 	/*
1855 	 * Get the first 8 bytes of the device descriptor !
1856 	 *
1857 	 * NOTE: "usbd_do_request()" will check the device descriptor
1858 	 * next time we do a request to see if the maximum packet size
1859 	 * changed! The 8 first bytes of the device descriptor
1860 	 * contains the maximum packet size to use on control endpoint
1861 	 * 0. If this value is different from "USB_MAX_IPACKET" a new
1862 	 * USB control request will be setup!
1863 	 */
1864 	switch (udev->speed) {
1865 	case USB_SPEED_FULL:
1866 	case USB_SPEED_LOW:
1867 		err = usbd_req_get_desc(udev, mtx, NULL, &udev->ddesc,
1868 		    USB_MAX_IPACKET, USB_MAX_IPACKET, 0, UDESC_DEVICE, 0, 0);
1869 		if (err != 0) {
1870 			DPRINTFN(0, "getting device descriptor "
1871 			    "at addr %d failed, %s\n", udev->address,
1872 			    usbd_errstr(err));
1873 			return (err);
1874 		}
1875 		break;
1876 	default:
1877 		DPRINTF("Minimum MaxPacketSize is large enough "
1878 		    "to hold the complete device descriptor\n");
1879 		break;
1880 	}
1881 
1882 	/* get the full device descriptor */
1883 	err = usbd_req_get_device_desc(udev, mtx, &udev->ddesc);
1884 
1885 	/* try one more time, if error */
1886 	if (err)
1887 		err = usbd_req_get_device_desc(udev, mtx, &udev->ddesc);
1888 
1889 	if (err) {
1890 		DPRINTF("addr=%d, getting full desc failed\n",
1891 		    udev->address);
1892 		return (err);
1893 	}
1894 
1895 	DPRINTF("adding unit addr=%d, rev=%02x, class=%d, "
1896 	    "subclass=%d, protocol=%d, maxpacket=%d, len=%d, speed=%d\n",
1897 	    udev->address, UGETW(udev->ddesc.bcdUSB),
1898 	    udev->ddesc.bDeviceClass,
1899 	    udev->ddesc.bDeviceSubClass,
1900 	    udev->ddesc.bDeviceProtocol,
1901 	    udev->ddesc.bMaxPacketSize,
1902 	    udev->ddesc.bLength,
1903 	    udev->speed);
1904 
1905 	return (err);
1906 }
1907 
1908 /*------------------------------------------------------------------------*
1909  *	usbd_req_re_enumerate
1910  *
1911  * NOTE: After this function returns the hardware is in the
1912  * unconfigured state! The application is responsible for setting a
1913  * new configuration.
1914  *
1915  * Returns:
1916  *    0: Success
1917  * Else: Failure
1918  *------------------------------------------------------------------------*/
1919 usb_error_t
1920 usbd_req_re_enumerate(struct usb_device *udev, struct mtx *mtx)
1921 {
1922 	struct usb_device *parent_hub;
1923 	usb_error_t err;
1924 	uint8_t old_addr;
1925 	uint8_t do_retry = 1;
1926 
1927 	if (udev->flags.usb_mode != USB_MODE_HOST) {
1928 		return (USB_ERR_INVAL);
1929 	}
1930 	old_addr = udev->address;
1931 	parent_hub = udev->parent_hub;
1932 	if (parent_hub == NULL) {
1933 		return (USB_ERR_INVAL);
1934 	}
1935 retry:
1936 	err = usbd_req_reset_port(parent_hub, mtx, udev->port_no);
1937 	if (err) {
1938 		DPRINTFN(0, "addr=%d, port reset failed, %s\n",
1939 		    old_addr, usbd_errstr(err));
1940 		goto done;
1941 	}
1942 
1943 	/*
1944 	 * After that the port has been reset our device should be at
1945 	 * address zero:
1946 	 */
1947 	udev->address = USB_START_ADDR;
1948 
1949 	/* reset "bMaxPacketSize" */
1950 	udev->ddesc.bMaxPacketSize = USB_MAX_IPACKET;
1951 
1952 	/* reset USB state */
1953 	usb_set_device_state(udev, USB_STATE_POWERED);
1954 
1955 	/*
1956 	 * Restore device address:
1957 	 */
1958 	err = usbd_req_set_address(udev, mtx, old_addr);
1959 	if (err) {
1960 		/* XXX ignore any errors! */
1961 		DPRINTFN(0, "addr=%d, set address failed! (%s, ignored)\n",
1962 		    old_addr, usbd_errstr(err));
1963 	}
1964 	/*
1965 	 * Restore device address, if the controller driver did not
1966 	 * set a new one:
1967 	 */
1968 	if (udev->address == USB_START_ADDR)
1969 		udev->address = old_addr;
1970 
1971 	/* setup the device descriptor and the initial "wMaxPacketSize" */
1972 	err = usbd_setup_device_desc(udev, mtx);
1973 
1974 done:
1975 	if (err && do_retry) {
1976 		/* give the USB firmware some time to load */
1977 		usb_pause_mtx(mtx, hz / 2);
1978 		/* no more retries after this retry */
1979 		do_retry = 0;
1980 		/* try again */
1981 		goto retry;
1982 	}
1983 	/* restore address */
1984 	if (udev->address == USB_START_ADDR)
1985 		udev->address = old_addr;
1986 	/* update state, if successful */
1987 	if (err == 0)
1988 		usb_set_device_state(udev, USB_STATE_ADDRESSED);
1989 	return (err);
1990 }
1991 
1992 /*------------------------------------------------------------------------*
1993  *	usbd_req_clear_device_feature
1994  *
1995  * Returns:
1996  *    0: Success
1997  * Else: Failure
1998  *------------------------------------------------------------------------*/
1999 usb_error_t
2000 usbd_req_clear_device_feature(struct usb_device *udev, struct mtx *mtx,
2001     uint16_t sel)
2002 {
2003 	struct usb_device_request req;
2004 
2005 	req.bmRequestType = UT_WRITE_DEVICE;
2006 	req.bRequest = UR_CLEAR_FEATURE;
2007 	USETW(req.wValue, sel);
2008 	USETW(req.wIndex, 0);
2009 	USETW(req.wLength, 0);
2010 	return (usbd_do_request(udev, mtx, &req, 0));
2011 }
2012 
2013 /*------------------------------------------------------------------------*
2014  *	usbd_req_set_device_feature
2015  *
2016  * Returns:
2017  *    0: Success
2018  * Else: Failure
2019  *------------------------------------------------------------------------*/
2020 usb_error_t
2021 usbd_req_set_device_feature(struct usb_device *udev, struct mtx *mtx,
2022     uint16_t sel)
2023 {
2024 	struct usb_device_request req;
2025 
2026 	req.bmRequestType = UT_WRITE_DEVICE;
2027 	req.bRequest = UR_SET_FEATURE;
2028 	USETW(req.wValue, sel);
2029 	USETW(req.wIndex, 0);
2030 	USETW(req.wLength, 0);
2031 	return (usbd_do_request(udev, mtx, &req, 0));
2032 }
2033