2525
2626LOG_MODULE_DECLARE (module_adapter , CONFIG_SOF_LOG_LEVEL );
2727
28- static const struct ipc4_base_module_extended_cfg *
29- module_ext_init_decode (struct comp_dev * dev , struct module_config * dst ,
30- const unsigned char * data , size_t * size )
28+ int module_ext_init_decode (const struct comp_driver * drv , struct module_ext_init_data * ext_data ,
29+ struct ipc_config_process * spec )
3130{
3231 const struct ipc4_module_init_ext_init * ext_init =
33- (const struct ipc4_module_init_ext_init * )data ;
32+ (const struct ipc4_module_init_ext_init * )spec -> data ;
3433 bool last_object = !ext_init -> data_obj_array ;
3534 const struct ipc4_module_init_ext_object * obj ;
3635
37- if (* size < sizeof (ext_init )) {
38- comp_err (dev , "Size too small for ext init %zu < %zu" ,
39- * size , sizeof (ext_init ));
40- return NULL ;
36+ assert (drv -> type == SOF_COMP_MODULE_ADAPTER );
37+ if (spec -> size < sizeof (ext_init )) {
38+ comp_cl_err (drv , "Size too small for ext init %zu < %zu" ,
39+ spec -> size , sizeof (ext_init ));
40+ return - EINVAL ;
4141 }
4242 /* TODO: Handle ext_init->gna_used and ext_init->rtos_domain here */
4343 /* Get the first obj struct right after ext_init struct */
@@ -46,18 +46,18 @@ module_ext_init_decode(struct comp_dev *dev, struct module_config *dst,
4646 const struct ipc4_module_init_ext_object * next_obj ;
4747
4848 /* Check if there is space for the object header */
49- if ((unsigned char * )(obj + 1 ) - data > * size ) {
50- comp_err ( dev , "ext init obj overflow, %u > %zu" ,
51- (unsigned char * )(obj + 1 ) - data , * size );
52- return NULL ;
49+ if ((unsigned char * )(obj + 1 ) - spec -> data > spec -> size ) {
50+ comp_cl_err ( drv , "ext init obj overflow, %u > %zu" ,
51+ (unsigned char * )(obj + 1 ) - spec -> data , spec -> size );
52+ return - EINVAL ;
5353 }
5454 /* Calculate would be next object position and check if current object fits */
5555 next_obj = (const struct ipc4_module_init_ext_object * )
5656 (((uint32_t * ) (obj + 1 )) + obj -> object_words );
57- if ((unsigned char * )next_obj - data > * size ) {
58- comp_err ( dev , "ext init object array overflow, %u > %zu" ,
59- (unsigned char * )obj - data , * size );
60- return NULL ;
57+ if ((unsigned char * )next_obj - spec -> data > spec -> size ) {
58+ comp_cl_err ( drv , "ext init object array overflow, %u > %zu" ,
59+ (unsigned char * )obj - spec -> data , spec -> size );
60+ return - EINVAL ;
6161 }
6262 switch (obj -> object_id ) {
6363 case IPC4_MOD_INIT_DATA_ID_DP_DATA :
@@ -67,37 +67,34 @@ module_ext_init_decode(struct comp_dev *dev, struct module_config *dst,
6767 (const struct ipc4_module_init_ext_obj_dp_data * )(obj + 1 );
6868
6969 if (obj -> object_words * sizeof (uint32_t ) < sizeof (* dp_data )) {
70- comp_warn (dev , "dp_data object too small %zu < %zu" ,
71- obj -> object_words * sizeof (uint32_t ), sizeof (* dp_data ));
70+ comp_cl_warn (drv , "dp_data object too small %zu < %zu" ,
71+ obj -> object_words * sizeof (uint32_t ),
72+ sizeof (* dp_data ));
7273 break ;
7374 }
74- dst -> domain_id = dp_data -> domain_id ;
75- dst -> stack_bytes = dp_data -> stack_bytes ;
76- dst -> interim_heap_bytes = dp_data -> interim_heap_bytes ;
77- dst -> lifetime_heap_bytes = dp_data -> interim_heap_bytes ;
78- dst -> shared_bytes = dp_data -> shared_bytes ;
79- comp_info (dev ,
80- "init_ext_obj_dp_data domain %u stack %u interim %u lifetime %u shared %u" ,
81- dp_data -> domain_id , dp_data -> stack_bytes ,
82- dp_data -> interim_heap_bytes , dp_data -> lifetime_heap_bytes ,
83- dp_data -> shared_bytes );
75+ ext_data -> dp_data = dp_data ;
76+ comp_cl_info (drv ,
77+ "init_ext_obj_dp_data domain %u stack %u interim %u lifetime %u shared %u" ,
78+ dp_data -> domain_id , dp_data -> stack_bytes ,
79+ dp_data -> interim_heap_bytes , dp_data -> lifetime_heap_bytes ,
80+ dp_data -> shared_bytes );
8481 break ;
8582 }
8683 default :
87- comp_info ( dev , "Unknown ext init object id %u of %u words" ,
88- obj -> object_id , obj -> object_words );
84+ comp_cl_info ( drv , "Unknown ext init object id %u of %u words" ,
85+ obj -> object_id , obj -> object_words );
8986 }
9087 /* Read the last object flag from obj header */
9188 last_object = obj -> last_object ;
9289 /* Move to next object */
9390 obj = next_obj ;
9491 }
9592
96- /* Remove decoded ext_init payload from the size */
97- * size -= (unsigned char * ) obj - data ;
93+ /* Remove decoded ext_init payload from spec */
94+ spec -> size -= (unsigned char * )obj - spec -> data ;
95+ spec -> data = (const unsigned char * )obj ;
9896
99- /* return remaining payload */
100- return (const struct ipc4_base_module_extended_cfg * )obj ;
97+ return 0 ;
10198}
10299
103100/*
@@ -119,10 +116,7 @@ int module_adapter_init_data(struct comp_dev *dev,
119116 size_t cfgsz = args -> size ;
120117
121118 assert (dev -> drv -> type == SOF_COMP_MODULE_ADAPTER );
122- if (config -> ipc_extended_init )
123- cfg = module_ext_init_decode (dev , dst , args -> data , & cfgsz );
124- else
125- cfg = (const struct ipc4_base_module_extended_cfg * )args -> data ;
119+ cfg = (const struct ipc4_base_module_extended_cfg * )args -> data ;
126120
127121 if (cfg == NULL )
128122 return - EINVAL ;
0 commit comments