diff options
-rw-r--r-- | src/include/bootstate.h | 4 | ||||
-rw-r--r-- | src/lib/hardwaremain.c | 4 |
2 files changed, 8 insertions, 0 deletions
diff --git a/src/include/bootstate.h b/src/include/bootstate.h index 09178a56f0..481a8bc54a 100644 --- a/src/include/bootstate.h +++ b/src/include/bootstate.h @@ -195,4 +195,8 @@ struct boot_state_init_entry { bsie_ ## func_ ##_## state_ ##_## when_ BOOT_STATE_INIT_ATTR = \ & func_ ##_## state_ ##_## when_; +/* Hook per arch when coreboot is exiting to payload or ACPI OS resume. It's + * the very last thing done before the transition. */ +void arch_bootstate_coreboot_exit(void); + #endif /* BOOTSTATE_H */ diff --git a/src/lib/hardwaremain.c b/src/lib/hardwaremain.c index 7e2098888c..9c127ff1cc 100644 --- a/src/lib/hardwaremain.c +++ b/src/lib/hardwaremain.c @@ -115,6 +115,8 @@ static struct boot_state boot_states[] = { BS_INIT_ENTRY(BS_PAYLOAD_BOOT, bs_payload_boot), }; +void __attribute__((weak)) arch_bootstate_coreboot_exit(void) { } + static boot_state_t bs_pre_device(void *arg) { return BS_DEV_INIT_CHIPS; @@ -198,6 +200,7 @@ static boot_state_t bs_os_resume_check(void *arg) static boot_state_t bs_os_resume(void *wake_vector) { #if CONFIG_HAVE_ACPI_RESUME + arch_bootstate_coreboot_exit(); acpi_resume(wake_vector); #endif return BS_WRITE_TABLES; @@ -227,6 +230,7 @@ static boot_state_t bs_payload_load(void *arg) static boot_state_t bs_payload_boot(void *arg) { + arch_bootstate_coreboot_exit(); payload_run(); printk(BIOS_EMERG, "Boot failed\n"); |