diff options
author | Fabio Baltieri <fabiobaltieri@google.com> | 2021-07-07 14:47:57 +0000 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-08-10 21:53:26 +0000 |
commit | e3ded643c83a1fd87d800b37dc4b7a7f7f3f137f (patch) | |
tree | 2074753a8276194bf0a999bdaeb011d37e1af61c | |
parent | d89284053e21cd21ebd5f5853d0de81709c72f08 (diff) | |
download | chrome-ec-e3ded643c83a1fd87d800b37dc4b7a7f7f3f137f.tar.gz |
zephyr: shim: reimplement host commands using iterables
Rewrite the host command shim using Zephyr iterable sections. This
allows initializing the HC structure statically and gets rid of the
runtime init code entirely.
BRANCH=none
BUG=b:195521227
TEST=build and run on volteer
Signed-off-by: Fabio Baltieri <fabiobaltieri@google.com>
Change-Id: I94a55f8eb3e1d58de6a1d93c31b6170a5541a1fc
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3010284
Commit-Queue: Keith Short <keithshort@chromium.org>
Reviewed-by: Keith Short <keithshort@chromium.org>
Reviewed-by: Jack Rosenthal <jrosenth@chromium.org>
-rw-r--r-- | zephyr/linker/CMakeLists.txt | 2 | ||||
-rw-r--r-- | zephyr/linker/iterables-rom.ld | 3 | ||||
-rw-r--r-- | zephyr/shim/include/zephyr_host_command.h | 41 | ||||
-rw-r--r-- | zephyr/shim/src/host_command.c | 27 |
4 files changed, 14 insertions, 59 deletions
diff --git a/zephyr/linker/CMakeLists.txt b/zephyr/linker/CMakeLists.txt index 27b028d22c..316dcc71be 100644 --- a/zephyr/linker/CMakeLists.txt +++ b/zephyr/linker/CMakeLists.txt @@ -14,3 +14,5 @@ zephyr_linker_sources(RAM_SECTIONS image_size.ld) # Little FW with specific purposes used by NPCX EC zephyr_linker_sources_ifdef(CONFIG_SOC_FAMILY_NPCX ROM_START SORT_KEY 1 npcx-lfw.ld) + +zephyr_linker_sources(SECTIONS iterables-rom.ld) diff --git a/zephyr/linker/iterables-rom.ld b/zephyr/linker/iterables-rom.ld new file mode 100644 index 0000000000..dea5731465 --- /dev/null +++ b/zephyr/linker/iterables-rom.ld @@ -0,0 +1,3 @@ +#ifdef CONFIG_PLATFORM_EC_HOSTCMD +ITERABLE_SECTION_ROM(host_command, 4) +#endif diff --git a/zephyr/shim/include/zephyr_host_command.h b/zephyr/shim/include/zephyr_host_command.h index 6535bb8876..ae8e1f9ee3 100644 --- a/zephyr/shim/include/zephyr_host_command.h +++ b/zephyr/shim/include/zephyr_host_command.h @@ -14,44 +14,15 @@ #ifdef CONFIG_PLATFORM_EC_HOSTCMD -/** Node in a list of host-command handlers */ -struct zshim_host_command_node { - struct host_command *cmd; - struct zshim_host_command_node *next; -}; - -/** - * Runtime helper for DECLARE_HOST_COMMAND setup data. - * - * @param routine Handler for the host command - * @param command Command to handle (EC_CMD_...) - * @param version_mask Mask of supported versions; use EC_VER_MASK() to select - * a version - */ -void zshim_setup_host_command( - int command, - enum ec_status (*routine)(struct host_cmd_handler_args *args), - int version_mask, struct zshim_host_command_node *entry); - /** * See include/host_command.h for documentation. */ -#define DECLARE_HOST_COMMAND(command, routine, version_mask) \ - _DECLARE_HOST_COMMAND_1(command, routine, version_mask, __LINE__) -#define _DECLARE_HOST_COMMAND_1(command, routine, version_mask, line) \ - _DECLARE_HOST_COMMAND_2(command, routine, version_mask, line) -#define _DECLARE_HOST_COMMAND_2(command, routine, version_mask, line) \ - static int _setup_host_command_##line(const struct device *unused) \ - { \ - ARG_UNUSED(unused); \ - static struct host_command cmd; \ - static struct zshim_host_command_node lst; \ - lst.cmd = &cmd; \ - zshim_setup_host_command(command, routine, version_mask, \ - &lst); \ - return 0; \ - } \ - SYS_INIT(_setup_host_command_##line, APPLICATION, 1) +#define DECLARE_HOST_COMMAND(_command, _routine, _version_mask) \ + STRUCT_SECTION_ITERABLE(host_command, _cros_hcmd_##_command) = { \ + .command = _command, \ + .handler = _routine, \ + .version_mask = _version_mask, \ + } #else /* !CONFIG_PLATFORM_EC_HOSTCMD */ #ifdef __clang__ #define DECLARE_HOST_COMMAND(command, routine, version_mask) diff --git a/zephyr/shim/src/host_command.c b/zephyr/shim/src/host_command.c index 6d586f225a..bf863b48de 100644 --- a/zephyr/shim/src/host_command.c +++ b/zephyr/shim/src/host_command.c @@ -5,32 +5,11 @@ #include "host_command.h" -static struct zshim_host_command_node *host_command_head; - -void zshim_setup_host_command( - int command, - enum ec_status (*routine)(struct host_cmd_handler_args *args), - int version_mask, struct zshim_host_command_node *entry) -{ - struct zshim_host_command_node **loc = &host_command_head; - - /* Setup the entry */ - entry->cmd->handler = routine; - entry->cmd->command = command; - entry->cmd->version_mask = version_mask; - entry->next = *loc; - - /* Insert the entry */ - *loc = entry; -} - struct host_command *zephyr_find_host_command(int command) { - struct zshim_host_command_node *p; - - for (p = host_command_head; p != NULL; p = p->next) { - if (p->cmd->command == command) - return p->cmd; + STRUCT_SECTION_FOREACH(host_command, cmd) { + if (cmd->command == command) + return cmd; } return NULL; |