diff options
author | Aaron Durbin <adurbin@chromium.org> | 2016-04-19 17:06:09 -0500 |
---|---|---|
committer | Aaron Durbin <adurbin@chromium.org> | 2016-04-21 20:44:45 +0200 |
commit | 8984af89b85034ad0456bb3a63a78cd63c618934 (patch) | |
tree | 7868dee969b4496091af56c9b08e07a4e88230a6 | |
parent | dcee908921444282c82c4cdde455c8819e3965af (diff) |
lib: add helper for constructing coreboot forwarding table
The x86 architecture needs to add a forwarding table to
the real coreboot table. Provide a helper function to do
this for aligning the architectures on a common
write_tables() implementation.
Change-Id: I9a2875507e6260679874a654ddf97b879222d44e
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: https://review.coreboot.org/14433
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
-rw-r--r-- | src/include/boot/coreboot_tables.h | 6 | ||||
-rw-r--r-- | src/lib/coreboot_table.c | 13 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/include/boot/coreboot_tables.h b/src/include/boot/coreboot_tables.h index 8fde5458b5..dda1e1aaa4 100644 --- a/src/include/boot/coreboot_tables.h +++ b/src/include/boot/coreboot_tables.h @@ -9,6 +9,12 @@ unsigned long write_coreboot_table( unsigned long low_table_start, unsigned long low_table_end, unsigned long rom_table_start, unsigned long rom_table_end); +/* + * Write forwarding table of target address at entry address returning size + * of table written. + */ +size_t write_coreboot_forwarding_table(uintptr_t entry, uintptr_t target); + void fill_lb_gpios(struct lb_gpios *gpios); void lb_add_gpios(struct lb_gpios *gpios, const struct lb_gpio *gpio_table, size_t count); diff --git a/src/lib/coreboot_table.c b/src/lib/coreboot_table.c index 091ceaf06d..6967217b6a 100644 --- a/src/lib/coreboot_table.c +++ b/src/lib/coreboot_table.c @@ -445,6 +445,19 @@ static unsigned long lb_table_fini(struct lb_header *head) return (unsigned long)rec + rec->size; } +size_t write_coreboot_forwarding_table(uintptr_t entry, uintptr_t target) +{ + struct lb_header *head; + + printk(BIOS_DEBUG, "Writing table forward entry at 0x%p\n", + (void *)entry); + + head = lb_table_init(entry); + lb_forward(head, (struct lb_header*)target); + + return (uintptr_t)lb_table_fini(head) - entry; +} + unsigned long write_coreboot_table( unsigned long low_table_start, unsigned long low_table_end, unsigned long rom_table_start __unused, unsigned long rom_table_end) |