Skip to content

Commit 43c6bd0

Browse files
author
Jyri Sarha
committed
pipeline: Pass create pipeline payload parameters down to pipeline_new()
Pass create pipeline payload parameters down to pipeline_new() by using struct pipeline_params. That is the place where the data will be used. Signed-off-by: Jyri Sarha <jyri.sarha@linux.intel.com>
1 parent c9ee307 commit 43c6bd0

5 files changed

Lines changed: 29 additions & 10 deletions

File tree

src/audio/pipeline/pipeline-graph.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,8 @@ void pipeline_posn_init(struct sof *sof)
108108
}
109109

110110
/* create new pipeline - returns pipeline id or negative error */
111-
struct pipeline *pipeline_new(uint32_t pipeline_id, uint32_t priority, uint32_t comp_id)
111+
struct pipeline *pipeline_new(uint32_t pipeline_id, uint32_t priority, uint32_t comp_id,
112+
struct create_pipeline_params *pparams)
112113
{
113114
struct sof_ipc_stream_posn posn;
114115
struct pipeline *p;

src/include/sof/audio/pipeline.h

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,13 @@ struct pipeline_task {
134134
struct comp_dev *sched_comp; /**< pipeline scheduling component */
135135
};
136136

137+
struct ipc4_pipeline_ext_obj_mem_data;
138+
139+
/** \brief For storing IPC payload data. */
140+
struct create_pipeline_params {
141+
const struct ipc4_pipeline_ext_obj_mem_data *mem_data;
142+
};
143+
137144
#define pipeline_task_get(t) container_of(t, struct pipeline_task, task)
138145

139146
/*
@@ -148,9 +155,11 @@ struct pipeline_task {
148155
* \param[in] pipeline_id Pipeline ID number.
149156
* \param[in] priority Pipeline scheduling priority.
150157
* \param[in] comp_id Pipeline component ID number.
158+
* \param[in] pparams Pipeline parameters from IPC payload, maybe NULL.
151159
* \return New pipeline pointer or NULL.
152160
*/
153-
struct pipeline *pipeline_new(uint32_t pipeline_id, uint32_t priority, uint32_t comp_id);
161+
struct pipeline *pipeline_new(uint32_t pipeline_id, uint32_t priority, uint32_t comp_id,
162+
struct create_pipeline_params *pparams);
154163

155164
/**
156165
* \brief Free's a pipeline.

src/ipc/ipc3/helper.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *_pipe_desc)
396396

397397
/* create the pipeline */
398398
pipe = pipeline_new(pipe_desc->pipeline_id, pipe_desc->priority,
399-
pipe_desc->comp_id);
399+
pipe_desc->comp_id, NULL);
400400
if (!pipe) {
401401
tr_err(&ipc_tr, "pipeline_new() failed");
402402
return -ENOMEM;

src/ipc/ipc4/helper.c

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,8 @@ struct ipc_comp_dev *ipc_get_comp_by_ppl_id(struct ipc *ipc, uint16_t type,
241241
* This function currently only decodes the payload and prints out
242242
* data it finds, but it does not store it anywhere.
243243
*/
244-
__cold static int ipc4_create_pipeline_payload_decode(char *data)
244+
__cold static int ipc4_create_pipeline_payload_decode(char *data,
245+
struct create_pipeline_params *pparams)
245246
{
246247
const struct ipc4_pipeline_ext_payload *hdr =
247248
(struct ipc4_pipeline_ext_payload *)data;
@@ -312,6 +313,7 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
312313
obj->object_words * sizeof(uint32_t), sizeof(*mem_data));
313314
break;
314315
}
316+
pparams->mem_data = mem_data;
315317
tr_info(&ipc_tr,
316318
"init_ext_obj_mem_data domain %u stack %u interim %u lifetime %u shared %u",
317319
mem_data->domain_id, mem_data->stack_bytes,
@@ -332,7 +334,8 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
332334
return 0;
333335
}
334336

335-
__cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc)
337+
__cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc,
338+
struct create_pipeline_params *pparams)
336339
{
337340
struct ipc_comp_dev *ipc_pipe;
338341
struct pipeline *pipe;
@@ -349,7 +352,8 @@ __cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc)
349352
}
350353

351354
/* create the pipeline */
352-
pipe = pipeline_new(pipe_desc->primary.r.instance_id, pipe_desc->primary.r.ppl_priority, 0);
355+
pipe = pipeline_new(pipe_desc->primary.r.instance_id, pipe_desc->primary.r.ppl_priority, 0,
356+
pparams);
353357
if (!pipe) {
354358
tr_err(&ipc_tr, "ipc: pipeline_new() failed");
355359
return IPC4_OUT_OF_MEMORY;
@@ -404,7 +408,8 @@ __cold static inline char *ipc4_get_pipe_create_data(void)
404408
__cold int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *_pipe_desc)
405409
{
406410
struct ipc4_pipeline_create *pipe_desc = ipc_from_pipe_new(_pipe_desc);
407-
411+
struct create_pipeline_params pparams = { 0 };
412+
bool valid_pparams = false;
408413
assert_can_be_cold();
409414

410415
tr_dbg(&ipc_tr, "ipc: pipeline id = %u", (uint32_t)pipe_desc->primary.r.instance_id);
@@ -415,13 +420,16 @@ __cold int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *_pipe_desc)
415420

416421
if (pipe_desc->extension.r.payload) {
417422
char *data;
423+
int ret;
418424

419425
data = ipc4_get_pipe_create_data();
420426

421-
ipc4_create_pipeline_payload_decode(data);
427+
ret = ipc4_create_pipeline_payload_decode(data, &pparams);
428+
if (ret == 0)
429+
valid_pparams = true;
422430
}
423431

424-
return ipc4_create_pipeline(pipe_desc);
432+
return ipc4_create_pipeline(pipe_desc, valid_pparams ? &pparams : NULL);
425433
}
426434

427435
__cold static inline int ipc_comp_free_remote(struct comp_dev *dev)

test/cmocka/src/audio/pipeline/pipeline_new.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ static void test_audio_pipeline_pipeline_new_creation(void **state)
5151
/*Testing component*/
5252
struct pipeline *result = pipeline_new(test_data->pipe_id,
5353
test_data->priority,
54-
test_data->comp_id);
54+
test_data->comp_id,
55+
NULL);
5556

5657
/*Pipeline should have been created so pointer can't be null*/
5758
assert_non_null(result);

0 commit comments

Comments
 (0)