diff options
author | jhb <jhb@FreeBSD.org> | 2004-05-10 18:49:58 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2004-05-10 18:49:58 +0000 |
commit | 3564a3448df2230819f217420bb3856b51fd64c8 (patch) | |
tree | 784f1513fbbb25175f0b3292accf66533f5c0077 /sys/i386/include | |
parent | 15cc971bcf0f8e77efc49cd1250fc4a311897e47 (diff) | |
download | FreeBSD-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/include')
-rw-r--r-- | sys/i386/include/apicvar.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/i386/include/apicvar.h b/sys/i386/include/apicvar.h index f387969..7bdcc7f 100644 --- a/sys/i386/include/apicvar.h +++ b/sys/i386/include/apicvar.h @@ -136,6 +136,7 @@ u_int apic_idt_to_irq(u_int vector); void apic_register_enumerator(struct apic_enumerator *enumerator); void *ioapic_create(uintptr_t addr, int32_t id, int intbase); int ioapic_disable_pin(void *cookie, u_int pin); +void ioapic_enable_mixed_mode(void); int ioapic_get_vector(void *cookie, u_int pin); int ioapic_next_logical_cluster(void); void ioapic_register(void *cookie); |