aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMasahide MAEKAWA <gehenna@FreeBSD.org>1999-08-29 01:18:32 +0000
committerMasahide MAEKAWA <gehenna@FreeBSD.org>1999-08-29 01:18:32 +0000
commita0f9149b1904810da417452324871aa9379bf4bf (patch)
treed3ee118d42def6a11e0573b939af25bf87e35c77
parent7dc5a4da7613bd65fa93257e93d9ef1076527e4d (diff)
downloadsrc-a0f9149b1904810da417452324871aa9379bf4bf.tar.gz
src-a0f9149b1904810da417452324871aa9379bf4bf.zip
o synchronisation with NetBSD
Reviewed by: Hick Hibma Obtained from: NetBSD
Notes
Notes: svn path=/head/; revision=50536
-rw-r--r--sys/dev/usb/ugen.c6
-rw-r--r--sys/dev/usb/usbdi_util.c65
-rw-r--r--sys/dev/usb/usbdi_util.h12
3 files changed, 70 insertions, 13 deletions
diff --git a/sys/dev/usb/ugen.c b/sys/dev/usb/ugen.c
index 0772eb8bc59a..cc52e06f309a 100644
--- a/sys/dev/usb/ugen.c
+++ b/sys/dev/usb/ugen.c
@@ -473,7 +473,8 @@ ugenread(dev, uio, flag)
while ((n = min(UGEN_BBSIZE, uio->uio_resid)) != 0) {
DPRINTFN(1, ("ugenread: start transfer %d bytes\n", n));
tn = n;
- r = usbd_bulk_transfer(reqh, sce->pipeh, 0, buf,
+ r = usbd_bulk_transfer(reqh, sce->pipeh, 0,
+ UBSD_NO_TIMEOUT, buf,
&tn, "ugenrb");
if (r != USBD_NORMAL_COMPLETION) {
if (r == USBD_INTERRUPTED)
@@ -538,7 +539,8 @@ ugenwrite(dev, uio, flag)
if (error)
break;
DPRINTFN(1, ("ugenwrite: transfer %d bytes\n", n));
- r = usbd_bulk_transfer(reqh, sce->pipeh, 0, buf,
+ r = usbd_bulk_transfer(reqh, sce->pipeh, 0,
+ USBD_NO_TIMEOUT, buf,
&n, "ugenwb");
if (r != USBD_NORMAL_COMPLETION) {
if (r == USBD_INTERRUPTED)
diff --git a/sys/dev/usb/usbdi_util.c b/sys/dev/usb/usbdi_util.c
index 27b7a32c9e02..a8e06f554d86 100644
--- a/sys/dev/usb/usbdi_util.c
+++ b/sys/dev/usb/usbdi_util.c
@@ -1,4 +1,4 @@
-/* $NetBSD: usbdi_util.c,v 1.13 1999/01/08 11:58:26 augustss Exp $ */
+/* $NetBSD: usbdi_util.c,v 1.19 1999/08/22 20:12:40 augustss Exp $ */
/* $FreeBSD$ */
/*
@@ -43,6 +43,7 @@
#include <sys/kernel.h>
#include <sys/malloc.h>
#include <sys/proc.h>
+#include <sys/device.h>
#if defined(__FreeBSD__)
#include <sys/bus.h>
#endif
@@ -76,7 +77,7 @@ usbd_get_desc(dev, type, index, len, desc)
USETW2(req.wValue, type, index);
USETW(req.wIndex, 0);
USETW(req.wLength, len);
- return (usbd_do_request_flags(dev, &req, desc, USBD_SHORT_XFER_OK, NULL));
+ return (usbd_do_request(dev, &req, desc));
}
usbd_status
@@ -183,6 +184,36 @@ usbd_get_port_status(dev, port, ps)
}
usbd_status
+usbd_clear_hub_feature(dev, sel)
+ usbd_device_handle dev;
+ int sel;
+{
+ usb_device_request_t req;
+
+ req.bmRequestType = UT_WRITE_CLASS_DEVICE;
+ req.bRequest = UR_CLEAR_FEATURE;
+ USETW(req.wValue, sel);
+ USETW(req.wIndex, 0);
+ USETW(req.wLength, 0);
+ return (usbd_do_request(dev, &req, 0));
+}
+
+usbd_status
+usbd_set_hub_feature(dev, sel)
+ usbd_device_handle dev;
+ int sel;
+{
+ usb_device_request_t req;
+
+ req.bmRequestType = UT_WRITE_CLASS_DEVICE;
+ req.bRequest = UR_SET_FEATURE;
+ USETW(req.wValue, sel);
+ USETW(req.wIndex, 0);
+ USETW(req.wLength, 0);
+ return (usbd_do_request(dev, &req, 0));
+}
+
+usbd_status
usbd_clear_port_feature(dev, port, sel)
usbd_device_handle dev;
int port, sel;
@@ -408,7 +439,7 @@ usbd_alloc_report_desc(ifc, descp, sizep, mem)
usbd_interface_handle ifc;
void **descp;
int *sizep;
-#if defined(__NetBSD__)
+#if defined(__NetBSD__) || defined(__OpenBSD__)
int mem;
#elif defined(__FreeBSD__)
struct malloc_type *mem;
@@ -470,21 +501,20 @@ usbd_bulk_transfer_cb(reqh, priv, status)
}
usbd_status
-usbd_bulk_transfer(reqh, pipe, flags, buf, size, lbl)
+usbd_bulk_transfer(reqh, pipe, flags, timeout, buf, size, lbl)
usbd_request_handle reqh;
usbd_pipe_handle pipe;
u_int16_t flags;
+ u_int32_t timeout;
void *buf;
u_int32_t *size;
char *lbl;
{
- usbd_private_handle priv;
- void *buffer;
usbd_status r;
int s, error;
r = usbd_setup_request(reqh, pipe, 0, buf, *size,
- flags, USBD_NO_TIMEOUT, usbd_bulk_transfer_cb);
+ flags, timeout, usbd_bulk_transfer_cb);
if (r != USBD_NORMAL_COMPLETION)
return (r);
DPRINTFN(1, ("usbd_bulk_transfer: start transfer %d bytes\n", *size));
@@ -497,10 +527,11 @@ usbd_bulk_transfer(reqh, pipe, flags, buf, size, lbl)
error = tsleep((caddr_t)reqh, PZERO | PCATCH, lbl, 0);
splx(s);
if (error) {
+ DPRINTF(("usbd_bulk_transfer: tsleep=%d\n", error));
usbd_abort_pipe(pipe);
return (USBD_INTERRUPTED);
}
- usbd_get_request_status(reqh, &priv, &buffer, size, &r);
+ usbd_get_request_status(reqh, 0, 0, size, &r);
DPRINTFN(1,("usbd_bulk_transfer: transferred %d\n", *size));
if (r != USBD_NORMAL_COMPLETION) {
DPRINTF(("usbd_bulk_transfer: error=%d\n", r));
@@ -509,3 +540,21 @@ usbd_bulk_transfer(reqh, pipe, flags, buf, size, lbl)
return (r);
}
+void
+usb_detach_wait(dv)
+ bdevice *dv;
+{
+ DPRINTF(("usb_detach_wait: waiting for %s\n", USBDEVNAME(*dv)));
+ if (tsleep(dv, PZERO, "usbdet", hz * 60))
+ printf("usb_detach_wait: %s didn't detach\n",
+ USBDEVNAME(*dv));
+ DPRINTF(("usb_detach_wait: %s done\n", USBDEVNAME(*dv)));
+}
+
+void
+usb_detach_wakeup(dv)
+ bdevice *dv;
+{
+ DPRINTF(("usb_detach_wakeup: for %s\n", USBDEVNAME(*dv)));
+ wakeup(dv);
+}
diff --git a/sys/dev/usb/usbdi_util.h b/sys/dev/usb/usbdi_util.h
index 6505617ce62b..6a0752073974 100644
--- a/sys/dev/usb/usbdi_util.h
+++ b/sys/dev/usb/usbdi_util.h
@@ -1,4 +1,4 @@
-/* $NetBSD: usbdi_util.h,v 1.12 1999/01/01 15:25:57 augustss Exp $ */
+/* $NetBSD: usbdi_util.h,v 1.16 1999/08/22 20:12:40 augustss Exp $ */
/* $FreeBSD$ */
/*
@@ -49,6 +49,8 @@ usbd_status usbd_get_device_desc __P((usbd_device_handle dev,
usbd_status usbd_set_address __P((usbd_device_handle dev, int addr));
usbd_status usbd_get_port_status __P((usbd_device_handle,
int, usb_port_status_t *));
+usbd_status usbd_set_hub_feature __P((usbd_device_handle dev, int));
+usbd_status usbd_clear_hub_feature __P((usbd_device_handle, int));
usbd_status usbd_set_port_feature __P((usbd_device_handle dev, int, int));
usbd_status usbd_clear_port_feature __P((usbd_device_handle, int, int));
usbd_status usbd_get_device_status __P((usbd_device_handle,usb_status_t*));
@@ -67,7 +69,7 @@ usbd_status usbd_get_report
__P((usbd_interface_handle iface,int type,int id,void *data,int len));
usbd_status usbd_set_idle
__P((usbd_interface_handle iface, int duration, int id));
-#if defined(__NetBSD__)
+#if defined(__NetBSD__) || defined(__OpenBSD__)
usbd_status usbd_alloc_report_desc
__P((usbd_interface_handle ifc, void **descp, int *sizep, int mem));
#elif defined(__FreeBSD__)
@@ -89,4 +91,8 @@ usbd_status usbd_set_config_index
usbd_status usbd_bulk_transfer
__P((usbd_request_handle reqh, usbd_pipe_handle pipe, u_int16_t flags,
- void *buf, u_int32_t *size, char *lbl));
+ u_int32_t timeout, void *buf, u_int32_t *size, char *lbl));
+
+void usb_detach_wait __P((bdevice *));
+void usb_detach_wakeup __P((bdevice *));
+