Events
The concept of events is decribed here.
-
enumevent_t
Types of events supported by U-Boot
Constants
EVT_NONE
This zero value is not used for events.
EVT_TEST
This event is used in unit tests.
EVT_DM_POST_INIT_F
This event is triggered after pre-relocation initialization of the driver model. Its parameter is NULL. A non-zero return code from the event handler let’s the boot process fail.
EVT_DM_POST_INIT_R
This event is triggered after post-relocation initialization of the driver model. Its parameter is NULL. A non-zero return code from the event handler let’s the boot process fail.
EVT_DM_PRE_PROBE
This event is triggered before probing a device. Its parameter is the device to be probed. A non-zero return code from the event handler lets the device not being probed.
EVT_DM_POST_PROBE
This event is triggered after probing a device. Its parameter is the device that was probed. A non-zero return code from the event handler leaves the device in the unprobed state and therefore not usable.
EVT_DM_PRE_REMOVE
This event is triggered after removing a device. Its parameter is the device to be removed. A non-zero return code from the event handler stops the removal of the device before any changes.
EVT_DM_POST_REMOVE
This event is triggered before removing a device. Its parameter is the device that was removed. A non-zero return code stops from the event handler the removal of the device after all removal changes. The previous state is not restored. All children will be gone and the device may not be functional.
EVT_MISC_INIT_F
This event is triggered during the initialization sequence before relocation. Its parameter is NULL. A non-zero return code from the event handler let’s the boot process fail.
EVT_FSP_INIT_F
This event is triggered before relocation to set up Firmware Support Package. Where U-Boot relies on binary blobs to handle part of the system init, this event can be used to set up the blobs. This is used on some Intel platforms
EVT_SETTINGS_R
This event is triggered post-relocation and before console init. This gives an option to perform any platform-dependent setup, which needs to take place before show_board_info() (e.g. readout of EEPROM stored settings).
EVT_LAST_STAGE_INIT
This event is triggered just before jumping to the main loop. Some boards need to perform initialisation immediately before control is passed to the command-line interpreter (e.g. for init that depend on later phases in the init sequence).
Some parts can be only initialized if all others (like Interrupts) are up and running (e.g. the PC-style ISA keyboard).
EVT_FPGA_LOAD
The FPGA load hook is called after loading an FPGA with a new binary. Its parameter is of type struct event_fpga_load and contains information about the loaded image.
EVT_FT_FIXUP
This event is triggered during device-tree fix up after all other device-tree fixups have been executed. Its parameter is of type struct event_ft_fixup which contains the address of the device-tree to fix up and the list of images to be booted. A non-zero return code from the event handler let’s booting the images fail.
EVT_MAIN_LOOP
This event is triggered immediately before calling main_loop() which is the entry point of the command line. Its parameter is NULL. A non-zero return value causes the boot to fail.
EVT_COUNT
This constants holds the maximum event number + 1 and is used when looping over all event classes.
-
structevent
an event that can be sent and received
Definition
struct event { enum event_t type; union event_data data; };
Members
type
Event type
data
Data for this particular event
-
structevspy_info
information about an event spy
Definition
struct evspy_info { event_handler_t func; u8 type; u8 flags; #if CONFIG_IS_ENABLED(EVENT_DEBUG); const char *id; #endif; };
Members
func
Function to call when the event is activated (must be first)
type
Event type
flags
Flags for this spy
id
Event id string
-
structevspy_info_simple
information about an event spy
Definition
struct evspy_info_simple { event_handler_simple_t func; u8 type; u8 flags; #if CONFIG_IS_ENABLED(EVENT_DEBUG); const char *id; #endif; };
Members
func
Function to call when the event is activated (must be first)
type
Event type
flags
Flags for this spy
id
Event id string
Description
THis is the ‘simple’ record, the only difference being the handler function
-
intevent_register(constchar*id, enumevent_t type, event_handler_tfunc, void*ctx)
register a new spy
Parameters
const char *id
Spy ID
enum event_t type
Event type to subscribe to
event_handler_t func
Function to call when the event is sent
void *ctx
Context to pass to the function return 0 if OK, -ve on error
Parameters
enum event_t type
Type to check
Return
Name of event, or "(unknown)" if not known
Parameters
enum event_t type
Event type
void *data
Event data to be sent (e.g. union_event_data)
int size
Size of data in bytes return 0 if OK, -ve on error
Description
It is possible to pass in union event_data here but that may not be convenient if the data is elsewhere, or is one of the members of the union. So this uses a void * for data, with a separate size.
Parameters
enum event_t type
Event type return 0 if OK, -ve on error
Description
Data is NULL and the size is 0
-
intevent_uninit(void)
Clean up dynamic events
Parameters
void
no arguments
Description
This removes all dynamic event handlers
-
intevent_init(void)
Set up dynamic events
Parameters
void
no arguments
Description
Init a list of dynamic event handlers, so that these can be added as needed