diff options
author | Bin Meng <bmeng.cn@gmail.com> | 2016-02-27 22:58:01 -0800 |
---|---|---|
committer | Bin Meng <bmeng.cn@gmail.com> | 2016-03-17 10:27:22 +0800 |
commit | ef4d0a524eb1929354b01036830799261090fcbe (patch) | |
tree | fc5821181947842908f93a9f62f5a05966949e73 /arch/x86/lib/tables.c | |
parent | 358bb3ff5bb3a412aa784e7d1a4d6faf2fc6c8ae (diff) | |
download | u-boot-ef4d0a524eb1929354b01036830799261090fcbe.zip u-boot-ef4d0a524eb1929354b01036830799261090fcbe.tar.gz u-boot-ef4d0a524eb1929354b01036830799261090fcbe.tar.bz2 |
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 <bmeng.cn@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'arch/x86/lib/tables.c')
-rw-r--r-- | arch/x86/lib/tables.c | 61 |
1 files changed, 34 insertions, 27 deletions
diff --git a/arch/x86/lib/tables.c b/arch/x86/lib/tables.c index 19b0260..9f0d928 100644 --- a/arch/x86/lib/tables.c +++ b/arch/x86/lib/tables.c @@ -11,6 +11,32 @@ #include <asm/tables.h> #include <asm/acpi_table.h> +/** + * 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; + } } |