diff options
| author | skrll <skrll@NetBSD.org> | 2017-01-19 16:05:00 +0000 |
|---|---|---|
| committer | skrll <skrll@NetBSD.org> | 2017-01-19 16:05:00 +0000 |
| commit | a591fc50fd7d720fd6a324a17ae2a5e98445a547 (patch) | |
| tree | cf430388aa694923bd884901eb02c7c86cfdf365 /sys/dev/usb/usb.c | |
| parent | 93cb194a01a587faa4d9a559272ee4c6547d910d (diff) | |
Pull across xhci(4) improvemnts from nick-nhusb
Diffstat (limited to 'sys/dev/usb/usb.c')
| -rw-r--r-- | sys/dev/usb/usb.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/sys/dev/usb/usb.c b/sys/dev/usb/usb.c index b5059e84231..640b2fed3cc 100644 --- a/sys/dev/usb/usb.c +++ b/sys/dev/usb/usb.c @@ -1,4 +1,4 @@ -/* $NetBSD: usb.c,v 1.164 2016/08/14 14:42:22 skrll Exp $ */ +/* $NetBSD: usb.c,v 1.165 2017/01/19 16:05:00 skrll Exp $ */ /* * Copyright (c) 1998, 2002, 2008, 2012 The NetBSD Foundation, Inc. @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.164 2016/08/14 14:42:22 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: usb.c,v 1.165 2017/01/19 16:05:00 skrll Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -727,8 +727,12 @@ usbioctl(dev_t devt, u_long cmd, void *data, int flag, struct lwp *l) error = EINVAL; goto fail; } - if (addr < 0 || addr >= USB_MAX_DEVICES || - sc->sc_bus->ub_devices[addr] == NULL) { + if (addr < 0 || addr >= USB_MAX_DEVICES) { + error = EINVAL; + goto fail; + } + size_t dindex = usb_addr2dindex(addr); + if (sc->sc_bus->ub_devices[dindex] == NULL) { error = EINVAL; goto fail; } @@ -750,7 +754,7 @@ usbioctl(dev_t devt, u_long cmd, void *data, int flag, struct lwp *l) goto ret; } } - err = usbd_do_request_flags(sc->sc_bus->ub_devices[addr], + err = usbd_do_request_flags(sc->sc_bus->ub_devices[dindex], &ur->ucr_request, ptr, ur->ucr_flags, &ur->ucr_actlen, USBD_DEFAULT_TIMEOUT); if (err) { @@ -783,7 +787,8 @@ usbioctl(dev_t devt, u_long cmd, void *data, int flag, struct lwp *l) error = EINVAL; goto fail; } - if ((dev = sc->sc_bus->ub_devices[addr]) == NULL) { + size_t dindex = usb_addr2dindex(addr); + if ((dev = sc->sc_bus->ub_devices[dindex]) == NULL) { error = ENXIO; goto fail; } @@ -802,7 +807,8 @@ usbioctl(dev_t devt, u_long cmd, void *data, int flag, struct lwp *l) error = EINVAL; goto fail; } - if ((dev = sc->sc_bus->ub_devices[addr]) == NULL) { + size_t dindex = usb_addr2dindex(addr); + if ((dev = sc->sc_bus->ub_devices[dindex]) == NULL) { error = ENXIO; goto fail; } |
