198 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			198 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0-only */
 | |
| /*
 | |
|  * Copyright(c) 2021 Intel Corporation. All rights reserved.
 | |
|  *
 | |
|  * Authors: Cezary Rojewski <cezary.rojewski@intel.com>
 | |
|  *          Amadeusz Slawinski <amadeuszx.slawinski@linux.intel.com>
 | |
|  */
 | |
| 
 | |
| #ifndef __SOUND_SOC_INTEL_AVS_TPLG_H
 | |
| #define __SOUND_SOC_INTEL_AVS_TPLG_H
 | |
| 
 | |
| #include <linux/list.h>
 | |
| #include "messages.h"
 | |
| 
 | |
| #define INVALID_OBJECT_ID	UINT_MAX
 | |
| 
 | |
| struct snd_soc_component;
 | |
| 
 | |
| struct avs_tplg {
 | |
| 	char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
 | |
| 	u32 version;
 | |
| 	struct snd_soc_component *comp;
 | |
| 
 | |
| 	struct avs_tplg_library *libs;
 | |
| 	u32 num_libs;
 | |
| 	struct avs_audio_format *fmts;
 | |
| 	u32 num_fmts;
 | |
| 	struct avs_tplg_modcfg_base *modcfgs_base;
 | |
| 	u32 num_modcfgs_base;
 | |
| 	struct avs_tplg_modcfg_ext *modcfgs_ext;
 | |
| 	u32 num_modcfgs_ext;
 | |
| 	struct avs_tplg_pplcfg *pplcfgs;
 | |
| 	u32 num_pplcfgs;
 | |
| 	struct avs_tplg_binding *bindings;
 | |
| 	u32 num_bindings;
 | |
| 
 | |
| 	struct list_head path_tmpl_list;
 | |
| };
 | |
| 
 | |
| struct avs_tplg_library {
 | |
| 	char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
 | |
| };
 | |
| 
 | |
| /* Matches header of struct avs_mod_cfg_base. */
 | |
| struct avs_tplg_modcfg_base {
 | |
| 	u32 cpc;
 | |
| 	u32 ibs;
 | |
| 	u32 obs;
 | |
| 	u32 is_pages;
 | |
| };
 | |
| 
 | |
| struct avs_tplg_pin_format {
 | |
| 	u32 pin_index;
 | |
| 	u32 iobs;
 | |
| 	struct avs_audio_format *fmt;
 | |
| };
 | |
| 
 | |
| struct avs_tplg_modcfg_ext {
 | |
| 	guid_t type;
 | |
| 
 | |
| 	union {
 | |
| 		struct {
 | |
| 			u16 num_input_pins;
 | |
| 			u16 num_output_pins;
 | |
| 			struct avs_tplg_pin_format *pin_fmts;
 | |
| 		} generic;
 | |
| 		struct {
 | |
| 			struct avs_audio_format *out_fmt;
 | |
| 			struct avs_audio_format *blob_fmt; /* optional override */
 | |
| 			u32 feature_mask;
 | |
| 			union avs_virtual_index vindex;
 | |
| 			u32 dma_type;
 | |
| 			u32 dma_buffer_size;
 | |
| 			u32 config_length;
 | |
| 			/* config_data part of priv data */
 | |
| 		} copier;
 | |
| 		struct {
 | |
| 			u32 out_channel_config;
 | |
| 			u32 coefficients_select;
 | |
| 			s32 coefficients[AVS_CHANNELS_MAX];
 | |
| 			u32 channel_map;
 | |
| 		} updown_mix;
 | |
| 		struct {
 | |
| 			u32 out_freq;
 | |
| 		} src;
 | |
| 		struct {
 | |
| 			u32 out_freq;
 | |
| 			u8 mode;
 | |
| 			u8 disable_jitter_buffer;
 | |
| 		} asrc;
 | |
| 		struct {
 | |
| 			u32 cpc_lp_mode;
 | |
| 		} wov;
 | |
| 		struct {
 | |
| 			struct avs_audio_format *ref_fmt;
 | |
| 			struct avs_audio_format *out_fmt;
 | |
| 			u32 cpc_lp_mode;
 | |
| 		} aec;
 | |
| 		struct {
 | |
| 			struct avs_audio_format *ref_fmt;
 | |
| 			struct avs_audio_format *out_fmt;
 | |
| 		} mux;
 | |
| 		struct {
 | |
| 			struct avs_audio_format *out_fmt;
 | |
| 		} micsel;
 | |
| 	};
 | |
| };
 | |
