summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/usb/ohci.c6
-rw-r--r--sys/dev/usb/ohcivar.h3
-rw-r--r--sys/dev/usb/uhci.c6
-rw-r--r--sys/dev/usb/uhcivar.h3
-rw-r--r--sys/dev/usb/usb_port.h3
5 files changed, 21 insertions, 0 deletions
diff --git a/sys/dev/usb/ohci.c b/sys/dev/usb/ohci.c
index a20be66..9a248cd 100644
--- a/sys/dev/usb/ohci.c
+++ b/sys/dev/usb/ohci.c
@@ -1462,10 +1462,12 @@ ohci_softintr(void *v)
}
}
+#ifdef USB_USE_SOFTINTR
if (sc->sc_softwake) {
sc->sc_softwake = 0;
wakeup(&sc->sc_softwake);
}
+#endif /* USB_USE_SOFTINTR */
sc->sc_bus.intr_context--;
DPRINTFN(10,("ohci_softintr: done:\n"));
@@ -2228,9 +2230,13 @@ ohci_abort_xfer(usbd_xfer_handle xfer, usbd_status status)
*/
usb_delay_ms(opipe->pipe.device->bus, 20); /* Hardware finishes in 1ms */
s = splusb();
+#ifdef USB_USE_SOFTINTR
sc->sc_softwake = 1;
+#endif /* USB_USE_SOFTINTR */
usb_schedsoftintr(&sc->sc_bus);
+#ifdef USB_USE_SOFTINTR
tsleep(&sc->sc_softwake, PZERO, "ohciab", 0);
+#endif /* USB_USE_SOFTINTR */
splx(s);
/*
diff --git a/sys/dev/usb/ohcivar.h b/sys/dev/usb/ohcivar.h
index e72b94f..6b50122 100644
--- a/sys/dev/usb/ohcivar.h
+++ b/sys/dev/usb/ohcivar.h
@@ -111,7 +111,10 @@ typedef struct ohci_softc {
int sc_noport;
u_int8_t sc_addr; /* device address */
u_int8_t sc_conf; /* device configuration */
+
+#ifdef USB_USE_SOFTINTR
char sc_softwake;
+#endif /* USB_USE_SOFTINTR */
ohci_soft_ed_t *sc_freeeds;
ohci_soft_td_t *sc_freetds;
diff --git a/sys/dev/usb/uhci.c b/sys/dev/usb/uhci.c
index 382c295..c96294a 100644
--- a/sys/dev/usb/uhci.c
+++ b/sys/dev/usb/uhci.c
@@ -1268,10 +1268,12 @@ uhci_softintr(void *v)
LIST_FOREACH(ii, &sc->sc_intrhead, list)
uhci_check_intr(sc, ii);
+#ifdef USB_USE_SOFTINTR
if (sc->sc_softwake) {
sc->sc_softwake = 0;
wakeup(&sc->sc_softwake);
}
+#endif /* USB_USE_SOFTINTR */
sc->sc_bus.intr_context--;
}
@@ -1927,10 +1929,14 @@ uhci_abort_xfer(usbd_xfer_handle xfer, usbd_status status)
*/
usb_delay_ms(upipe->pipe.device->bus, 2); /* Hardware finishes in 1ms */
s = splusb();
+#ifdef USB_USE_SOFTINTR
sc->sc_softwake = 1;
+#endif /* USB_USE_SOFTINTR */
usb_schedsoftintr(&sc->sc_bus);
+#ifdef USB_USE_SOFTINTR
DPRINTFN(1,("uhci_abort_xfer: tsleep\n"));
tsleep(&sc->sc_softwake, PZERO, "uhciab", 0);
+#endif /* USB_USE_SOFTINTR */
splx(s);
/*
diff --git a/sys/dev/usb/uhcivar.h b/sys/dev/usb/uhcivar.h
index 82be04b..760f4ea 100644
--- a/sys/dev/usb/uhcivar.h
+++ b/sys/dev/usb/uhcivar.h
@@ -167,7 +167,10 @@ typedef struct uhci_softc {
u_int8_t sc_saved_sof;
u_int16_t sc_saved_frnum;
+#ifdef USB_USE_SOFTINTR
char sc_softwake;
+#endif /* USB_USE_SOFTINTR */
+
char sc_isreset;
char sc_suspend;
char sc_dying;
diff --git a/sys/dev/usb/usb_port.h b/sys/dev/usb/usb_port.h
index 03dcbb1..baaae52 100644
--- a/sys/dev/usb/usb_port.h
+++ b/sys/dev/usb/usb_port.h
@@ -339,7 +339,10 @@ MALLOC_DECLARE(M_USBHC);
#define USBVERBOSE
+/* We don't the soft interrupt code on FreeBSD.
+#if 0
#define USB_USE_SOFTINTR
+#endif
#define Static static
OpenPOWER on IntegriCloud