uhid.c (193045) | uhid.c (194228) |
---|---|
1/* $NetBSD: uhid.c,v 1.46 2001/11/13 06:24:55 lukem Exp $ */ 2 3/* Also already merged from NetBSD: 4 * $NetBSD: uhid.c,v 1.54 2002/09/23 05:51:21 simonb Exp $ 5 */ 6 7#include <sys/cdefs.h> | 1/* $NetBSD: uhid.c,v 1.46 2001/11/13 06:24:55 lukem Exp $ */ 2 3/* Also already merged from NetBSD: 4 * $NetBSD: uhid.c,v 1.54 2002/09/23 05:51:21 simonb Exp $ 5 */ 6 7#include <sys/cdefs.h> |
8__FBSDID("$FreeBSD: head/sys/dev/usb/input/uhid.c 193045 2009-05-29 18:46:57Z thompsa $"); | 8__FBSDID("$FreeBSD: head/sys/dev/usb/input/uhid.c 194228 2009-06-15 01:02:43Z thompsa $"); |
9 10/*- 11 * Copyright (c) 1998 The NetBSD Foundation, Inc. 12 * All rights reserved. 13 * 14 * This code is derived from software contributed to The NetBSD Foundation 15 * by Lennart Augustsson (lennart@augustsson.net) at 16 * Carlstedt Research & Technology. --- 137 unchanged lines hidden (view full) --- 154{ 155 struct uhid_softc *sc = xfer->priv_sc; 156 157 switch (USB_GET_STATE(xfer)) { 158 case USB_ST_TRANSFERRED: 159 DPRINTF("transferred!\n"); 160 161 if (xfer->actlen >= sc->sc_isize) { | 9 10/*- 11 * Copyright (c) 1998 The NetBSD Foundation, Inc. 12 * All rights reserved. 13 * 14 * This code is derived from software contributed to The NetBSD Foundation 15 * by Lennart Augustsson (lennart@augustsson.net) at 16 * Carlstedt Research & Technology. --- 137 unchanged lines hidden (view full) --- 154{ 155 struct uhid_softc *sc = xfer->priv_sc; 156 157 switch (USB_GET_STATE(xfer)) { 158 case USB_ST_TRANSFERRED: 159 DPRINTF("transferred!\n"); 160 161 if (xfer->actlen >= sc->sc_isize) { |
162 usb2_fifo_put_data( | 162 usb_fifo_put_data( |
163 sc->sc_fifo.fp[USB_FIFO_RX], 164 xfer->frbuffers, 165 0, sc->sc_isize, 1); 166 } else { 167 /* ignore it */ 168 DPRINTF("ignored short transfer, " 169 "%d bytes\n", xfer->actlen); 170 } 171 172 case USB_ST_SETUP: 173re_submit: | 163 sc->sc_fifo.fp[USB_FIFO_RX], 164 xfer->frbuffers, 165 0, sc->sc_isize, 1); 166 } else { 167 /* ignore it */ 168 DPRINTF("ignored short transfer, " 169 "%d bytes\n", xfer->actlen); 170 } 171 172 case USB_ST_SETUP: 173re_submit: |
174 if (usb2_fifo_put_bytes_max( | 174 if (usb_fifo_put_bytes_max( |
175 sc->sc_fifo.fp[USB_FIFO_RX]) != 0) { 176 xfer->frlengths[0] = sc->sc_isize; | 175 sc->sc_fifo.fp[USB_FIFO_RX]) != 0) { 176 xfer->frlengths[0] = sc->sc_isize; |
177 usb2_start_hardware(xfer); | 177 usbd_transfer_submit(xfer); |
178 } 179 return; 180 181 default: /* Error */ 182 if (xfer->error != USB_ERR_CANCELLED) { 183 /* try to clear stall first */ 184 xfer->flags.stall_pipe = 1; 185 goto re_submit; --- 36 unchanged lines hidden (view full) --- 222 uint8_t id; 223 224 switch (USB_GET_STATE(xfer)) { 225 case USB_ST_TRANSFERRED: 226 case USB_ST_SETUP: 227 /* try to extract the ID byte */ 228 if (sc->sc_oid) { 229 | 178 } 179 return; 180 181 default: /* Error */ 182 if (xfer->error != USB_ERR_CANCELLED) { 183 /* try to clear stall first */ 184 xfer->flags.stall_pipe = 1; 185 goto re_submit; --- 36 unchanged lines hidden (view full) --- 222 uint8_t id; 223 224 switch (USB_GET_STATE(xfer)) { 225 case USB_ST_TRANSFERRED: 226 case USB_ST_SETUP: 227 /* try to extract the ID byte */ 228 if (sc->sc_oid) { 229 |
230 if (usb2_fifo_get_data( | 230 if (usb_fifo_get_data( |
231 sc->sc_fifo.fp[USB_FIFO_TX], 232 xfer->frbuffers, 233 0, 1, &actlen, 0)) { 234 if (actlen != 1) { 235 goto tr_error; 236 } | 231 sc->sc_fifo.fp[USB_FIFO_TX], 232 xfer->frbuffers, 233 0, 1, &actlen, 0)) { 234 if (actlen != 1) { 235 goto tr_error; 236 } |
237 usb2_copy_out(xfer->frbuffers, 0, &id, 1); | 237 usbd_copy_out(xfer->frbuffers, 0, &id, 1); |
238 239 } else { 240 return; 241 } 242 if (size) { 243 size--; 244 } 245 } else { 246 id = 0; 247 } 248 | 238 239 } else { 240 return; 241 } 242 if (size) { 243 size--; 244 } 245 } else { 246 id = 0; 247 } 248 |
249 if (usb2_fifo_get_data( | 249 if (usb_fifo_get_data( |
250 sc->sc_fifo.fp[USB_FIFO_TX], 251 xfer->frbuffers + 1, 252 0, UHID_BSIZE, &actlen, 1)) { 253 if (actlen != size) { 254 goto tr_error; 255 } 256 uhid_fill_set_report 257 (&req, sc->sc_iface_no, 258 UHID_OUTPUT_REPORT, id, size); 259 | 250 sc->sc_fifo.fp[USB_FIFO_TX], 251 xfer->frbuffers + 1, 252 0, UHID_BSIZE, &actlen, 1)) { 253 if (actlen != size) { 254 goto tr_error; 255 } 256 uhid_fill_set_report 257 (&req, sc->sc_iface_no, 258 UHID_OUTPUT_REPORT, id, size); 259 |
260 usb2_copy_in(xfer->frbuffers, 0, &req, sizeof(req)); | 260 usbd_copy_in(xfer->frbuffers, 0, &req, sizeof(req)); |
261 262 xfer->frlengths[0] = sizeof(req); 263 xfer->frlengths[1] = size; 264 xfer->nframes = xfer->frlengths[1] ? 2 : 1; | 261 262 xfer->frlengths[0] = sizeof(req); 263 xfer->frlengths[1] = size; 264 xfer->nframes = xfer->frlengths[1] ? 2 : 1; |
265 usb2_start_hardware(xfer); | 265 usbd_transfer_submit(xfer); |
266 } 267 return; 268 269 default: 270tr_error: 271 /* bomb out */ | 266 } 267 return; 268 269 default: 270tr_error: 271 /* bomb out */ |
272 usb2_fifo_get_data_error(sc->sc_fifo.fp[USB_FIFO_TX]); | 272 usb_fifo_get_data_error(sc->sc_fifo.fp[USB_FIFO_TX]); |
273 return; 274 } 275} 276 277static void 278uhid_read_callback(struct usb_xfer *xfer) 279{ 280 struct uhid_softc *sc = xfer->priv_sc; 281 struct usb_device_request req; 282 283 switch (USB_GET_STATE(xfer)) { 284 case USB_ST_TRANSFERRED: | 273 return; 274 } 275} 276 277static void 278uhid_read_callback(struct usb_xfer *xfer) 279{ 280 struct uhid_softc *sc = xfer->priv_sc; 281 struct usb_device_request req; 282 283 switch (USB_GET_STATE(xfer)) { 284 case USB_ST_TRANSFERRED: |
285 usb2_fifo_put_data(sc->sc_fifo.fp[USB_FIFO_RX], xfer->frbuffers, | 285 usb_fifo_put_data(sc->sc_fifo.fp[USB_FIFO_RX], xfer->frbuffers, |
286 sizeof(req), sc->sc_isize, 1); 287 return; 288 289 case USB_ST_SETUP: 290 | 286 sizeof(req), sc->sc_isize, 1); 287 return; 288 289 case USB_ST_SETUP: 290 |
291 if (usb2_fifo_put_bytes_max(sc->sc_fifo.fp[USB_FIFO_RX]) > 0) { | 291 if (usb_fifo_put_bytes_max(sc->sc_fifo.fp[USB_FIFO_RX]) > 0) { |
292 293 uhid_fill_get_report 294 (&req, sc->sc_iface_no, UHID_INPUT_REPORT, 295 sc->sc_iid, sc->sc_isize); 296 | 292 293 uhid_fill_get_report 294 (&req, sc->sc_iface_no, UHID_INPUT_REPORT, 295 sc->sc_iid, sc->sc_isize); 296 |
297 usb2_copy_in(xfer->frbuffers, 0, &req, sizeof(req)); | 297 usbd_copy_in(xfer->frbuffers, 0, &req, sizeof(req)); |
298 299 xfer->frlengths[0] = sizeof(req); 300 xfer->frlengths[1] = sc->sc_isize; 301 xfer->nframes = xfer->frlengths[1] ? 2 : 1; | 298 299 xfer->frlengths[0] = sizeof(req); 300 xfer->frlengths[1] = sc->sc_isize; 301 xfer->nframes = xfer->frlengths[1] ? 2 : 1; |
302 usb2_start_hardware(xfer); | 302 usbd_transfer_submit(xfer); |
303 } 304 return; 305 306 default: /* Error */ 307 /* bomb out */ | 303 } 304 return; 305 306 default: /* Error */ 307 /* bomb out */ |
308 usb2_fifo_put_data_error(sc->sc_fifo.fp[USB_FIFO_RX]); | 308 usb_fifo_put_data_error(sc->sc_fifo.fp[USB_FIFO_RX]); |
309 return; 310 } 311} 312 313static const struct usb_config uhid_config[UHID_N_TRANSFER] = { 314 315 [UHID_INTR_DT_RD] = { 316 .type = UE_INTERRUPT, --- 24 unchanged lines hidden (view full) --- 341}; 342 343static void 344uhid_start_read(struct usb_fifo *fifo) 345{ 346 struct uhid_softc *sc = fifo->priv_sc0; 347 348 if (sc->sc_flags & UHID_FLAG_IMMED) { | 309 return; 310 } 311} 312 313static const struct usb_config uhid_config[UHID_N_TRANSFER] = { 314 315 [UHID_INTR_DT_RD] = { 316 .type = UE_INTERRUPT, --- 24 unchanged lines hidden (view full) --- 341}; 342 343static void 344uhid_start_read(struct usb_fifo *fifo) 345{ 346 struct uhid_softc *sc = fifo->priv_sc0; 347 348 if (sc->sc_flags & UHID_FLAG_IMMED) { |
349 usb2_transfer_start(sc->sc_xfer[UHID_CTRL_DT_RD]); | 349 usbd_transfer_start(sc->sc_xfer[UHID_CTRL_DT_RD]); |
350 } else { | 350 } else { |
351 usb2_transfer_start(sc->sc_xfer[UHID_INTR_DT_RD]); | 351 usbd_transfer_start(sc->sc_xfer[UHID_INTR_DT_RD]); |
352 } 353} 354 355static void 356uhid_stop_read(struct usb_fifo *fifo) 357{ 358 struct uhid_softc *sc = fifo->priv_sc0; 359 | 352 } 353} 354 355static void 356uhid_stop_read(struct usb_fifo *fifo) 357{ 358 struct uhid_softc *sc = fifo->priv_sc0; 359 |
360 usb2_transfer_stop(sc->sc_xfer[UHID_CTRL_DT_RD]); 361 usb2_transfer_stop(sc->sc_xfer[UHID_INTR_DT_RD]); | 360 usbd_transfer_stop(sc->sc_xfer[UHID_CTRL_DT_RD]); 361 usbd_transfer_stop(sc->sc_xfer[UHID_INTR_DT_RD]); |
362} 363 364static void 365uhid_start_write(struct usb_fifo *fifo) 366{ 367 struct uhid_softc *sc = fifo->priv_sc0; 368 | 362} 363 364static void 365uhid_start_write(struct usb_fifo *fifo) 366{ 367 struct uhid_softc *sc = fifo->priv_sc0; 368 |
369 usb2_transfer_start(sc->sc_xfer[UHID_CTRL_DT_WR]); | 369 usbd_transfer_start(sc->sc_xfer[UHID_CTRL_DT_WR]); |
370} 371 372static void 373uhid_stop_write(struct usb_fifo *fifo) 374{ 375 struct uhid_softc *sc = fifo->priv_sc0; 376 | 370} 371 372static void 373uhid_stop_write(struct usb_fifo *fifo) 374{ 375 struct uhid_softc *sc = fifo->priv_sc0; 376 |
377 usb2_transfer_stop(sc->sc_xfer[UHID_CTRL_DT_WR]); | 377 usbd_transfer_stop(sc->sc_xfer[UHID_CTRL_DT_WR]); |
378} 379 380static int 381uhid_get_report(struct uhid_softc *sc, uint8_t type, 382 uint8_t id, void *kern_data, void *user_data, 383 uint16_t len) 384{ 385 int err; 386 uint8_t free_data = 0; 387 388 if (kern_data == NULL) { 389 kern_data = malloc(len, M_USBDEV, M_WAITOK); 390 if (kern_data == NULL) { 391 err = ENOMEM; 392 goto done; 393 } 394 free_data = 1; 395 } | 378} 379 380static int 381uhid_get_report(struct uhid_softc *sc, uint8_t type, 382 uint8_t id, void *kern_data, void *user_data, 383 uint16_t len) 384{ 385 int err; 386 uint8_t free_data = 0; 387 388 if (kern_data == NULL) { 389 kern_data = malloc(len, M_USBDEV, M_WAITOK); 390 if (kern_data == NULL) { 391 err = ENOMEM; 392 goto done; 393 } 394 free_data = 1; 395 } |
396 err = usb2_req_get_report(sc->sc_udev, NULL, kern_data, | 396 err = usbd_req_get_report(sc->sc_udev, NULL, kern_data, |
397 len, sc->sc_iface_index, type, id); 398 if (err) { 399 err = ENXIO; 400 goto done; 401 } 402 if (user_data) { 403 /* dummy buffer */ 404 err = copyout(kern_data, user_data, len); --- 23 unchanged lines hidden (view full) --- 428 goto done; 429 } 430 free_data = 1; 431 err = copyin(user_data, kern_data, len); 432 if (err) { 433 goto done; 434 } 435 } | 397 len, sc->sc_iface_index, type, id); 398 if (err) { 399 err = ENXIO; 400 goto done; 401 } 402 if (user_data) { 403 /* dummy buffer */ 404 err = copyout(kern_data, user_data, len); --- 23 unchanged lines hidden (view full) --- 428 goto done; 429 } 430 free_data = 1; 431 err = copyin(user_data, kern_data, len); 432 if (err) { 433 goto done; 434 } 435 } |
436 err = usb2_req_set_report(sc->sc_udev, NULL, kern_data, | 436 err = usbd_req_set_report(sc->sc_udev, NULL, kern_data, |
437 len, sc->sc_iface_index, type, id); 438 if (err) { 439 err = ENXIO; 440 goto done; 441 } 442done: 443 if (free_data) { 444 free(kern_data, M_USBDEV); --- 9 unchanged lines hidden (view full) --- 454 /* 455 * The buffers are one byte larger than maximum so that one 456 * can detect too large read/writes and short transfers: 457 */ 458 if (fflags & FREAD) { 459 /* reset flags */ 460 sc->sc_flags &= ~UHID_FLAG_IMMED; 461 | 437 len, sc->sc_iface_index, type, id); 438 if (err) { 439 err = ENXIO; 440 goto done; 441 } 442done: 443 if (free_data) { 444 free(kern_data, M_USBDEV); --- 9 unchanged lines hidden (view full) --- 454 /* 455 * The buffers are one byte larger than maximum so that one 456 * can detect too large read/writes and short transfers: 457 */ 458 if (fflags & FREAD) { 459 /* reset flags */ 460 sc->sc_flags &= ~UHID_FLAG_IMMED; 461 |
462 if (usb2_fifo_alloc_buffer(fifo, | 462 if (usb_fifo_alloc_buffer(fifo, |
463 sc->sc_isize + 1, UHID_FRAME_NUM)) { 464 return (ENOMEM); 465 } 466 } 467 if (fflags & FWRITE) { | 463 sc->sc_isize + 1, UHID_FRAME_NUM)) { 464 return (ENOMEM); 465 } 466 } 467 if (fflags & FWRITE) { |
468 if (usb2_fifo_alloc_buffer(fifo, | 468 if (usb_fifo_alloc_buffer(fifo, |
469 sc->sc_osize + 1, UHID_FRAME_NUM)) { 470 return (ENOMEM); 471 } 472 } 473 return (0); 474} 475 476static void 477uhid_close(struct usb_fifo *fifo, int fflags) 478{ 479 if (fflags & (FREAD | FWRITE)) { | 469 sc->sc_osize + 1, UHID_FRAME_NUM)) { 470 return (ENOMEM); 471 } 472 } 473 return (0); 474} 475 476static void 477uhid_close(struct usb_fifo *fifo, int fflags) 478{ 479 if (fflags & (FREAD | FWRITE)) { |
480 usb2_fifo_free_buffer(fifo); | 480 usb_fifo_free_buffer(fifo); |
481 } 482} 483 484static int 485uhid_ioctl(struct usb_fifo *fifo, u_long cmd, void *addr, 486 int fflags) 487{ 488 struct uhid_softc *sc = fifo->priv_sc0; --- 122 unchanged lines hidden (view full) --- 611 /* the Xbox 360 gamepad doesn't use the HID class */ 612 613 if ((uaa->info.bInterfaceClass != UICLASS_VENDOR) || 614 (uaa->info.bInterfaceSubClass != UISUBCLASS_XBOX360_CONTROLLER) || 615 (uaa->info.bInterfaceProtocol != UIPROTO_XBOX360_GAMEPAD)) { 616 return (ENXIO); 617 } 618 } | 481 } 482} 483 484static int 485uhid_ioctl(struct usb_fifo *fifo, u_long cmd, void *addr, 486 int fflags) 487{ 488 struct uhid_softc *sc = fifo->priv_sc0; --- 122 unchanged lines hidden (view full) --- 611 /* the Xbox 360 gamepad doesn't use the HID class */ 612 613 if ((uaa->info.bInterfaceClass != UICLASS_VENDOR) || 614 (uaa->info.bInterfaceSubClass != UISUBCLASS_XBOX360_CONTROLLER) || 615 (uaa->info.bInterfaceProtocol != UIPROTO_XBOX360_GAMEPAD)) { 616 return (ENXIO); 617 } 618 } |
619 if (usb2_test_quirk(uaa, UQ_HID_IGNORE)) { | 619 if (usb_test_quirk(uaa, UQ_HID_IGNORE)) { |
620 return (ENXIO); 621 } 622 return (0); 623} 624 625static int 626uhid_attach(device_t dev) 627{ 628 struct usb_attach_arg *uaa = device_get_ivars(dev); 629 struct uhid_softc *sc = device_get_softc(dev); 630 int unit = device_get_unit(dev); 631 int error = 0; 632 633 DPRINTFN(10, "sc=%p\n", sc); 634 | 620 return (ENXIO); 621 } 622 return (0); 623} 624 625static int 626uhid_attach(device_t dev) 627{ 628 struct usb_attach_arg *uaa = device_get_ivars(dev); 629 struct uhid_softc *sc = device_get_softc(dev); 630 int unit = device_get_unit(dev); 631 int error = 0; 632 633 DPRINTFN(10, "sc=%p\n", sc); 634 |
635 device_set_usb2_desc(dev); | 635 device_set_usb_desc(dev); |
636 637 mtx_init(&sc->sc_mtx, "uhid lock", NULL, MTX_DEF | MTX_RECURSE); 638 639 sc->sc_udev = uaa->device; 640 641 sc->sc_iface_no = uaa->info.bIfaceNum; 642 sc->sc_iface_index = uaa->info.bIfaceIndex; 643 | 636 637 mtx_init(&sc->sc_mtx, "uhid lock", NULL, MTX_DEF | MTX_RECURSE); 638 639 sc->sc_udev = uaa->device; 640 641 sc->sc_iface_no = uaa->info.bIfaceNum; 642 sc->sc_iface_index = uaa->info.bIfaceIndex; 643 |
644 error = usb2_transfer_setup(uaa->device, | 644 error = usbd_transfer_setup(uaa->device, |
645 &uaa->info.bIfaceIndex, sc->sc_xfer, uhid_config, 646 UHID_N_TRANSFER, sc, &sc->sc_mtx); 647 648 if (error) { | 645 &uaa->info.bIfaceIndex, sc->sc_xfer, uhid_config, 646 UHID_N_TRANSFER, sc, &sc->sc_mtx); 647 648 if (error) { |
649 DPRINTF("error=%s\n", usb2_errstr(error)); | 649 DPRINTF("error=%s\n", usbd_errstr(error)); |
650 goto detach; 651 } 652 if (uaa->info.idVendor == USB_VENDOR_WACOM) { 653 654 /* the report descriptor for the Wacom Graphire is broken */ 655 656 if (uaa->info.idProduct == USB_PRODUCT_WACOM_GRAPHIRE) { 657 --- 5 unchanged lines hidden (view full) --- 663 664 static uint8_t reportbuf[] = {2, 2, 2}; 665 666 /* 667 * The Graphire3 needs 0x0202 to be written to 668 * feature report ID 2 before it'll start 669 * returning digitizer data. 670 */ | 650 goto detach; 651 } 652 if (uaa->info.idVendor == USB_VENDOR_WACOM) { 653 654 /* the report descriptor for the Wacom Graphire is broken */ 655 656 if (uaa->info.idProduct == USB_PRODUCT_WACOM_GRAPHIRE) { 657 --- 5 unchanged lines hidden (view full) --- 663 664 static uint8_t reportbuf[] = {2, 2, 2}; 665 666 /* 667 * The Graphire3 needs 0x0202 to be written to 668 * feature report ID 2 before it'll start 669 * returning digitizer data. 670 */ |
671 error = usb2_req_set_report(uaa->device, NULL, | 671 error = usbd_req_set_report(uaa->device, NULL, |
672 reportbuf, sizeof(reportbuf), 673 uaa->info.bIfaceIndex, UHID_FEATURE_REPORT, 2); 674 675 if (error) { 676 DPRINTF("set report failed, error=%s (ignored)\n", | 672 reportbuf, sizeof(reportbuf), 673 uaa->info.bIfaceIndex, UHID_FEATURE_REPORT, 2); 674 675 if (error) { 676 DPRINTF("set report failed, error=%s (ignored)\n", |
677 usb2_errstr(error)); | 677 usbd_errstr(error)); |
678 } 679 sc->sc_repdesc_size = sizeof(uhid_graphire3_4x5_report_descr); 680 sc->sc_repdesc_ptr = USB_ADD_BYTES(uhid_graphire3_4x5_report_descr, 0); 681 sc->sc_flags |= UHID_FLAG_STATIC_DESC; 682 } 683 } else if ((uaa->info.bInterfaceClass == UICLASS_VENDOR) && 684 (uaa->info.bInterfaceSubClass == UISUBCLASS_XBOX360_CONTROLLER) && 685 (uaa->info.bInterfaceProtocol == UIPROTO_XBOX360_GAMEPAD)) { 686 687 /* the Xbox 360 gamepad has no report descriptor */ 688 sc->sc_repdesc_size = sizeof(uhid_xb360gp_report_descr); 689 sc->sc_repdesc_ptr = USB_ADD_BYTES(uhid_xb360gp_report_descr, 0); 690 sc->sc_flags |= UHID_FLAG_STATIC_DESC; 691 } 692 if (sc->sc_repdesc_ptr == NULL) { 693 | 678 } 679 sc->sc_repdesc_size = sizeof(uhid_graphire3_4x5_report_descr); 680 sc->sc_repdesc_ptr = USB_ADD_BYTES(uhid_graphire3_4x5_report_descr, 0); 681 sc->sc_flags |= UHID_FLAG_STATIC_DESC; 682 } 683 } else if ((uaa->info.bInterfaceClass == UICLASS_VENDOR) && 684 (uaa->info.bInterfaceSubClass == UISUBCLASS_XBOX360_CONTROLLER) && 685 (uaa->info.bInterfaceProtocol == UIPROTO_XBOX360_GAMEPAD)) { 686 687 /* the Xbox 360 gamepad has no report descriptor */ 688 sc->sc_repdesc_size = sizeof(uhid_xb360gp_report_descr); 689 sc->sc_repdesc_ptr = USB_ADD_BYTES(uhid_xb360gp_report_descr, 0); 690 sc->sc_flags |= UHID_FLAG_STATIC_DESC; 691 } 692 if (sc->sc_repdesc_ptr == NULL) { 693 |
694 error = usb2_req_get_hid_desc(uaa->device, NULL, | 694 error = usbd_req_get_hid_desc(uaa->device, NULL, |
695 &sc->sc_repdesc_ptr, &sc->sc_repdesc_size, 696 M_USBDEV, uaa->info.bIfaceIndex); 697 698 if (error) { 699 device_printf(dev, "no report descriptor\n"); 700 goto detach; 701 } 702 } | 695 &sc->sc_repdesc_ptr, &sc->sc_repdesc_size, 696 M_USBDEV, uaa->info.bIfaceIndex); 697 698 if (error) { 699 device_printf(dev, "no report descriptor\n"); 700 goto detach; 701 } 702 } |
703 error = usb2_req_set_idle(uaa->device, NULL, | 703 error = usbd_req_set_idle(uaa->device, NULL, |
704 uaa->info.bIfaceIndex, 0, 0); 705 706 if (error) { 707 DPRINTF("set idle failed, error=%s (ignored)\n", | 704 uaa->info.bIfaceIndex, 0, 0); 705 706 if (error) { 707 DPRINTF("set idle failed, error=%s (ignored)\n", |
708 usb2_errstr(error)); | 708 usbd_errstr(error)); |
709 } 710 sc->sc_isize = hid_report_size 711 (sc->sc_repdesc_ptr, sc->sc_repdesc_size, hid_input, &sc->sc_iid); 712 713 sc->sc_osize = hid_report_size 714 (sc->sc_repdesc_ptr, sc->sc_repdesc_size, hid_output, &sc->sc_oid); 715 716 sc->sc_fsize = hid_report_size --- 13 unchanged lines hidden (view full) --- 730 } 731 if (sc->sc_fsize > UHID_BSIZE) { 732 DPRINTF("feature size is too large, " 733 "%d bytes (truncating)\n", 734 sc->sc_fsize); 735 sc->sc_fsize = UHID_BSIZE; 736 } 737 | 709 } 710 sc->sc_isize = hid_report_size 711 (sc->sc_repdesc_ptr, sc->sc_repdesc_size, hid_input, &sc->sc_iid); 712 713 sc->sc_osize = hid_report_size 714 (sc->sc_repdesc_ptr, sc->sc_repdesc_size, hid_output, &sc->sc_oid); 715 716 sc->sc_fsize = hid_report_size --- 13 unchanged lines hidden (view full) --- 730 } 731 if (sc->sc_fsize > UHID_BSIZE) { 732 DPRINTF("feature size is too large, " 733 "%d bytes (truncating)\n", 734 sc->sc_fsize); 735 sc->sc_fsize = UHID_BSIZE; 736 } 737 |
738 error = usb2_fifo_attach(uaa->device, sc, &sc->sc_mtx, | 738 error = usb_fifo_attach(uaa->device, sc, &sc->sc_mtx, |
739 &uhid_fifo_methods, &sc->sc_fifo, 740 unit, 0 - 1, uaa->info.bIfaceIndex, 741 UID_ROOT, GID_OPERATOR, 0644); 742 if (error) { 743 goto detach; 744 } 745 return (0); /* success */ 746 747detach: 748 uhid_detach(dev); 749 return (ENOMEM); 750} 751 752static int 753uhid_detach(device_t dev) 754{ 755 struct uhid_softc *sc = device_get_softc(dev); 756 | 739 &uhid_fifo_methods, &sc->sc_fifo, 740 unit, 0 - 1, uaa->info.bIfaceIndex, 741 UID_ROOT, GID_OPERATOR, 0644); 742 if (error) { 743 goto detach; 744 } 745 return (0); /* success */ 746 747detach: 748 uhid_detach(dev); 749 return (ENOMEM); 750} 751 752static int 753uhid_detach(device_t dev) 754{ 755 struct uhid_softc *sc = device_get_softc(dev); 756 |
757 usb2_fifo_detach(&sc->sc_fifo); | 757 usb_fifo_detach(&sc->sc_fifo); |
758 | 758 |
759 usb2_transfer_unsetup(sc->sc_xfer, UHID_N_TRANSFER); | 759 usbd_transfer_unsetup(sc->sc_xfer, UHID_N_TRANSFER); |
760 761 if (sc->sc_repdesc_ptr) { 762 if (!(sc->sc_flags & UHID_FLAG_STATIC_DESC)) { 763 free(sc->sc_repdesc_ptr, M_USBDEV); 764 } 765 } 766 mtx_destroy(&sc->sc_mtx); 767 --- 20 unchanged lines hidden --- | 760 761 if (sc->sc_repdesc_ptr) { 762 if (!(sc->sc_flags & UHID_FLAG_STATIC_DESC)) { 763 free(sc->sc_repdesc_ptr, M_USBDEV); 764 } 765 } 766 mtx_destroy(&sc->sc_mtx); 767 --- 20 unchanged lines hidden --- |