From 5481c961b265ef5128ab67b24d0416df22d1f693 Mon Sep 17 00:00:00 2001 From: Aaron Durbin Date: Tue, 19 Apr 2016 20:37:51 -0500 Subject: lib/coreboot_table: add architecture hooks for adding tables Add a architecture specific function, arch_write_tables(), that allows an architecture to add its required tables for booting. This callback helps write_tables() to be de-duplicated. Change-Id: I805c2f166b1e75942ad28b6e7e1982d64d2d5498 Signed-off-by: Aaron Durbin Reviewed-on: https://review.coreboot.org/14435 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi --- src/arch/x86/tables.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) (limited to 'src/arch/x86') diff --git a/src/arch/x86/tables.c b/src/arch/x86/tables.c index 4fba509a96..94fe691bcb 100644 --- a/src/arch/x86/tables.c +++ b/src/arch/x86/tables.c @@ -181,6 +181,25 @@ static unsigned long write_smbios_table(unsigned long rom_table_end) return rom_table_end; } +void arch_write_tables(uintptr_t coreboot_table) +{ + unsigned long rom_table_end = 0xf0000; + + /* This table must be between 0x0f0000 and 0x100000 */ + if (IS_ENABLED(CONFIG_GENERATE_PIRQ_TABLE)) + rom_table_end = write_pirq_table(rom_table_end); + + /* The smp table must be in 0-1K, 639K-640K, or 960K-1M */ + if (IS_ENABLED(CONFIG_GENERATE_MP_TABLE)) + rom_table_end = write_mptable(rom_table_end); + + if (IS_ENABLED(CONFIG_HAVE_ACPI_TABLES)) + rom_table_end = write_acpi_table(rom_table_end); + + if (IS_ENABLED(CONFIG_GENERATE_SMBIOS_TABLES)) + rom_table_end = write_smbios_table(rom_table_end); +} + void bootmem_arch_add_ranges(void) { } @@ -188,7 +207,6 @@ void bootmem_arch_add_ranges(void) void write_tables(void) { unsigned long low_table_start, low_table_end; - unsigned long rom_table_end; /* Even if high tables are configured, some tables are copied both to * the low and the high area, so payloads and OSes don't need to know @@ -196,8 +214,6 @@ void write_tables(void) */ unsigned long high_table_pointer; - rom_table_end = 0xf0000; - /* Start low addr at 0x500, so we don't run into conflicts with the BDA * in case our data structures grow beyond 0x400. Only GDT * and the coreboot table use low_tables. @@ -205,20 +221,6 @@ void write_tables(void) low_table_start = 0; low_table_end = 0x500; - /* This table must be between 0x0f0000 and 0x100000 */ - if (IS_ENABLED(CONFIG_GENERATE_PIRQ_TABLE)) - rom_table_end = write_pirq_table(rom_table_end); - - /* The smp table must be in 0-1K, 639K-640K, or 960K-1M */ - if (IS_ENABLED(CONFIG_GENERATE_MP_TABLE)) - rom_table_end = write_mptable(rom_table_end); - - if (IS_ENABLED(CONFIG_HAVE_ACPI_TABLES)) - rom_table_end = write_acpi_table(rom_table_end); - - if (IS_ENABLED(CONFIG_GENERATE_SMBIOS_TABLES)) - rom_table_end = write_smbios_table(rom_table_end); - post_code(0x9e); post_code(0x9d); -- cgit v1.2.3