@@ -237,7 +237,8 @@ struct ipc_comp_dev *ipc_get_comp_by_ppl_id(struct ipc *ipc, uint16_t type,
237237 * This function currently only decodes the payload and prints out
238238 * data it finds, but it does not store it anywhere.
239239 */
240- __cold static int ipc4_create_pipeline_payload_decode (char * data )
240+ __cold static int ipc4_create_pipeline_payload_decode (char * data ,
241+ struct create_pipeline_params * pparams )
241242{
242243 const struct ipc4_pipeline_ext_payload * hdr =
243244 (struct ipc4_pipeline_ext_payload * )data ;
@@ -305,6 +306,7 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
305306 obj -> object_words * sizeof (uint32_t ), sizeof (* mem_data ));
306307 break ;
307308 }
309+ pparams -> mem_data = mem_data ;
308310 tr_info (& ipc_tr ,
309311 "init_ext_obj_mem_data domain %u stack %u interim %u lifetime %u shared %u" ,
310312 mem_data -> domain_id , mem_data -> stack_bytes ,
@@ -325,7 +327,8 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
325327 return 0 ;
326328}
327329
328- __cold static int ipc4_create_pipeline (struct ipc4_pipeline_create * pipe_desc )
330+ __cold static int ipc4_create_pipeline (struct ipc4_pipeline_create * pipe_desc ,
331+ struct create_pipeline_params * pparams )
329332{
330333 struct ipc_comp_dev * ipc_pipe ;
331334 struct pipeline * pipe ;
@@ -342,7 +345,8 @@ __cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc)
342345 }
343346
344347 /* create the pipeline */
345- pipe = pipeline_new (pipe_desc -> primary .r .instance_id , pipe_desc -> primary .r .ppl_priority , 0 );
348+ pipe = pipeline_new (pipe_desc -> primary .r .instance_id , pipe_desc -> primary .r .ppl_priority , 0 ,
349+ pparams );
346350 if (!pipe ) {
347351 tr_err (& ipc_tr , "ipc: pipeline_new() failed" );
348352 return IPC4_OUT_OF_MEMORY ;
@@ -397,7 +401,8 @@ __cold static inline char *ipc4_get_pipe_create_data(void)
397401__cold int ipc_pipeline_new (struct ipc * ipc , ipc_pipe_new * _pipe_desc )
398402{
399403 struct ipc4_pipeline_create * pipe_desc = ipc_from_pipe_new (_pipe_desc );
400-
404+ struct create_pipeline_params pparams = { 0 };
405+ bool valid_pparams = false;
401406 assert_can_be_cold ();
402407
403408 tr_dbg (& ipc_tr , "ipc: pipeline id = %u" , (uint32_t )pipe_desc -> primary .r .instance_id );
@@ -408,13 +413,16 @@ __cold int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *_pipe_desc)
408413
409414 if (pipe_desc -> extension .r .payload ) {
410415 char * data ;
416+ int ret ;
411417
412418 data = ipc4_get_pipe_create_data ();
413419
414- ipc4_create_pipeline_payload_decode (data );
420+ ret = ipc4_create_pipeline_payload_decode (data , & pparams );
421+ if (ret == 0 )
422+ valid_pparams = true;
415423 }
416424
417- return ipc4_create_pipeline (pipe_desc );
425+ return ipc4_create_pipeline (pipe_desc , valid_pparams ? & pparams : NULL );
418426}
419427
420428__cold static inline int ipc_comp_free_remote (struct comp_dev * dev )
0 commit comments