@@ -234,7 +234,8 @@ struct ipc_comp_dev *ipc_get_comp_by_ppl_id(struct ipc *ipc, uint16_t type,
234234 * This function currently only decodes the payload and prints out
235235 * data it finds, but it does not store it anywhere.
236236 */
237- __cold static int ipc4_create_pipeline_payload_decode (char * data )
237+ __cold static int ipc4_create_pipeline_payload_decode (char * data ,
238+ struct create_pipeline_params * pparams )
238239{
239240 const struct ipc4_pipeline_ext_payload * hdr =
240241 (struct ipc4_pipeline_ext_payload * )data ;
@@ -302,6 +303,7 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
302303 obj -> object_words * sizeof (uint32_t ), sizeof (* mem_data ));
303304 break ;
304305 }
306+ pparams -> mem_data = mem_data ;
305307 tr_info (& ipc_tr ,
306308 "init_ext_obj_mem_data domain %u stack %u interim %u lifetime %u shared %u" ,
307309 mem_data -> domain_id , mem_data -> stack_bytes ,
@@ -322,7 +324,8 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
322324 return 0 ;
323325}
324326
325- __cold static int ipc4_create_pipeline (struct ipc4_pipeline_create * pipe_desc )
327+ __cold static int ipc4_create_pipeline (struct ipc4_pipeline_create * pipe_desc ,
328+ struct create_pipeline_params * pparams )
326329{
327330 struct ipc_comp_dev * ipc_pipe ;
328331 struct pipeline * pipe ;
@@ -339,7 +342,8 @@ __cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc)
339342 }
340343
341344 /* create the pipeline */
342- pipe = pipeline_new (pipe_desc -> primary .r .instance_id , pipe_desc -> primary .r .ppl_priority , 0 );
345+ pipe = pipeline_new (pipe_desc -> primary .r .instance_id , pipe_desc -> primary .r .ppl_priority , 0 ,
346+ pparams );
343347 if (!pipe ) {
344348 tr_err (& ipc_tr , "ipc: pipeline_new() failed" );
345349 return IPC4_OUT_OF_MEMORY ;
@@ -394,7 +398,8 @@ __cold static inline char *ipc4_get_pipe_create_data(void)
394398__cold int ipc_pipeline_new (struct ipc * ipc , ipc_pipe_new * _pipe_desc )
395399{
396400 struct ipc4_pipeline_create * pipe_desc = ipc_from_pipe_new (_pipe_desc );
397-
401+ struct create_pipeline_params pparams = { 0 };
402+ bool valid_pparams = false;
398403 assert_can_be_cold ();
399404
400405 tr_dbg (& ipc_tr , "ipc: pipeline id = %u" , (uint32_t )pipe_desc -> primary .r .instance_id );
@@ -405,13 +410,16 @@ __cold int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *_pipe_desc)
405410
406411 if (pipe_desc -> extension .r .payload ) {
407412 char * data ;
413+ int ret ;
408414
409415 data = ipc4_get_pipe_create_data ();
410416
411- ipc4_create_pipeline_payload_decode (data );
417+ ret = ipc4_create_pipeline_payload_decode (data , & pparams );
418+ if (ret == 0 )
419+ valid_pparams = true;
412420 }
413421
414- return ipc4_create_pipeline (pipe_desc );
422+ return ipc4_create_pipeline (pipe_desc , valid_pparams ? & pparams : NULL );
415423}
416424
417425__cold static inline int ipc_comp_free_remote (struct comp_dev * dev )
0 commit comments