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 /* if the device disappeared, just give up */ 797 if (!(UGETW(ps.wPortStatus) & UPS_CURRENT_CONNECT_STATUS)) { 798 goto done; 799 } 800 /* check if reset is complete */ 801 if (UGETW(ps.wPortChange) & UPS_C_PORT_RESET) { 802 break; 803 } 804 /* check for timeout */ 805 if (n > 1000) { 806 n = 0; 807 break; 808 } 809 } 810 811 /* clear port reset first */ 812 err = usbd_req_clear_port_feature( 813 udev, mtx, port, UHF_C_PORT_RESET); 814 if (err) { 815 goto done; 816 } 817 /* check for timeout */ 818 if (n == 0) { 819 err = USB_ERR_TIMEOUT; 820 goto done; 821 } 822 #ifdef USB_DEBUG 823 /* wait for the device to recover from reset */ 824 usb_pause_mtx(mtx, USB_MS_TO_TICKS(pr_recovery_delay)); 825 #else 826 /* wait for the device to recover from reset */ 827 usb_pause_mtx(mtx, USB_MS_TO_TICKS(USB_PORT_RESET_RECOVERY)); 828 #endif 829 830 done: 831 DPRINTFN(2, "port %d reset returning error=%s\n", 832 port, usbd_errstr(err)); 833 return (err); 834 } 835 836 /*------------------------------------------------------------------------* 837 * usbd_req_warm_reset_port 838 * 839 * This function will instruct an USB HUB to perform a warm reset 840 * sequence on the specified port number. This kind of reset is not 841 * mandatory for LOW-, FULL- and HIGH-speed USB HUBs and is targeted 842 * for SUPER-speed USB HUBs. 843 * 844 * Returns: 845 * 0: Success. The USB device should now be available again. 846 * Else: Failure. No USB device is present and the USB port should be 847 * disabled. 848 *------------------------------------------------------------------------*/ 849 usb_error_t 850 usbd_req_warm_reset_port(struct usb_device *udev, struct mtx *mtx, uint8_t port) 851 { 852 struct usb_port_status ps; 853 usb_error_t err; 854 uint16_t n; 855 856 #ifdef USB_DEBUG 857 uint16_t pr_poll_delay; 858 uint16_t pr_recovery_delay; 859 860 #endif 861 err = usbd_req_set_port_feature(udev, mtx, port, UHF_BH_PORT_RESET); 862 if (err) { 863 goto done; 864 } 865 #ifdef USB_DEBUG 866 /* range check input parameters */ 867 pr_poll_delay = usb_pr_poll_delay; 868 if (pr_poll_delay < 1) { 869 pr_poll_delay = 1; 870 } else if (pr_poll_delay > 1000) { 871 pr_poll_delay = 1000; 872 } 873 pr_recovery_delay = usb_pr_recovery_delay; 874 if (pr_recovery_delay > 1000) { 875 pr_recovery_delay = 1000; 876 } 877 #endif 878 n = 0; 879 while (1) { 880 #ifdef USB_DEBUG 881 /* wait for the device to recover from reset */ 882 usb_pause_mtx(mtx, USB_MS_TO_TICKS(pr_poll_delay)); 883 n += pr_poll_delay; 884 #else 885 /* wait for the device to recover from reset */ 886 usb_pause_mtx(mtx, USB_MS_TO_TICKS(USB_PORT_RESET_DELAY)); 887 n += USB_PORT_RESET_DELAY; 888 #endif 889 err = usbd_req_get_port_status(udev, mtx, &ps, port); 890 if (err) { 891 goto done; 892 } 893 /* if the device disappeared, just give up */ 894 if (!(UGETW(ps.wPortStatus) & UPS_CURRENT_CONNECT_STATUS)) { 895 goto done; 896 } 897 /* check if reset is complete */ 898 if (UGETW(ps.wPortChange) & UPS_C_BH_PORT_RESET) { 899 break; 900 } 901 /* check for timeout */ 902 if (n > 1000) { 903 n = 0; 904 break; 905 } 906 } 907 908 /* clear port reset first */ 909 err = usbd_req_clear_port_feature( 910 udev, mtx, port, UHF_C_BH_PORT_RESET); 911 if (err) { 912 goto done; 913 } 914 /* check for timeout */ 915 if (n == 0) { 916 err = USB_ERR_TIMEOUT; 917 goto done; 918 } 919 #ifdef USB_DEBUG 920 /* wait for the device to recover from reset */ 921 usb_pause_mtx(mtx, USB_MS_TO_TICKS(pr_recovery_delay)); 922 #else 923 /* wait for the device to recover from reset */ 924 usb_pause_mtx(mtx, USB_MS_TO_TICKS(USB_PORT_RESET_RECOVERY)); 925 #endif 926 927 done: 928 DPRINTFN(2, "port %d warm reset returning error=%s\n", 929 port, usbd_errstr(err)); 930 return (err); 931 } 932 933 /*------------------------------------------------------------------------* 934 * usbd_req_get_desc 935 * 936 * This function can be used to retrieve USB descriptors. It contains 937 * some additional logic like zeroing of missing descriptor bytes and 938 * retrying an USB descriptor in case of failure. The "min_len" 939 * argument specifies the minimum descriptor length. The "max_len" 940 * argument specifies the maximum descriptor length. If the real 941 * descriptor length is less than the minimum length the missing 942 * byte(s) will be zeroed. The type field, the second byte of the USB 943 * descriptor, will get forced to the correct type. If the "actlen" 944 * pointer is non-NULL, the actual length of the transfer will get 945 * stored in the 16-bit unsigned integer which it is pointing to. The 946 * first byte of the descriptor will not get updated. If the "actlen" 947 * pointer is NULL the first byte of the descriptor will get updated 948 * to reflect the actual length instead. If "min_len" is not equal to 949 * "max_len" then this function will try to retrive the beginning of 950 * the descriptor and base the maximum length on the first byte of the 951 * descriptor. 952 * 953 * Returns: 954 * 0: Success 955 * Else: Failure 956 *------------------------------------------------------------------------*/ 957 usb_error_t 958 usbd_req_get_desc(struct usb_device *udev, 959 struct mtx *mtx, uint16_t *actlen, void *desc, 960 uint16_t min_len, uint16_t max_len, 961 uint16_t id, uint8_t type, uint8_t index, 962 uint8_t retries) 963 { 964 struct usb_device_request req; 965 uint8_t *buf; 966 usb_error_t err; 967 968 DPRINTFN(4, "id=%d, type=%d, index=%d, max_len=%d\n", 969 id, type, index, max_len); 970 971 req.bmRequestType = UT_READ_DEVICE; 972 req.bRequest = UR_GET_DESCRIPTOR; 973 USETW2(req.wValue, type, index); 974 USETW(req.wIndex, id); 975 976 while (1) { 977 978 if ((min_len < 2) || (max_len < 2)) { 979 err = USB_ERR_INVAL; 980 goto done; 981 } 982 USETW(req.wLength, min_len); 983 984 err = usbd_do_request_flags(udev, mtx, &req, 985 desc, 0, NULL, 1000); 986 987 if (err) { 988 if (!retries) { 989 goto done; 990 } 991 retries--; 992 993 usb_pause_mtx(mtx, hz / 5); 994 995 continue; 996 } 997 buf = desc; 998 999 if (min_len == max_len) { 1000 1001 /* enforce correct length */ 1002 if ((buf[0] > min_len) && (actlen == NULL)) 1003 buf[0] = min_len; 1004 1005 /* enforce correct type */ 1006 buf[1] = type; 1007 1008 goto done; 1009 } 1010 /* range check */ 1011 1012 if (max_len > buf[0]) { 1013 max_len = buf[0]; 1014 } 1015 /* zero minimum data */ 1016 1017 while (min_len > max_len) { 1018 min_len--; 1019 buf[min_len] = 0; 1020 } 1021 1022 /* set new minimum length */ 1023 1024 min_len = max_len; 1025 } 1026 done: 1027 if (actlen != NULL) { 1028 if (err) 1029 *actlen = 0; 1030 else 1031 *actlen = min_len; 1032 } 1033 return (err); 1034 } 1035 1036 /*------------------------------------------------------------------------* 1037 * usbd_req_get_string_any 1038 * 1039 * This function will return the string given by "string_index" 1040 * using the first language ID. The maximum length "len" includes 1041 * the terminating zero. The "len" argument should be twice as 1042 * big pluss 2 bytes, compared with the actual maximum string length ! 1043 * 1044 * Returns: 1045 * 0: Success 1046 * Else: Failure 1047 *------------------------------------------------------------------------*/ 1048 usb_error_t 1049 usbd_req_get_string_any(struct usb_device *udev, struct mtx *mtx, char *buf, 1050 uint16_t len, uint8_t string_index) 1051 { 1052 char *s; 1053 uint8_t *temp; 1054 uint16_t i; 1055 uint16_t n; 1056 uint16_t c; 1057 uint8_t swap; 1058 usb_error_t err; 1059 1060 if (len == 0) { 1061 /* should not happen */ 1062 return (USB_ERR_NORMAL_COMPLETION); 1063 } 1064 if (string_index == 0) { 1065 /* this is the language table */ 1066 buf[0] = 0; 1067 return (USB_ERR_INVAL); 1068 } 1069 if (udev->flags.no_strings) { 1070 buf[0] = 0; 1071 return (USB_ERR_STALLED); 1072 } 1073 err = usbd_req_get_string_desc 1074 (udev, mtx, buf, len, udev->langid, string_index); 1075 if (err) { 1076 buf[0] = 0; 1077 return (err); 1078 } 1079 temp = (uint8_t *)buf; 1080 1081 if (temp[0] < 2) { 1082 /* string length is too short */ 1083 buf[0] = 0; 1084 return (USB_ERR_INVAL); 1085 } 1086 /* reserve one byte for terminating zero */ 1087 len--; 1088 1089 /* find maximum length */ 1090 s = buf; 1091 n = (temp[0] / 2) - 1; 1092 if (n > len) { 1093 n = len; 1094 } 1095 /* skip descriptor header */ 1096 temp += 2; 1097 1098 /* reset swap state */ 1099 swap = 3; 1100 1101 /* convert and filter */ 1102 for (i = 0; (i != n); i++) { 1103 c = UGETW(temp + (2 * i)); 1104 1105 /* convert from Unicode, handle buggy strings */ 1106 if (((c & 0xff00) == 0) && (swap & 1)) { 1107 /* Little Endian, default */ 1108 *s = c; 1109 swap = 1; 1110 } else if (((c & 0x00ff) == 0) && (swap & 2)) { 1111 /* Big Endian */ 1112 *s = c >> 8; 1113 swap = 2; 1114 } else { 1115 /* silently skip bad character */ 1116 continue; 1117 } 1118 1119 /* 1120 * Filter by default - We only allow alphanumerical 1121 * and a few more to avoid any problems with scripts 1122 * and daemons. 1123 */ 1124 if (isalpha(*s) || 1125 isdigit(*s) || 1126 *s == '-' || 1127 *s == '+' || 1128 *s == ' ' || 1129 *s == '.' || 1130 *s == ',') { 1131 /* allowed */ 1132 s++; 1133 } 1134 /* silently skip bad character */ 1135 } 1136 *s = 0; /* zero terminate resulting string */ 1137 return (USB_ERR_NORMAL_COMPLETION); 1138 } 1139 1140 /*------------------------------------------------------------------------* 1141 * usbd_req_get_string_desc 1142 * 1143 * If you don't know the language ID, consider using 1144 * "usbd_req_get_string_any()". 1145 * 1146 * Returns: 1147 * 0: Success 1148 * Else: Failure 1149 *------------------------------------------------------------------------*/ 1150 usb_error_t 1151 usbd_req_get_string_desc(struct usb_device *udev, struct mtx *mtx, void *sdesc, 1152 uint16_t max_len, uint16_t lang_id, 1153 uint8_t string_index) 1154 { 1155 return (usbd_req_get_desc(udev, mtx, NULL, sdesc, 2, max_len, lang_id, 1156 UDESC_STRING, string_index, 0)); 1157 } 1158 1159 /*------------------------------------------------------------------------* 1160 * usbd_req_get_config_desc_ptr 1161 * 1162 * This function is used in device side mode to retrieve the pointer 1163 * to the generated config descriptor. This saves allocating space for 1164 * an additional config descriptor when setting the configuration. 1165 * 1166 * Returns: 1167 * 0: Success 1168 * Else: Failure 1169 *------------------------------------------------------------------------*/ 1170 usb_error_t 1171 usbd_req_get_descriptor_ptr(struct usb_device *udev, 1172 struct usb_config_descriptor **ppcd, uint16_t wValue) 1173 { 1174 struct usb_device_request req; 1175 usb_handle_req_t *hr_func; 1176 const void *ptr; 1177 uint16_t len; 1178 usb_error_t err; 1179 1180 req.bmRequestType = UT_READ_DEVICE; 1181 req.bRequest = UR_GET_DESCRIPTOR; 1182 USETW(req.wValue, wValue); 1183 USETW(req.wIndex, 0); 1184 USETW(req.wLength, 0); 1185 1186 ptr = NULL; 1187 len = 0; 1188 1189 hr_func = usbd_get_hr_func(udev); 1190 1191 if (hr_func == NULL) 1192 err = USB_ERR_INVAL; 1193 else { 1194 USB_BUS_LOCK(udev->bus); 1195 err = (hr_func) (udev, &req, &ptr, &len); 1196 USB_BUS_UNLOCK(udev->bus); 1197 } 1198 1199 if (err) 1200 ptr = NULL; 1201 else if (ptr == NULL) 1202 err = USB_ERR_INVAL; 1203 1204 *ppcd = __DECONST(struct usb_config_descriptor *, ptr); 1205 1206 return (err); 1207 } 1208 1209 /*------------------------------------------------------------------------* 1210 * usbd_req_get_config_desc 1211 * 1212 * Returns: 1213 * 0: Success 1214 * Else: Failure 1215 *------------------------------------------------------------------------*/ 1216 usb_error_t 1217 usbd_req_get_config_desc(struct usb_device *udev, struct mtx *mtx, 1218 struct usb_config_descriptor *d, uint8_t conf_index) 1219 { 1220 usb_error_t err; 1221 1222 DPRINTFN(4, "confidx=%d\n", conf_index); 1223 1224 err = usbd_req_get_desc(udev, mtx, NULL, d, sizeof(*d), 1225 sizeof(*d), 0, UDESC_CONFIG, conf_index, 0); 1226 if (err) { 1227 goto done; 1228 } 1229 /* Extra sanity checking */ 1230 if (UGETW(d->wTotalLength) < sizeof(*d)) { 1231 err = USB_ERR_INVAL; 1232 } 1233 done: 1234 return (err); 1235 } 1236 1237 /*------------------------------------------------------------------------* 1238 * usbd_req_get_config_desc_full 1239 * 1240 * This function gets the complete USB configuration descriptor and 1241 * ensures that "wTotalLength" is correct. 1242 * 1243 * Returns: 1244 * 0: Success 1245 * Else: Failure 1246 *------------------------------------------------------------------------*/ 1247 usb_error_t 1248 usbd_req_get_config_desc_full(struct usb_device *udev, struct mtx *mtx, 1249 struct usb_config_descriptor **ppcd, struct malloc_type *mtype, 1250 uint8_t index) 1251 { 1252 struct usb_config_descriptor cd; 1253 struct usb_config_descriptor *cdesc; 1254 uint16_t len; 1255 usb_error_t err; 1256 1257 DPRINTFN(4, "index=%d\n", index); 1258 1259 *ppcd = NULL; 1260 1261 err = usbd_req_get_config_desc(udev, mtx, &cd, index); 1262 if (err) { 1263 return (err); 1264 } 1265 /* get full descriptor */ 1266 len = UGETW(cd.wTotalLength); 1267 if (len < sizeof(*cdesc)) { 1268 /* corrupt descriptor */ 1269 return (USB_ERR_INVAL); 1270 } 1271 cdesc = malloc(len, mtype, M_WAITOK); 1272 if (cdesc == NULL) { 1273 return (USB_ERR_NOMEM); 1274 } 1275 err = usbd_req_get_desc(udev, mtx, NULL, cdesc, len, len, 0, 1276 UDESC_CONFIG, index, 3); 1277 if (err) { 1278 free(cdesc, mtype); 1279 return (err); 1280 } 1281 /* make sure that the device is not fooling us: */ 1282 USETW(cdesc->wTotalLength, len); 1283 1284 *ppcd = cdesc; 1285 1286 return (0); /* success */ 1287 } 1288 1289 /*------------------------------------------------------------------------* 1290 * usbd_req_get_device_desc 1291 * 1292 * Returns: 1293 * 0: Success 1294 * Else: Failure 1295 *------------------------------------------------------------------------*/ 1296 usb_error_t 1297 usbd_req_get_device_desc(struct usb_device *udev, struct mtx *mtx, 1298 struct usb_device_descriptor *d) 1299 { 1300 DPRINTFN(4, "\n"); 1301 return (usbd_req_get_desc(udev, mtx, NULL, d, sizeof(*d), 1302 sizeof(*d), 0, UDESC_DEVICE, 0, 3)); 1303 } 1304 1305 /*------------------------------------------------------------------------* 1306 * usbd_req_get_alt_interface_no 1307 * 1308 * Returns: 1309 * 0: Success 1310 * Else: Failure 1311 *------------------------------------------------------------------------*/ 1312 usb_error_t 1313 usbd_req_get_alt_interface_no(struct usb_device *udev, struct mtx *mtx, 1314 uint8_t *alt_iface_no, uint8_t iface_index) 1315 { 1316 struct usb_interface *iface = usbd_get_iface(udev, iface_index); 1317 struct usb_device_request req; 1318 1319 if ((iface == NULL) || (iface->idesc == NULL)) 1320 return (USB_ERR_INVAL); 1321 1322 req.bmRequestType = UT_READ_INTERFACE; 1323 req.bRequest = UR_GET_INTERFACE; 1324 USETW(req.wValue, 0); 1325 req.wIndex[0] = iface->idesc->bInterfaceNumber; 1326 req.wIndex[1] = 0; 1327 USETW(req.wLength, 1); 1328 return (usbd_do_request(udev, mtx, &req, alt_iface_no)); 1329 } 1330 1331 /*------------------------------------------------------------------------* 1332 * usbd_req_set_alt_interface_no 1333 * 1334 * Returns: 1335 * 0: Success 1336 * Else: Failure 1337 *------------------------------------------------------------------------*/ 1338 usb_error_t 1339 usbd_req_set_alt_interface_no(struct usb_device *udev, struct mtx *mtx, 1340 uint8_t iface_index, uint8_t alt_no) 1341 { 1342 struct usb_interface *iface = usbd_get_iface(udev, iface_index); 1343 struct usb_device_request req; 1344 1345 if ((iface == NULL) || (iface->idesc == NULL)) 1346 return (USB_ERR_INVAL); 1347 1348 req.bmRequestType = UT_WRITE_INTERFACE; 1349 req.bRequest = UR_SET_INTERFACE; 1350 req.wValue[0] = alt_no; 1351 req.wValue[1] = 0; 1352 req.wIndex[0] = iface->idesc->bInterfaceNumber; 1353 req.wIndex[1] = 0; 1354 USETW(req.wLength, 0); 1355 return (usbd_do_request(udev, mtx, &req, 0)); 1356 } 1357 1358 /*------------------------------------------------------------------------* 1359 * usbd_req_get_device_status 1360 * 1361 * Returns: 1362 * 0: Success 1363 * Else: Failure 1364 *------------------------------------------------------------------------*/ 1365 usb_error_t 1366 usbd_req_get_device_status(struct usb_device *udev, struct mtx *mtx, 1367 struct usb_status *st) 1368 { 1369 struct usb_device_request req; 1370 1371 req.bmRequestType = UT_READ_DEVICE; 1372 req.bRequest = UR_GET_STATUS; 1373 USETW(req.wValue, 0); 1374 USETW(req.wIndex, 0); 1375 USETW(req.wLength, sizeof(*st)); 1376 return (usbd_do_request(udev, mtx, &req, st)); 1377 } 1378 1379 /*------------------------------------------------------------------------* 1380 * usbd_req_get_hub_descriptor 1381 * 1382 * Returns: 1383 * 0: Success 1384 * Else: Failure 1385 *------------------------------------------------------------------------*/ 1386 usb_error_t 1387 usbd_req_get_hub_descriptor(struct usb_device *udev, struct mtx *mtx, 1388 struct usb_hub_descriptor *hd, uint8_t nports) 1389 { 1390 struct usb_device_request req; 1391 uint16_t len = (nports + 7 + (8 * 8)) / 8; 1392 1393 req.bmRequestType = UT_READ_CLASS_DEVICE; 1394 req.bRequest = UR_GET_DESCRIPTOR; 1395 USETW2(req.wValue, UDESC_HUB, 0); 1396 USETW(req.wIndex, 0); 1397 USETW(req.wLength, len); 1398 return (usbd_do_request(udev, mtx, &req, hd)); 1399 } 1400 1401 /*------------------------------------------------------------------------* 1402 * usbd_req_get_ss_hub_descriptor 1403 * 1404 * Returns: 1405 * 0: Success 1406 * Else: Failure 1407 *------------------------------------------------------------------------*/ 1408 usb_error_t 1409 usbd_req_get_ss_hub_descriptor(struct usb_device *udev, struct mtx *mtx, 1410 struct usb_hub_ss_descriptor *hd, uint8_t nports) 1411 { 1412 struct usb_device_request req; 1413 uint16_t len = sizeof(*hd) - 32 + 1 + ((nports + 7) / 8); 1414 1415 req.bmRequestType = UT_READ_CLASS_DEVICE; 1416 req.bRequest = UR_GET_DESCRIPTOR; 1417 USETW2(req.wValue, UDESC_SS_HUB, 0); 1418 USETW(req.wIndex, 0); 1419 USETW(req.wLength, len); 1420 return (usbd_do_request(udev, mtx, &req, hd)); 1421 } 1422 1423 /*------------------------------------------------------------------------* 1424 * usbd_req_get_hub_status 1425 * 1426 * Returns: 1427 * 0: Success 1428 * Else: Failure 1429 *------------------------------------------------------------------------*/ 1430 usb_error_t 1431 usbd_req_get_hub_status(struct usb_device *udev, struct mtx *mtx, 1432 struct usb_hub_status *st) 1433 { 1434 struct usb_device_request req; 1435 1436 req.bmRequestType = UT_READ_CLASS_DEVICE; 1437 req.bRequest = UR_GET_STATUS; 1438 USETW(req.wValue, 0); 1439 USETW(req.wIndex, 0); 1440 USETW(req.wLength, sizeof(struct usb_hub_status)); 1441 return (usbd_do_request(udev, mtx, &req, st)); 1442 } 1443 1444 /*------------------------------------------------------------------------* 1445 * usbd_req_set_address 1446 * 1447 * This function is used to set the address for an USB device. After 1448 * port reset the USB device will respond at address zero. 1449 * 1450 * Returns: 1451 * 0: Success 1452 * Else: Failure 1453 *------------------------------------------------------------------------*/ 1454 usb_error_t 1455 usbd_req_set_address(struct usb_device *udev, struct mtx *mtx, uint16_t addr) 1456 { 1457 struct usb_device_request req; 1458 usb_error_t err; 1459 1460 DPRINTFN(6, "setting device address=%d\n", addr); 1461 1462 req.bmRequestType = UT_WRITE_DEVICE; 1463 req.bRequest = UR_SET_ADDRESS; 1464 USETW(req.wValue, addr); 1465 USETW(req.wIndex, 0); 1466 USETW(req.wLength, 0); 1467 1468 err = USB_ERR_INVAL; 1469 1470 /* check if USB controller handles set address */ 1471 if (udev->bus->methods->set_address != NULL) 1472 err = (udev->bus->methods->set_address) (udev, mtx, addr); 1473 1474 if (err != USB_ERR_INVAL) 1475 goto done; 1476 1477 /* Setting the address should not take more than 1 second ! */ 1478 err = usbd_do_request_flags(udev, mtx, &req, NULL, 1479 USB_DELAY_STATUS_STAGE, NULL, 1000); 1480 1481 done: 1482 /* allow device time to set new address */ 1483 usb_pause_mtx(mtx, 1484 USB_MS_TO_TICKS(USB_SET_ADDRESS_SETTLE)); 1485 1486 return (err); 1487 } 1488 1489 /*------------------------------------------------------------------------* 1490 * usbd_req_get_port_status 1491 * 1492 * Returns: 1493 * 0: Success 1494 * Else: Failure 1495 *------------------------------------------------------------------------*/ 1496 usb_error_t 1497 usbd_req_get_port_status(struct usb_device *udev, struct mtx *mtx, 1498 struct usb_port_status *ps, uint8_t port) 1499 { 1500 struct usb_device_request req; 1501 1502 req.bmRequestType = UT_READ_CLASS_OTHER; 1503 req.bRequest = UR_GET_STATUS; 1504 USETW(req.wValue, 0); 1505 req.wIndex[0] = port; 1506 req.wIndex[1] = 0; 1507 USETW(req.wLength, sizeof *ps); 1508 return (usbd_do_request(udev, mtx, &req, ps)); 1509 } 1510 1511 /*------------------------------------------------------------------------* 1512 * usbd_req_clear_hub_feature 1513 * 1514 * Returns: 1515 * 0: Success 1516 * Else: Failure 1517 *------------------------------------------------------------------------*/ 1518 usb_error_t 1519 usbd_req_clear_hub_feature(struct usb_device *udev, struct mtx *mtx, 1520 uint16_t sel) 1521 { 1522 struct usb_device_request req; 1523 1524 req.bmRequestType = UT_WRITE_CLASS_DEVICE; 1525 req.bRequest = UR_CLEAR_FEATURE; 1526 USETW(req.wValue, sel); 1527 USETW(req.wIndex, 0); 1528 USETW(req.wLength, 0); 1529 return (usbd_do_request(udev, mtx, &req, 0)); 1530 } 1531 1532 /*------------------------------------------------------------------------* 1533 * usbd_req_set_hub_feature 1534 * 1535 * Returns: 1536 * 0: Success 1537 * Else: Failure 1538 *------------------------------------------------------------------------*/ 1539 usb_error_t 1540 usbd_req_set_hub_feature(struct usb_device *udev, struct mtx *mtx, 1541 uint16_t sel) 1542 { 1543 struct usb_device_request req; 1544 1545 req.bmRequestType = UT_WRITE_CLASS_DEVICE; 1546 req.bRequest = UR_SET_FEATURE; 1547 USETW(req.wValue, sel); 1548 USETW(req.wIndex, 0); 1549 USETW(req.wLength, 0); 1550 return (usbd_do_request(udev, mtx, &req, 0)); 1551 } 1552 1553 /*------------------------------------------------------------------------* 1554 * usbd_req_set_hub_u1_timeout 1555 * 1556 * Returns: 1557 * 0: Success 1558 * Else: Failure 1559 *------------------------------------------------------------------------*/ 1560 usb_error_t 1561 usbd_req_set_hub_u1_timeout(struct usb_device *udev, struct mtx *mtx, 1562 uint8_t port, uint8_t timeout) 1563 { 1564 struct usb_device_request req; 1565 1566 req.bmRequestType = UT_WRITE_CLASS_OTHER; 1567 req.bRequest = UR_SET_FEATURE; 1568 USETW(req.wValue, UHF_PORT_U1_TIMEOUT); 1569 req.wIndex[0] = port; 1570 req.wIndex[1] = timeout; 1571 USETW(req.wLength, 0); 1572 return (usbd_do_request(udev, mtx, &req, 0)); 1573 } 1574 1575 /*------------------------------------------------------------------------* 1576 * usbd_req_set_hub_u2_timeout 1577 * 1578 * Returns: 1579 * 0: Success 1580 * Else: Failure 1581 *------------------------------------------------------------------------*/ 1582 usb_error_t 1583 usbd_req_set_hub_u2_timeout(struct usb_device *udev, struct mtx *mtx, 1584 uint8_t port, uint8_t timeout) 1585 { 1586 struct usb_device_request req; 1587 1588 req.bmRequestType = UT_WRITE_CLASS_OTHER; 1589 req.bRequest = UR_SET_FEATURE; 1590 USETW(req.wValue, UHF_PORT_U2_TIMEOUT); 1591 req.wIndex[0] = port; 1592 req.wIndex[1] = timeout; 1593 USETW(req.wLength, 0); 1594 return (usbd_do_request(udev, mtx, &req, 0)); 1595 } 1596 1597 /*------------------------------------------------------------------------* 1598 * usbd_req_set_hub_depth 1599 * 1600 * Returns: 1601 * 0: Success 1602 * Else: Failure 1603 *------------------------------------------------------------------------*/ 1604 usb_error_t 1605 usbd_req_set_hub_depth(struct usb_device *udev, struct mtx *mtx, 1606 uint16_t depth) 1607 { 1608 struct usb_device_request req; 1609 1610 req.bmRequestType = UT_WRITE_CLASS_DEVICE; 1611 req.bRequest = UR_SET_HUB_DEPTH; 1612 USETW(req.wValue, depth); 1613 USETW(req.wIndex, 0); 1614 USETW(req.wLength, 0); 1615 return (usbd_do_request(udev, mtx, &req, 0)); 1616 } 1617 1618 /*------------------------------------------------------------------------* 1619 * usbd_req_clear_port_feature 1620 * 1621 * Returns: 1622 * 0: Success 1623 * Else: Failure 1624 *------------------------------------------------------------------------*/ 1625 usb_error_t 1626 usbd_req_clear_port_feature(struct usb_device *udev, struct mtx *mtx, 1627 uint8_t port, uint16_t sel) 1628 { 1629 struct usb_device_request req; 1630 1631 req.bmRequestType = UT_WRITE_CLASS_OTHER; 1632 req.bRequest = UR_CLEAR_FEATURE; 1633 USETW(req.wValue, sel); 1634 req.wIndex[0] = port; 1635 req.wIndex[1] = 0; 1636 USETW(req.wLength, 0); 1637 return (usbd_do_request(udev, mtx, &req, 0)); 1638 } 1639 1640 /*------------------------------------------------------------------------* 1641 * usbd_req_set_port_feature 1642 * 1643 * Returns: 1644 * 0: Success 1645 * Else: Failure 1646 *------------------------------------------------------------------------*/ 1647 usb_error_t 1648 usbd_req_set_port_feature(struct usb_device *udev, struct mtx *mtx, 1649 uint8_t port, uint16_t sel) 1650 { 1651 struct usb_device_request req; 1652 1653 req.bmRequestType = UT_WRITE_CLASS_OTHER; 1654 req.bRequest = UR_SET_FEATURE; 1655 USETW(req.wValue, sel); 1656 req.wIndex[0] = port; 1657 req.wIndex[1] = 0; 1658 USETW(req.wLength, 0); 1659 return (usbd_do_request(udev, mtx, &req, 0)); 1660 } 1661 1662 /*------------------------------------------------------------------------* 1663 * usbd_req_set_protocol 1664 * 1665 * Returns: 1666 * 0: Success 1667 * Else: Failure 1668 *------------------------------------------------------------------------*/ 1669 usb_error_t 1670 usbd_req_set_protocol(struct usb_device *udev, struct mtx *mtx, 1671 uint8_t iface_index, uint16_t report) 1672 { 1673 struct usb_interface *iface = usbd_get_iface(udev, iface_index); 1674 struct usb_device_request req; 1675 1676 if ((iface == NULL) || (iface->idesc == NULL)) { 1677 return (USB_ERR_INVAL); 1678 } 1679 DPRINTFN(5, "iface=%p, report=%d, endpt=%d\n", 1680 iface, report, iface->idesc->bInterfaceNumber); 1681 1682 req.bmRequestType = UT_WRITE_CLASS_INTERFACE; 1683 req.bRequest = UR_SET_PROTOCOL; 1684 USETW(req.wValue, report); 1685 req.wIndex[0] = iface->idesc->bInterfaceNumber; 1686 req.wIndex[1] = 0; 1687 USETW(req.wLength, 0); 1688 return (usbd_do_request(udev, mtx, &req, 0)); 1689 } 1690 1691 /*------------------------------------------------------------------------* 1692 * usbd_req_set_report 1693 * 1694 * Returns: 1695 * 0: Success 1696 * Else: Failure 1697 *------------------------------------------------------------------------*/ 1698 usb_error_t 1699 usbd_req_set_report(struct usb_device *udev, struct mtx *mtx, void *data, uint16_t len, 1700 uint8_t iface_index, uint8_t type, uint8_t id) 1701 { 1702 struct usb_interface *iface = usbd_get_iface(udev, iface_index); 1703 struct usb_device_request req; 1704 1705 if ((iface == NULL) || (iface->idesc == NULL)) { 1706 return (USB_ERR_INVAL); 1707 } 1708 DPRINTFN(5, "len=%d\n", len); 1709 1710 req.bmRequestType = UT_WRITE_CLASS_INTERFACE; 1711 req.bRequest = UR_SET_REPORT; 1712 USETW2(req.wValue, type, id); 1713 req.wIndex[0] = iface->idesc->bInterfaceNumber; 1714 req.wIndex[1] = 0; 1715 USETW(req.wLength, len); 1716 return (usbd_do_request(udev, mtx, &req, data)); 1717 } 1718 1719 /*------------------------------------------------------------------------* 1720 * usbd_req_get_report 1721 * 1722 * Returns: 1723 * 0: Success 1724 * Else: Failure 1725 *------------------------------------------------------------------------*/ 1726 usb_error_t 1727 usbd_req_get_report(struct usb_device *udev, struct mtx *mtx, void *data, 1728 uint16_t len, uint8_t iface_index, uint8_t type, uint8_t id) 1729 { 1730 struct usb_interface *iface = usbd_get_iface(udev, iface_index); 1731 struct usb_device_request req; 1732 1733 if ((iface == NULL) || (iface->idesc == NULL) || (id == 0)) { 1734 return (USB_ERR_INVAL); 1735 } 1736 DPRINTFN(5, "len=%d\n", len); 1737 1738 req.bmRequestType = UT_READ_CLASS_INTERFACE; 1739 req.bRequest = UR_GET_REPORT; 1740 USETW2(req.wValue, type, id); 1741 req.wIndex[0] = iface->idesc->bInterfaceNumber; 1742 req.wIndex[1] = 0; 1743 USETW(req.wLength, len); 1744 return (usbd_do_request(udev, mtx, &req, data)); 1745 } 1746 1747 /*------------------------------------------------------------------------* 1748 * usbd_req_set_idle 1749 * 1750 * Returns: 1751 * 0: Success 1752 * Else: Failure 1753 *------------------------------------------------------------------------*/ 1754 usb_error_t 1755 usbd_req_set_idle(struct usb_device *udev, struct mtx *mtx, 1756 uint8_t iface_index, uint8_t duration, uint8_t id) 1757 { 1758 struct usb_interface *iface = usbd_get_iface(udev, iface_index); 1759 struct usb_device_request req; 1760 1761 if ((iface == NULL) || (iface->idesc == NULL)) { 1762 return (USB_ERR_INVAL); 1763 } 1764 DPRINTFN(5, "%d %d\n", duration, id); 1765 1766 req.bmRequestType = UT_WRITE_CLASS_INTERFACE; 1767 req.bRequest = UR_SET_IDLE; 1768 USETW2(req.wValue, duration, id); 1769 req.wIndex[0] = iface->idesc->bInterfaceNumber; 1770 req.wIndex[1] = 0; 1771 USETW(req.wLength, 0); 1772 return (usbd_do_request(udev, mtx, &req, 0)); 1773 } 1774 1775 /*------------------------------------------------------------------------* 1776 * usbd_req_get_report_descriptor 1777 * 1778 * Returns: 1779 * 0: Success 1780 * Else: Failure 1781 *------------------------------------------------------------------------*/ 1782 usb_error_t 1783 usbd_req_get_report_descriptor(struct usb_device *udev, struct mtx *mtx, 1784 void *d, uint16_t size, uint8_t iface_index) 1785 { 1786 struct usb_interface *iface = usbd_get_iface(udev, iface_index); 1787 struct usb_device_request req; 1788 1789 if ((iface == NULL) || (iface->idesc == NULL)) { 1790 return (USB_ERR_INVAL); 1791 } 1792 req.bmRequestType = UT_READ_INTERFACE; 1793 req.bRequest = UR_GET_DESCRIPTOR; 1794 USETW2(req.wValue, UDESC_REPORT, 0); /* report id should be 0 */ 1795 req.wIndex[0] = iface->idesc->bInterfaceNumber; 1796 req.wIndex[1] = 0; 1797 USETW(req.wLength, size); 1798 return (usbd_do_request(udev, mtx, &req, d)); 1799 } 1800 1801 /*------------------------------------------------------------------------* 1802 * usbd_req_set_config 1803 * 1804 * This function is used to select the current configuration number in 1805 * both USB device side mode and USB host side mode. When setting the 1806 * configuration the function of the interfaces can change. 1807 * 1808 * Returns: 1809 * 0: Success 1810 * Else: Failure 1811 *------------------------------------------------------------------------*/ 1812 usb_error_t 1813 usbd_req_set_config(struct usb_device *udev, struct mtx *mtx, uint8_t conf) 1814 { 1815 struct usb_device_request req; 1816 1817 DPRINTF("setting config %d\n", conf); 1818 1819 /* do "set configuration" request */ 1820 1821 req.bmRequestType = UT_WRITE_DEVICE; 1822 req.bRequest = UR_SET_CONFIG; 1823 req.wValue[0] = conf; 1824 req.wValue[1] = 0; 1825 USETW(req.wIndex, 0); 1826 USETW(req.wLength, 0); 1827 return (usbd_do_request(udev, mtx, &req, 0)); 1828 } 1829 1830 /*------------------------------------------------------------------------* 1831 * usbd_req_get_config 1832 * 1833 * Returns: 1834 * 0: Success 1835 * Else: Failure 1836 *------------------------------------------------------------------------*/ 1837 usb_error_t 1838 usbd_req_get_config(struct usb_device *udev, struct mtx *mtx, uint8_t *pconf) 1839 { 1840 struct usb_device_request req; 1841 1842 req.bmRequestType = UT_READ_DEVICE; 1843 req.bRequest = UR_GET_CONFIG; 1844 USETW(req.wValue, 0); 1845 USETW(req.wIndex, 0); 1846 USETW(req.wLength, 1); 1847 return (usbd_do_request(udev, mtx, &req, pconf)); 1848 } 1849 1850 /*------------------------------------------------------------------------* 1851 * usbd_setup_device_desc 1852 *------------------------------------------------------------------------*/ 1853 usb_error_t 1854 usbd_setup_device_desc(struct usb_device *udev, struct mtx *mtx) 1855 { 1856 usb_error_t err; 1857 1858 /* 1859 * Get the first 8 bytes of the device descriptor ! 1860 * 1861 * NOTE: "usbd_do_request()" will check the device descriptor 1862 * next time we do a request to see if the maximum packet size 1863 * changed! The 8 first bytes of the device descriptor 1864 * contains the maximum packet size to use on control endpoint 1865 * 0. If this value is different from "USB_MAX_IPACKET" a new 1866 * USB control request will be setup! 1867 */ 1868 switch (udev->speed) { 1869 case USB_SPEED_FULL: 1870 case USB_SPEED_LOW: 1871 err = usbd_req_get_desc(udev, mtx, NULL, &udev->ddesc, 1872 USB_MAX_IPACKET, USB_MAX_IPACKET, 0, UDESC_DEVICE, 0, 0); 1873 if (err != 0) { 1874 DPRINTFN(0, "getting device descriptor " 1875 "at addr %d failed, %s\n", udev->address, 1876 usbd_errstr(err)); 1877 return (err); 1878 } 1879 break; 1880 default: 1881 DPRINTF("Minimum MaxPacketSize is large enough " 1882 "to hold the complete device descriptor\n"); 1883 break; 1884 } 1885 1886 /* get the full device descriptor */ 1887 err = usbd_req_get_device_desc(udev, mtx, &udev->ddesc); 1888 1889 /* try one more time, if error */ 1890 if (err) 1891 err = usbd_req_get_device_desc(udev, mtx, &udev->ddesc); 1892 1893 if (err) { 1894 DPRINTF("addr=%d, getting full desc failed\n", 1895 udev->address); 1896 return (err); 1897 } 1898 1899 DPRINTF("adding unit addr=%d, rev=%02x, class=%d, " 1900 "subclass=%d, protocol=%d, maxpacket=%d, len=%d, speed=%d\n", 1901 udev->address, UGETW(udev->ddesc.bcdUSB), 1902 udev->ddesc.bDeviceClass, 1903 udev->ddesc.bDeviceSubClass, 1904 udev->ddesc.bDeviceProtocol, 1905 udev->ddesc.bMaxPacketSize, 1906 udev->ddesc.bLength, 1907 udev->speed); 1908 1909 return (err); 1910 } 1911 1912 /*------------------------------------------------------------------------* 1913 * usbd_req_re_enumerate 1914 * 1915 * NOTE: After this function returns the hardware is in the 1916 * unconfigured state! The application is responsible for setting a 1917 * new configuration. 1918 * 1919 * Returns: 1920 * 0: Success 1921 * Else: Failure 1922 *------------------------------------------------------------------------*/ 1923 usb_error_t 1924 usbd_req_re_enumerate(struct usb_device *udev, struct mtx *mtx) 1925 { 1926 struct usb_device *parent_hub; 1927 usb_error_t err; 1928 uint8_t old_addr; 1929 uint8_t do_retry = 1; 1930 1931 if (udev->flags.usb_mode != USB_MODE_HOST) { 1932 return (USB_ERR_INVAL); 1933 } 1934 old_addr = udev->address; 1935 parent_hub = udev->parent_hub; 1936 if (parent_hub == NULL) { 1937 return (USB_ERR_INVAL); 1938 } 1939 retry: 1940 err = usbd_req_reset_port(parent_hub, mtx, udev->port_no); 1941 if (err) { 1942 DPRINTFN(0, "addr=%d, port reset failed, %s\n", 1943 old_addr, usbd_errstr(err)); 1944 goto done; 1945 } 1946 1947 /* 1948 * After that the port has been reset our device should be at 1949 * address zero: 1950 */ 1951 udev->address = USB_START_ADDR; 1952 1953 /* reset "bMaxPacketSize" */ 1954 udev->ddesc.bMaxPacketSize = USB_MAX_IPACKET; 1955 1956 /* reset USB state */ 1957 usb_set_device_state(udev, USB_STATE_POWERED); 1958 1959 /* 1960 * Restore device address: 1961 */ 1962 err = usbd_req_set_address(udev, mtx, old_addr); 1963 if (err) { 1964 /* XXX ignore any errors! */ 1965 DPRINTFN(0, "addr=%d, set address failed! (%s, ignored)\n", 1966 old_addr, usbd_errstr(err)); 1967 } 1968 /* 1969 * Restore device address, if the controller driver did not 1970 * set a new one: 1971 */ 1972 if (udev->address == USB_START_ADDR) 1973 udev->address = old_addr; 1974 1975 /* setup the device descriptor and the initial "wMaxPacketSize" */ 1976 err = usbd_setup_device_desc(udev, mtx); 1977 1978 done: 1979 if (err && do_retry) { 1980 /* give the USB firmware some time to load */ 1981 usb_pause_mtx(mtx, hz / 2); 1982 /* no more retries after this retry */ 1983 do_retry = 0; 1984 /* try again */ 1985 goto retry; 1986 } 1987 /* restore address */ 1988 if (udev->address == USB_START_ADDR) 1989 udev->address = old_addr; 1990 /* update state, if successful */ 1991 if (err == 0) 1992 usb_set_device_state(udev, USB_STATE_ADDRESSED); 1993 return (err); 1994 } 1995 1996 /*------------------------------------------------------------------------* 1997 * usbd_req_clear_device_feature 1998 * 1999 * Returns: 2000 * 0: Success 2001 * Else: Failure 2002 *------------------------------------------------------------------------*/ 2003 usb_error_t 2004 usbd_req_clear_device_feature(struct usb_device *udev, struct mtx *mtx, 2005 uint16_t sel) 2006 { 2007 struct usb_device_request req; 2008 2009 req.bmRequestType = UT_WRITE_DEVICE; 2010 req.bRequest = UR_CLEAR_FEATURE; 2011 USETW(req.wValue, sel); 2012 USETW(req.wIndex, 0); 2013 USETW(req.wLength, 0); 2014 return (usbd_do_request(udev, mtx, &req, 0)); 2015 } 2016 2017 /*------------------------------------------------------------------------* 2018 * usbd_req_set_device_feature 2019 * 2020 * Returns: 2021 * 0: Success 2022 * Else: Failure 2023 *------------------------------------------------------------------------*/ 2024 usb_error_t 2025 usbd_req_set_device_feature(struct usb_device *udev, struct mtx *mtx, 2026 uint16_t sel) 2027 { 2028 struct usb_device_request req; 2029 2030 req.bmRequestType = UT_WRITE_DEVICE; 2031 req.bRequest = UR_SET_FEATURE; 2032 USETW(req.wValue, sel); 2033 USETW(req.wIndex, 0); 2034 USETW(req.wLength, 0); 2035 return (usbd_do_request(udev, mtx, &req, 0)); 2036 } 2037