selector: enable building as an llext module

Add support for LLEXT building to selector.

Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
This commit is contained in:
Guennadi Liakhovetski 2024-09-09 11:05:55 +02:00 committed by Kai Vehmanen
parent 5b23a37d88
commit a33b955f64
8 changed files with 59 additions and 20 deletions

View File

@ -4,6 +4,7 @@ CONFIG_COMP_MIXIN_MIXOUT=m
CONFIG_COMP_FIR=m
CONFIG_COMP_IIR=m
CONFIG_COMP_DRC=m
CONFIG_COMP_SEL=m
CONFIG_COMP_SRC=m
CONFIG_COMP_ASRC=m
CONFIG_COMP_RTNR=m

View File

@ -4,6 +4,7 @@ CONFIG_COMP_MIXIN_MIXOUT=m
CONFIG_COMP_FIR=m
CONFIG_COMP_IIR=m
CONFIG_COMP_DRC=m
CONFIG_COMP_SEL=m
CONFIG_COMP_SRC=m
CONFIG_COMP_ASRC=m
CONFIG_COMP_RTNR=m

View File

@ -1,7 +1,7 @@
# SPDX-License-Identifier: BSD-3-Clause
config COMP_SEL
bool "Channel selector component"
tristate "Channel selector component"
default y
help
Select for SEL component

View File

@ -0,0 +1,7 @@
# Copyright (c) 2024 Intel Corporation.
# SPDX-License-Identifier: Apache-2.0
sof_llext_build("selector"
SOURCES ../selector.c
../selector_generic.c
)

View File

@ -0,0 +1,6 @@
#include <tools/rimage/config/platform.toml>
#define LOAD_TYPE "2"
#include "../selector.toml"
[module]
count = __COUNTER__

View File

@ -43,15 +43,8 @@ LOG_MODULE_REGISTER(selector, CONFIG_SOF_LOG_LEVEL);
static const struct comp_driver comp_selector;
SOF_DEFINE_REG_UUID(selector);
#define SELECTOR_UUID selector_uuid
#else
SOF_DEFINE_REG_UUID(selector4);
#define SELECTOR_UUID selector4_uuid
#endif
DECLARE_TR_CTX(selector_tr, SOF_UUID(selector_uuid), LOG_LEVEL_INFO);
DECLARE_TR_CTX(selector_tr, SOF_UUID(SELECTOR_UUID), LOG_LEVEL_INFO);
#if CONFIG_IPC_MAJOR_3
static int selector_verify_params(struct comp_dev *dev,
struct sof_ipc_stream_params *params)
{
@ -228,7 +221,6 @@ static int selector_params(struct comp_dev *dev,
return 0;
}
#if CONFIG_IPC_MAJOR_3
/**
* \brief Sets selector control command.
* \param[in,out] dev Selector base component device.
@ -339,7 +331,6 @@ static int selector_cmd(struct comp_dev *dev, int cmd, void *data,
return ret;
}
#endif
/**
* \brief Sets component state.
@ -520,15 +511,13 @@ static int selector_reset(struct comp_dev *dev)
/** \brief Selector component definition. */
static const struct comp_driver comp_selector = {
.type = SOF_COMP_SELECTOR,
.uid = SOF_RT_UUID(SELECTOR_UUID),
.uid = SOF_RT_UUID(selector_uuid),
.tctx = &selector_tr,
.ops = {
.create = selector_new,
.free = selector_free,
.params = selector_params,
#if CONFIG_IPC_MAJOR_3
.cmd = selector_cmd,
#endif
.trigger = selector_trigger,
.copy = selector_copy,
.prepare = selector_prepare,
@ -549,7 +538,12 @@ UT_STATIC void sys_comp_selector_init(void)
DECLARE_MODULE(sys_comp_selector_init);
SOF_MODULE_INIT(selector, sys_comp_selector_init);
#else
SOF_DEFINE_REG_UUID(selector4);
DECLARE_TR_CTX(selector_tr, SOF_UUID(selector4_uuid), LOG_LEVEL_INFO);
static void build_config(struct comp_data *cd, struct module_config *cfg)
{
enum sof_ipc_frame frame_fmt, valid_fmt;
@ -929,6 +923,26 @@ static const struct module_interface selector_interface = {
.free = selector_free
};
DECLARE_MODULE_ADAPTER(selector_interface, SELECTOR_UUID, selector_tr);
DECLARE_MODULE_ADAPTER(selector_interface, selector4_uuid, selector_tr);
SOF_MODULE_INIT(selector, sys_comp_module_selector_interface_init);
#if CONFIG_COMP_SEL_MODULE
/* modular: llext dynamic link */
#include <module/module/api_ver.h>
#include <module/module/llext.h>
#include <rimage/sof/user/manifest.h>
#define UUID_SELECTOR 0x32, 0xFE, 0x92, 0xC1, 0x17, 0x1E, 0xC2, 0x4F, 0x58, 0x97, \
0xC7, 0xF3, 0x54, 0x2E, 0x98, 0x0A
SOF_LLEXT_MOD_ENTRY(selector, &selector_interface);
static const struct sof_man_module_manifest mod_manifest __section(".module") __used =
SOF_LLEXT_MODULE_MANIFEST("MICSEL", selector_llext_entry, 1, UUID_SELECTOR, 8);
SOF_LLEXT_BUILDINFO;
#endif
#endif

View File

@ -1,10 +1,14 @@
#ifndef LOAD_TYPE
#define LOAD_TYPE "0"
#endif
[[module.entry]]
name = "MICSEL"
uuid = "32FE92C1-1E17-4FC2-9758-C7F3542E980A"
affinity_mask = "0x1"
instance_count = "8"
domain_types = "0"
load_type = "0"
load_type = LOAD_TYPE
init_config = "1"
module_type = "0xC"
auto_start = "0"

View File

@ -634,10 +634,16 @@ zephyr_library_sources_ifdef(CONFIG_COMP_DCBLOCK
${SOF_AUDIO_PATH}/dcblock/dcblock_${ipc_suffix}.c
)
zephyr_library_sources_ifdef(CONFIG_COMP_SEL
${SOF_AUDIO_PATH}/selector/selector_generic.c
${SOF_AUDIO_PATH}/selector/selector.c
)
if(CONFIG_COMP_SEL STREQUAL "m")
add_subdirectory(${SOF_AUDIO_PATH}/selector/llext
${PROJECT_BINARY_DIR}/selector_llext)
add_dependencies(app selector)
elseif(CONFIG_COMP_SEL)
zephyr_library_sources(
${SOF_AUDIO_PATH}/selector/selector_generic.c
${SOF_AUDIO_PATH}/selector/selector.c
)
endif()
zephyr_library_sources_ifdef(CONFIG_COMP_KPB
${SOF_AUDIO_PATH}/kpb.c