diff options
author | gallatin <gallatin@FreeBSD.org> | 2000-05-28 02:40:53 +0000 |
---|---|---|
committer | gallatin <gallatin@FreeBSD.org> | 2000-05-28 02:40:53 +0000 |
commit | 11726c37b143029cf62f48d93100f88af3039ca5 (patch) | |
tree | dfea0b2b9fb3a42bf8e3e31f2eebcc6f91a495ef /sys/alpha | |
parent | fe35a924a720b823b30fc22b937d50a57d0ca9d8 (diff) | |
download | FreeBSD-src-11726c37b143029cf62f48d93100f88af3039ca5.zip FreeBSD-src-11726c37b143029cf62f48d93100f88af3039ca5.tar.gz |
Allow platform specific isa interrupt setup & teardown routines in
preparation for sable/lynx support
Diffstat (limited to 'sys/alpha')
-rw-r--r-- | sys/alpha/include/cpuconf.h | 5 | ||||
-rw-r--r-- | sys/alpha/isa/isa.c | 12 |
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); |