summaryrefslogtreecommitdiff
path: root/sys/dev/usb/usb.c
diff options
context:
space:
mode:
authorskrll <skrll@NetBSD.org>2017-01-19 16:05:00 +0000
committerskrll <skrll@NetBSD.org>2017-01-19 16:05:00 +0000
commita591fc50fd7d720fd6a324a17ae2a5e98445a547 (patch)
treecf430388aa694923bd884901eb02c7c86cfdf365 /sys/dev/usb/usb.c
parent93cb194a01a587faa4d9a559272ee4c6547d910d (diff)
Pull across xhci(4) improvemnts from nick-nhusb
Diffstat (limited to 'sys/dev/usb/usb.c')
-rw-r--r--sys/dev/usb/usb.c20
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;
}