Skip to content

Commit ee95dc8

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 436647d commit ee95dc8

File tree

5 files changed

+29
-10
lines changed

5 files changed

+29
-10
lines changed

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
@@ -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;
@@ -295,6 +296,7 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
295296
obj->object_words * sizeof(uint32_t), sizeof(*mem_data));
296297
break;
297298
}
299+
pparams->mem_data = mem_data;
298300
tr_info(&ipc_tr,
299301
"init_ext_obj_mem_data domain %u stack %u interim %u lifetime %u shared %u",
300302
mem_data->domain_id, mem_data->stack_bytes,
@@ -315,7 +317,8 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
315317
return 0;
316318
}
317319

318-
__cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc)
320+
__cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc,
321+
struct create_pipeline_params *pparams)
319322
{
320323
struct ipc_comp_dev *ipc_pipe;
321324
struct pipeline *pipe;
@@ -332,7 +335,8 @@ __cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc)
332335
}
333336

334337
/* create the pipeline */
335-
pipe = pipeline_new(pipe_desc->primary.r.instance_id, pipe_desc->primary.r.ppl_priority, 0);
338+
pipe = pipeline_new(pipe_desc->primary.r.instance_id, pipe_desc->primary.r.ppl_priority, 0,
339+
pparams);
336340
if (!pipe) {
337341
tr_err(&ipc_tr, "ipc: pipeline_new() failed");
338342
return IPC4_OUT_OF_MEMORY;
@@ -387,7 +391,8 @@ __cold static inline char *ipc4_get_pipe_create_data(void)
387391
__cold int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *_pipe_desc)
388392
{
389393
struct ipc4_pipeline_create *pipe_desc = ipc_from_pipe_new(_pipe_desc);
390-
394+
struct create_pipeline_params pparams = { 0 };
395+
bool valid_pparams = false;
391396
assert_can_be_cold();
392397

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

399404
if (pipe_desc->extension.r.payload) {
400405
char *data;
406+
int ret;
401407

402408
data = ipc4_get_pipe_create_data();
403409

404-
ipc4_create_pipeline_payload_decode(data);
410+
ret = ipc4_create_pipeline_payload_decode(data, &pparams);
411+
if (ret == 0)
412+
valid_pparams = true;
405413
}
406414

407-
return ipc4_create_pipeline(pipe_desc);
415+
return ipc4_create_pipeline(pipe_desc, valid_pparams ? &pparams : NULL);
408416
}
409417

410418
__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)