Skip to content

Commit 15062f0

Browse files
softwareckikv2019i
authored andcommitted
iadk: system_agent: Check error code returned by the module entry point
Change the definition of the system_agent_start function so that it returns the error code returned by the module's entry point functions. Return the created IadkModuleAdapter object via a parameter. Signed-off-by: Adrian Warecki <adrian.warecki@intel.com>
1 parent a759851 commit 15062f0

File tree

3 files changed

+18
-17
lines changed

3 files changed

+18
-17
lines changed

src/audio/module_adapter/iadk/system_agent.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -118,17 +118,15 @@ int SystemAgent::CheckIn(ProcessingModuleFactoryInterface& module_factory,
118118
} /* namespace system */
119119
} /* namespace intel_adsp */
120120

121-
#ifdef __cplusplus
122-
extern "C" {
123-
#endif
124121
/* The create_instance_f is a function call type known in IADK module. The module entry_point
125122
* points to this type of function which starts module creation.
126123
*/
127124
typedef int (*create_instance_f)(uint32_t module_id, uint32_t instance_id, uint32_t core_id,
128125
void *mod_cfg, void *parent_ppl, void **mod_ptr);
129126

130-
void* system_agent_start(uint32_t entry_point, uint32_t module_id, uint32_t instance_id,
131-
uint32_t core_id, uint32_t log_handle, void* mod_cfg)
127+
int system_agent_start(uint32_t entry_point, uint32_t module_id, uint32_t instance_id,
128+
uint32_t core_id, uint32_t log_handle, void* mod_cfg,
129+
void **adapter)
132130
{
133131
uint32_t ret;
134132
SystemAgent system_agent(module_id, instance_id, core_id, log_handle);
@@ -137,13 +135,11 @@ void* system_agent_start(uint32_t entry_point, uint32_t module_id, uint32_t inst
137135
create_instance_f ci = (create_instance_f)(entry_point);
138136
ret = ci(module_id, instance_id, core_id, mod_cfg, NULL, &system_agent_p);
139137

140-
return system_agent_p;
138+
IadkModuleAdapter* module_adapter = reinterpret_cast<IadkModuleAdapter*>(system_agent_p);
139+
*adapter = module_adapter;
140+
return ret;
141141
}
142142

143-
#ifdef __cplusplus
144-
}
145-
#endif
146-
147143
extern "C" void __cxa_pure_virtual() __attribute__((weak));
148144

149145
void __cxa_pure_virtual()

src/audio/module_adapter/module/modules.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,8 @@ static int modules_init(struct processing_module *mod)
5959
const struct comp_driver *const drv = dev->drv;
6060
const struct ipc4_base_module_cfg *src_cfg = &md->cfg.base_cfg;
6161
const struct comp_ipc_config *config = &dev->ipc_config;
62-
void *system_agent;
62+
void *adapter;
63+
int ret;
6364

6465
uintptr_t module_entry_point = lib_manager_allocate_module(mod, config, src_cfg);
6566

@@ -81,16 +82,20 @@ static int modules_init(struct processing_module *mod)
8182
.size = md->cfg.size >> 2,
8283
};
8384

84-
system_agent = system_agent_start(module_entry_point, module_id, instance_id, 0, log_handle,
85-
&mod_cfg);
85+
ret = system_agent_start(module_entry_point, module_id, instance_id, 0, log_handle,
86+
&mod_cfg, &adapter);
87+
if (ret) {
88+
comp_info(dev, "System agent failed");
89+
return ret;
90+
}
8691

87-
module_set_private_data(mod, system_agent);
92+
module_set_private_data(mod, adapter);
8893

8994
md->mpd.in_buff_size = src_cfg->ibs;
9095
md->mpd.out_buff_size = src_cfg->obs;
9196

9297
mod->proc_type = MODULE_PROCESS_TYPE_SOURCE_SINK;
93-
return iadk_wrapper_init(system_agent);
98+
return iadk_wrapper_init(adapter);
9499
}
95100

96101
/**

src/include/sof/audio/module_adapter/iadk/system_agent.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ extern "C" {
107107
* method (the variant with 7 parameters) via a parameter that initially contained the address to
108108
* the agent system. The system_agent_start function returns it in the variable adapter.
109109
*/
110-
void *system_agent_start(uint32_t entry_point, uint32_t module_id, uint32_t instance_id,
111-
uint32_t core_id, uint32_t log_handle, void *mod_cfg);
110+
int system_agent_start(uint32_t entry_point, uint32_t module_id, uint32_t instance_id,
111+
uint32_t core_id, uint32_t log_handle, void *mod_cfg, void **adapter);
112112
#ifdef __cplusplus
113113
}
114114
#endif

0 commit comments

Comments
 (0)