Skip to content

Commit 29f550e

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 c0959e6 commit 29f550e

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
@@ -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)

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)