diff options
-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) |