aboutsummaryrefslogtreecommitdiff
path: root/src/arch/i386/boot/tables.c
diff options
context:
space:
mode:
authorStefan Reinauer <stepan@coresystems.de>2009-07-21 21:38:33 +0000
committerStefan Reinauer <stepan@openbios.org>2009-07-21 21:38:33 +0000
commitb657a3c9b726334aac89f1af16495eab3ebefc6b (patch)
tree428e1de09fdb4d29d783f5ea875c41d13effa893 /src/arch/i386/boot/tables.c
parent4d933dd2d686879e0c27839d3f9046e348580da8 (diff)
This fixes a couple of issues with older Linux kernels (that expect an XSDT as
soon as there's an ACPI 2.0 or later table) * add XSDT support * add more table types This patch will break at least the kontron (and possibly some new boards I missed) Signed-off-by: Stefan Reinauer <stepan@coresystems.de> Acked-by: Peter Stuge <peter@stuge.se> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4453 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'src/arch/i386/boot/tables.c')
-rw-r--r--src/arch/i386/boot/tables.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/arch/i386/boot/tables.c b/src/arch/i386/boot/tables.c
index 9991415eda..17338ef558 100644
--- a/src/arch/i386/boot/tables.c
+++ b/src/arch/i386/boot/tables.c
@@ -116,7 +116,12 @@ struct lb_memory *write_tables(void)
acpi_start++;
}
if (acpi_start != high_table_end) {
- acpi_write_rsdp((acpi_rsdp_t *)rom_table_end, ((acpi_rsdp_t *)acpi_start)->rsdt_address);
+ acpi_rsdp_t *low_rsdp = (acpi_rsdp_t *)rom_table_end,
+ *high_rsdp = (acpi_rsdp_t *)acpi_start;
+
+ acpi_write_rsdp(low_rsdp,
+ (acpi_rsdt_t *)(high_rsdp->rsdt_address),
+ (acpi_xsdt_t *)(high_rsdp->xsdt_address));
} else {
printk_err("ERROR: Didn't find RSDP in high table.\n");
}