summaryrefslogtreecommitdiffstats
path: root/sys/dev/twa
diff options
context:
space:
mode:
authorpiso <piso@FreeBSD.org>2007-02-23 12:19:07 +0000
committerpiso <piso@FreeBSD.org>2007-02-23 12:19:07 +0000
commit6a2ffa86e5b748ba71e36d37462a936eb9101be7 (patch)
tree10833d4edb6c0d0a5efcf7762d842a4c378404b0 /sys/dev/twa
parent7b48c9d78377cdb9fc6e8bcc5406e28819aef6e3 (diff)
downloadFreeBSD-src-6a2ffa86e5b748ba71e36d37462a936eb9101be7.zip
FreeBSD-src-6a2ffa86e5b748ba71e36d37462a936eb9101be7.tar.gz
o break newbus api: add a new argument of type driver_filter_t to
bus_setup_intr() o add an int return code to all fast handlers o retire INTR_FAST/IH_FAST For more info: http://docs.freebsd.org/cgi/getmsg.cgi?fetch=465712+0+current/freebsd-current Reviewed by: many Approved by: re@
Diffstat (limited to 'sys/dev/twa')
-rw-r--r--sys/dev/twa/tw_osl_freebsd.c44
1 files changed, 31 insertions, 13 deletions
diff --git a/sys/dev/twa/tw_osl_freebsd.c b/sys/dev/twa/tw_osl_freebsd.c
index f8d972a..1bf3b7a 100644
--- a/sys/dev/twa/tw_osl_freebsd.c
+++ b/sys/dev/twa/tw_osl_freebsd.c
@@ -174,9 +174,11 @@ static TW_INT32 twa_attach(device_t dev);
static TW_INT32 twa_detach(device_t dev);
static TW_INT32 twa_shutdown(device_t dev);
static TW_VOID twa_busdma_lock(TW_VOID *lock_arg, bus_dma_lock_op_t op);
-static TW_VOID twa_pci_intr(TW_VOID *arg);
#ifdef TW_OSLI_DEFERRED_INTR_USED
+static int twa_pci_intr_fast(TW_VOID *arg);
static TW_VOID twa_deferred_intr(TW_VOID *context, TW_INT32 pending);
+#else
+static TW_VOID twa_pci_intr(TW_VOID *arg);
#endif /* TW_OSLI_DEFERRED_INTR_USED */
static TW_INT32 tw_osli_alloc_mem(struct twa_softc *sc);
@@ -357,12 +359,13 @@ twa_attach(device_t dev)
return(ENXIO);
}
if ((error = bus_setup_intr(sc->bus_dev, sc->irq_res,
- ((mp_ncpus > 1) ? (INTR_MPSAFE
+ INTR_TYPE_CAM | INTR_MPSAFE,
#ifdef TW_OSLI_DEFERRED_INTR_USED
- | INTR_FAST
-#endif /* TW_OSLI_DEFERRED_INTR_USED */
- ) : 0) | INTR_TYPE_CAM,
- twa_pci_intr, sc, &sc->intr_handle))) {
+ twa_pci_intr_fast, NULL,
+#else
+ NULL, twa_pci_intr,
+#endif
+ sc, &sc->intr_handle))) {
tw_osli_printf(sc, "error = %d",
TW_CL_SEVERITY_ERROR_STRING,
TW_CL_MESSAGE_SOURCE_FREEBSD_DRIVER,
@@ -977,7 +980,28 @@ twa_busdma_lock(TW_VOID *lock_arg, bus_dma_lock_op_t op)
}
+#ifdef TW_OSLI_DEFERRED_INTR_USED
+/*
+ * Function name: twa_pci_intr_fast
+ * Description: Interrupt handler. Wrapper for twa_interrupt.
+ *
+ * Input: arg -- ptr to OSL internal ctlr context
+ * Output: FILTER_HANDLED or FILTER_STRAY
+ * Return value: None
+ */
+static int
+twa_pci_intr_fast(TW_VOID *arg)
+{
+ struct twa_softc *sc = (struct twa_softc *)arg;
+ tw_osli_dbg_dprintf(10, sc, "entered");
+ if (tw_cl_interrupt(&(sc->ctlr_handle))) {
+ tw_cl_deferred_interrupt(&(sc->ctlr_handle));
+ return(FILTER_HANDLED);
+ }
+ return(FILTER_STRAY);
+}
+#else
/*
* Function name: twa_pci_intr
* Description: Interrupt handler. Wrapper for twa_interrupt.
@@ -993,15 +1017,9 @@ twa_pci_intr(TW_VOID *arg)
tw_osli_dbg_dprintf(10, sc, "entered");
if (tw_cl_interrupt(&(sc->ctlr_handle)))
-#ifdef TW_OSLI_DEFERRED_INTR_USED
- taskqueue_enqueue_fast(taskqueue_fast,
- &(sc->deferred_intr_callback));
-#else /* TW_OSLI_DEFERRED_INTR_USED */
tw_cl_deferred_interrupt(&(sc->ctlr_handle));
-#endif /* TW_OSLI_DEFERRED_INTR_USED */
}
-
-
+#endif
#ifdef TW_OSLI_DEFERRED_INTR_USED
OpenPOWER on IntegriCloud