@@ -233,7 +233,8 @@ struct ipc_comp_dev *ipc_get_comp_by_ppl_id(struct ipc *ipc, uint16_t type,
233233 * This function currently only decodes the payload and prints out
234234 * data it finds, but it does not store it anywhere.
235235 */
236- __cold static int ipc4_create_pipeline_payload_decode (char * data )
236+ __cold static int ipc4_create_pipeline_payload_decode (char * data ,
237+ struct create_pipeline_params * pparams )
237238{
238239 const struct ipc4_pipeline_ext_payload * hdr =
239240 (struct ipc4_pipeline_ext_payload * )data ;
@@ -301,6 +302,7 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
301302 obj -> object_words * sizeof (uint32_t ), sizeof (* mem_data ));
302303 break ;
303304 }
305+ pparams -> mem_data = mem_data ;
304306 tr_info (& ipc_tr ,
305307 "init_ext_obj_mem_data domain %u stack %u interim %u lifetime %u shared %u" ,
306308 mem_data -> domain_id , mem_data -> stack_bytes ,
@@ -321,7 +323,8 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
321323 return 0 ;
322324}
323325
324- __cold static int ipc4_create_pipeline (struct ipc4_pipeline_create * pipe_desc )
326+ __cold static int ipc4_create_pipeline (struct ipc4_pipeline_create * pipe_desc ,
327+ struct create_pipeline_params * pparams )
325328{
326329 struct ipc_comp_dev * ipc_pipe ;
327330 struct pipeline * pipe ;
@@ -338,7 +341,8 @@ __cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc)
338341 }
339342
340343 /* create the pipeline */
341- pipe = pipeline_new (pipe_desc -> primary .r .instance_id , pipe_desc -> primary .r .ppl_priority , 0 );
344+ pipe = pipeline_new (pipe_desc -> primary .r .instance_id , pipe_desc -> primary .r .ppl_priority , 0 ,
345+ pparams );
342346 if (!pipe ) {
343347 tr_err (& ipc_tr , "ipc: pipeline_new() failed" );
344348 return IPC4_OUT_OF_MEMORY ;
@@ -393,7 +397,8 @@ __cold static inline char *ipc4_get_pipe_create_data(void)
393397__cold int ipc_pipeline_new (struct ipc * ipc , ipc_pipe_new * _pipe_desc )
394398{
395399 struct ipc4_pipeline_create * pipe_desc = ipc_from_pipe_new (_pipe_desc );
396-
400+ struct create_pipeline_params pparams = { 0 };
401+ bool valid_pparams = false;
397402 assert_can_be_cold ();
398403
399404 tr_dbg (& ipc_tr , "ipc: pipeline id = %u" , (uint32_t )pipe_desc -> primary .r .instance_id );
@@ -404,13 +409,16 @@ __cold int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *_pipe_desc)
404409
405410 if (pipe_desc -> extension .r .payload ) {
406411 char * data ;
412+ int ret ;
407413
408414 data = ipc4_get_pipe_create_data ();
409415
410- ipc4_create_pipeline_payload_decode (data );
416+ ret = ipc4_create_pipeline_payload_decode (data , & pparams );
417+ if (ret == 0 )
418+ valid_pparams = true;
411419 }
412420
413- return ipc4_create_pipeline (pipe_desc );
421+ return ipc4_create_pipeline (pipe_desc , valid_pparams ? & pparams : NULL );
414422}
415423
416424__cold static inline int ipc_comp_free_remote (struct comp_dev * dev )
0 commit comments