diff options
-rw-r--r-- | sys/dev/usb/ohci.c | 6 | ||||
-rw-r--r-- | sys/dev/usb/ohcivar.h | 3 | ||||
-rw-r--r-- | sys/dev/usb/uhci.c | 6 | ||||
-rw-r--r-- | sys/dev/usb/uhcivar.h | 3 | ||||
-rw-r--r-- | sys/dev/usb/usb_port.h | 3 |
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 |