1 /* $FreeBSD$ */ 2 /*- 3 * Copyright (c) 2008 Hans Petter Selasky. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27 #include <dev/usb/usb_defs.h> 28 #include <dev/usb/usb_mfunc.h> 29 #include <dev/usb/usb.h> 30 #include <dev/usb/usb_ioctl.h> 31 #include <dev/usb/usb_error.h> 32 33 #define USB_DEBUG_VAR ugen_debug 34 35 #include <dev/usb/usb_core.h> 36 #include <dev/usb/usb_mbuf.h> 37 #include <dev/usb/usb_dev.h> 38 #include <dev/usb/usb_process.h> 39 #include <dev/usb/usb_device.h> 40 #include <dev/usb/usb_debug.h> 41 #include <dev/usb/usb_request.h> 42 #include <dev/usb/usb_busdma.h> 43 #include <dev/usb/usb_util.h> 44 #include <dev/usb/usb_hub.h> 45 #include <dev/usb/usb_generic.h> 46 #include <dev/usb/usb_transfer.h> 47 48 #include <dev/usb/usb_controller.h> 49 #include <dev/usb/usb_bus.h> 50 51 /* defines */ 52 53 #define UGEN_BULK_FS_BUFFER_SIZE (64*32) /* bytes */ 54 #define UGEN_BULK_HS_BUFFER_SIZE (1024*32) /* bytes */ 55 #define UGEN_HW_FRAMES 50 /* number of milliseconds per transfer */ 56 57 /* function prototypes */ 58 59 static usb2_callback_t ugen_read_clear_stall_callback; 60 static usb2_callback_t ugen_write_clear_stall_callback; 61 static usb2_callback_t ugen_default_read_callback; 62 static usb2_callback_t ugen_default_write_callback; 63 static usb2_callback_t ugen_isoc_read_callback; 64 static usb2_callback_t ugen_isoc_write_callback; 65 static usb2_callback_t ugen_default_fs_callback; 66 67 static usb2_fifo_open_t ugen_open; 68 static usb2_fifo_close_t ugen_close; 69 static usb2_fifo_ioctl_t ugen_ioctl; 70 static usb2_fifo_ioctl_t ugen_ioctl_post; 71 static usb2_fifo_cmd_t ugen_start_read; 72 static usb2_fifo_cmd_t ugen_start_write; 73 static usb2_fifo_cmd_t ugen_stop_io; 74 75 static int ugen_transfer_setup(struct usb2_fifo *, 76 const struct usb2_config *, uint8_t); 77 static int ugen_open_pipe_write(struct usb2_fifo *); 78 static int ugen_open_pipe_read(struct usb2_fifo *); 79 static int ugen_set_config(struct usb2_fifo *, uint8_t); 80 static int ugen_set_interface(struct usb2_fifo *, uint8_t, uint8_t); 81 static int ugen_get_cdesc(struct usb2_fifo *, struct usb2_gen_descriptor *); 82 static int ugen_get_sdesc(struct usb2_fifo *, struct usb2_gen_descriptor *); 83 static int ugen_get_iface_driver(struct usb2_fifo *f, struct usb2_gen_descriptor *ugd); 84 static int usb2_gen_fill_deviceinfo(struct usb2_fifo *, 85 struct usb2_device_info *); 86 static int ugen_re_enumerate(struct usb2_fifo *); 87 static int ugen_iface_ioctl(struct usb2_fifo *, u_long, void *, int); 88 static uint8_t ugen_fs_get_complete(struct usb2_fifo *, uint8_t *); 89 static int ugen_fs_uninit(struct usb2_fifo *f); 90 91 /* structures */ 92 93 struct usb2_fifo_methods usb2_ugen_methods = { 94 .f_open = &ugen_open, 95 .f_close = &ugen_close, 96 .f_ioctl = &ugen_ioctl, 97 .f_ioctl_post = &ugen_ioctl_post, 98 .f_start_read = &ugen_start_read, 99 .f_stop_read = &ugen_stop_io, 100 .f_start_write = &ugen_start_write, 101 .f_stop_write = &ugen_stop_io, 102 }; 103 104 #if USB_DEBUG 105 static int ugen_debug = 0; 106 107 SYSCTL_NODE(_hw_usb2, OID_AUTO, ugen, CTLFLAG_RW, 0, "USB generic"); 108 SYSCTL_INT(_hw_usb2_ugen, OID_AUTO, debug, CTLFLAG_RW, &ugen_debug, 109 0, "Debug level"); 110 #endif 111 112 113 /* prototypes */ 114 115 static int 116 ugen_transfer_setup(struct usb2_fifo *f, 117 const struct usb2_config *setup, uint8_t n_setup) 118 { 119 struct usb2_pipe *pipe = f->priv_sc0; 120 struct usb2_device *udev = f->udev; 121 uint8_t iface_index = pipe->iface_index; 122 int error; 123 124 mtx_unlock(f->priv_mtx); 125 126 /* 127 * "usb2_transfer_setup()" can sleep so one needs to make a wrapper, 128 * exiting the mutex and checking things 129 */ 130 error = usb2_transfer_setup(udev, &iface_index, f->xfer, 131 setup, n_setup, f, f->priv_mtx); 132 if (error == 0) { 133 134 if (f->xfer[0]->nframes == 1) { 135 error = usb2_fifo_alloc_buffer(f, 136 f->xfer[0]->max_data_length, 2); 137 } else { 138 error = usb2_fifo_alloc_buffer(f, 139 f->xfer[0]->max_frame_size, 140 2 * f->xfer[0]->nframes); 141 } 142 if (error) { 143 usb2_transfer_unsetup(f->xfer, n_setup); 144 } 145 } 146 mtx_lock(f->priv_mtx); 147 148 return (error); 149 } 150 151 static int 152 ugen_open(struct usb2_fifo *f, int fflags) 153 { 154 struct usb2_pipe *pipe = f->priv_sc0; 155 struct usb2_endpoint_descriptor *ed = pipe->edesc; 156 uint8_t type; 157 158 DPRINTFN(6, "flag=0x%x\n", fflags); 159 160 mtx_lock(f->priv_mtx); 161 switch (usb2_get_speed(f->udev)) { 162 case USB_SPEED_LOW: 163 case USB_SPEED_FULL: 164 f->nframes = UGEN_HW_FRAMES; 165 f->bufsize = UGEN_BULK_FS_BUFFER_SIZE; 166 break; 167 default: 168 f->nframes = UGEN_HW_FRAMES * 8; 169 f->bufsize = UGEN_BULK_HS_BUFFER_SIZE; 170 break; 171 } 172 173 type = ed->bmAttributes & UE_XFERTYPE; 174 if (type == UE_INTERRUPT) { 175 f->bufsize = 0; /* use "wMaxPacketSize" */ 176 } 177 f->timeout = USB_NO_TIMEOUT; 178 f->flag_short = 0; 179 f->fifo_zlp = 0; 180 mtx_unlock(f->priv_mtx); 181 182 return (0); 183 } 184 185 static void 186 ugen_close(struct usb2_fifo *f, int fflags) 187 { 188 DPRINTFN(6, "flag=0x%x\n", fflags); 189 190 /* cleanup */ 191 192 mtx_lock(f->priv_mtx); 193 usb2_transfer_stop(f->xfer[0]); 194 usb2_transfer_stop(f->xfer[1]); 195 mtx_unlock(f->priv_mtx); 196 197 usb2_transfer_unsetup(f->xfer, 2); 198 usb2_fifo_free_buffer(f); 199 200 if (ugen_fs_uninit(f)) { 201 /* ignore any errors - we are closing */ 202 DPRINTFN(6, "no FIFOs\n"); 203 } 204 } 205 206 static int 207 ugen_open_pipe_write(struct usb2_fifo *f) 208 { 209 struct usb2_config usb2_config[2]; 210 struct usb2_pipe *pipe = f->priv_sc0; 211 struct usb2_endpoint_descriptor *ed = pipe->edesc; 212 213 mtx_assert(f->priv_mtx, MA_OWNED); 214 215 if (f->xfer[0] || f->xfer[1]) { 216 /* transfers are already opened */ 217 return (0); 218 } 219 bzero(usb2_config, sizeof(usb2_config)); 220 221 usb2_config[1].type = UE_CONTROL; 222 usb2_config[1].endpoint = 0; 223 usb2_config[1].direction = UE_DIR_ANY; 224 usb2_config[1].mh.timeout = 1000; /* 1 second */ 225 usb2_config[1].mh.interval = 50;/* 50 milliseconds */ 226 usb2_config[1].mh.bufsize = sizeof(struct usb2_device_request); 227 usb2_config[1].mh.callback = &ugen_write_clear_stall_callback; 228 229 usb2_config[0].type = ed->bmAttributes & UE_XFERTYPE; 230 usb2_config[0].endpoint = ed->bEndpointAddress & UE_ADDR; 231 usb2_config[0].direction = ed->bEndpointAddress & (UE_DIR_OUT | UE_DIR_IN); 232 usb2_config[0].mh.interval = USB_DEFAULT_INTERVAL; 233 usb2_config[0].mh.flags.proxy_buffer = 1; 234 235 switch (ed->bmAttributes & UE_XFERTYPE) { 236 case UE_INTERRUPT: 237 case UE_BULK: 238 if (f->flag_short) { 239 usb2_config[0].mh.flags.force_short_xfer = 1; 240 } 241 usb2_config[0].mh.callback = &ugen_default_write_callback; 242 usb2_config[0].mh.timeout = f->timeout; 243 usb2_config[0].mh.frames = 1; 244 usb2_config[0].mh.bufsize = f->bufsize; 245 usb2_config[0].md = usb2_config[0].mh; /* symmetric config */ 246 if (ugen_transfer_setup(f, usb2_config, 2)) { 247 return (EIO); 248 } 249 /* first transfer does not clear stall */ 250 f->flag_stall = 0; 251 break; 252 253 case UE_ISOCHRONOUS: 254 usb2_config[0].mh.flags.short_xfer_ok = 1; 255 usb2_config[0].mh.bufsize = 0; /* use default */ 256 usb2_config[0].mh.frames = f->nframes; 257 usb2_config[0].mh.callback = &ugen_isoc_write_callback; 258 usb2_config[0].mh.timeout = 0; 259 usb2_config[0].md = usb2_config[0].mh; /* symmetric config */ 260 261 /* clone configuration */ 262 usb2_config[1] = usb2_config[0]; 263 264 if (ugen_transfer_setup(f, usb2_config, 2)) { 265 return (EIO); 266 } 267 break; 268 default: 269 return (EINVAL); 270 } 271 return (0); 272 } 273 274 static int 275 ugen_open_pipe_read(struct usb2_fifo *f) 276 { 277 struct usb2_config usb2_config[2]; 278 struct usb2_pipe *pipe = f->priv_sc0; 279 struct usb2_endpoint_descriptor *ed = pipe->edesc; 280 281 mtx_assert(f->priv_mtx, MA_OWNED); 282 283 if (f->xfer[0] || f->xfer[1]) { 284 /* transfers are already opened */ 285 return (0); 286 } 287 bzero(usb2_config, sizeof(usb2_config)); 288 289 usb2_config[1].type = UE_CONTROL; 290 usb2_config[1].endpoint = 0; 291 usb2_config[1].direction = UE_DIR_ANY; 292 usb2_config[1].mh.timeout = 1000; /* 1 second */ 293 usb2_config[1].mh.interval = 50;/* 50 milliseconds */ 294 usb2_config[1].mh.bufsize = sizeof(struct usb2_device_request); 295 usb2_config[1].mh.callback = &ugen_read_clear_stall_callback; 296 297 usb2_config[0].type = ed->bmAttributes & UE_XFERTYPE; 298 usb2_config[0].endpoint = ed->bEndpointAddress & UE_ADDR; 299 usb2_config[0].direction = UE_DIR_IN; 300 usb2_config[0].mh.interval = USB_DEFAULT_INTERVAL; 301 usb2_config[0].mh.flags.proxy_buffer = 1; 302 303 switch (ed->bmAttributes & UE_XFERTYPE) { 304 case UE_INTERRUPT: 305 case UE_BULK: 306 if (f->flag_short) { 307 usb2_config[0].mh.flags.short_xfer_ok = 1; 308 } 309 usb2_config[0].mh.timeout = f->timeout; 310 usb2_config[0].mh.frames = 1; 311 usb2_config[0].mh.callback = &ugen_default_read_callback; 312 usb2_config[0].mh.bufsize = f->bufsize; 313 usb2_config[0].md = usb2_config[0].mh; /* symmetric config */ 314 315 if (ugen_transfer_setup(f, usb2_config, 2)) { 316 return (EIO); 317 } 318 /* first transfer does not clear stall */ 319 f->flag_stall = 0; 320 break; 321 322 case UE_ISOCHRONOUS: 323 usb2_config[0].mh.flags.short_xfer_ok = 1; 324 usb2_config[0].mh.bufsize = 0; /* use default */ 325 usb2_config[0].mh.frames = f->nframes; 326 usb2_config[0].mh.callback = &ugen_isoc_read_callback; 327 usb2_config[0].mh.timeout = 0; 328 usb2_config[0].md = usb2_config[0].mh; /* symmetric config */ 329 330 /* clone configuration */ 331 usb2_config[1] = usb2_config[0]; 332 333 if (ugen_transfer_setup(f, usb2_config, 2)) { 334 return (EIO); 335 } 336 break; 337 338 default: 339 return (EINVAL); 340 } 341 return (0); 342 } 343 344 static void 345 ugen_start_read(struct usb2_fifo *f) 346 { 347 /* check that pipes are open */ 348 if (ugen_open_pipe_read(f)) { 349 /* signal error */ 350 usb2_fifo_put_data_error(f); 351 } 352 /* start transfers */ 353 usb2_transfer_start(f->xfer[0]); 354 usb2_transfer_start(f->xfer[1]); 355 } 356 357 static void 358 ugen_start_write(struct usb2_fifo *f) 359 { 360 /* check that pipes are open */ 361 if (ugen_open_pipe_write(f)) { 362 /* signal error */ 363 usb2_fifo_get_data_error(f); 364 } 365 /* start transfers */ 366 usb2_transfer_start(f->xfer[0]); 367 usb2_transfer_start(f->xfer[1]); 368 } 369 370 static void 371 ugen_stop_io(struct usb2_fifo *f) 372 { 373 /* stop transfers */ 374 usb2_transfer_stop(f->xfer[0]); 375 usb2_transfer_stop(f->xfer[1]); 376 } 377 378 static void 379 ugen_default_read_callback(struct usb2_xfer *xfer) 380 { 381 struct usb2_fifo *f = xfer->priv_sc; 382 struct usb2_mbuf *m; 383 384 DPRINTFN(4, "actlen=%u, aframes=%u\n", xfer->actlen, xfer->aframes); 385 386 switch (USB_GET_STATE(xfer)) { 387 case USB_ST_TRANSFERRED: 388 if (xfer->actlen == 0) { 389 if (f->fifo_zlp != 4) { 390 f->fifo_zlp++; 391 } else { 392 /* 393 * Throttle a little bit we have multiple ZLPs 394 * in a row! 395 */ 396 xfer->interval = 64; /* ms */ 397 } 398 } else { 399 /* clear throttle */ 400 xfer->interval = 0; 401 f->fifo_zlp = 0; 402 } 403 usb2_fifo_put_data(f, xfer->frbuffers, 0, 404 xfer->actlen, 1); 405 406 case USB_ST_SETUP: 407 if (f->flag_stall) { 408 usb2_transfer_start(f->xfer[1]); 409 break; 410 } 411 USB_IF_POLL(&f->free_q, m); 412 if (m) { 413 xfer->frlengths[0] = xfer->max_data_length; 414 usb2_start_hardware(xfer); 415 } 416 break; 417 418 default: /* Error */ 419 if (xfer->error != USB_ERR_CANCELLED) { 420 f->flag_stall = 1; 421 f->fifo_zlp = 0; 422 usb2_transfer_start(f->xfer[1]); 423 } 424 break; 425 } 426 } 427 428 static void 429 ugen_default_write_callback(struct usb2_xfer *xfer) 430 { 431 struct usb2_fifo *f = xfer->priv_sc; 432 uint32_t actlen; 433 434 DPRINTFN(4, "actlen=%u, aframes=%u\n", xfer->actlen, xfer->aframes); 435 436 switch (USB_GET_STATE(xfer)) { 437 case USB_ST_SETUP: 438 case USB_ST_TRANSFERRED: 439 /* 440 * If writing is in stall, just jump to clear stall 441 * callback and solve the situation. 442 */ 443 if (f->flag_stall) { 444 usb2_transfer_start(f->xfer[1]); 445 break; 446 } 447 /* 448 * Write data, setup and perform hardware transfer. 449 */ 450 if (usb2_fifo_get_data(f, xfer->frbuffers, 0, 451 xfer->max_data_length, &actlen, 0)) { 452 xfer->frlengths[0] = actlen; 453 usb2_start_hardware(xfer); 454 } 455 break; 456 457 default: /* Error */ 458 if (xfer->error != USB_ERR_CANCELLED) { 459 f->flag_stall = 1; 460 usb2_transfer_start(f->xfer[1]); 461 } 462 break; 463 } 464 } 465 466 static void 467 ugen_read_clear_stall_callback(struct usb2_xfer *xfer) 468 { 469 struct usb2_fifo *f = xfer->priv_sc; 470 struct usb2_xfer *xfer_other = f->xfer[0]; 471 472 if (f->flag_stall == 0) { 473 /* nothing to do */ 474 return; 475 } 476 if (usb2_clear_stall_callback(xfer, xfer_other)) { 477 DPRINTFN(5, "f=%p: stall cleared\n", f); 478 f->flag_stall = 0; 479 usb2_transfer_start(xfer_other); 480 } 481 } 482 483 static void 484 ugen_write_clear_stall_callback(struct usb2_xfer *xfer) 485 { 486 struct usb2_fifo *f = xfer->priv_sc; 487 struct usb2_xfer *xfer_other = f->xfer[0]; 488 489 if (f->flag_stall == 0) { 490 /* nothing to do */ 491 return; 492 } 493 if (usb2_clear_stall_callback(xfer, xfer_other)) { 494 DPRINTFN(5, "f=%p: stall cleared\n", f); 495 f->flag_stall = 0; 496 usb2_transfer_start(xfer_other); 497 } 498 } 499 500 static void 501 ugen_isoc_read_callback(struct usb2_xfer *xfer) 502 { 503 struct usb2_fifo *f = xfer->priv_sc; 504 uint32_t offset; 505 uint16_t n; 506 507 DPRINTFN(4, "actlen=%u, aframes=%u\n", xfer->actlen, xfer->aframes); 508 509 switch (USB_GET_STATE(xfer)) { 510 case USB_ST_TRANSFERRED: 511 512 DPRINTFN(6, "actlen=%d\n", xfer->actlen); 513 514 offset = 0; 515 516 for (n = 0; n != xfer->aframes; n++) { 517 usb2_fifo_put_data(f, xfer->frbuffers, offset, 518 xfer->frlengths[n], 1); 519 offset += xfer->max_frame_size; 520 } 521 522 case USB_ST_SETUP: 523 tr_setup: 524 for (n = 0; n != xfer->nframes; n++) { 525 /* setup size for next transfer */ 526 xfer->frlengths[n] = xfer->max_frame_size; 527 } 528 usb2_start_hardware(xfer); 529 break; 530 531 default: /* Error */ 532 if (xfer->error == USB_ERR_CANCELLED) { 533 break; 534 } 535 goto tr_setup; 536 } 537 } 538 539 static void 540 ugen_isoc_write_callback(struct usb2_xfer *xfer) 541 { 542 struct usb2_fifo *f = xfer->priv_sc; 543 uint32_t actlen; 544 uint32_t offset; 545 uint16_t n; 546 547 DPRINTFN(4, "actlen=%u, aframes=%u\n", xfer->actlen, xfer->aframes); 548 549 switch (USB_GET_STATE(xfer)) { 550 case USB_ST_TRANSFERRED: 551 case USB_ST_SETUP: 552 tr_setup: 553 offset = 0; 554 for (n = 0; n != xfer->nframes; n++) { 555 if (usb2_fifo_get_data(f, xfer->frbuffers, offset, 556 xfer->max_frame_size, &actlen, 1)) { 557 xfer->frlengths[n] = actlen; 558 offset += actlen; 559 } else { 560 break; 561 } 562 } 563 564 for (; n != xfer->nframes; n++) { 565 /* fill in zero frames */ 566 xfer->frlengths[n] = 0; 567 } 568 usb2_start_hardware(xfer); 569 break; 570 571 default: /* Error */ 572 if (xfer->error == USB_ERR_CANCELLED) { 573 break; 574 } 575 goto tr_setup; 576 } 577 } 578 579 static int 580 ugen_set_config(struct usb2_fifo *f, uint8_t index) 581 { 582 DPRINTFN(2, "index %u\n", index); 583 584 if (f->udev->flags.usb2_mode != USB_MODE_HOST) { 585 /* not possible in device side mode */ 586 return (ENOTTY); 587 } 588 if (f->udev->curr_config_index == index) { 589 /* no change needed */ 590 return (0); 591 } 592 /* make sure all FIFO's are gone */ 593 /* else there can be a deadlock */ 594 if (ugen_fs_uninit(f)) { 595 /* ignore any errors */ 596 DPRINTFN(6, "no FIFOs\n"); 597 } 598 /* change setting - will free generic FIFOs, if any */ 599 if (usb2_set_config_index(f->udev, index)) { 600 return (EIO); 601 } 602 /* probe and attach */ 603 if (usb2_probe_and_attach(f->udev, USB_IFACE_INDEX_ANY)) { 604 return (EIO); 605 } 606 return (0); 607 } 608 609 static int 610 ugen_set_interface(struct usb2_fifo *f, 611 uint8_t iface_index, uint8_t alt_index) 612 { 613 DPRINTFN(2, "%u, %u\n", iface_index, alt_index); 614 615 if (f->udev->flags.usb2_mode != USB_MODE_HOST) { 616 /* not possible in device side mode */ 617 return (ENOTTY); 618 } 619 /* make sure all FIFO's are gone */ 620 /* else there can be a deadlock */ 621 if (ugen_fs_uninit(f)) { 622 /* ignore any errors */ 623 DPRINTFN(6, "no FIFOs\n"); 624 } 625 /* change setting - will free generic FIFOs, if any */ 626 if (usb2_set_alt_interface_index(f->udev, iface_index, alt_index)) { 627 return (EIO); 628 } 629 /* probe and attach */ 630 if (usb2_probe_and_attach(f->udev, iface_index)) { 631 return (EIO); 632 } 633 return (0); 634 } 635 636 /*------------------------------------------------------------------------* 637 * ugen_get_cdesc 638 * 639 * This function will retrieve the complete configuration descriptor 640 * at the given index. 641 *------------------------------------------------------------------------*/ 642 static int 643 ugen_get_cdesc(struct usb2_fifo *f, struct usb2_gen_descriptor *ugd) 644 { 645 struct usb2_config_descriptor *cdesc; 646 struct usb2_device *udev = f->udev; 647 int error; 648 uint16_t len; 649 uint8_t free_data; 650 651 DPRINTFN(6, "\n"); 652 653 if (ugd->ugd_data == NULL) { 654 /* userland pointer should not be zero */ 655 return (EINVAL); 656 } 657 if ((ugd->ugd_config_index == USB_UNCONFIG_INDEX) || 658 (ugd->ugd_config_index == udev->curr_config_index)) { 659 cdesc = usb2_get_config_descriptor(udev); 660 if (cdesc == NULL) { 661 return (ENXIO); 662 } 663 free_data = 0; 664 665 } else { 666 if (usb2_req_get_config_desc_full(udev, 667 NULL, &cdesc, M_USBDEV, 668 ugd->ugd_config_index)) { 669 return (ENXIO); 670 } 671 free_data = 1; 672 } 673 674 len = UGETW(cdesc->wTotalLength); 675 if (len > ugd->ugd_maxlen) { 676 len = ugd->ugd_maxlen; 677 } 678 DPRINTFN(6, "len=%u\n", len); 679 680 ugd->ugd_actlen = len; 681 ugd->ugd_offset = 0; 682 683 error = copyout(cdesc, ugd->ugd_data, len); 684 685 if (free_data) { 686 free(cdesc, M_USBDEV); 687 } 688 return (error); 689 } 690 691 static int 692 ugen_get_sdesc(struct usb2_fifo *f, struct usb2_gen_descriptor *ugd) 693 { 694 void *ptr = f->udev->bus->scratch[0].data; 695 uint16_t size = sizeof(f->udev->bus->scratch[0].data); 696 int error; 697 698 if (usb2_req_get_string_desc(f->udev, NULL, ptr, 699 size, ugd->ugd_lang_id, ugd->ugd_string_index)) { 700 error = EINVAL; 701 } else { 702 703 if (size > ((uint8_t *)ptr)[0]) { 704 size = ((uint8_t *)ptr)[0]; 705 } 706 if (size > ugd->ugd_maxlen) { 707 size = ugd->ugd_maxlen; 708 } 709 ugd->ugd_actlen = size; 710 ugd->ugd_offset = 0; 711 712 error = copyout(ptr, ugd->ugd_data, size); 713 } 714 return (error); 715 } 716 717 /*------------------------------------------------------------------------* 718 * ugen_get_iface_driver 719 * 720 * This function generates an USB interface description for userland. 721 * 722 * Returns: 723 * 0: Success 724 * Else: Failure 725 *------------------------------------------------------------------------*/ 726 static int 727 ugen_get_iface_driver(struct usb2_fifo *f, struct usb2_gen_descriptor *ugd) 728 { 729 struct usb2_device *udev = f->udev; 730 struct usb2_interface *iface; 731 const char *ptr; 732 const char *desc; 733 unsigned int len; 734 unsigned int maxlen; 735 char buf[128]; 736 int error; 737 738 DPRINTFN(6, "\n"); 739 740 if ((ugd->ugd_data == NULL) || (ugd->ugd_maxlen == 0)) { 741 /* userland pointer should not be zero */ 742 return (EINVAL); 743 } 744 745 iface = usb2_get_iface(udev, ugd->ugd_iface_index); 746 if ((iface == NULL) || (iface->idesc == NULL)) { 747 /* invalid interface index */ 748 return (EINVAL); 749 } 750 751 /* read out device nameunit string, if any */ 752 if ((iface->subdev != NULL) && 753 device_is_attached(iface->subdev) && 754 (ptr = device_get_nameunit(iface->subdev)) && 755 (desc = device_get_desc(iface->subdev))) { 756 757 /* print description */ 758 snprintf(buf, sizeof(buf), "%s: <%s>", ptr, desc); 759 760 /* range checks */ 761 maxlen = ugd->ugd_maxlen - 1; 762 len = strlen(buf); 763 if (len > maxlen) 764 len = maxlen; 765 766 /* update actual length, including terminating zero */ 767 ugd->ugd_actlen = len + 1; 768 769 /* copy out interface description */ 770 error = copyout(buf, ugd->ugd_data, ugd->ugd_actlen); 771 } else { 772 /* zero length string is default */ 773 error = copyout("", ugd->ugd_data, 1); 774 } 775 return (error); 776 } 777 778 /*------------------------------------------------------------------------* 779 * usb2_gen_fill_deviceinfo 780 * 781 * This function dumps information about an USB device to the 782 * structure pointed to by the "di" argument. 783 * 784 * Returns: 785 * 0: Success 786 * Else: Failure 787 *------------------------------------------------------------------------*/ 788 static int 789 usb2_gen_fill_deviceinfo(struct usb2_fifo *f, struct usb2_device_info *di) 790 { 791 struct usb2_device *udev; 792 struct usb2_device *hub; 793 794 udev = f->udev; 795 796 bzero(di, sizeof(di[0])); 797 798 di->udi_bus = device_get_unit(udev->bus->bdev); 799 di->udi_addr = udev->address; 800 di->udi_index = udev->device_index; 801 strlcpy(di->udi_serial, udev->serial, 802 sizeof(di->udi_serial)); 803 strlcpy(di->udi_vendor, udev->manufacturer, 804 sizeof(di->udi_vendor)); 805 strlcpy(di->udi_product, udev->product, 806 sizeof(di->udi_product)); 807 usb2_printBCD(di->udi_release, sizeof(di->udi_release), 808 UGETW(udev->ddesc.bcdDevice)); 809 di->udi_vendorNo = UGETW(udev->ddesc.idVendor); 810 di->udi_productNo = UGETW(udev->ddesc.idProduct); 811 di->udi_releaseNo = UGETW(udev->ddesc.bcdDevice); 812 di->udi_class = udev->ddesc.bDeviceClass; 813 di->udi_subclass = udev->ddesc.bDeviceSubClass; 814 di->udi_protocol = udev->ddesc.bDeviceProtocol; 815 di->udi_config_no = udev->curr_config_no; 816 di->udi_config_index = udev->curr_config_index; 817 di->udi_power = udev->flags.self_powered ? 0 : udev->power; 818 di->udi_speed = udev->speed; 819 di->udi_mode = udev->flags.usb2_mode; 820 di->udi_power_mode = udev->power_mode; 821 if (udev->flags.suspended) { 822 di->udi_suspended = 1; 823 } else { 824 di->udi_suspended = 0; 825 } 826 827 hub = udev->parent_hub; 828 if (hub) { 829 di->udi_hubaddr = hub->address; 830 di->udi_hubindex = hub->device_index; 831 di->udi_hubport = udev->port_no; 832 } 833 return (0); 834 } 835 836 /*------------------------------------------------------------------------* 837 * ugen_check_request 838 * 839 * Return values: 840 * 0: Access allowed 841 * Else: No access 842 *------------------------------------------------------------------------*/ 843 static int 844 ugen_check_request(struct usb2_device *udev, struct usb2_device_request *req) 845 { 846 struct usb2_pipe *pipe; 847 int error; 848 849 /* 850 * Avoid requests that would damage the bus integrity: 851 */ 852 if (((req->bmRequestType == UT_WRITE_DEVICE) && 853 (req->bRequest == UR_SET_ADDRESS)) || 854 ((req->bmRequestType == UT_WRITE_DEVICE) && 855 (req->bRequest == UR_SET_CONFIG)) || 856 ((req->bmRequestType == UT_WRITE_INTERFACE) && 857 (req->bRequest == UR_SET_INTERFACE))) { 858 /* 859 * These requests can be useful for testing USB drivers. 860 */ 861 error = priv_check(curthread, PRIV_DRIVER); 862 if (error) { 863 return (error); 864 } 865 } 866 /* 867 * Special case - handle clearing of stall 868 */ 869 if (req->bmRequestType == UT_WRITE_ENDPOINT) { 870 871 pipe = usb2_get_pipe_by_addr(udev, req->wIndex[0]); 872 if (pipe == NULL) { 873 return (EINVAL); 874 } 875 if ((req->bRequest == UR_CLEAR_FEATURE) && 876 (UGETW(req->wValue) == UF_ENDPOINT_HALT)) { 877 usb2_clear_data_toggle(udev, pipe); 878 } 879 } 880 /* TODO: add more checks to verify the interface index */ 881 882 return (0); 883 } 884 885 int 886 ugen_do_request(struct usb2_fifo *f, struct usb2_ctl_request *ur) 887 { 888 int error; 889 uint16_t len; 890 uint16_t actlen; 891 892 if (ugen_check_request(f->udev, &ur->ucr_request)) { 893 return (EPERM); 894 } 895 len = UGETW(ur->ucr_request.wLength); 896 897 /* check if "ucr_data" is valid */ 898 if (len != 0) { 899 if (ur->ucr_data == NULL) { 900 return (EFAULT); 901 } 902 } 903 /* do the USB request */ 904 error = usb2_do_request_flags 905 (f->udev, NULL, &ur->ucr_request, ur->ucr_data, 906 (ur->ucr_flags & USB_SHORT_XFER_OK) | 907 USB_USER_DATA_PTR, &actlen, 908 USB_DEFAULT_TIMEOUT); 909 910 ur->ucr_actlen = actlen; 911 912 if (error) { 913 error = EIO; 914 } 915 return (error); 916 } 917 918 /*------------------------------------------------------------------------ 919 * ugen_re_enumerate 920 *------------------------------------------------------------------------*/ 921 static int 922 ugen_re_enumerate(struct usb2_fifo *f) 923 { 924 struct usb2_device *udev = f->udev; 925 int error; 926 927 /* 928 * This request can be useful for testing USB drivers: 929 */ 930 error = priv_check(curthread, PRIV_DRIVER); 931 if (error) { 932 return (error); 933 } 934 /* get the device unconfigured */ 935 error = ugen_set_config(f, USB_UNCONFIG_INDEX); 936 if (error) { 937 return (error); 938 } 939 /* do a bus-reset */ 940 mtx_lock(f->priv_mtx); 941 error = usb2_req_re_enumerate(udev, f->priv_mtx); 942 mtx_unlock(f->priv_mtx); 943 944 if (error) { 945 return (ENXIO); 946 } 947 /* restore configuration to index 0 */ 948 error = ugen_set_config(f, 0); 949 if (error) { 950 return (error); 951 } 952 return (0); 953 } 954 955 int 956 ugen_fs_uninit(struct usb2_fifo *f) 957 { 958 if (f->fs_xfer == NULL) { 959 return (EINVAL); 960 } 961 usb2_transfer_unsetup(f->fs_xfer, f->fs_ep_max); 962 free(f->fs_xfer, M_USB); 963 f->fs_xfer = NULL; 964 f->fs_ep_max = 0; 965 f->fs_ep_ptr = NULL; 966 f->flag_iscomplete = 0; 967 usb2_fifo_free_buffer(f); 968 return (0); 969 } 970 971 static uint8_t 972 ugen_fs_get_complete(struct usb2_fifo *f, uint8_t *pindex) 973 { 974 struct usb2_mbuf *m; 975 976 USB_IF_DEQUEUE(&f->used_q, m); 977 978 if (m) { 979 *pindex = *((uint8_t *)(m->cur_data_ptr)); 980 981 USB_IF_ENQUEUE(&f->free_q, m); 982 983 return (0); /* success */ 984 } else { 985 986 *pindex = 0; /* fix compiler warning */ 987 988 f->flag_iscomplete = 0; 989 } 990 return (1); /* failure */ 991 } 992 993 static void 994 ugen_fs_set_complete(struct usb2_fifo *f, uint8_t index) 995 { 996 struct usb2_mbuf *m; 997 998 USB_IF_DEQUEUE(&f->free_q, m); 999 1000 if (m == NULL) { 1001 /* can happen during close */ 1002 DPRINTF("out of buffers\n"); 1003 return; 1004 } 1005 USB_MBUF_RESET(m); 1006 1007 *((uint8_t *)(m->cur_data_ptr)) = index; 1008 1009 USB_IF_ENQUEUE(&f->used_q, m); 1010 1011 f->flag_iscomplete = 1; 1012 1013 usb2_fifo_wakeup(f); 1014 } 1015 1016 static int 1017 ugen_fs_copy_in(struct usb2_fifo *f, uint8_t ep_index) 1018 { 1019 struct usb2_device_request *req; 1020 struct usb2_xfer *xfer; 1021 struct usb2_fs_endpoint fs_ep; 1022 void *uaddr; /* userland pointer */ 1023 void *kaddr; 1024 uint32_t offset; 1025 uint32_t length; 1026 uint32_t n; 1027 uint32_t rem; 1028 int error; 1029 uint8_t isread; 1030 1031 if (ep_index >= f->fs_ep_max) { 1032 return (EINVAL); 1033 } 1034 xfer = f->fs_xfer[ep_index]; 1035 if (xfer == NULL) { 1036 return (EINVAL); 1037 } 1038 mtx_lock(f->priv_mtx); 1039 if (usb2_transfer_pending(xfer)) { 1040 mtx_unlock(f->priv_mtx); 1041 return (EBUSY); /* should not happen */ 1042 } 1043 mtx_unlock(f->priv_mtx); 1044 1045 error = copyin(f->fs_ep_ptr + 1046 ep_index, &fs_ep, sizeof(fs_ep)); 1047 if (error) { 1048 return (error); 1049 } 1050 /* security checks */ 1051 1052 if (fs_ep.nFrames > xfer->max_frame_count) { 1053 xfer->error = USB_ERR_INVAL; 1054 goto complete; 1055 } 1056 if (fs_ep.nFrames == 0) { 1057 xfer->error = USB_ERR_INVAL; 1058 goto complete; 1059 } 1060 error = copyin(fs_ep.ppBuffer, 1061 &uaddr, sizeof(uaddr)); 1062 if (error) { 1063 return (error); 1064 } 1065 /* reset first frame */ 1066 usb2_set_frame_offset(xfer, 0, 0); 1067 1068 if (xfer->flags_int.control_xfr) { 1069 1070 req = xfer->frbuffers[0].buffer; 1071 1072 error = copyin(fs_ep.pLength, 1073 &length, sizeof(length)); 1074 if (error) { 1075 return (error); 1076 } 1077 if (length >= sizeof(*req)) { 1078 xfer->error = USB_ERR_INVAL; 1079 goto complete; 1080 } 1081 if (length != 0) { 1082 error = copyin(uaddr, req, length); 1083 if (error) { 1084 return (error); 1085 } 1086 } 1087 if (ugen_check_request(f->udev, req)) { 1088 xfer->error = USB_ERR_INVAL; 1089 goto complete; 1090 } 1091 xfer->frlengths[0] = length; 1092 1093 /* Host mode only ! */ 1094 if ((req->bmRequestType & 1095 (UT_READ | UT_WRITE)) == UT_READ) { 1096 isread = 1; 1097 } else { 1098 isread = 0; 1099 } 1100 n = 1; 1101 offset = sizeof(*req); 1102 1103 } else { 1104 /* Device and Host mode */ 1105 if (USB_GET_DATA_ISREAD(xfer)) { 1106 isread = 1; 1107 } else { 1108 isread = 0; 1109 } 1110 n = 0; 1111 offset = 0; 1112 } 1113 1114 rem = xfer->max_data_length; 1115 xfer->nframes = fs_ep.nFrames; 1116 xfer->timeout = fs_ep.timeout; 1117 if (xfer->timeout > 65535) { 1118 xfer->timeout = 65535; 1119 } 1120 if (fs_ep.flags & USB_FS_FLAG_SINGLE_SHORT_OK) 1121 xfer->flags.short_xfer_ok = 1; 1122 else 1123 xfer->flags.short_xfer_ok = 0; 1124 1125 if (fs_ep.flags & USB_FS_FLAG_MULTI_SHORT_OK) 1126 xfer->flags.short_frames_ok = 1; 1127 else 1128 xfer->flags.short_frames_ok = 0; 1129 1130 if (fs_ep.flags & USB_FS_FLAG_FORCE_SHORT) 1131 xfer->flags.force_short_xfer = 1; 1132 else 1133 xfer->flags.force_short_xfer = 0; 1134 1135 if (fs_ep.flags & USB_FS_FLAG_CLEAR_STALL) 1136 xfer->flags.stall_pipe = 1; 1137 else 1138 xfer->flags.stall_pipe = 0; 1139 1140 for (; n != xfer->nframes; n++) { 1141 1142 error = copyin(fs_ep.pLength + n, 1143 &length, sizeof(length)); 1144 if (error) { 1145 break; 1146 } 1147 xfer->frlengths[n] = length; 1148 1149 if (length > rem) { 1150 xfer->error = USB_ERR_INVAL; 1151 goto complete; 1152 } 1153 rem -= length; 1154 1155 if (!isread) { 1156 1157 /* we need to know the source buffer */ 1158 error = copyin(fs_ep.ppBuffer + n, 1159 &uaddr, sizeof(uaddr)); 1160 if (error) { 1161 break; 1162 } 1163 if (xfer->flags_int.isochronous_xfr) { 1164 /* get kernel buffer address */ 1165 kaddr = xfer->frbuffers[0].buffer; 1166 kaddr = USB_ADD_BYTES(kaddr, offset); 1167 } else { 1168 /* set current frame offset */ 1169 usb2_set_frame_offset(xfer, offset, n); 1170 1171 /* get kernel buffer address */ 1172 kaddr = xfer->frbuffers[n].buffer; 1173 } 1174 1175 /* move data */ 1176 error = copyin(uaddr, kaddr, length); 1177 if (error) { 1178 break; 1179 } 1180 } 1181 offset += length; 1182 } 1183 return (error); 1184 1185 complete: 1186 mtx_lock(f->priv_mtx); 1187 ugen_fs_set_complete(f, ep_index); 1188 mtx_unlock(f->priv_mtx); 1189 return (0); 1190 } 1191 1192 static int 1193 ugen_fs_copy_out(struct usb2_fifo *f, uint8_t ep_index) 1194 { 1195 struct usb2_device_request *req; 1196 struct usb2_xfer *xfer; 1197 struct usb2_fs_endpoint fs_ep; 1198 struct usb2_fs_endpoint *fs_ep_uptr; /* userland ptr */ 1199 void *uaddr; /* userland ptr */ 1200 void *kaddr; 1201 uint32_t offset; 1202 uint32_t length; 1203 uint32_t temp; 1204 uint32_t n; 1205 uint32_t rem; 1206 int error; 1207 uint8_t isread; 1208 1209 if (ep_index >= f->fs_ep_max) { 1210 return (EINVAL); 1211 } 1212 xfer = f->fs_xfer[ep_index]; 1213 if (xfer == NULL) { 1214 return (EINVAL); 1215 } 1216 mtx_lock(f->priv_mtx); 1217 if (usb2_transfer_pending(xfer)) { 1218 mtx_unlock(f->priv_mtx); 1219 return (EBUSY); /* should not happen */ 1220 } 1221 mtx_unlock(f->priv_mtx); 1222 1223 fs_ep_uptr = f->fs_ep_ptr + ep_index; 1224 error = copyin(fs_ep_uptr, &fs_ep, sizeof(fs_ep)); 1225 if (error) { 1226 return (error); 1227 } 1228 fs_ep.status = xfer->error; 1229 fs_ep.aFrames = xfer->aframes; 1230 fs_ep.isoc_time_complete = xfer->isoc_time_complete; 1231 if (xfer->error) { 1232 goto complete; 1233 } 1234 if (xfer->flags_int.control_xfr) { 1235 req = xfer->frbuffers[0].buffer; 1236 1237 /* Host mode only ! */ 1238 if ((req->bmRequestType & (UT_READ | UT_WRITE)) == UT_READ) { 1239 isread = 1; 1240 } else { 1241 isread = 0; 1242 } 1243 if (xfer->nframes == 0) 1244 n = 0; /* should never happen */ 1245 else 1246 n = 1; 1247 } else { 1248 /* Device and Host mode */ 1249 if (USB_GET_DATA_ISREAD(xfer)) { 1250 isread = 1; 1251 } else { 1252 isread = 0; 1253 } 1254 n = 0; 1255 } 1256 1257 /* Update lengths and copy out data */ 1258 1259 rem = xfer->max_data_length; 1260 offset = 0; 1261 1262 for (; n != xfer->nframes; n++) { 1263 1264 /* get initial length into "temp" */ 1265 error = copyin(fs_ep.pLength + n, 1266 &temp, sizeof(temp)); 1267 if (error) { 1268 return (error); 1269 } 1270 if (temp > rem) { 1271 /* the userland length has been corrupted */ 1272 DPRINTF("corrupt userland length " 1273 "%u > %u\n", temp, rem); 1274 fs_ep.status = USB_ERR_INVAL; 1275 goto complete; 1276 } 1277 rem -= temp; 1278 1279 /* get actual transfer length */ 1280 length = xfer->frlengths[n]; 1281 if (length > temp) { 1282 /* data overflow */ 1283 fs_ep.status = USB_ERR_INVAL; 1284 DPRINTF("data overflow %u > %u\n", 1285 length, temp); 1286 goto complete; 1287 } 1288 if (isread) { 1289 1290 /* we need to know the destination buffer */ 1291 error = copyin(fs_ep.ppBuffer + n, 1292 &uaddr, sizeof(uaddr)); 1293 if (error) { 1294 return (error); 1295 } 1296 if (xfer->flags_int.isochronous_xfr) { 1297 /* only one frame buffer */ 1298 kaddr = USB_ADD_BYTES( 1299 xfer->frbuffers[0].buffer, offset); 1300 } else { 1301 /* multiple frame buffers */ 1302 kaddr = xfer->frbuffers[n].buffer; 1303 } 1304 1305 /* move data */ 1306 error = copyout(kaddr, uaddr, length); 1307 if (error) { 1308 return (error); 1309 } 1310 } 1311 /* 1312 * Update offset according to initial length, which is 1313 * needed by isochronous transfers! 1314 */ 1315 offset += temp; 1316 1317 /* update length */ 1318 error = copyout(&length, 1319 fs_ep.pLength + n, sizeof(length)); 1320 if (error) { 1321 return (error); 1322 } 1323 } 1324 1325 complete: 1326 /* update "aFrames" */ 1327 error = copyout(&fs_ep.aFrames, &fs_ep_uptr->aFrames, 1328 sizeof(fs_ep.aFrames)); 1329 if (error) 1330 goto done; 1331 1332 /* update "isoc_time_complete" */ 1333 error = copyout(&fs_ep.isoc_time_complete, 1334 &fs_ep_uptr->isoc_time_complete, 1335 sizeof(fs_ep.isoc_time_complete)); 1336 if (error) 1337 goto done; 1338 /* update "status" */ 1339 error = copyout(&fs_ep.status, &fs_ep_uptr->status, 1340 sizeof(fs_ep.status)); 1341 done: 1342 return (error); 1343 } 1344 1345 static uint8_t 1346 ugen_fifo_in_use(struct usb2_fifo *f, int fflags) 1347 { 1348 struct usb2_fifo *f_rx; 1349 struct usb2_fifo *f_tx; 1350 1351 f_rx = f->udev->fifo[(f->fifo_index & ~1) + USB_FIFO_RX]; 1352 f_tx = f->udev->fifo[(f->fifo_index & ~1) + USB_FIFO_TX]; 1353 1354 if ((fflags & FREAD) && f_rx && 1355 (f_rx->xfer[0] || f_rx->xfer[1])) { 1356 return (1); /* RX FIFO in use */ 1357 } 1358 if ((fflags & FWRITE) && f_tx && 1359 (f_tx->xfer[0] || f_tx->xfer[1])) { 1360 return (1); /* TX FIFO in use */ 1361 } 1362 return (0); /* not in use */ 1363 } 1364 1365 static int 1366 ugen_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags) 1367 { 1368 struct usb2_config usb2_config[1]; 1369 struct usb2_device_request req; 1370 union { 1371 struct usb2_fs_complete *pcomp; 1372 struct usb2_fs_start *pstart; 1373 struct usb2_fs_stop *pstop; 1374 struct usb2_fs_open *popen; 1375 struct usb2_fs_close *pclose; 1376 struct usb2_fs_clear_stall_sync *pstall; 1377 void *addr; 1378 } u; 1379 struct usb2_pipe *pipe; 1380 struct usb2_endpoint_descriptor *ed; 1381 int error = 0; 1382 uint8_t iface_index; 1383 uint8_t isread; 1384 uint8_t ep_index; 1385 1386 u.addr = addr; 1387 1388 DPRINTFN(6, "cmd=0x%08lx\n", cmd); 1389 1390 switch (cmd) { 1391 case USB_FS_COMPLETE: 1392 mtx_lock(f->priv_mtx); 1393 error = ugen_fs_get_complete(f, &ep_index); 1394 mtx_unlock(f->priv_mtx); 1395 1396 if (error) { 1397 error = EBUSY; 1398 break; 1399 } 1400 u.pcomp->ep_index = ep_index; 1401 error = ugen_fs_copy_out(f, u.pcomp->ep_index); 1402 break; 1403 1404 case USB_FS_START: 1405 error = ugen_fs_copy_in(f, u.pstart->ep_index); 1406 if (error) { 1407 break; 1408 } 1409 mtx_lock(f->priv_mtx); 1410 usb2_transfer_start(f->fs_xfer[u.pstart->ep_index]); 1411 mtx_unlock(f->priv_mtx); 1412 break; 1413 1414 case USB_FS_STOP: 1415 if (u.pstop->ep_index >= f->fs_ep_max) { 1416 error = EINVAL; 1417 break; 1418 } 1419 mtx_lock(f->priv_mtx); 1420 usb2_transfer_stop(f->fs_xfer[u.pstop->ep_index]); 1421 mtx_unlock(f->priv_mtx); 1422 break; 1423 1424 case USB_FS_OPEN: 1425 if (u.popen->ep_index >= f->fs_ep_max) { 1426 error = EINVAL; 1427 break; 1428 } 1429 if (f->fs_xfer[u.popen->ep_index] != NULL) { 1430 error = EBUSY; 1431 break; 1432 } 1433 if (u.popen->max_bufsize > USB_FS_MAX_BUFSIZE) { 1434 u.popen->max_bufsize = USB_FS_MAX_BUFSIZE; 1435 } 1436 if (u.popen->max_frames > USB_FS_MAX_FRAMES) { 1437 u.popen->max_frames = USB_FS_MAX_FRAMES; 1438 break; 1439 } 1440 if (u.popen->max_frames == 0) { 1441 error = EINVAL; 1442 break; 1443 } 1444 pipe = usb2_get_pipe_by_addr(f->udev, u.popen->ep_no); 1445 if (pipe == NULL) { 1446 error = EINVAL; 1447 break; 1448 } 1449 ed = pipe->edesc; 1450 if (ed == NULL) { 1451 error = ENXIO; 1452 break; 1453 } 1454 iface_index = pipe->iface_index; 1455 1456 bzero(usb2_config, sizeof(usb2_config)); 1457 1458 usb2_config[0].type = ed->bmAttributes & UE_XFERTYPE; 1459 usb2_config[0].endpoint = ed->bEndpointAddress & UE_ADDR; 1460 usb2_config[0].direction = ed->bEndpointAddress & (UE_DIR_OUT | UE_DIR_IN); 1461 usb2_config[0].mh.interval = USB_DEFAULT_INTERVAL; 1462 usb2_config[0].mh.flags.proxy_buffer = 1; 1463 usb2_config[0].mh.callback = &ugen_default_fs_callback; 1464 usb2_config[0].mh.timeout = 0; /* no timeout */ 1465 usb2_config[0].mh.frames = u.popen->max_frames; 1466 usb2_config[0].mh.bufsize = u.popen->max_bufsize; 1467 usb2_config[0].md = usb2_config[0].mh; /* symmetric config */ 1468 1469 if (usb2_config[0].type == UE_CONTROL) { 1470 if (f->udev->flags.usb2_mode != USB_MODE_HOST) { 1471 error = EINVAL; 1472 break; 1473 } 1474 } else { 1475 1476 isread = ((usb2_config[0].endpoint & 1477 (UE_DIR_IN | UE_DIR_OUT)) == UE_DIR_IN); 1478 1479 if (f->udev->flags.usb2_mode != USB_MODE_HOST) { 1480 isread = !isread; 1481 } 1482 /* check permissions */ 1483 if (isread) { 1484 if (!(fflags & FREAD)) { 1485 error = EPERM; 1486 break; 1487 } 1488 } else { 1489 if (!(fflags & FWRITE)) { 1490 error = EPERM; 1491 break; 1492 } 1493 } 1494 } 1495 error = usb2_transfer_setup(f->udev, &iface_index, 1496 f->fs_xfer + u.popen->ep_index, usb2_config, 1, 1497 f, f->priv_mtx); 1498 if (error == 0) { 1499 /* update maximums */ 1500 u.popen->max_packet_length = 1501 f->fs_xfer[u.popen->ep_index]->max_frame_size; 1502 u.popen->max_bufsize = 1503 f->fs_xfer[u.popen->ep_index]->max_data_length; 1504 f->fs_xfer[u.popen->ep_index]->priv_fifo = 1505 ((uint8_t *)0) + u.popen->ep_index; 1506 } else { 1507 error = ENOMEM; 1508 } 1509 break; 1510 1511 case USB_FS_CLOSE: 1512 if (u.pclose->ep_index >= f->fs_ep_max) { 1513 error = EINVAL; 1514 break; 1515 } 1516 if (f->fs_xfer[u.pclose->ep_index] == NULL) { 1517 error = EINVAL; 1518 break; 1519 } 1520 usb2_transfer_unsetup(f->fs_xfer + u.pclose->ep_index, 1); 1521 break; 1522 1523 case USB_FS_CLEAR_STALL_SYNC: 1524 if (u.pstall->ep_index >= f->fs_ep_max) { 1525 error = EINVAL; 1526 break; 1527 } 1528 if (f->fs_xfer[u.pstall->ep_index] == NULL) { 1529 error = EINVAL; 1530 break; 1531 } 1532 if (f->udev->flags.usb2_mode != USB_MODE_HOST) { 1533 error = EINVAL; 1534 break; 1535 } 1536 mtx_lock(f->priv_mtx); 1537 error = usb2_transfer_pending(f->fs_xfer[u.pstall->ep_index]); 1538 mtx_unlock(f->priv_mtx); 1539 1540 if (error) { 1541 return (EBUSY); 1542 } 1543 pipe = f->fs_xfer[u.pstall->ep_index]->pipe; 1544 1545 /* setup a clear-stall packet */ 1546 req.bmRequestType = UT_WRITE_ENDPOINT; 1547 req.bRequest = UR_CLEAR_FEATURE; 1548 USETW(req.wValue, UF_ENDPOINT_HALT); 1549 req.wIndex[0] = pipe->edesc->bEndpointAddress; 1550 req.wIndex[1] = 0; 1551 USETW(req.wLength, 0); 1552 1553 error = usb2_do_request(f->udev, NULL, &req, NULL); 1554 if (error == 0) { 1555 usb2_clear_data_toggle(f->udev, pipe); 1556 } else { 1557 error = ENXIO; 1558 } 1559 break; 1560 1561 default: 1562 error = ENOIOCTL; 1563 break; 1564 } 1565 1566 DPRINTFN(6, "error=%d\n", error); 1567 1568 return (error); 1569 } 1570 1571 static int 1572 ugen_set_short_xfer(struct usb2_fifo *f, void *addr) 1573 { 1574 uint8_t t; 1575 1576 if (*(int *)addr) 1577 t = 1; 1578 else 1579 t = 0; 1580 1581 if (f->flag_short == t) { 1582 /* same value like before - accept */ 1583 return (0); 1584 } 1585 if (f->xfer[0] || f->xfer[1]) { 1586 /* cannot change this during transfer */ 1587 return (EBUSY); 1588 } 1589 f->flag_short = t; 1590 return (0); 1591 } 1592 1593 static int 1594 ugen_set_timeout(struct usb2_fifo *f, void *addr) 1595 { 1596 f->timeout = *(int *)addr; 1597 if (f->timeout > 65535) { 1598 /* limit user input */ 1599 f->timeout = 65535; 1600 } 1601 return (0); 1602 } 1603 1604 static int 1605 ugen_get_frame_size(struct usb2_fifo *f, void *addr) 1606 { 1607 if (f->xfer[0]) { 1608 *(int *)addr = f->xfer[0]->max_frame_size; 1609 } else { 1610 return (EINVAL); 1611 } 1612 return (0); 1613 } 1614 1615 static int 1616 ugen_set_buffer_size(struct usb2_fifo *f, void *addr) 1617 { 1618 uint32_t t; 1619 1620 if (*(int *)addr < 1024) 1621 t = 1024; 1622 else if (*(int *)addr < (256 * 1024)) 1623 t = *(int *)addr; 1624 else 1625 t = 256 * 1024; 1626 1627 if (f->bufsize == t) { 1628 /* same value like before - accept */ 1629 return (0); 1630 } 1631 if (f->xfer[0] || f->xfer[1]) { 1632 /* cannot change this during transfer */ 1633 return (EBUSY); 1634 } 1635 f->bufsize = t; 1636 return (0); 1637 } 1638 1639 static int 1640 ugen_get_buffer_size(struct usb2_fifo *f, void *addr) 1641 { 1642 *(int *)addr = f->bufsize; 1643 return (0); 1644 } 1645 1646 static int 1647 ugen_get_iface_desc(struct usb2_fifo *f, 1648 struct usb2_interface_descriptor *idesc) 1649 { 1650 struct usb2_interface *iface; 1651 1652 iface = usb2_get_iface(f->udev, f->iface_index); 1653 if (iface && iface->idesc) { 1654 *idesc = *(iface->idesc); 1655 } else { 1656 return (EIO); 1657 } 1658 return (0); 1659 } 1660 1661 static int 1662 ugen_get_endpoint_desc(struct usb2_fifo *f, 1663 struct usb2_endpoint_descriptor *ed) 1664 { 1665 struct usb2_pipe *pipe; 1666 1667 pipe = f->priv_sc0; 1668 1669 if (pipe && pipe->edesc) { 1670 *ed = *pipe->edesc; 1671 } else { 1672 return (EINVAL); 1673 } 1674 return (0); 1675 } 1676 1677 static int 1678 ugen_set_power_mode(struct usb2_fifo *f, int mode) 1679 { 1680 struct usb2_device *udev = f->udev; 1681 int err; 1682 uint8_t old_mode; 1683 1684 if ((udev == NULL) || 1685 (udev->parent_hub == NULL)) { 1686 return (EINVAL); 1687 } 1688 err = priv_check(curthread, PRIV_DRIVER); 1689 if (err) 1690 return (err); 1691 1692 /* get old power mode */ 1693 old_mode = udev->power_mode; 1694 1695 /* if no change, then just return */ 1696 if (old_mode == mode) 1697 return (0); 1698 1699 switch (mode) { 1700 case USB_POWER_MODE_OFF: 1701 /* get the device unconfigured */ 1702 err = ugen_set_config(f, USB_UNCONFIG_INDEX); 1703 if (err) { 1704 DPRINTFN(0, "Could not unconfigure " 1705 "device (ignored)\n"); 1706 } 1707 1708 /* clear port enable */ 1709 err = usb2_req_clear_port_feature(udev->parent_hub, 1710 NULL, udev->port_no, UHF_PORT_ENABLE); 1711 break; 1712 1713 case USB_POWER_MODE_ON: 1714 case USB_POWER_MODE_SAVE: 1715 break; 1716 1717 case USB_POWER_MODE_RESUME: 1718 err = usb2_req_clear_port_feature(udev->parent_hub, 1719 NULL, udev->port_no, UHF_PORT_SUSPEND); 1720 mode = USB_POWER_MODE_SAVE; 1721 break; 1722 1723 case USB_POWER_MODE_SUSPEND: 1724 err = usb2_req_set_port_feature(udev->parent_hub, 1725 NULL, udev->port_no, UHF_PORT_SUSPEND); 1726 mode = USB_POWER_MODE_SAVE; 1727 break; 1728 1729 default: 1730 return (EINVAL); 1731 } 1732 1733 if (err) 1734 return (ENXIO); /* I/O failure */ 1735 1736 /* if we are powered off we need to re-enumerate first */ 1737 if (old_mode == USB_POWER_MODE_OFF) { 1738 err = ugen_re_enumerate(f); 1739 if (err) 1740 return (err); 1741 } 1742 1743 /* set new power mode */ 1744 usb2_set_power_mode(udev, mode); 1745 1746 return (0); /* success */ 1747 } 1748 1749 static int 1750 ugen_get_power_mode(struct usb2_fifo *f) 1751 { 1752 struct usb2_device *udev = f->udev; 1753 1754 if ((udev == NULL) || 1755 (udev->parent_hub == NULL)) { 1756 return (USB_POWER_MODE_ON); 1757 } 1758 return (udev->power_mode); 1759 } 1760 1761 static int 1762 ugen_do_port_feature(struct usb2_fifo *f, uint8_t port_no, 1763 uint8_t set, uint16_t feature) 1764 { 1765 struct usb2_device *udev = f->udev; 1766 struct usb2_hub *hub; 1767 int err; 1768 1769 err = priv_check(curthread, PRIV_DRIVER); 1770 if (err) { 1771 return (err); 1772 } 1773 if (port_no == 0) { 1774 return (EINVAL); 1775 } 1776 if ((udev == NULL) || 1777 (udev->hub == NULL)) { 1778 return (EINVAL); 1779 } 1780 hub = udev->hub; 1781 1782 if (port_no > hub->nports) { 1783 return (EINVAL); 1784 } 1785 if (set) 1786 err = usb2_req_set_port_feature(udev, 1787 NULL, port_no, feature); 1788 else 1789 err = usb2_req_clear_port_feature(udev, 1790 NULL, port_no, feature); 1791 1792 if (err) 1793 return (ENXIO); /* failure */ 1794 1795 return (0); /* success */ 1796 } 1797 1798 static int 1799 ugen_iface_ioctl(struct usb2_fifo *f, u_long cmd, void *addr, int fflags) 1800 { 1801 struct usb2_fifo *f_rx; 1802 struct usb2_fifo *f_tx; 1803 int error = 0; 1804 1805 f_rx = f->udev->fifo[(f->fifo_index & ~1) + USB_FIFO_RX]; 1806 f_tx = f->udev->fifo[(f->fifo_index & ~1) + USB_FIFO_TX]; 1807 1808 switch (cmd) { 1809 case USB_SET_RX_SHORT_XFER: 1810 if (fflags & FREAD) { 1811 error = ugen_set_short_xfer(f_rx, addr); 1812 } else { 1813 error = EINVAL; 1814 } 1815 break; 1816 1817 case USB_SET_TX_FORCE_SHORT: 1818 if (fflags & FWRITE) { 1819 error = ugen_set_short_xfer(f_tx, addr); 1820 } else { 1821 error = EINVAL; 1822 } 1823 break; 1824 1825 case USB_SET_RX_TIMEOUT: 1826 if (fflags & FREAD) { 1827 error = ugen_set_timeout(f_rx, addr); 1828 } else { 1829 error = EINVAL; 1830 } 1831 break; 1832 1833 case USB_SET_TX_TIMEOUT: 1834 if (fflags & FWRITE) { 1835 error = ugen_set_timeout(f_tx, addr); 1836 } else { 1837 error = EINVAL; 1838 } 1839 break; 1840 1841 case USB_GET_RX_FRAME_SIZE: 1842 if (fflags & FREAD) { 1843 error = ugen_get_frame_size(f_rx, addr); 1844 } else { 1845 error = EINVAL; 1846 } 1847 break; 1848 1849 case USB_GET_TX_FRAME_SIZE: 1850 if (fflags & FWRITE) { 1851 error = ugen_get_frame_size(f_tx, addr); 1852 } else { 1853 error = EINVAL; 1854 } 1855 break; 1856 1857 case USB_SET_RX_BUFFER_SIZE: 1858 if (fflags & FREAD) { 1859 error = ugen_set_buffer_size(f_rx, addr); 1860 } else { 1861 error = EINVAL; 1862 } 1863 break; 1864 1865 case USB_SET_TX_BUFFER_SIZE: 1866 if (fflags & FWRITE) { 1867 error = ugen_set_buffer_size(f_tx, addr); 1868 } else { 1869 error = EINVAL; 1870 } 1871 break; 1872 1873 case USB_GET_RX_BUFFER_SIZE: 1874 if (fflags & FREAD) { 1875 error = ugen_get_buffer_size(f_rx, addr); 1876 } else { 1877 error = EINVAL; 1878 } 1879 break; 1880 1881 case USB_GET_TX_BUFFER_SIZE: 1882 if (fflags & FWRITE) { 1883 error = ugen_get_buffer_size(f_tx, addr); 1884 } else { 1885 error = EINVAL; 1886 } 1887 break; 1888 1889 case USB_GET_RX_INTERFACE_DESC: 1890 if (fflags & FREAD) { 1891 error = ugen_get_iface_desc(f_rx, addr); 1892 } else { 1893 error = EINVAL; 1894 } 1895 break; 1896 1897 case USB_GET_TX_INTERFACE_DESC: 1898 if (fflags & FWRITE) { 1899 error = ugen_get_iface_desc(f_tx, addr); 1900 } else { 1901 error = EINVAL; 1902 } 1903 break; 1904 1905 case USB_GET_RX_ENDPOINT_DESC: 1906 if (fflags & FREAD) { 1907 error = ugen_get_endpoint_desc(f_rx, addr); 1908 } else { 1909 error = EINVAL; 1910 } 1911 break; 1912 1913 case USB_GET_TX_ENDPOINT_DESC: 1914 if (fflags & FWRITE) { 1915 error = ugen_get_endpoint_desc(f_tx, addr); 1916 } else { 1917 error = EINVAL; 1918 } 1919 break; 1920 1921 case USB_SET_RX_STALL_FLAG: 1922 if ((fflags & FREAD) && (*(int *)addr)) { 1923 f_rx->flag_stall = 1; 1924 } 1925 break; 1926 1927 case USB_SET_TX_STALL_FLAG: 1928 if ((fflags & FWRITE) && (*(int *)addr)) { 1929 f_tx->flag_stall = 1; 1930 } 1931 break; 1932 1933 default: 1934 error = ENOIOCTL; 1935 break; 1936 } 1937 return (error); 1938 } 1939 1940 static int 1941 ugen_ioctl_post(struct usb2_fifo *f, u_long cmd, void *addr, int fflags) 1942 { 1943 union { 1944 struct usb2_interface_descriptor *idesc; 1945 struct usb2_alt_interface *ai; 1946 struct usb2_device_descriptor *ddesc; 1947 struct usb2_config_descriptor *cdesc; 1948 struct usb2_device_stats *stat; 1949 struct usb2_fs_init *pinit; 1950 struct usb2_fs_uninit *puninit; 1951 uint32_t *ptime; 1952 void *addr; 1953 int *pint; 1954 } u; 1955 struct usb2_device_descriptor *dtemp; 1956 struct usb2_config_descriptor *ctemp; 1957 struct usb2_interface *iface; 1958 int error = 0; 1959 uint8_t n; 1960 1961 u.addr = addr; 1962 1963 DPRINTFN(6, "cmd=0x%08lx\n", cmd); 1964 1965 switch (cmd) { 1966 case USB_DISCOVER: 1967 usb2_needs_explore_all(); 1968 break; 1969 1970 case USB_SETDEBUG: 1971 if (!(fflags & FWRITE)) { 1972 error = EPERM; 1973 break; 1974 } 1975 usb2_debug = *(int *)addr; 1976 break; 1977 1978 case USB_GET_CONFIG: 1979 *(int *)addr = f->udev->curr_config_index; 1980 break; 1981 1982 case USB_SET_CONFIG: 1983 if (!(fflags & FWRITE)) { 1984 error = EPERM; 1985 break; 1986 } 1987 error = ugen_set_config(f, *(int *)addr); 1988 break; 1989 1990 case USB_GET_ALTINTERFACE: 1991 iface = usb2_get_iface(f->udev, 1992 u.ai->uai_interface_index); 1993 if (iface && iface->idesc) { 1994 u.ai->uai_alt_index = iface->alt_index; 1995 } else { 1996 error = EINVAL; 1997 } 1998 break; 1999 2000 case USB_SET_ALTINTERFACE: 2001 if (!(fflags & FWRITE)) { 2002 error = EPERM; 2003 break; 2004 } 2005 error = ugen_set_interface(f, 2006 u.ai->uai_interface_index, u.ai->uai_alt_index); 2007 break; 2008 2009 case USB_GET_DEVICE_DESC: 2010 dtemp = usb2_get_device_descriptor(f->udev); 2011 if (!dtemp) { 2012 error = EIO; 2013 break; 2014 } 2015 *u.ddesc = *dtemp; 2016 break; 2017 2018 case USB_GET_CONFIG_DESC: 2019 ctemp = usb2_get_config_descriptor(f->udev); 2020 if (!ctemp) { 2021 error = EIO; 2022 break; 2023 } 2024 *u.cdesc = *ctemp; 2025 break; 2026 2027 case USB_GET_FULL_DESC: 2028 error = ugen_get_cdesc(f, addr); 2029 break; 2030 2031 case USB_GET_STRING_DESC: 2032 error = ugen_get_sdesc(f, addr); 2033 break; 2034 2035 case USB_GET_IFACE_DRIVER: 2036 error = ugen_get_iface_driver(f, addr); 2037 break; 2038 2039 case USB_REQUEST: 2040 case USB_DO_REQUEST: 2041 if (!(fflags & FWRITE)) { 2042 error = EPERM; 2043 break; 2044 } 2045 error = ugen_do_request(f, addr); 2046 break; 2047 2048 case USB_DEVICEINFO: 2049 case USB_GET_DEVICEINFO: 2050 error = usb2_gen_fill_deviceinfo(f, addr); 2051 break; 2052 2053 case USB_DEVICESTATS: 2054 for (n = 0; n != 4; n++) { 2055 2056 u.stat->uds_requests_fail[n] = 2057 f->udev->bus->stats_err.uds_requests[n]; 2058 2059 u.stat->uds_requests_ok[n] = 2060 f->udev->bus->stats_ok.uds_requests[n]; 2061 } 2062 break; 2063 2064 case USB_DEVICEENUMERATE: 2065 error = ugen_re_enumerate(f); 2066 break; 2067 2068 case USB_GET_PLUGTIME: 2069 *u.ptime = f->udev->plugtime; 2070 break; 2071 2072 case USB_CLAIM_INTERFACE: 2073 case USB_RELEASE_INTERFACE: 2074 /* TODO */ 2075 break; 2076 2077 case USB_IFACE_DRIVER_ACTIVE: 2078 /* TODO */ 2079 *u.pint = 0; 2080 break; 2081 2082 case USB_IFACE_DRIVER_DETACH: 2083 /* TODO */ 2084 error = priv_check(curthread, PRIV_DRIVER); 2085 if (error) { 2086 break; 2087 } 2088 error = EINVAL; 2089 break; 2090 2091 case USB_SET_POWER_MODE: 2092 error = ugen_set_power_mode(f, *u.pint); 2093 break; 2094 2095 case USB_GET_POWER_MODE: 2096 *u.pint = ugen_get_power_mode(f); 2097 break; 2098 2099 case USB_SET_PORT_ENABLE: 2100 error = ugen_do_port_feature(f, 2101 *u.pint, 1, UHF_PORT_ENABLE); 2102 break; 2103 2104 case USB_SET_PORT_DISABLE: 2105 error = ugen_do_port_feature(f, 2106 *u.pint, 0, UHF_PORT_ENABLE); 2107 break; 2108 2109 case USB_FS_INIT: 2110 /* verify input parameters */ 2111 if (u.pinit->pEndpoints == NULL) { 2112 error = EINVAL; 2113 break; 2114 } 2115 if (u.pinit->ep_index_max > 127) { 2116 error = EINVAL; 2117 break; 2118 } 2119 if (u.pinit->ep_index_max == 0) { 2120 error = EINVAL; 2121 break; 2122 } 2123 if (f->fs_xfer != NULL) { 2124 error = EBUSY; 2125 break; 2126 } 2127 if (f->dev_ep_index != 0) { 2128 error = EINVAL; 2129 break; 2130 } 2131 if (ugen_fifo_in_use(f, fflags)) { 2132 error = EBUSY; 2133 break; 2134 } 2135 error = usb2_fifo_alloc_buffer(f, 1, u.pinit->ep_index_max); 2136 if (error) { 2137 break; 2138 } 2139 f->fs_xfer = malloc(sizeof(f->fs_xfer[0]) * 2140 u.pinit->ep_index_max, M_USB, M_WAITOK | M_ZERO); 2141 if (f->fs_xfer == NULL) { 2142 usb2_fifo_free_buffer(f); 2143 error = ENOMEM; 2144 break; 2145 } 2146 f->fs_ep_max = u.pinit->ep_index_max; 2147 f->fs_ep_ptr = u.pinit->pEndpoints; 2148 break; 2149 2150 case USB_FS_UNINIT: 2151 if (u.puninit->dummy != 0) { 2152 error = EINVAL; 2153 break; 2154 } 2155 error = ugen_fs_uninit(f); 2156 break; 2157 2158 default: 2159 mtx_lock(f->priv_mtx); 2160 error = ugen_iface_ioctl(f, cmd, addr, fflags); 2161 mtx_unlock(f->priv_mtx); 2162 break; 2163 } 2164 DPRINTFN(6, "error=%d\n", error); 2165 return (error); 2166 } 2167 2168 static void 2169 ugen_default_fs_callback(struct usb2_xfer *xfer) 2170 { 2171 ; /* workaround for a bug in "indent" */ 2172 2173 DPRINTF("st=%u alen=%u aframes=%u\n", 2174 USB_GET_STATE(xfer), xfer->actlen, xfer->aframes); 2175 2176 switch (USB_GET_STATE(xfer)) { 2177 case USB_ST_SETUP: 2178 usb2_start_hardware(xfer); 2179 break; 2180 default: 2181 ugen_fs_set_complete(xfer->priv_sc, USB_P2U(xfer->priv_fifo)); 2182 break; 2183 } 2184 } 2185