diff options
| author | Simon Glass <sjg@chromium.org> | 2022-03-04 08:43:00 -0700 |
|---|---|---|
| committer | Tom Rini <trini@konsulko.com> | 2022-03-10 08:28:36 -0500 |
| commit | 87a5d1b5d012b0663517bfa36f5e01c8028f121a (patch) | |
| tree | 4512a25b7200e1c84cb07aa64a17f98c46a1a13f /include/event_internal.h | |
| parent | 64defba4ea55736926c5152a245164ace58fa04e (diff) | |
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>
Diffstat (limited to 'include/event_internal.h')
| -rw-r--r-- | include/event_internal.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/include/event_internal.h b/include/event_internal.h new file mode 100644 index 00000000000..8432c6f0e5f --- /dev/null +++ b/include/event_internal.h @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Internal definitions for events + * + * Copyright 2021 Google LLC + * Written by Simon Glass <sjg@chromium.org> + */ + +#ifndef __event_internal_h +#define __event_internal_h + +#include <event.h> +#include <linux/list.h> + +/** + * struct event_spy - a spy that watches for an event of a particular type + * + * @id: Spy ID + * @type: Event type to subscribe to + * @func: Function to call when the event is sent + * @ctx: Context to pass to the function + */ +struct event_spy { + struct list_head sibling_node; + const char *id; + enum event_t type; + event_handler_t func; + void *ctx; +}; + +struct event_state { + struct list_head spy_head; +}; + +#endif |
