diff options
author | mdodd <mdodd@FreeBSD.org> | 1999-09-03 02:04:28 +0000 |
---|---|---|
committer | mdodd <mdodd@FreeBSD.org> | 1999-09-03 02:04:28 +0000 |
commit | 787d2575bc4a4fa6e8289b60ee2405e15fb0158b (patch) | |
tree | f8d141221ef5dd681a29d52481f755622bd37c72 /sys/i386/isa/nmi.c | |
parent | 974aea3e4ce095b6052dd022878c5e475ec147b7 (diff) | |
download | FreeBSD-src-787d2575bc4a4fa6e8289b60ee2405e15fb0158b.zip FreeBSD-src-787d2575bc4a4fa6e8289b60ee2405e15fb0158b.tar.gz |
This adds the i386 specific support for systems with a MicroChannel
Architecture bus.
Reviewed by: msmith
Diffstat (limited to 'sys/i386/isa/nmi.c')
-rw-r--r-- | sys/i386/isa/nmi.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/sys/i386/isa/nmi.c b/sys/i386/isa/nmi.c index 8bdb4b6..a429ef4 100644 --- a/sys/i386/isa/nmi.c +++ b/sys/i386/isa/nmi.c @@ -79,6 +79,11 @@ #include <machine/clock.h> #endif +#include "mca.h" +#if NMCA > 0 +#include <i386/isa/mca_machdep.h> +#endif + /* XXX should be in suitable include files */ #ifdef PC98 #define ICU_IMR_OFFSET 2 /* IO_ICU{1,2} + 2 */ @@ -169,6 +174,11 @@ isa_nmi(cd) int isa_port = inb(0x61); int eisa_port = inb(0x461); +#if NMCA > 0 + if (MCA_system && mca_bus_nmi()) + return; +#endif + if (isa_port & NMI_PARITY) panic("RAM parity error, likely hardware failure."); @@ -211,7 +221,12 @@ isa_defaultirq() icu_unset(i, (inthand2_t *)NULL); /* initialize 8259's */ - outb(IO_ICU1, 0x11); /* reset; program device, four bytes */ +#if NMCA > 0 + if (MCA_system) + outb(IO_ICU1, 0x19); /* reset; program device, four bytes */ + else +#endif + outb(IO_ICU1, 0x11); /* reset; program device, four bytes */ outb(IO_ICU1+ICU_IMR_OFFSET, NRSVIDT); /* starting at this vector index */ outb(IO_ICU1+ICU_IMR_OFFSET, IRQ_SLAVE); /* slave on line 7 */ @@ -234,7 +249,13 @@ isa_defaultirq() outb(IO_ICU1, 0xc0 | (3 - 1)); /* pri order 3-7, 0-2 (com2 first) */ #endif /* !PC98 */ - outb(IO_ICU2, 0x11); /* reset; program device, four bytes */ +#if NMCA > 0 + if (MCA_system) + outb(IO_ICU2, 0x19); /* reset; program device, four bytes */ + else +#endif + outb(IO_ICU2, 0x11); /* reset; program device, four bytes */ + outb(IO_ICU2+ICU_IMR_OFFSET, NRSVIDT+8); /* staring at this vector index */ outb(IO_ICU2+ICU_IMR_OFFSET, ICU_SLAVEID); /* my slave id is 7 */ #ifdef PC98 |