Skip to content

Commit d9de565

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 6f79982 commit d9de565

File tree

5 files changed

+25
-10
lines changed

5 files changed

+25
-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 pipeline_params *pparams)
112113
{
113114
struct sof_ipc_stream_posn posn;
114115
struct pipeline *p;

src/include/sof/audio/pipeline.h

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

137+
/** \brief For storing IPC payload data. */
138+
struct pipeline_params {
139+
uint32_t domain_id;
140+
size_t stack_bytes;
141+
size_t lifetime_bytes;
142+
size_t interim_bytes;
143+
size_t shared_bytes;
144+
};
145+
137146
#define pipeline_task_get(t) container_of(t, struct pipeline_task, task)
138147

139148
/*
@@ -148,9 +157,11 @@ struct pipeline_task {
148157
* \param[in] pipeline_id Pipeline ID number.
149158
* \param[in] priority Pipeline scheduling priority.
150159
* \param[in] comp_id Pipeline component ID number.
160+
* \param[in] pparams Pipeline parameters from IPC payload, maybe NULL.
151161
* \return New pipeline pointer or NULL.
152162
*/
153-
struct pipeline *pipeline_new(uint32_t pipeline_id, uint32_t priority, uint32_t comp_id);
163+
struct pipeline *pipeline_new(uint32_t pipeline_id, uint32_t priority, uint32_t comp_id,
164+
struct pipeline_params *pparams);
154165

155166
/**
156167
* \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: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ 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, struct pipeline_params *pparams)
237237
{
238238
const struct ipc4_pipeline_ext_payload *hdr =
239239
(struct ipc4_pipeline_ext_payload *)data;
@@ -313,7 +313,8 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
313313
return 0;
314314
}
315315

316-
__cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc)
316+
__cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc,
317+
struct pipeline_params *pparams)
317318
{
318319
struct ipc_comp_dev *ipc_pipe;
319320
struct pipeline *pipe;
@@ -330,7 +331,8 @@ __cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc)
330331
}
331332

332333
/* create the pipeline */
333-
pipe = pipeline_new(pipe_desc->primary.r.instance_id, pipe_desc->primary.r.ppl_priority, 0);
334+
pipe = pipeline_new(pipe_desc->primary.r.instance_id, pipe_desc->primary.r.ppl_priority, 0,
335+
pparams);
334336
if (!pipe) {
335337
tr_err(&ipc_tr, "ipc: pipeline_new() failed");
336338
return IPC4_OUT_OF_MEMORY;
@@ -385,7 +387,7 @@ __cold static inline char *ipc4_get_pipe_create_data(void)
385387
__cold int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *_pipe_desc)
386388
{
387389
struct ipc4_pipeline_create *pipe_desc = ipc_from_pipe_new(_pipe_desc);
388-
390+
struct pipeline_params pparams;
389391
assert_can_be_cold();
390392

391393
tr_dbg(&ipc_tr, "ipc: pipeline id = %u", (uint32_t)pipe_desc->primary.r.instance_id);
@@ -399,10 +401,10 @@ __cold int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *_pipe_desc)
399401

400402
data = ipc4_get_pipe_create_data();
401403

402-
ipc4_create_pipeline_payload_decode(data);
404+
ipc4_create_pipeline_payload_decode(data, &pparams);
403405
}
404406

405-
return ipc4_create_pipeline(pipe_desc);
407+
return ipc4_create_pipeline(pipe_desc, &pparams);
406408
}
407409

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