On 2/7/22 06:20, Cezary Rojewski wrote:
A 'Pipeline' represents both a container of module instances, and a scheduling entity. Multiple pipelines can be bound together to create an audio graph. The Pipeline state machine is entirely controlled by IPCs (creation, deletion and state changes).
How are the module instances connected within a pipeline? You've said too much or too little here.
+int avs_ipc_create_pipeline(struct avs_dev *adev, u16 req_size, u8 priority,
u8 instance_id, bool lp, u16 attributes)
+{
- union avs_global_msg msg = AVS_GLOBAL_REQUEST(CREATE_PIPELINE);
- struct avs_ipc_msg request = {0};
- int ret;
- msg.create_ppl.ppl_mem_size = req_size;
- msg.create_ppl.ppl_priority = priority;
- msg.create_ppl.instance_id = instance_id;
- msg.ext.create_ppl.lp = lp;
you may want to describe what the concepts of 'priority', 'lp' and 'attributes' are and which entity defines the values (topology?)
- msg.ext.create_ppl.attributes = attributes;
- request.header = msg.val;
- ret = avs_dsp_send_msg(adev, &request, NULL);
- if (ret)
avs_ipc_err(adev, &request, "create pipeline", ret);
- return ret;
+}
u32 val;
/* pipeline management */
struct {
u32 lp:1;
u32 rsvd:3;
u32 attributes:16;
} create_ppl;
struct {
u32 multi_ppl:1;
u32 sync_stop_start:1;
these two are not described at all?
} ext; };} set_ppl_state;
} __packed;
+/* Pipeline management messages */ +enum avs_pipeline_state {
- AVS_PPL_STATE_INVALID,
- AVS_PPL_STATE_UNINITIALIZED,
- AVS_PPL_STATE_RESET,
- AVS_PPL_STATE_PAUSED,
- AVS_PPL_STATE_RUNNING,
- AVS_PPL_STATE_EOS,
- AVS_PPL_STATE_ERROR_STOP,
- AVS_PPL_STATE_SAVED,
- AVS_PPL_STATE_RESTORED,
can you describe that the last two enums might entail and what the purpose might be?
I can see how the firmware state could be saved in IMR for faster suspend/resume, but save/restore at the pipeline level doesn't seem to have an obvious match for an ASoC driver?