summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgallatin <gallatin@FreeBSD.org>2000-05-28 02:40:53 +0000
committergallatin <gallatin@FreeBSD.org>2000-05-28 02:40:53 +0000
commit11726c37b143029cf62f48d93100f88af3039ca5 (patch)
treedfea0b2b9fb3a42bf8e3e31f2eebcc6f91a495ef
parentfe35a924a720b823b30fc22b937d50a57d0ca9d8 (diff)
downloadFreeBSD-src-11726c37b143029cf62f48d93100f88af3039ca5.zip
FreeBSD-src-11726c37b143029cf62f48d93100f88af3039ca5.tar.gz
Allow platform specific isa interrupt setup & teardown routines in
preparation for sable/lynx support
-rw-r--r--sys/alpha/include/cpuconf.h5
-rw-r--r--sys/alpha/isa/isa.c12
2 files changed, 16 insertions, 1 deletions
diff --git a/sys/alpha/include/cpuconf.h b/sys/alpha/include/cpuconf.h
index 02ceb8b..8bdb794 100644
--- a/sys/alpha/include/cpuconf.h
+++ b/sys/alpha/include/cpuconf.h
@@ -47,6 +47,7 @@
*
*/
struct device; /* XXX */
+struct resource; /* XXX */
extern struct platform {
/*
@@ -75,6 +76,10 @@ extern struct platform {
void (*pci_intr_disable) __P((int));
void (*pci_intr_enable) __P((int));
int (*pci_setup_ide_intr) __P((int chan, void (*fn)(void*), void *arg));
+ int (*isa_setup_intr) __P((struct device *, struct device *,
+ struct resource *, int, void *, void *, void **));
+ int (*isa_teardown_intr) __P((struct device *, struct device *,
+ struct resource *, void *));
} platform;
/*
diff --git a/sys/alpha/isa/isa.c b/sys/alpha/isa/isa.c
index eee09dd..7e37660 100644
--- a/sys/alpha/isa/isa.c
+++ b/sys/alpha/isa/isa.c
@@ -42,6 +42,7 @@
#include <machine/intr.h>
#include <machine/intrcnt.h>
#include <machine/resource.h>
+#include <machine/cpuconf.h>
static struct rman isa_irq_rman;
static struct rman isa_drq_rman;
@@ -298,7 +299,11 @@ isa_setup_intr(device_t dev, device_t child,
{
struct isa_intr *ii;
int error;
-
+
+ if (platform.isa_setup_intr)
+ return platform.isa_setup_intr(dev, child, irq, flags,
+ intr, arg, cookiep);
+
error = rman_activate_resource(irq);
if (error)
return error;
@@ -334,6 +339,11 @@ isa_teardown_intr(device_t dev, device_t child,
{
struct isa_intr *ii = cookie;
+ if (platform.isa_teardown_intr) {
+ platform.isa_teardown_intr(dev, child, irq, cookie);
+ return 0;
+ }
+
alpha_teardown_intr(ii->ih);
isa_intr_disable(irq->r_start);
OpenPOWER on IntegriCloud