From 8984af89b85034ad0456bb3a63a78cd63c618934 Mon Sep 17 00:00:00 2001 From: Aaron Durbin Date: Tue, 19 Apr 2016 17:06:09 -0500 Subject: 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 Reviewed-on: https://review.coreboot.org/14433 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi --- src/include/boot/coreboot_tables.h | 6 ++++++ src/lib/coreboot_table.c | 13 +++++++++++++ 2 files changed, 19 insertions(+) (limited to 'src') 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) -- cgit v1.2.3