diff options
author | Yinghai Lu <yhlu.kernel@gmail.com> | 2008-06-01 16:17:38 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-06-03 07:26:27 -0400 |
commit | 2944e16b25e7fb8b5ee0dd9dc7197a0f9e523cfd (patch) | |
tree | 0114128fdb9d2f54188a1684758e0217eadae1e5 /arch/x86/kernel/acpi | |
parent | e8c27ac9191ab9e6506ae5cbe70d87ac50f8e960 (diff) |
x86: update mptable
make mptable to be consistent with acpi routing, so we could:
1. kexec kernel with acpi=off
2. work around BIOSes where acpi routing is working, but mptable is
not right, so can use kernel/kexec to start other OSes that don't have
good acpi support.
command line: update_mptable
Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/acpi')
-rw-r--r-- | arch/x86/kernel/acpi/boot.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 2ddfabae382b..f226bdc19f69 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
@@ -1154,6 +1154,28 @@ int mp_register_gsi(u32 gsi, int triggering, int polarity) | |||
1154 | return gsi; | 1154 | return gsi; |
1155 | } | 1155 | } |
1156 | 1156 | ||
1157 | int mp_config_acpi_gsi(unsigned char number, unsigned int devfn, u8 pin, | ||
1158 | u32 gsi, int triggering, int polarity) | ||
1159 | { | ||
1160 | struct mpc_config_intsrc intsrc; | ||
1161 | int ioapic; | ||
1162 | |||
1163 | /* print the entry should happen on mptable identically */ | ||
1164 | intsrc.mpc_type = MP_INTSRC; | ||
1165 | intsrc.mpc_irqtype = mp_INT; | ||
1166 | intsrc.mpc_irqflag = (triggering == ACPI_EDGE_SENSITIVE ? 4 : 0x0c) | | ||
1167 | (polarity == ACPI_ACTIVE_HIGH ? 1 : 3); | ||
1168 | intsrc.mpc_srcbus = number; | ||
1169 | intsrc.mpc_srcbusirq = (((devfn >> 3) & 0x1f) << 2) | ((pin - 1) & 3); | ||
1170 | ioapic = mp_find_ioapic(gsi); | ||
1171 | intsrc.mpc_dstapic = mp_ioapic_routing[ioapic].apic_id; | ||
1172 | intsrc.mpc_dstirq = gsi - mp_ioapic_routing[ioapic].gsi_base; | ||
1173 | |||
1174 | MP_intsrc_info(&intsrc); | ||
1175 | |||
1176 | return 0; | ||
1177 | } | ||
1178 | |||
1157 | /* | 1179 | /* |
1158 | * Parse IOAPIC related entries in MADT | 1180 | * Parse IOAPIC related entries in MADT |
1159 | * returns 0 on success, < 0 on error | 1181 | * returns 0 on success, < 0 on error |