From a4feddf897023b37cfac2af529e787504849f985 Mon Sep 17 00:00:00 2001 From: Aaron Durbin Date: Wed, 24 Apr 2013 16:12:52 -0500 Subject: boot state: schedule static callbacks Many of the boot state callbacks can be scheduled at compile time. Therefore, provide a way for a compilation unit to inform the boot state machine when its callbacks should be called. Each C module can export the callbacks and their scheduling requirements without changing the shared boot flow code. Change-Id: Ibc4cea4bd5ad45b2149c2d4aa91cbea652ed93ed Signed-off-by: Aaron Durbin Reviewed-on: http://review.coreboot.org/3133 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich --- src/include/bootstate.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/include/bootstate.h') diff --git a/src/include/bootstate.h b/src/include/bootstate.h index a2eacfbb70..f28c07f17c 100644 --- a/src/include/bootstate.h +++ b/src/include/bootstate.h @@ -158,4 +158,25 @@ int boot_state_sched_on_exit(struct boot_state_callback *bscb, /* Entry into the boot state machine. */ void hardwaremain(int boot_complete); +/* In order to schedule boot state callbacks at compile-time specify the + * entries in an array using the BOOT_STATE_INIT_ENTRIES and + * BOOT_STATE_INIT_ENTRY macros below. */ +struct boot_state_init_entry { + boot_state_t state; + boot_state_sequence_t when; + struct boot_state_callback bscb; +}; + +#define BOOT_STATE_INIT_ATTR __attribute__ ((used,section (".bs_init"))) + +#define BOOT_STATE_INIT_ENTRIES(name_) \ + static struct boot_state_init_entry name_[] BOOT_STATE_INIT_ATTR + +#define BOOT_STATE_INIT_ENTRY(state_, when_, func_, arg_) \ + { \ + .state = state_, \ + .when = when_, \ + .bscb = BOOT_STATE_CALLBACK_INIT(func_, arg_), \ + } + #endif /* BOOTSTATE_H */ -- cgit v1.2.3