diff --git a/sys/dev/usb/ugen.c b/sys/dev/usb/ugen.c index 0195a36029e1..d6096cc77ac2 100644 --- a/sys/dev/usb/ugen.c +++ b/sys/dev/usb/ugen.c @@ -1,4 +1,4 @@ -/* $NetBSD: ugen.c,v 1.5 1998/12/26 12:53:01 augustss Exp $ */ +/* $NetBSD: ugen.c,v 1.6 1998/12/29 03:13:10 augustss Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -835,7 +835,8 @@ ugenioctl(dev, cmd, addr, flag, p) goto ret; } } - r = usbd_do_request(sc->sc_udev, &ur->request, ptr); + r = usbd_do_request_flags(sc->sc_udev, &ur->request, + ptr, ur->flags); if (r) { error = EIO; goto ret; diff --git a/sys/dev/usb/usb.c b/sys/dev/usb/usb.c index 33d98dbe9c10..723594044705 100644 --- a/sys/dev/usb/usb.c +++ b/sys/dev/usb/usb.c @@ -1,4 +1,4 @@ -/* $NetBSD: usb.c,v 1.8 1998/12/28 02:20:28 augustss Exp $ */ +/* $NetBSD: usb.c,v 1.9 1998/12/29 03:13:10 augustss Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -343,11 +343,12 @@ usbioctl(dev, cmd, data, flag, p) usbd_status r; int error = 0; + DPRINTF(("usbioctl: USB_REQUEST addr=%d len=%d\n", addr, len)); if (len < 0 || len > 32768) - return EINVAL; + return (EINVAL); if (addr < 0 || addr >= USB_MAX_DEVICES || sc->sc_bus->devices[addr] == 0) - return EINVAL; + return (EINVAL); if (len != 0) { iov.iov_base = (caddr_t)ur->data; iov.iov_len = len; @@ -367,8 +368,8 @@ usbioctl(dev, cmd, data, flag, p) goto ret; } } - r = usbd_do_request(sc->sc_bus->devices[addr], - &ur->request, ptr); + r = usbd_do_request_flags(sc->sc_bus->devices[addr], + &ur->request, ptr, ur->flags); if (r) { error = EIO; goto ret; diff --git a/sys/dev/usb/usb.h b/sys/dev/usb/usb.h index e66855c47c32..95791de3d05f 100644 --- a/sys/dev/usb/usb.h +++ b/sys/dev/usb/usb.h @@ -1,4 +1,4 @@ -/* $NetBSD: usb.h,v 1.11 1998/12/28 12:35:27 augustss Exp $ */ +/* $NetBSD: usb.h,v 1.12 1998/12/29 03:13:10 augustss Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -368,6 +368,9 @@ struct usb_ctl_request { int addr; usb_device_request_t request; void *data; + int flags; +/* XXX must match flags in usbdi.h */ +#define USBD_SHORT_XFER_OK 0x04 }; struct usb_alt_interface { diff --git a/sys/dev/usb/usbdi.c b/sys/dev/usb/usbdi.c index 83ca47623c2a..00ef11f3ed9e 100644 --- a/sys/dev/usb/usbdi.c +++ b/sys/dev/usb/usbdi.c @@ -1,4 +1,4 @@ -/* $NetBSD: usbdi.c,v 1.16 1998/12/28 20:14:00 augustss Exp $ */ +/* $NetBSD: usbdi.c,v 1.17 1998/12/29 03:13:10 augustss Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -1034,6 +1034,16 @@ usbd_do_request(dev, req, data) usbd_device_handle dev; usb_device_request_t *req; void *data; +{ + return (usbd_do_request_flags(dev, req, data, 0)); +} + +usbd_status +usbd_do_request_flags(dev, req, data, flags) + usbd_device_handle dev; + usb_device_request_t *req; + void *data; + u_int16_t flags; { usbd_request_handle reqh; usbd_status r; @@ -1050,7 +1060,7 @@ usbd_do_request(dev, req, data) return (USBD_NOMEM); r = usbd_setup_default_request( reqh, dev, 0, USBD_DEFAULT_TIMEOUT, req, data, - UGETW(req->wLength), 0, 0); + UGETW(req->wLength), flags, 0); if (r != USBD_NORMAL_COMPLETION) goto bad; r = usbd_sync_transfer(reqh);