| 
 | |
| /* Specifies path behaviour during PCM ->trigger(START) command. */
 | |
| enum avs_tplg_trigger {
 | |
| 	AVS_TPLG_TRIGGER_AUTO = 0,
 | |
| };
 | |
| 
 | |
| struct avs_tplg_pplcfg {
 | |
| 	u16 req_size;
 | |
| 	u8 priority;
 | |
| 	bool lp;
 | |
| 	u16 attributes;
 | |
| 	enum avs_tplg_trigger trigger;
 | |
| };
 | |
| 
 | |
| struct avs_tplg_binding {
 | |
| 	char target_tplg_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
 | |
| 	u32 target_path_tmpl_id;
 | |
| 	u32 target_ppl_id;
 | |
| 	u32 target_mod_id;
 | |
| 	u8 target_mod_pin;
 | |
| 	u32 mod_id;
 | |
| 	u8 mod_pin;
 | |
| 	u8 is_sink;
 | |
| };
 | |
| 
 | |
| struct avs_tplg_path_template_id {
 | |
| 	u32 id;
 | |
| 	char tplg_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
 | |
| };
 | |
| 
 | |
| struct avs_tplg_path_template {
 | |
| 	u32 id;
 | |
| 
 | |
| 	struct snd_soc_dapm_widget *w;
 | |
| 
 | |
| 	struct list_head path_list;
 | |
| 
 | |
| 	struct avs_tplg *owner;
 | |
| 	/* Driver path templates management. */
 | |
| 	struct list_head node;
 | |
| };
 | |
| 
 | |
| struct avs_tplg_path {
 | |
| 	u32 id;
 | |
| 
 | |
| 	/* Path format requirements. */
 | |
| 	struct avs_audio_format *fe_fmt;
 | |
| 	struct avs_audio_format *be_fmt;
 | |
| 
 | |
| 	struct list_head ppl_list;
 | |
| 
 | |
| 	struct avs_tplg_path_template *owner;
 | |
| 	/* Path template path-variants management. */
 | |
| 	struct list_head node;
 | |
| };
 | |
| 
 | |
| struct avs_tplg_pipeline {
 | |
| 	u32 id;
 | |
| 
 | |
| 	struct avs_tplg_pplcfg *cfg;
 | |
| 	struct avs_tplg_binding **bindings;
 | |
| 	u32 num_bindings;
 | |
| 	struct list_head mod_list;
 | |
| 
 | |
| 	struct avs_tplg_path *owner;
 | |
| 	/* Path pipelines management. */
 | |
| 	struct list_head node;
 | |
| };
 | |
| 
 | |
| struct avs_tplg_module {
 | |
| 	u32 id;
 | |
| 
 | |
| 	struct avs_tplg_modcfg_base *cfg_base;
 | |
| 	struct avs_audio_format *in_fmt;
 | |
| 	u8 core_id;
 | |
| 	u8 domain;
 | |
| 	struct avs_tplg_modcfg_ext *cfg_ext;
 | |
| 	u32 ctl_id;
 | |
| 
 | |
| 	struct avs_tplg_pipeline *owner;
 | |
| 	/* Pipeline modules management. */
 | |
| 	struct list_head node;
 | |
| };
 | |
| 
 | |
| struct avs_tplg *avs_tplg_new(struct snd_soc_component *comp);
 | |
| 
 | |
| int avs_load_topology(struct snd_soc_component *comp, const char *filename);
 | |
| int avs_remove_topology(struct snd_soc_component *comp);
 | |
| 
 | |
| #endif
 |