Make it possible to specify the request flags when issuing a raw USB request.

This commit is contained in:
augustss 1998-12-29 03:13:10 +00:00
parent 16b49a78c6
commit 3064141641
4 changed files with 25 additions and 10 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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 {

View File

@ -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);