From 3ed60924cf0b3348ff71ffe82730cb11c0e128ac Mon Sep 17 00:00:00 2001 From: Adrian Warecki Date: Wed, 22 Jan 2025 17:00:32 +0100 Subject: [PATCH 1/7] ipc4: ipc4_get_drv: Change uuid parameter type to void * Change the type of the UUID parameter in the ipc4_get_drv function to avoid unnecessary typecasting. There are currently two ways to store UUIDs in SOF: as a byte array or as a sof_uuid structure. The ipc4_get_drv function compares UUIDs using the memcmp function, so it is not dependent on the type of the argument passed. This change is intended to prepare the code for standardizing the UUID format across the project. Signed-off-by: Adrian Warecki --- src/include/sof/ipc/topology.h | 2 +- src/ipc/ipc4/helper.c | 21 +++++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/include/sof/ipc/topology.h b/src/include/sof/ipc/topology.h index 5726b7055b32..5605c6ef9837 100644 --- a/src/include/sof/ipc/topology.h +++ b/src/include/sof/ipc/topology.h @@ -50,7 +50,7 @@ struct ipc_comp_dev; const struct comp_driver *ipc4_get_comp_drv(uint32_t module_id); struct comp_dev *ipc4_get_comp_dev(uint32_t comp_id); int ipc4_add_comp_dev(struct comp_dev *dev); -const struct comp_driver *ipc4_get_drv(const uint8_t *uuid); +const struct comp_driver *ipc4_get_drv(const void *uuid); int ipc4_chain_manager_create(struct ipc4_chain_dma *cdma); int ipc4_chain_dma_state(struct comp_dev *dev, struct ipc4_chain_dma *cdma); int ipc4_create_chain_dma(struct ipc *ipc, struct ipc4_chain_dma *cdma); diff --git a/src/ipc/ipc4/helper.c b/src/ipc/ipc4/helper.c index 0dfb4bc73fc2..3e8cfdcf5815 100644 --- a/src/ipc/ipc4/helper.c +++ b/src/ipc/ipc4/helper.c @@ -93,7 +93,7 @@ static inline char *ipc4_get_comp_new_data(void) static const struct comp_driver *ipc4_library_get_comp_drv(char *data) { - return ipc4_get_drv((const uint8_t *)data); + return ipc4_get_drv(data); } #else static inline char *ipc4_get_comp_new_data(void) @@ -773,7 +773,7 @@ int ipc4_chain_manager_create(struct ipc4_chain_dma *cdma) const struct comp_driver *drv; struct comp_dev *dev; - drv = ipc4_get_drv((const uint8_t *)&uuid); + drv = ipc4_get_drv(&uuid); if (!drv) return -EINVAL; @@ -912,8 +912,9 @@ int ipc4_process_on_core(uint32_t core, bool blocking) return IPC4_SUCCESS; } -const struct comp_driver *ipc4_get_drv(const uint8_t *uuid) +const struct comp_driver *ipc4_get_drv(const void *uuid) { + const struct sof_uuid *const sof_uuid = (const struct sof_uuid *)uuid; struct comp_driver_list *drivers = comp_drivers_get(); struct list_item *clist; const struct comp_driver *drv = NULL; @@ -936,11 +937,11 @@ const struct comp_driver *ipc4_get_drv(const uint8_t *uuid) } } - tr_warn(&comp_tr, "get_drv(): the provided UUID (%08x %08x %08x %08x) can't be found!", - *(uint32_t *)(&uuid[0]), - *(uint32_t *)(&uuid[4]), - *(uint32_t *)(&uuid[8]), - *(uint32_t *)(&uuid[12])); + tr_warn(&comp_tr, + "get_drv(): the provided UUID (%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x) can't be found!", + sof_uuid->a, sof_uuid->b, sof_uuid->c, sof_uuid->d[0], sof_uuid->d[1], + sof_uuid->d[2], sof_uuid->d[3], sof_uuid->d[4], sof_uuid->d[5], sof_uuid->d[6], + sof_uuid->d[7]); out: irq_local_enable(flags); @@ -998,13 +999,13 @@ const struct comp_driver *ipc4_get_comp_drv(uint32_t module_id) #endif } /* Check already registered components */ - drv = ipc4_get_drv(mod->uuid); + drv = ipc4_get_drv(&mod->uuid); #if CONFIG_LIBRARY_MANAGER if (!drv) { /* New module not registered yet. */ lib_manager_register_module(module_id); - drv = ipc4_get_drv(mod->uuid); + drv = ipc4_get_drv(&mod->uuid); } #endif From 881f1f995ebcffc909fad206651b5765b2ee1e31 Mon Sep 17 00:00:00 2001 From: Adrian Warecki Date: Wed, 22 Jan 2025 18:03:00 +0100 Subject: [PATCH 2/7] rimage: toml_utils: parse_uuid: Change uuid parameter type to void * Change the uuid parameter type to void * in the parse_uuid function to make it independent of the UUID type and avoid unnecessary type casting. This change is intended to prepare the code for standardizing the UUID format across the project. Signed-off-by: Adrian Warecki --- tools/rimage/src/include/rimage/toml_utils.h | 2 +- tools/rimage/src/toml_utils.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/rimage/src/include/rimage/toml_utils.h b/tools/rimage/src/include/rimage/toml_utils.h index 22f257c2c65d..94c512f31aa0 100644 --- a/tools/rimage/src/include/rimage/toml_utils.h +++ b/tools/rimage/src/include/rimage/toml_utils.h @@ -115,7 +115,7 @@ void parse_str_key(const toml_table_t *table, struct parse_ctx *ctx, const char * Parse UUID hex string into a byte array. The endianness of the output * is architecture-dependent: do not use in any portable code. */ -void parse_uuid(const char *buf, uint8_t *uuid); +void parse_uuid(const char *buf, void *uuid); /** version is stored as toml array with integer number, something like: * "version = [1, 8]" diff --git a/tools/rimage/src/toml_utils.c b/tools/rimage/src/toml_utils.c index 7570c5b1f7bb..d7abc1e82296 100644 --- a/tools/rimage/src/toml_utils.c +++ b/tools/rimage/src/toml_utils.c @@ -290,7 +290,7 @@ void parse_str_key(const toml_table_t *table, struct parse_ctx *ctx, const char dst[capacity - 1] = 0; } -void parse_uuid(const char *buf, uint8_t *uuid) +void parse_uuid(const char *buf, void *uuid) { struct uuid_t id; uint32_t d[11]; From 925504bbfc62242af16f90e725822d08aeb52a7d Mon Sep 17 00:00:00 2001 From: Adrian Warecki Date: Thu, 23 Jan 2025 13:29:15 +0100 Subject: [PATCH 3/7] uuid: Mark the sof_uuid structure as packed Some identifiers are taken from the module manifest. Since the module manifest structure (sof_man_module) is marked as packed, the pointer to the sof_uuid structure may not be properly aligned. Mark the sof_uuid structure as packed to avoid possible problems with accessing fields of this structure from unaligned addresses. Signed-off-by: Adrian Warecki --- src/include/sof/lib/uuid.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/include/sof/lib/uuid.h b/src/include/sof/lib/uuid.h index 7c7691bfff38..435f731cd3c1 100644 --- a/src/include/sof/lib/uuid.h +++ b/src/include/sof/lib/uuid.h @@ -50,13 +50,19 @@ * pass UUIDs as a linear array of bytes, only one endianness will * work. If SOF ever ships on a BE system all use of sof_uuid will * need to be modified to byte swap the a/b/c values. + * + * Some identifiers are taken from the module manifest. Since the module + * manifest structure (sof_man_module) is marked as packed, the pointer + * to the sof_uuid structure may not be properly aligned. To avoid possible + * problems with accessing fields of this structure from unaligned addresses, + * it has been marked as packed. */ struct sof_uuid { uint32_t a; uint16_t b; uint16_t c; uint8_t d[8]; -}; +} __packed; #define _UUID_INIT(va, vb, vc, d0, d1, d2, d3, d4, d5, d6, d7) \ { va, vb, vc, { d0, d1, d2, d3, d4, d5, d6, d7 } } From d27ac5cc693feae8e4bb5559fdf18124a86fffe2 Mon Sep 17 00:00:00 2001 From: Adrian Warecki Date: Thu, 23 Jan 2025 11:19:45 +0100 Subject: [PATCH 4/7] uuid: Add SOF_REG_UUID macro Separate the SOF_REG_UUID macro to allow use it to initialize variables with a value from the register. Signed-off-by: Adrian Warecki --- src/include/sof/lib/uuid.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/include/sof/lib/uuid.h b/src/include/sof/lib/uuid.h index 435f731cd3c1..d45f821613d7 100644 --- a/src/include/sof/lib/uuid.h +++ b/src/include/sof/lib/uuid.h @@ -132,6 +132,14 @@ struct sof_uuid_entry { _DEF_UUID(entity_name, uuid_name, \ _UUID_INIT(va, vb, vc, vd0, vd1, vd2, vd3, vd4, vd5, vd6, vd7)) +/** \brief Get UUID value sourced from the fixed SOF registry + * + * The ID value is sourced by name from the uuid-registry.txt file distributed with the source tree. + * + * \param name Name of the UUID, must match an entry in uuid-registry.txt + */ +#define SOF_REG_UUID(name) _UUIDREG_##name + /** \brief Defines UUID sourced from the fixed SOF registry * * As for SOF_DEFINE_UUID(), but the ID value is sourced by name from @@ -142,7 +150,7 @@ struct sof_uuid_entry { * * \param name Name of the UUID, must match an entry in uuid-registry.txt */ -#define SOF_DEFINE_REG_UUID(name) _DEF_UUID(#name, name##_uuid, _UUIDREG_##name) +#define SOF_DEFINE_REG_UUID(name) _DEF_UUID(#name, name##_uuid, SOF_REG_UUID(name)) /** \brief Creates local unique 32-bit representation of UUID structure. * From cdbf72e9102a447f6f9d0768bb7e2647a5e91f51 Mon Sep 17 00:00:00 2001 From: Adrian Warecki Date: Wed, 22 Jan 2025 16:58:32 +0100 Subject: [PATCH 5/7] lib_manager: Prepare to change uuid type in module manifest Remove the reference to the first element of the array storing the uuid to prepare the code for changing the uuid type from an array to a struct. Signed-off-by: Adrian Warecki --- src/library_manager/lib_manager.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/library_manager/lib_manager.c b/src/library_manager/lib_manager.c index ae824d512dc5..c208fde81988 100644 --- a/src/library_manager/lib_manager.c +++ b/src/library_manager/lib_manager.c @@ -641,7 +641,7 @@ int lib_manager_register_module(const uint32_t component_id) } mod = (struct sof_man_module *)((const uint8_t *)desc + SOF_MAN_MODULE_OFFSET(entry_index)); - const struct sof_uuid *uid = (struct sof_uuid *)&mod->uuid[0]; + const struct sof_uuid *uid = (struct sof_uuid *)&mod->uuid; lib_manager_prepare_module_adapter(drv, uid); From 8a66cfa720e800f8d36fe92950354b047534b3fa Mon Sep 17 00:00:00 2001 From: Adrian Warecki Date: Thu, 23 Jan 2025 15:52:54 +0100 Subject: [PATCH 6/7] rimage: Prepare to change uuid type in module manifest Add a & symbol for getting the address of a variable to prepare the code for changing the uuid type from an array to a structure. Signed-off-by: Adrian Warecki --- tools/rimage/src/adsp_config.c | 4 ++-- tools/rimage/src/manifest.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/rimage/src/adsp_config.c b/tools/rimage/src/adsp_config.c index 7dd30864ff54..5ce44a689826 100644 --- a/tools/rimage/src/adsp_config.c +++ b/tools/rimage/src/adsp_config.c @@ -1910,7 +1910,7 @@ static int parse_module(const toml_table_t *toml, struct parse_ctx *pctx, if (ret < 0) return err_key_parse("uuid", NULL); - parse_uuid(buf, mod_man->uuid); + parse_uuid(buf, &mod_man->uuid); mod_man->affinity_mask = parse_uint32_hex_key(mod_entry, &ctx_entry, "affinity_mask", 1, &ret); @@ -1952,7 +1952,7 @@ static int parse_module(const toml_table_t *toml, struct parse_ctx *pctx, header->version_major = 2; header->version_minor = 5; header->ext_module_config_length = sizeof(struct fw_ext_mod_config_header); - memcpy(header->guid, mod_man->uuid, sizeof(mod_man->uuid)); + memcpy(header->guid, &mod_man->uuid, sizeof(mod_man->uuid)); type = parse_uint32_hex_key(mod_entry, &ctx_entry, "module_type", 1, &ret); if (ret < 0) diff --git a/tools/rimage/src/manifest.c b/tools/rimage/src/manifest.c index d7a1fbe58e4e..f0c92014ce00 100644 --- a/tools/rimage/src/manifest.c +++ b/tools/rimage/src/manifest.c @@ -205,7 +205,7 @@ static void man_get_section_manifest(struct image *image, memcpy(man_module->struct_id, "$AME", 4); man_module->entry_point = sof_mod->module.entry_point; memcpy(man_module->name, sof_mod->module.name, SOF_MAN_MOD_NAME_LEN); - memcpy(man_module->uuid, sof_mod->module.uuid, 16); + memcpy(&man_module->uuid, &sof_mod->module.uuid, sizeof(man_module->uuid)); man_module->affinity_mask = sof_mod->module.affinity_mask; man_module->instance_max_count = sof_mod->module.instance_max_count; man_module->type.auto_start = sof_mod->module.type.auto_start; From 42914630eef7ce76f1bd76d2def87cd9004144d3 Mon Sep 17 00:00:00 2001 From: Adrian Warecki Date: Thu, 23 Jan 2025 15:53:41 +0100 Subject: [PATCH 7/7] rimage: manifest: llext: Get uuid from registry & change uuid type Change the UUID storage type in the module manifest to a sof-compatible structure to enable retrieval of the UUIDs from the registry. Obtain the UUIDs of loadable llext modules from the uuid-registry. Signed-off-by: Adrian Warecki --- lmdk/libraries/dummy/dummy_mtl.toml | 2 +- lmdk/modules/dummy/dummy.c | 3 ++- src/audio/aria/aria.c | 5 +---- src/audio/asrc/asrc.c | 4 +--- src/audio/codec/dts/dts.c | 5 +---- src/audio/crossover/crossover.c | 5 +---- src/audio/dcblock/dcblock.c | 5 +---- src/audio/drc/drc.c | 5 +---- src/audio/eq_fir/eq_fir.c | 5 +---- src/audio/eq_iir/eq_iir.c | 5 +---- src/audio/google/google_ctc_audio_processing.c | 5 +---- src/audio/google/google_rtc_audio_processing.c | 5 +---- src/audio/igo_nr/igo_nr.c | 5 +---- src/audio/mfcc/mfcc.c | 5 +---- src/audio/mixin_mixout/mixin_mixout.c | 9 ++------- src/audio/module_adapter/module/waves/waves.c | 7 +------ src/audio/multiband_drc/multiband_drc.c | 6 ++---- src/audio/mux/mux.c | 8 ++------ src/audio/rtnr/rtnr.c | 6 +----- src/audio/selector/selector.c | 6 ++---- src/audio/src/src.c | 9 +++------ src/audio/tdfb/tdfb.c | 5 +---- src/audio/volume/volume.c | 8 ++------ src/include/module/module/llext.h | 2 +- src/probe/probe.c | 5 +---- src/samples/audio/smart_amp_test_ipc4.c | 4 ++-- tools/rimage/src/include/rimage/sof/user/manifest.h | 9 ++++++++- 27 files changed, 43 insertions(+), 105 deletions(-) diff --git a/lmdk/libraries/dummy/dummy_mtl.toml b/lmdk/libraries/dummy/dummy_mtl.toml index 3094e10f3396..58b3820331fa 100644 --- a/lmdk/libraries/dummy/dummy_mtl.toml +++ b/lmdk/libraries/dummy/dummy_mtl.toml @@ -60,7 +60,7 @@ count = 1 [[module.entry]] name = "DUMMY" - uuid = "01010101-0101-0101-0101-010101010101" + uuid = "01234567-89AB-CDEF-0102-030405060708" affinity_mask = "0x1" instance_count = "15" domain_types = "0" diff --git a/lmdk/modules/dummy/dummy.c b/lmdk/modules/dummy/dummy.c index 7c9f49289542..de126062bad0 100644 --- a/lmdk/modules/dummy/dummy.c +++ b/lmdk/modules/dummy/dummy.c @@ -18,7 +18,8 @@ __attribute__((section(".module"))) const struct sof_man_module_manifest dummy_module_manifest = { .module = { .name = "DUMMY", - .uuid = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, + .uuid = { 0x01234567, 0x89AB, 0xCDEF, { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08 }}, .entry_point = (uint32_t)dummyPackageEntryPoint, .type = { .load_type = SOF_MAN_MOD_TYPE_MODULE, diff --git a/src/audio/aria/aria.c b/src/audio/aria/aria.c index 7fe6e319e79a..85dc7b64719f 100644 --- a/src/audio/aria/aria.c +++ b/src/audio/aria/aria.c @@ -319,13 +319,10 @@ SOF_MODULE_INIT(aria, sys_comp_module_aria_interface_init); #include #include -#define UUID_ARIA 0x6D, 0x16, 0xF7, 0x99, 0x2C, 0x37, 0xEF, 0x43, 0xF6, 0x81, \ - 0x22, 0x00, 0x7A, 0xA1, 0x5F, 0x03 - SOF_LLEXT_MOD_ENTRY(aria, &aria_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = - SOF_LLEXT_MODULE_MANIFEST("ARIA", aria_llext_entry, 1, UUID_ARIA, 8); + SOF_LLEXT_MODULE_MANIFEST("ARIA", aria_llext_entry, 1, SOF_REG_UUID(aria), 8); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/asrc/asrc.c b/src/audio/asrc/asrc.c index 45a0acc81bfb..ea72e50bf92d 100644 --- a/src/audio/asrc/asrc.c +++ b/src/audio/asrc/asrc.c @@ -879,12 +879,10 @@ SOF_MODULE_INIT(asrc, sys_comp_module_asrc_interface_init); #include #include -#define UUID_ASRC 0x2d, 0x40, 0xb4, 0x66, 0x68, 0xb4, 0xf2, 0x42, \ - 0x81, 0xa7, 0xb3, 0x71, 0x21, 0x86, 0x3d, 0xd4 SOF_LLEXT_MOD_ENTRY(asrc, &asrc_interface); static const struct sof_man_module_manifest mod_manifest[] __section(".module") __used = { - SOF_LLEXT_MODULE_MANIFEST("ASRC", asrc_llext_entry, 1, UUID_ASRC, 2), + SOF_LLEXT_MODULE_MANIFEST("ASRC", asrc_llext_entry, 1, SOF_REG_UUID(asrc4), 2), }; SOF_LLEXT_BUILDINFO; diff --git a/src/audio/codec/dts/dts.c b/src/audio/codec/dts/dts.c index c61ac2b8ef00..0563ea130599 100644 --- a/src/audio/codec/dts/dts.c +++ b/src/audio/codec/dts/dts.c @@ -478,13 +478,10 @@ SOF_MODULE_INIT(dts, sys_comp_module_dts_interface_init); #include #include -#define UUID_DTS 0x4F, 0xC3, 0x5F, 0xD9, 0x0F, 0x37, 0xC7, 0x4A, 0x86, 0xBC, \ - 0xBF, 0xDC, 0x5B, 0xE2, 0x41, 0xE6 - SOF_LLEXT_MOD_ENTRY(dts, &dts_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = - SOF_LLEXT_MODULE_MANIFEST("DTS", dts_llext_entry, 1, UUID_DTS, 40); + SOF_LLEXT_MODULE_MANIFEST("DTS", dts_llext_entry, 1, SOF_REG_UUID(dts), 40); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/crossover/crossover.c b/src/audio/crossover/crossover.c index dae27ff12b56..3c91c329a2f4 100644 --- a/src/audio/crossover/crossover.c +++ b/src/audio/crossover/crossover.c @@ -639,13 +639,10 @@ SOF_MODULE_INIT(crossover, sys_comp_module_crossover_interface_init); #include #include -#define UUID_CROSSOVER 0xD1, 0x9A, 0x8C, 0x94, 0x6A, 0x80, 0x31, 0x41, 0x6C, 0xAD, \ - 0xB2, 0xBD, 0xA9, 0xE3, 0x5A, 0x9F - SOF_LLEXT_MOD_ENTRY(crossover, &crossover_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = - SOF_LLEXT_MODULE_MANIFEST("XOVER", crossover_llext_entry, 1, UUID_CROSSOVER, 40); + SOF_LLEXT_MODULE_MANIFEST("XOVER", crossover_llext_entry, 1, SOF_REG_UUID(crossover), 40); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/dcblock/dcblock.c b/src/audio/dcblock/dcblock.c index 4d4888d8b4f8..180a71099825 100644 --- a/src/audio/dcblock/dcblock.c +++ b/src/audio/dcblock/dcblock.c @@ -264,13 +264,10 @@ SOF_MODULE_INIT(dcblock, sys_comp_module_dcblock_interface_init); #include #include -#define UUID_DCBLOCK 0xAF, 0xEF, 0x09, 0xB8, 0x81, 0x56, 0xB1, 0x42, 0xD6, 0x9E, \ - 0x04, 0xBB, 0x01, 0x2D, 0xD3, 0x84 - SOF_LLEXT_MOD_ENTRY(dcblock, &dcblock_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = - SOF_LLEXT_MODULE_MANIFEST("DCBLOCK", dcblock_llext_entry, 1, UUID_DCBLOCK, 40); + SOF_LLEXT_MODULE_MANIFEST("DCBLOCK", dcblock_llext_entry, 1, SOF_REG_UUID(dcblock), 40); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/drc/drc.c b/src/audio/drc/drc.c index 000e804cbd00..04734a2384d4 100644 --- a/src/audio/drc/drc.c +++ b/src/audio/drc/drc.c @@ -410,13 +410,10 @@ SOF_MODULE_INIT(drc, sys_comp_module_drc_interface_init); #include #include -#define UUID_DRC 0xda, 0xe4, 0x6e, 0xb3, 0x6f, 0x00, 0xf9, 0x47, \ - 0xa0, 0x6d, 0xfe, 0xcb, 0xe2, 0xd8, 0xb6, 0xce - SOF_LLEXT_MOD_ENTRY(drc, &drc_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = - SOF_LLEXT_MODULE_MANIFEST("DRC", drc_llext_entry, 1, UUID_DRC, 40); + SOF_LLEXT_MODULE_MANIFEST("DRC", drc_llext_entry, 1, SOF_REG_UUID(drc), 40); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/eq_fir/eq_fir.c b/src/audio/eq_fir/eq_fir.c index b02c104cdf89..3380d79047de 100644 --- a/src/audio/eq_fir/eq_fir.c +++ b/src/audio/eq_fir/eq_fir.c @@ -488,13 +488,10 @@ SOF_MODULE_INIT(eq_fir, sys_comp_module_eq_fir_interface_init); #include #include -#define UUID_EQFIR 0xe7, 0x0c, 0xa9, 0x43, 0xa5, 0xf3, 0xdf, 0x41, \ - 0xac, 0x06, 0xba, 0x98, 0x65, 0x1a, 0xe6, 0xa3 - SOF_LLEXT_MOD_ENTRY(eq_fir, &eq_fir_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = - SOF_LLEXT_MODULE_MANIFEST("EQFIR", eq_fir_llext_entry, 1, UUID_EQFIR, 40); + SOF_LLEXT_MODULE_MANIFEST("EQFIR", eq_fir_llext_entry, 1, SOF_REG_UUID(eq_fir), 40); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/eq_iir/eq_iir.c b/src/audio/eq_iir/eq_iir.c index e11d9454433b..96d4899ed643 100644 --- a/src/audio/eq_iir/eq_iir.c +++ b/src/audio/eq_iir/eq_iir.c @@ -258,13 +258,10 @@ SOF_MODULE_INIT(eq_iir, sys_comp_module_eq_iir_interface_init); #include #include -#define UUID_EQIIR 0xE6, 0xC0, 0x50, 0x51, 0xF9, 0x27, 0xC8, 0x4E, \ - 0x83, 0x51, 0xC7, 0x05, 0xB6, 0x42, 0xD1, 0x2F - SOF_LLEXT_MOD_ENTRY(eq_iir, &eq_iir_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = - SOF_LLEXT_MODULE_MANIFEST("EQIIR", eq_iir_llext_entry, 1, UUID_EQIIR, 40); + SOF_LLEXT_MODULE_MANIFEST("EQIIR", eq_iir_llext_entry, 1, SOF_REG_UUID(eq_iir), 40); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/google/google_ctc_audio_processing.c b/src/audio/google/google_ctc_audio_processing.c index 12ecac66f8a7..8639e598dd04 100644 --- a/src/audio/google/google_ctc_audio_processing.c +++ b/src/audio/google/google_ctc_audio_processing.c @@ -466,14 +466,11 @@ SOF_MODULE_INIT(google_ctc_audio_processing, #include #include -#define UUID_GOOGLE_CTC 0xBC, 0x1B, 0x0E, 0xBF, 0x6A, 0xDC, 0xFE, 0x45, 0x90, 0xBC, \ - 0x25, 0x54, 0xCB, 0x13, 0x7A, 0xB4 - SOF_LLEXT_MOD_ENTRY(google_ctc_audio_processing, &google_ctc_audio_processing_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = SOF_LLEXT_MODULE_MANIFEST("CTC", google_ctc_audio_processing_llext_entry, - 1, UUID_GOOGLE_CTC, 40); + 1, SOF_REG_UUID(google_ctc_audio_processing), 40); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/google/google_rtc_audio_processing.c b/src/audio/google/google_rtc_audio_processing.c index c84cadb4c5c8..da673b7e52fa 100644 --- a/src/audio/google/google_rtc_audio_processing.c +++ b/src/audio/google/google_rtc_audio_processing.c @@ -861,14 +861,11 @@ SOF_MODULE_INIT(google_rtc_audio_processing, #include #include -#define UUID_GOOGLE_RTC_AEC 0xA6, 0xA0, 0x80, 0xB7, 0x9F, 0x26, 0x6F, 0x46, 0x77, 0xB4, \ - 0x23, 0xDF, 0xA0, 0x5A, 0xF7, 0x58 - SOF_LLEXT_MOD_ENTRY(google_rtc_audio_processing, &google_rtc_audio_processing_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = SOF_LLEXT_MODULE_MANIFEST("RTC_AEC", google_rtc_audio_processing_llext_entry, - 7, UUID_GOOGLE_RTC_AEC, 1); + 7, SOF_REG_UUID(google_rtc_audio_processing), 1); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/igo_nr/igo_nr.c b/src/audio/igo_nr/igo_nr.c index 78eead2b1e97..1750b5972508 100644 --- a/src/audio/igo_nr/igo_nr.c +++ b/src/audio/igo_nr/igo_nr.c @@ -893,13 +893,10 @@ SOF_MODULE_INIT(igo_nr, sys_comp_module_igo_nr_interface_init); #include #include -#define UUID_IGO_NR 0xBC, 0xE2, 0x6A, 0x69, 0x77, 0x28, 0xEB, 0x11, 0xC1, 0xAD, \ - 0x02, 0x42, 0xAC, 0x12, 0x00, 0x02 - SOF_LLEXT_MOD_ENTRY(igo_nr, &igo_nr_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = - SOF_LLEXT_MODULE_MANIFEST("IGO_NR", igo_nr_llext_entry, 1, UUID_IGO_NR, 40); + SOF_LLEXT_MODULE_MANIFEST("IGO_NR", igo_nr_llext_entry, 1, SOF_REG_UUID(igo_nr), 40); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/mfcc/mfcc.c b/src/audio/mfcc/mfcc.c index 964b4bae7d38..489df60c40b3 100644 --- a/src/audio/mfcc/mfcc.c +++ b/src/audio/mfcc/mfcc.c @@ -266,13 +266,10 @@ SOF_MODULE_INIT(mfcc, sys_comp_module_mfcc_interface_init); #include #include -#define UUID_MFCC 0x73, 0xA7, 0x10, 0xDB, 0xA4, 0x1A, 0xEA, 0x4C, 0x1F, 0xA2, \ - 0x2D, 0x57, 0xA5, 0xC9, 0x82, 0xEB - SOF_LLEXT_MOD_ENTRY(mfcc, &mfcc_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = - SOF_LLEXT_MODULE_MANIFEST("MFCC", mfcc_llext_entry, 1, UUID_MFCC, 40); + SOF_LLEXT_MODULE_MANIFEST("MFCC", mfcc_llext_entry, 1, SOF_REG_UUID(mfcc), 40); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/mixin_mixout/mixin_mixout.c b/src/audio/mixin_mixout/mixin_mixout.c index 94a61c89d097..fe9120946dec 100644 --- a/src/audio/mixin_mixout/mixin_mixout.c +++ b/src/audio/mixin_mixout/mixin_mixout.c @@ -949,18 +949,13 @@ SOF_MODULE_INIT(mixout, sys_comp_module_mixout_interface_init); #include #include -#define UUID_MIXIN 0xB2, 0x6E, 0x65, 0x39, 0x71, 0x3B, 0x49, 0x40, \ - 0x8D, 0x3F, 0xF9, 0x2C, 0xD5, 0xC4, 0x3C, 0x09 -#define UUID_MIXOUT 0x5A, 0x50, 0x56, 0x3C, 0xD7, 0x24, 0x8F, 0x41, \ - 0xBD, 0xDC, 0xC1, 0xF5, 0xA3, 0xAC, 0x2A, 0xE0 - SOF_LLEXT_MOD_ENTRY(mixin, &mixin_interface); SOF_LLEXT_MOD_ENTRY(mixout, &mixout_interface); static const struct sof_man_module_manifest mod_manifest[] __section(".module") __used = { - SOF_LLEXT_MODULE_MANIFEST("MIXIN", mixin_llext_entry, 1, UUID_MIXIN, 30), - SOF_LLEXT_MODULE_MANIFEST("MIXOUT", mixout_llext_entry, 1, UUID_MIXOUT, 30), + SOF_LLEXT_MODULE_MANIFEST("MIXIN", mixin_llext_entry, 1, SOF_REG_UUID(mixin), 30), + SOF_LLEXT_MODULE_MANIFEST("MIXOUT", mixout_llext_entry, 1, SOF_REG_UUID(mixout), 30), }; SOF_LLEXT_BUILDINFO; diff --git a/src/audio/module_adapter/module/waves/waves.c b/src/audio/module_adapter/module/waves/waves.c index 4f606fd594dd..ee45c7077405 100644 --- a/src/audio/module_adapter/module/waves/waves.c +++ b/src/audio/module_adapter/module/waves/waves.c @@ -907,15 +907,10 @@ SOF_MODULE_INIT(waves, sys_comp_module_waves_interface_init); #include #include -/* d944281a-afe9-4695-a043-d7f62b89538e */ -#define UUID_WAVES_CODEC 0x1A, 0x28, 0x44, 0xD9, 0xE9, 0xAF, 0x95, 0x46, \ - 0xA0, 0x43, 0xD7, 0xF6, 0x2B, 0x89, 0x53, 0x8E - SOF_LLEXT_MOD_ENTRY(waves, &waves_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = - SOF_LLEXT_MODULE_MANIFEST("WAVES", waves_llext_entry, - 7, UUID_WAVES_CODEC, 8); + SOF_LLEXT_MODULE_MANIFEST("WAVES", waves_llext_entry, 7, SOF_REG_UUID(waves), 8); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/multiband_drc/multiband_drc.c b/src/audio/multiband_drc/multiband_drc.c index 3ffe8e0f511e..f948e3354e33 100644 --- a/src/audio/multiband_drc/multiband_drc.c +++ b/src/audio/multiband_drc/multiband_drc.c @@ -426,13 +426,11 @@ SOF_MODULE_INIT(multiband_drc, sys_comp_module_multiband_drc_interface_init); #include #include -#define UUID_MULTIBAND_DRC 0x56, 0x22, 0x9F, 0x0D, 0x4F, 0x8E, 0xB3, 0x47, 0x48, 0x84, \ - 0x23, 0x9A, 0x33, 0x4F, 0x11, 0x91 - SOF_LLEXT_MOD_ENTRY(multiband_drc, &multiband_drc_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = - SOF_LLEXT_MODULE_MANIFEST("MB_DRC", multiband_drc_llext_entry, 1, UUID_MULTIBAND_DRC, 40); + SOF_LLEXT_MODULE_MANIFEST("MB_DRC", multiband_drc_llext_entry, 1, + SOF_REG_UUID(multiband_drc), 40); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/mux/mux.c b/src/audio/mux/mux.c index 8d65b2b2698d..79280e376220 100644 --- a/src/audio/mux/mux.c +++ b/src/audio/mux/mux.c @@ -482,24 +482,20 @@ SOF_MODULE_INIT(demux, sys_comp_module_demux_interface_init); #include #include -#define UUID_MUX 0x35, 0x6E, 0xCE, 0x64, 0x7A, 0x85, 0x78, 0x48, 0xE8, 0xAC, \ - 0xE2, 0xA2, 0xF4, 0x2E, 0x30, 0x69 SOF_LLEXT_MOD_ENTRY(mux, &mux_interface); /* * The demux entry is removed because mtl.toml doesn't have an entry * for it. Once that is fixed, the manifest line below can be * re-activated: - * #define UUID_DEMUX 0x68, 0x68, 0xB2, 0xC4, 0x30, 0x14, 0x0E, 0x47, 0x89, 0xA0, \ - * 0x15, 0xD1, 0xC7, 0x7F, 0x85, 0x1A * SOF_LLEXT_MOD_ENTRY(demux, &demux_interface); */ static const struct sof_man_module_manifest mod_manifest[] __section(".module") __used = { - SOF_LLEXT_MODULE_MANIFEST("MUX", mux_llext_entry, 1, UUID_MUX, 15), + SOF_LLEXT_MODULE_MANIFEST("MUX", mux_llext_entry, 1, SOF_REG_UUID(mux4), 15), /* * See comment above for a demux deactivation reason - * SOF_LLEXT_MODULE_MANIFEST("DEMUX", demux_llext_entry, 1, UUID_DEMUX, 15), + * SOF_LLEXT_MODULE_MANIFEST("DEMUX", demux_llext_entry, 1, SOF_REG_UUID(demux), 15), */ }; diff --git a/src/audio/rtnr/rtnr.c b/src/audio/rtnr/rtnr.c index 830bbde413e7..2f9fabe43d8a 100644 --- a/src/audio/rtnr/rtnr.c +++ b/src/audio/rtnr/rtnr.c @@ -876,14 +876,10 @@ SOF_MODULE_INIT(rtnr, sys_comp_module_rtnr_interface_init); #include #include -/* 5c7ca334-e15d-11eb-ba800242ac130004 */ -#define UUID_RTNR 0x34, 0xA3, 0x7C, 0x5C, 0x5D, 0xE1, 0xEB, 0x11, \ - 0xBA, 0x80, 0x02, 0x42, 0xAC, 0x13, 0x00, 0x04 - SOF_LLEXT_MOD_ENTRY(rtnr, &rtnr_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = - SOF_LLEXT_MODULE_MANIFEST("RTNR", rtnr_llext_entry, 1, UUID_RTNR, 40); + SOF_LLEXT_MODULE_MANIFEST("RTNR", rtnr_llext_entry, 1, SOF_REG_UUID(rtnr), 40); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/selector/selector.c b/src/audio/selector/selector.c index 8032a3d7dea9..9b9ee5f63d03 100644 --- a/src/audio/selector/selector.c +++ b/src/audio/selector/selector.c @@ -923,13 +923,11 @@ SOF_MODULE_INIT(selector, sys_comp_module_selector_interface_init); #include #include -#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_MODULE_MANIFEST("MICSEL", selector_llext_entry, 1, SOF_REG_UUID(selector4), + 8); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/src/src.c b/src/audio/src/src.c index d75b1eb53822..68718f747400 100644 --- a/src/audio/src/src.c +++ b/src/audio/src/src.c @@ -89,21 +89,18 @@ SOF_MODULE_INIT(src, sys_comp_module_src_interface_init); #include #include -#define UUID_SRC 0x8D, 0xB2, 0x1B, 0xE6, 0x9A, 0x14, 0x1F, 0x4C, \ - 0xB7, 0x09, 0x46, 0x82, 0x3E, 0xF5, 0xF5, 0xAE SOF_LLEXT_MOD_ENTRY(src, &src_interface); #if CONFIG_COMP_SRC_LITE -#define UUID_SRC_LITE 0x51, 0x10, 0x44, 0x33, 0xCD, 0x44, 0x6A, 0x46, \ - 0x83, 0xA3, 0x17, 0x84, 0x78, 0x70, 0x8A, 0xEA extern const struct module_interface src_lite_interface; SOF_LLEXT_MOD_ENTRY(src_lite, &src_lite_interface); #endif static const struct sof_man_module_manifest mod_manifest[] __section(".module") __used = { - SOF_LLEXT_MODULE_MANIFEST("SRC", src_llext_entry, 1, UUID_SRC, 1), + SOF_LLEXT_MODULE_MANIFEST("SRC", src_llext_entry, 1, SOF_REG_UUID(src4), 1), #if CONFIG_COMP_SRC_LITE - SOF_LLEXT_MODULE_MANIFEST("SRC_LITE", src_lite_llext_entry, 1, UUID_SRC_LITE, 1), + SOF_LLEXT_MODULE_MANIFEST("SRC_LITE", src_lite_llext_entry, 1, SOF_REG_UUID(src_lite), + 1), #endif }; diff --git a/src/audio/tdfb/tdfb.c b/src/audio/tdfb/tdfb.c index dbb99bddb5aa..39f47a61527d 100644 --- a/src/audio/tdfb/tdfb.c +++ b/src/audio/tdfb/tdfb.c @@ -831,13 +831,10 @@ SOF_MODULE_INIT(tdfb, sys_comp_module_tdfb_interface_init); #include #include -#define UUID_TDFB 0x49, 0x17, 0x51, 0xdd, 0xfa, 0xd9, 0x5c, 0x45, 0xb3, 0xa7, \ - 0x13, 0x58, 0x56, 0x93, 0xf1, 0xaf - SOF_LLEXT_MOD_ENTRY(tdfb, &tdfb_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = - SOF_LLEXT_MODULE_MANIFEST("TDFB", tdfb_llext_entry, 1, UUID_TDFB, 40); + SOF_LLEXT_MODULE_MANIFEST("TDFB", tdfb_llext_entry, 1, SOF_REG_UUID(tdfb), 40); SOF_LLEXT_BUILDINFO; diff --git a/src/audio/volume/volume.c b/src/audio/volume/volume.c index b3cf42cf116a..a92f9ccf9047 100644 --- a/src/audio/volume/volume.c +++ b/src/audio/volume/volume.c @@ -820,23 +820,19 @@ SOF_MODULE_INIT(gain, sys_comp_module_gain_interface_init); #include #if CONFIG_COMP_PEAK_VOL -#define UUID_PEAKVOL 0x23, 0x13, 0x17, 0x8a, 0xa3, 0x94, 0x1d, 0x4e, \ - 0xaf, 0xe9, 0xfe, 0x5d, 0xba, 0xa4, 0xc3, 0x93 SOF_LLEXT_MOD_ENTRY(peakvol, &volume_interface); #endif #if CONFIG_COMP_GAIN -#define UUID_GAIN 0xa8, 0xa9, 0xbc, 0x61, 0xd0, 0x18, 0x18, 0x4a, \ - 0x8e, 0x7b, 0x26, 0x39, 0x21, 0x98, 0x04, 0xb7 SOF_LLEXT_MOD_ENTRY(gain, &gain_interface); #endif static const struct sof_man_module_manifest mod_manifest[] __section(".module") __used = { #if CONFIG_COMP_PEAK_VOL - SOF_LLEXT_MODULE_MANIFEST("PEAKVOL", peakvol_llext_entry, 1, UUID_PEAKVOL, 10), + SOF_LLEXT_MODULE_MANIFEST("PEAKVOL", peakvol_llext_entry, 1, SOF_REG_UUID(volume), 10), #endif #if CONFIG_COMP_GAIN - SOF_LLEXT_MODULE_MANIFEST("GAIN", gain_llext_entry, 1, UUID_GAIN, 40), + SOF_LLEXT_MODULE_MANIFEST("GAIN", gain_llext_entry, 1, SOF_REG_UUID(gain), 40), #endif }; diff --git a/src/include/module/module/llext.h b/src/include/module/module/llext.h index 05b8f0ffb5f5..e1d294694280 100644 --- a/src/include/module/module/llext.h +++ b/src/include/module/module/llext.h @@ -10,7 +10,7 @@ { \ .module = { \ .name = manifest_name, \ - .uuid = {mod_uuid}, \ + .uuid = mod_uuid, \ .entry_point = (uint32_t)(entry), \ .instance_max_count = instances, \ .type = { \ diff --git a/src/probe/probe.c b/src/probe/probe.c index 190633c34ec8..4ca71685d7db 100644 --- a/src/probe/probe.c +++ b/src/probe/probe.c @@ -1620,13 +1620,10 @@ SOF_MODULE_INIT(probe, sys_comp_module_probe_interface_init); #include #include -#define UUID_PROBE 0x08, 0x08, 0xAD, 0x7C, 0x10, 0xAB, 0x23, 0xCD, 0xEF, 0x45, \ - 0x12, 0xAB, 0x34, 0xCD, 0x56, 0xEF, - SOF_LLEXT_MOD_ENTRY(probe, &probe_interface); static const struct sof_man_module_manifest mod_manifest __section(".module") __used = - SOF_LLEXT_MODULE_MANIFEST("PROBE", probe_llext_entry, 1, UUID_PROBE, 40); + SOF_LLEXT_MODULE_MANIFEST("PROBE", probe_llext_entry, 1, SOF_REG_UUID(probe4), 40); SOF_LLEXT_BUILDINFO; diff --git a/src/samples/audio/smart_amp_test_ipc4.c b/src/samples/audio/smart_amp_test_ipc4.c index 41d8ff2db25a..3d1cd244cc6a 100644 --- a/src/samples/audio/smart_amp_test_ipc4.c +++ b/src/samples/audio/smart_amp_test_ipc4.c @@ -408,8 +408,8 @@ SOF_LLEXT_MOD_ENTRY(smart_amp_test, &smart_amp_test_interface); static const struct sof_man_module_manifest main_manifest __section(".module") __attribute__((used)) = { .module = { .name = "SMATEST", - .uuid = {0x1E, 0x96, 0x7A, 0x16, 0xE4, 0x8A, 0xEA, 0x11, - 0x89, 0xF1, 0x00, 0x0C, 0x29, 0xCE, 0x16, 0x35}, + .uuid = { 0x167A961E, 0x8AE4, 0x11EA, { 0x89, 0xF1, 0x00, 0x0C, 0x29, 0xCE, 0x16, + 0x35 }}, .entry_point = (uint32_t)smart_amp_test_llext_entry, .instance_max_count = 1, .type = { diff --git a/tools/rimage/src/include/rimage/sof/user/manifest.h b/tools/rimage/src/include/rimage/sof/user/manifest.h index 829b1b134810..c206fe7a5055 100644 --- a/tools/rimage/src/include/rimage/sof/user/manifest.h +++ b/tools/rimage/src/include/rimage/sof/user/manifest.h @@ -86,13 +86,20 @@ struct sof_man_segment_desc { #define SOF_MAN_MOD_SHA384_LEN 48 #define SOF_MAN_MOD_ID {'$', 'A', 'M', 'E'} +struct sof_man_uuid { + uint32_t a; + uint16_t b; + uint16_t c; + uint8_t d[8]; +}; + /* * Each module has an entry in the FW header. Used by ROM - Immutable. */ struct sof_man_module { uint8_t struct_id[SOF_MAN_MOD_ID_LEN]; /* SOF_MAN_MOD_ID */ uint8_t name[SOF_MAN_MOD_NAME_LEN]; - uint8_t uuid[16]; + struct sof_man_uuid uuid; struct sof_man_module_type type; uint8_t hash[SOF_MAN_MOD_SHA256_LEN]; uint32_t entry_point;