162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright(c) 2021 Intel Corporation. All rights reserved. 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Authors: Cezary Rojewski <cezary.rojewski@intel.com> 662306a36Sopenharmony_ci * Amadeusz Slawinski <amadeuszx.slawinski@linux.intel.com> 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef __SOUND_SOC_INTEL_AVS_PATH_H 1062306a36Sopenharmony_ci#define __SOUND_SOC_INTEL_AVS_PATH_H 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/list.h> 1362306a36Sopenharmony_ci#include "avs.h" 1462306a36Sopenharmony_ci#include "topology.h" 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cistruct avs_path { 1762306a36Sopenharmony_ci u32 dma_id; 1862306a36Sopenharmony_ci struct list_head ppl_list; 1962306a36Sopenharmony_ci u32 state; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci struct avs_tplg_path *template; 2262306a36Sopenharmony_ci struct avs_dev *owner; 2362306a36Sopenharmony_ci /* device path management */ 2462306a36Sopenharmony_ci struct list_head node; 2562306a36Sopenharmony_ci}; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cistruct avs_path_pipeline { 2862306a36Sopenharmony_ci u8 instance_id; 2962306a36Sopenharmony_ci struct list_head mod_list; 3062306a36Sopenharmony_ci struct list_head binding_list; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci struct avs_tplg_pipeline *template; 3362306a36Sopenharmony_ci struct avs_path *owner; 3462306a36Sopenharmony_ci /* path pipelines management */ 3562306a36Sopenharmony_ci struct list_head node; 3662306a36Sopenharmony_ci}; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_cistruct avs_path_module { 3962306a36Sopenharmony_ci u16 module_id; 4062306a36Sopenharmony_ci u8 instance_id; 4162306a36Sopenharmony_ci union avs_gtw_attributes gtw_attrs; 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci struct avs_tplg_module *template; 4462306a36Sopenharmony_ci struct avs_path_pipeline *owner; 4562306a36Sopenharmony_ci /* pipeline modules management */ 4662306a36Sopenharmony_ci struct list_head node; 4762306a36Sopenharmony_ci}; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_cistruct avs_path_binding { 5062306a36Sopenharmony_ci struct avs_path_module *source; 5162306a36Sopenharmony_ci u8 source_pin; 5262306a36Sopenharmony_ci struct avs_path_module *sink; 5362306a36Sopenharmony_ci u8 sink_pin; 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci struct avs_tplg_binding *template; 5662306a36Sopenharmony_ci struct avs_path_pipeline *owner; 5762306a36Sopenharmony_ci /* pipeline bindings management */ 5862306a36Sopenharmony_ci struct list_head node; 5962306a36Sopenharmony_ci}; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_civoid avs_path_free(struct avs_path *path); 6262306a36Sopenharmony_cistruct avs_path *avs_path_create(struct avs_dev *adev, u32 dma_id, 6362306a36Sopenharmony_ci struct avs_tplg_path_template *template, 6462306a36Sopenharmony_ci struct snd_pcm_hw_params *fe_params, 6562306a36Sopenharmony_ci struct snd_pcm_hw_params *be_params); 6662306a36Sopenharmony_ciint avs_path_bind(struct avs_path *path); 6762306a36Sopenharmony_ciint avs_path_unbind(struct avs_path *path); 6862306a36Sopenharmony_ciint avs_path_reset(struct avs_path *path); 6962306a36Sopenharmony_ciint avs_path_pause(struct avs_path *path); 7062306a36Sopenharmony_ciint avs_path_run(struct avs_path *path, int trigger); 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci#endif 73