From ef4d0a524eb1929354b01036830799261090fcbe Mon Sep 17 00:00:00 2001 From: Bin Meng Date: Sat, 27 Feb 2016 22:58:01 -0800 Subject: x86: Simplify codes in write_tables() Given all table write routines have the same signature, we can simplify the codes by using a function table. Signed-off-by: Bin Meng Reviewed-by: Simon Glass --- arch/x86/lib/tables.c | 61 ++++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 27 deletions(-) (limited to 'arch') diff --git a/arch/x86/lib/tables.c b/arch/x86/lib/tables.c index 19b02609355..9f0d9285216 100644 --- a/arch/x86/lib/tables.c +++ b/arch/x86/lib/tables.c @@ -11,6 +11,32 @@ #include #include +/** + * Function prototype to write a specific configuration table + * + * @addr: start address to write the table + * @return: end address of the table + */ +typedef u32 (*table_write)(u32 addr); + +static table_write table_write_funcs[] = { +#ifdef CONFIG_GENERATE_PIRQ_TABLE + write_pirq_routing_table, +#endif +#ifdef CONFIG_GENERATE_SFI_TABLE + write_sfi_table, +#endif +#ifdef CONFIG_GENERATE_MP_TABLE + write_mp_table, +#endif +#ifdef CONFIG_GENERATE_ACPI_TABLE + write_acpi_tables, +#endif +#ifdef CONFIG_GENERATE_SMBIOS_TABLE + write_smbios_table, +#endif +}; + u8 table_compute_checksum(void *v, int len) { u8 *bytes = v; @@ -39,32 +65,13 @@ void table_fill_string(char *dest, const char *src, size_t n, char pad) void write_tables(void) { - u32 __maybe_unused rom_table_start = ROM_TABLE_ADDR; - u32 __maybe_unused rom_table_end; + u32 rom_table_start = ROM_TABLE_ADDR; + u32 rom_table_end; + int i; -#ifdef CONFIG_GENERATE_PIRQ_TABLE - rom_table_end = write_pirq_routing_table(rom_table_start); - rom_table_end = ALIGN(rom_table_end, ROM_TABLE_ALIGN); - rom_table_start = rom_table_end; -#endif -#ifdef CONFIG_GENERATE_SFI_TABLE - rom_table_end = write_sfi_table(rom_table_start); - rom_table_end = ALIGN(rom_table_end, ROM_TABLE_ALIGN); - rom_table_start = rom_table_end; -#endif -#ifdef CONFIG_GENERATE_MP_TABLE - rom_table_end = write_mp_table(rom_table_start); - rom_table_end = ALIGN(rom_table_end, ROM_TABLE_ALIGN); - rom_table_start = rom_table_end; -#endif -#ifdef CONFIG_GENERATE_ACPI_TABLE - rom_table_end = write_acpi_tables(rom_table_start); - rom_table_end = ALIGN(rom_table_end, ROM_TABLE_ALIGN); - rom_table_start = rom_table_end; -#endif -#ifdef CONFIG_GENERATE_SMBIOS_TABLE - rom_table_end = write_smbios_table(rom_table_start); - rom_table_end = ALIGN(rom_table_end, ROM_TABLE_ALIGN); - rom_table_start = rom_table_end; -#endif + for (i = 0; i < ARRAY_SIZE(table_write_funcs); i++) { + rom_table_end = table_write_funcs[i](rom_table_start); + rom_table_end = ALIGN(rom_table_end, ROM_TABLE_ALIGN); + rom_table_start = rom_table_end; + } } -- cgit v1.2.3