Skip to content

Commit 4d8a457

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 c9db7f3 commit 4d8a457

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;
@@ -314,7 +314,8 @@ __cold static int ipc4_create_pipeline_payload_decode(char *data)
314314
return 0;
315315
}
316316

317-
__cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc)
317+
__cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc,
318+
struct pipeline_params *pparams)
318319
{
319320
struct ipc_comp_dev *ipc_pipe;
320321
struct pipeline *pipe;
@@ -331,7 +332,8 @@ __cold static int ipc4_create_pipeline(struct ipc4_pipeline_create *pipe_desc)
331332
}
332333

333334
/* create the pipeline */
334-
pipe = pipeline_new(pipe_desc->primary.r.instance_id, pipe_desc->primary.r.ppl_priority, 0);
335+
pipe = pipeline_new(pipe_desc->primary.r.instance_id, pipe_desc->primary.r.ppl_priority, 0,
336+
pparams);
335337
if (!pipe) {
336338
tr_err(&ipc_tr, "ipc: pipeline_new() failed");
337339
return IPC4_OUT_OF_MEMORY;
@@ -386,7 +388,7 @@ __cold static inline char *ipc4_get_pipe_create_data(void)
386388
__cold int ipc_pipeline_new(struct ipc *ipc, ipc_pipe_new *_pipe_desc)
387389
{
388390
struct ipc4_pipeline_create *pipe_desc = ipc_from_pipe_new(_pipe_desc);
389-
391+
struct pipeline_params pparams;
390392
assert_can_be_cold();
391393

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

401403
data = ipc4_get_pipe_create_data();
402404

403-
ipc4_create_pipeline_payload_decode(data);
405+
ipc4_create_pipeline_payload_decode(data, &pparams);
404406
}
405407

406-
return ipc4_create_pipeline(pipe_desc);
408+
return ipc4_create_pipeline(pipe_desc, &pparams);
407409
}
408410

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