Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/soc/intel/avs/topology.h
53570 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* Copyright(c) 2021 Intel Corporation
4
*
5
* Authors: Cezary Rojewski <[email protected]>
6
* Amadeusz Slawinski <[email protected]>
7
*/
8
9
#ifndef __SOUND_SOC_INTEL_AVS_TPLG_H
10
#define __SOUND_SOC_INTEL_AVS_TPLG_H
11
12
#include <linux/list.h>
13
#include "messages.h"
14
15
#define INVALID_OBJECT_ID UINT_MAX
16
17
struct snd_soc_component;
18
19
struct avs_tplg {
20
char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
21
u32 version;
22
struct snd_soc_component *comp;
23
24
struct avs_tplg_library *libs;
25
u32 num_libs;
26
struct avs_audio_format *fmts;
27
u32 num_fmts;
28
struct avs_tplg_modcfg_base *modcfgs_base;
29
u32 num_modcfgs_base;
30
struct avs_tplg_modcfg_ext *modcfgs_ext;
31
u32 num_modcfgs_ext;
32
struct avs_tplg_pplcfg *pplcfgs;
33
u32 num_pplcfgs;
34
struct avs_tplg_binding *bindings;
35
u32 num_bindings;
36
struct avs_tplg_path_template *condpath_tmpls;
37
u32 num_condpath_tmpls;
38
struct avs_tplg_init_config *init_configs;
39
u32 num_init_configs;
40
struct avs_tplg_nhlt_config *nhlt_configs;
41
u32 num_nhlt_configs;
42
43
struct list_head path_tmpl_list;
44
};
45
46
struct avs_tplg_library {
47
char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
48
};
49
50
/* Matches header of struct avs_mod_cfg_base. */
51
struct avs_tplg_modcfg_base {
52
u32 cpc;
53
u32 ibs;
54
u32 obs;
55
u32 is_pages;
56
};
57
58
struct avs_tplg_pin_format {
59
u32 pin_index;
60
u32 iobs;
61
struct avs_audio_format *fmt;
62
};
63
64
struct avs_tplg_modcfg_ext {
65
guid_t type;
66
67
union {
68
struct {
69
u16 num_input_pins;
70
u16 num_output_pins;
71
struct avs_tplg_pin_format *pin_fmts;
72
} generic;
73
struct {
74
struct avs_audio_format *out_fmt;
75
struct avs_audio_format *blob_fmt; /* optional override */
76
u32 feature_mask;
77
union avs_virtual_index vindex;
78
u32 dma_type;
79
u32 dma_buffer_size;
80
} copier;
81
struct {
82
struct avs_audio_format *ref_fmt;
83
struct avs_audio_format *out_fmt;
84
u32 wake_tick_period;
85
union avs_virtual_index vindex;
86
u32 dma_type;
87
u32 dma_buffer_size;
88
struct avs_audio_format *blob_fmt; /* optional override */
89
} whm;
90
struct {
91
u32 out_channel_config;
92
u32 coefficients_select;
93
s32 coefficients[AVS_COEFF_CHANNELS_MAX];
94
u32 channel_map;
95
} updown_mix;
96
struct {
97
u32 out_freq;
98
} src;
99
struct {
100
u32 out_freq;
101
u8 mode;
102
u8 disable_jitter_buffer;
103
} asrc;
104
struct {
105
u32 cpc_lp_mode;
106
} wov;
107
struct {
108
struct avs_audio_format *ref_fmt;
109
struct avs_audio_format *out_fmt;
110
u32 cpc_lp_mode;
111
} aec;
112
struct {
113
struct avs_audio_format *ref_fmt;
114
struct avs_audio_format *out_fmt;
115
} mux;
116
struct {
117
struct avs_audio_format *out_fmt;
118
} micsel;
119
struct {
120
u32 target_volume;
121
u32 curve_type;
122
u32 curve_duration;
123
} peakvol;
124
};
125
};
126
127
/* Specifies path behaviour during PCM ->trigger(START) command. */
128
enum avs_tplg_trigger {
129
AVS_TPLG_TRIGGER_AUTO = 0,
130
};
131
132
struct avs_tplg_pplcfg {
133
u16 req_size;
134
u8 priority;
135
bool lp;
136
u16 attributes;
137
enum avs_tplg_trigger trigger;
138
};
139
140
struct avs_tplg_binding {
141
char target_tplg_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
142
u32 target_path_tmpl_id;
143
u32 target_ppl_id;
144
u32 target_mod_id;
145
u8 target_mod_pin;
146
u32 mod_id;
147
u8 mod_pin;
148
u8 is_sink;
149
};
150
151
struct avs_tplg_path_template_id {
152
u32 id;
153
char tplg_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
154
};
155
156
struct avs_tplg_path_template {
157
u32 id;
158
159
struct snd_soc_dapm_widget *w;
160
161
/* Conditional path. */
162
struct avs_tplg_path_template_id source;
163
struct avs_tplg_path_template_id sink;
164
165
struct list_head path_list;
166
167
struct avs_tplg *owner;
168
/* Driver path templates management. */
169
struct list_head node;
170
};
171
172
struct avs_tplg_init_config {
173
u32 id;
174
175
u8 param;
176
size_t length;
177
void *data;
178
};
179
180
struct avs_tplg_nhlt_config {
181
u32 id;
182
struct acpi_nhlt_config *blob;
183
};
184
185
struct avs_tplg_path {
186
u32 id;
187
188
/* Path format requirements. */
189
struct avs_audio_format *fe_fmt;
190
struct avs_audio_format *be_fmt;
191
/* Condpath path-variant requirements. */
192
u32 source_path_id;
193
u32 sink_path_id;
194
195
struct list_head ppl_list;
196
197
struct avs_tplg_path_template *owner;
198
/* Path template path-variants management. */
199
struct list_head node;
200
};
201
202
struct avs_tplg_pipeline {
203
u32 id;
204
205
struct avs_tplg_pplcfg *cfg;
206
struct avs_tplg_binding **bindings;
207
u32 num_bindings;
208
struct list_head mod_list;
209
210
struct avs_tplg_path *owner;
211
/* Path pipelines management. */
212
struct list_head node;
213
};
214
215
struct avs_tplg_module {
216
u32 id;
217
218
struct avs_tplg_modcfg_base *cfg_base;
219
struct avs_audio_format *in_fmt;
220
u8 core_id;
221
u8 domain;
222
struct avs_tplg_modcfg_ext *cfg_ext;
223
u32 ctl_id;
224
u32 num_config_ids;
225
u32 *config_ids;
226
struct avs_tplg_nhlt_config *nhlt_config;
227
228
struct avs_tplg_pipeline *owner;
229
/* Pipeline modules management. */
230
struct list_head node;
231
};
232
233
struct avs_tplg *avs_tplg_new(struct snd_soc_component *comp);
234
235
int avs_load_topology(struct snd_soc_component *comp, const char *filename);
236
int avs_remove_topology(struct snd_soc_component *comp);
237
238
#endif
239
240