summaryrefslogtreecommitdiffstats
path: root/sys/amd64/isa/nmi.c
diff options
context:
space:
mode:
authortakawata <takawata@FreeBSD.org>2001-07-20 06:07:34 +0000
committertakawata <takawata@FreeBSD.org>2001-07-20 06:07:34 +0000
commitd3d1b151d3f3f67385b5e5adbbafd20527daa156 (patch)
treefb4e3d6b249e14e537e8681949888f823fa67602 /sys/amd64/isa/nmi.c
parentc3d97bef4d7f5c6ef78bbe34ac08731d7e2a9b0f (diff)
downloadFreeBSD-src-d3d1b151d3f3f67385b5e5adbbafd20527daa156.zip
FreeBSD-src-d3d1b151d3f3f67385b5e5adbbafd20527daa156.tar.gz
Add ACPI S2-S4BIOS Suspend/Resume code.
Some problems may remain. Reviewed by:iwasaki
Diffstat (limited to 'sys/amd64/isa/nmi.c')
-rw-r--r--sys/amd64/isa/nmi.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/sys/amd64/isa/nmi.c b/sys/amd64/isa/nmi.c
index 503163f..48555d3 100644
--- a/sys/amd64/isa/nmi.c
+++ b/sys/amd64/isa/nmi.c
@@ -135,6 +135,7 @@ static driver_intr_t isa_strayintr;
static void ithds_init(void *dummy);
static void ithread_enable(int vector);
static void ithread_disable(int vector);
+static void init_i8259(void);
#ifdef PC98
#define NMI_PARITY 0x04
@@ -282,6 +283,22 @@ isa_nmi(cd)
}
/*
+ * ICU reinitialize when ICU configuration has lost.
+ */
+void icu_reinit()
+{
+ int i;
+ u_int32_t eflags;
+ eflags = read_eflags();
+ disable_intr();
+ init_i8259();
+ for(i=0;i<ICU_LEN;i++)
+ if(intr_handler[i] != isa_strayintr)
+ INTREN(1<<i);
+ write_eflags(eflags);
+}
+
+/*
* Create a default interrupt table to avoid problems caused by
* spurious interrupts during configuration of kernel, then setup
* interrupt control unit.
@@ -294,8 +311,16 @@ isa_defaultirq()
/* icu vectors */
for (i = 0; i < ICU_LEN; i++)
icu_unset(i, (driver_intr_t *)NULL);
+ init_i8259();
+}
+
+
+/*
+ *initialize 8259's
+ */
+static void init_i8259()
+{
- /* initialize 8259's */
#ifdef DEV_MCA
if (MCA_system)
outb(IO_ICU1, 0x19); /* reset; program device, four bytes */
OpenPOWER on IntegriCloud