event: Add basic support for events
Add a way to create and dispatch events without needing to allocate memory. Also add a way to 'spy' on events, thus allowing 'hooks' to be created. Use a linker list for static events, which we can use to replace functions like arch_cpu_init_f(). Allow an EVENT_DEBUG option which makes it easier to see what is going on at runtime, but uses more code space. Dynamic events allow the creation of a spy at runtime. This is not always necessary, but can be enabled with EVENT_DYNAMIC if needed. A 'test' event is the only option for now. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
*/
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#include <event_internal.h>
|
||||
#include <fdtdec.h>
|
||||
#include <membuff.h>
|
||||
#include <linux/list.h>
|
||||
@@ -467,6 +468,12 @@ struct global_data {
|
||||
*/
|
||||
char *smbios_version;
|
||||
#endif
|
||||
#if CONFIG_IS_ENABLED(EVENT)
|
||||
/**
|
||||
* @event_state: Points to the current state of events
|
||||
*/
|
||||
struct event_state event_state;
|
||||
#endif
|
||||
};
|
||||
#ifndef DO_DEPS_ONLY
|
||||
static_assert(sizeof(struct global_data) == GD_SIZE);
|
||||
@@ -532,6 +539,12 @@ static_assert(sizeof(struct global_data) == GD_SIZE);
|
||||
#define gd_set_multi_dtb_fit(_dtb)
|
||||
#endif
|
||||
|
||||
#if CONFIG_IS_ENABLED(EVENT_DYNAMIC)
|
||||
#define gd_event_state() ((struct event_state *)&gd->event_state)
|
||||
#else
|
||||
#define gd_event_state() NULL
|
||||
#endif
|
||||
|
||||
/**
|
||||
* enum gd_flags - global data flags
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user