summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/nmi.c
diff options
context:
space:
mode:
authormdodd <mdodd@FreeBSD.org>1999-09-03 02:04:28 +0000
committermdodd <mdodd@FreeBSD.org>1999-09-03 02:04:28 +0000
commit787d2575bc4a4fa6e8289b60ee2405e15fb0158b (patch)
treef8d141221ef5dd681a29d52481f755622bd37c72 /sys/i386/isa/nmi.c
parent974aea3e4ce095b6052dd022878c5e475ec147b7 (diff)
downloadFreeBSD-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.c25
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
OpenPOWER on IntegriCloud