summaryrefslogtreecommitdiffstats
path: root/sys/i386/acpica
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2004-05-10 18:49:58 +0000
committerjhb <jhb@FreeBSD.org>2004-05-10 18:49:58 +0000
commit3564a3448df2230819f217420bb3856b51fd64c8 (patch)
tree784f1513fbbb25175f0b3292accf66533f5c0077 /sys/i386/acpica
parent15cc971bcf0f8e77efc49cd1250fc4a311897e47 (diff)
downloadFreeBSD-src-3564a3448df2230819f217420bb3856b51fd64c8.zip
FreeBSD-src-3564a3448df2230819f217420bb3856b51fd64c8.tar.gz
Rework the APIC mixed mode support a bit:
- Require the APIC enumerators to explicitly enable mixed mode by calling ioapic_enable_mixed_mode(). Calling this function tells the apic driver that the PC-AT 8259A PICs are present and routable through the first I/O APIC via an ExtINT pin. The mptable enumerator always calls this function for now. The MADT enumerator only enables mixed mode if the PC-AT compatability flag is set in the MADT header. - Allow mixed mode to be enabled or disabled via a 'hw.apic.mixed_mode' tunable. By default this tunable is set to 1 (true). The kernel option NO_MIXED_MODE changes the default to 0 to preserve existing behavior, but adding 'hw.apic.mixed_mode=0' to loader.conf achieves the same effect. - Only use mixed mode to route IRQ 0 if it is both enabled by the APIC enumerator and activated by the loader tunable. Note that both conditions must be true, so if the APIC enumerator does not enable mixed mode, then you can't set the tunable to try to override the enumerator.
Diffstat (limited to 'sys/i386/acpica')
-rw-r--r--sys/i386/acpica/madt.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/i386/acpica/madt.c b/sys/i386/acpica/madt.c
index 81dd058..3bccc4a 100644
--- a/sys/i386/acpica/madt.c
+++ b/sys/i386/acpica/madt.c
@@ -368,6 +368,8 @@ madt_setup_io(void)
}
/* First, we run through adding I/O APIC's. */
+ if (madt->PCATCompat)
+ ioapic_enable_mixed_mode();
madt_walk_table(madt_parse_apics, NULL);
/* Second, we run through the table tweaking interrupt sources. */
OpenPOWER on IntegriCloud