xref: /OK3568_Linux_fs/kernel/include/uapi/sound/skl-tplg-interface.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * skl-tplg-interface.h - Intel DSP FW private data interface
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2015 Intel Corp
6*4882a593Smuzhiyun  * Author: Jeeja KP <jeeja.kp@intel.com>
7*4882a593Smuzhiyun  *	    Nilofer, Samreen <samreen.nilofer@intel.com>
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef __HDA_TPLG_INTERFACE_H__
11*4882a593Smuzhiyun #define __HDA_TPLG_INTERFACE_H__
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include <linux/types.h>
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun /*
16*4882a593Smuzhiyun  * Default types range from 0~12. type can range from 0 to 0xff
17*4882a593Smuzhiyun  * SST types start at higher to avoid any overlapping in future
18*4882a593Smuzhiyun  */
19*4882a593Smuzhiyun #define SKL_CONTROL_TYPE_BYTE_TLV	0x100
20*4882a593Smuzhiyun #define SKL_CONTROL_TYPE_MIC_SELECT	0x102
21*4882a593Smuzhiyun #define SKL_CONTROL_TYPE_MULTI_IO_SELECT	0x103
22*4882a593Smuzhiyun #define SKL_CONTROL_TYPE_MULTI_IO_SELECT_DMIC	0x104
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #define HDA_SST_CFG_MAX	900 /* size of copier cfg*/
25*4882a593Smuzhiyun #define MAX_IN_QUEUE 8
26*4882a593Smuzhiyun #define MAX_OUT_QUEUE 8
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #define SKL_UUID_STR_SZ 40
29*4882a593Smuzhiyun /* Event types goes here */
30*4882a593Smuzhiyun /* Reserve event type 0 for no event handlers */
31*4882a593Smuzhiyun enum skl_event_types {
32*4882a593Smuzhiyun 	SKL_EVENT_NONE = 0,
33*4882a593Smuzhiyun 	SKL_MIXER_EVENT,
34*4882a593Smuzhiyun 	SKL_MUX_EVENT,
35*4882a593Smuzhiyun 	SKL_VMIXER_EVENT,
36*4882a593Smuzhiyun 	SKL_PGA_EVENT
37*4882a593Smuzhiyun };
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun /**
40*4882a593Smuzhiyun  * enum skl_ch_cfg - channel configuration
41*4882a593Smuzhiyun  *
42*4882a593Smuzhiyun  * @SKL_CH_CFG_MONO:	One channel only
43*4882a593Smuzhiyun  * @SKL_CH_CFG_STEREO:	L & R
44*4882a593Smuzhiyun  * @SKL_CH_CFG_2_1:	L, R & LFE
45*4882a593Smuzhiyun  * @SKL_CH_CFG_3_0:	L, C & R
46*4882a593Smuzhiyun  * @SKL_CH_CFG_3_1:	L, C, R & LFE
47*4882a593Smuzhiyun  * @SKL_CH_CFG_QUATRO:	L, R, Ls & Rs
48*4882a593Smuzhiyun  * @SKL_CH_CFG_4_0:	L, C, R & Cs
49*4882a593Smuzhiyun  * @SKL_CH_CFG_5_0:	L, C, R, Ls & Rs
50*4882a593Smuzhiyun  * @SKL_CH_CFG_5_1:	L, C, R, Ls, Rs & LFE
51*4882a593Smuzhiyun  * @SKL_CH_CFG_DUAL_MONO: One channel replicated in two
52*4882a593Smuzhiyun  * @SKL_CH_CFG_I2S_DUAL_STEREO_0: Stereo(L,R) in 4 slots, 1st stream:[ L, R, -, - ]
53*4882a593Smuzhiyun  * @SKL_CH_CFG_I2S_DUAL_STEREO_1: Stereo(L,R) in 4 slots, 2nd stream:[ -, -, L, R ]
54*4882a593Smuzhiyun  * @SKL_CH_CFG_INVALID:	Invalid
55*4882a593Smuzhiyun  */
56*4882a593Smuzhiyun enum skl_ch_cfg {
57*4882a593Smuzhiyun 	SKL_CH_CFG_MONO = 0,
58*4882a593Smuzhiyun 	SKL_CH_CFG_STEREO = 1,
59*4882a593Smuzhiyun 	SKL_CH_CFG_2_1 = 2,
60*4882a593Smuzhiyun 	SKL_CH_CFG_3_0 = 3,
61*4882a593Smuzhiyun 	SKL_CH_CFG_3_1 = 4,
62*4882a593Smuzhiyun 	SKL_CH_CFG_QUATRO = 5,
63*4882a593Smuzhiyun 	SKL_CH_CFG_4_0 = 6,
64*4882a593Smuzhiyun 	SKL_CH_CFG_5_0 = 7,
65*4882a593Smuzhiyun 	SKL_CH_CFG_5_1 = 8,
66*4882a593Smuzhiyun 	SKL_CH_CFG_DUAL_MONO = 9,
67*4882a593Smuzhiyun 	SKL_CH_CFG_I2S_DUAL_STEREO_0 = 10,
68*4882a593Smuzhiyun 	SKL_CH_CFG_I2S_DUAL_STEREO_1 = 11,
69*4882a593Smuzhiyun 	SKL_CH_CFG_4_CHANNEL = 12,
70*4882a593Smuzhiyun 	SKL_CH_CFG_INVALID
71*4882a593Smuzhiyun };
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun enum skl_module_type {
74*4882a593Smuzhiyun 	SKL_MODULE_TYPE_MIXER = 0,
75*4882a593Smuzhiyun 	SKL_MODULE_TYPE_COPIER,
76*4882a593Smuzhiyun 	SKL_MODULE_TYPE_UPDWMIX,
77*4882a593Smuzhiyun 	SKL_MODULE_TYPE_SRCINT,
78*4882a593Smuzhiyun 	SKL_MODULE_TYPE_ALGO,
79*4882a593Smuzhiyun 	SKL_MODULE_TYPE_BASE_OUTFMT,
80*4882a593Smuzhiyun 	SKL_MODULE_TYPE_KPB,
81*4882a593Smuzhiyun 	SKL_MODULE_TYPE_MIC_SELECT,
82*4882a593Smuzhiyun };
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun enum skl_core_affinity {
85*4882a593Smuzhiyun 	SKL_AFFINITY_CORE_0 = 0,
86*4882a593Smuzhiyun 	SKL_AFFINITY_CORE_1,
87*4882a593Smuzhiyun 	SKL_AFFINITY_CORE_MAX
88*4882a593Smuzhiyun };
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun enum skl_pipe_conn_type {
91*4882a593Smuzhiyun 	SKL_PIPE_CONN_TYPE_NONE = 0,
92*4882a593Smuzhiyun 	SKL_PIPE_CONN_TYPE_FE,
93*4882a593Smuzhiyun 	SKL_PIPE_CONN_TYPE_BE
94*4882a593Smuzhiyun };
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun enum skl_hw_conn_type {
97*4882a593Smuzhiyun 	SKL_CONN_NONE = 0,
98*4882a593Smuzhiyun 	SKL_CONN_SOURCE = 1,
99*4882a593Smuzhiyun 	SKL_CONN_SINK = 2
100*4882a593Smuzhiyun };
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun enum skl_dev_type {
103*4882a593Smuzhiyun 	SKL_DEVICE_BT = 0x0,
104*4882a593Smuzhiyun 	SKL_DEVICE_DMIC = 0x1,
105*4882a593Smuzhiyun 	SKL_DEVICE_I2S = 0x2,
106*4882a593Smuzhiyun 	SKL_DEVICE_SLIMBUS = 0x3,
107*4882a593Smuzhiyun 	SKL_DEVICE_HDALINK = 0x4,
108*4882a593Smuzhiyun 	SKL_DEVICE_HDAHOST = 0x5,
109*4882a593Smuzhiyun 	SKL_DEVICE_NONE
110*4882a593Smuzhiyun };
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun /**
113*4882a593Smuzhiyun  * enum skl_interleaving - interleaving style
114*4882a593Smuzhiyun  *
115*4882a593Smuzhiyun  * @SKL_INTERLEAVING_PER_CHANNEL: [s1_ch1...s1_chN,...,sM_ch1...sM_chN]
116*4882a593Smuzhiyun  * @SKL_INTERLEAVING_PER_SAMPLE: [s1_ch1...sM_ch1,...,s1_chN...sM_chN]
117*4882a593Smuzhiyun  */
118*4882a593Smuzhiyun enum skl_interleaving {
119*4882a593Smuzhiyun 	SKL_INTERLEAVING_PER_CHANNEL = 0,
120*4882a593Smuzhiyun 	SKL_INTERLEAVING_PER_SAMPLE = 1,
121*4882a593Smuzhiyun };
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun enum skl_sample_type {
124*4882a593Smuzhiyun 	SKL_SAMPLE_TYPE_INT_MSB = 0,
125*4882a593Smuzhiyun 	SKL_SAMPLE_TYPE_INT_LSB = 1,
126*4882a593Smuzhiyun 	SKL_SAMPLE_TYPE_INT_SIGNED = 2,
127*4882a593Smuzhiyun 	SKL_SAMPLE_TYPE_INT_UNSIGNED = 3,
128*4882a593Smuzhiyun 	SKL_SAMPLE_TYPE_FLOAT = 4
129*4882a593Smuzhiyun };
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun enum module_pin_type {
132*4882a593Smuzhiyun 	/* All pins of the module takes same PCM inputs or outputs
133*4882a593Smuzhiyun 	* e.g. mixout
134*4882a593Smuzhiyun 	*/
135*4882a593Smuzhiyun 	SKL_PIN_TYPE_HOMOGENEOUS,
136*4882a593Smuzhiyun 	/* All pins of the module takes different PCM inputs or outputs
137*4882a593Smuzhiyun 	* e.g mux
138*4882a593Smuzhiyun 	*/
139*4882a593Smuzhiyun 	SKL_PIN_TYPE_HETEROGENEOUS,
140*4882a593Smuzhiyun };
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun enum skl_module_param_type {
143*4882a593Smuzhiyun 	SKL_PARAM_DEFAULT = 0,
144*4882a593Smuzhiyun 	SKL_PARAM_INIT,
145*4882a593Smuzhiyun 	SKL_PARAM_SET,
146*4882a593Smuzhiyun 	SKL_PARAM_BIND
147*4882a593Smuzhiyun };
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun struct skl_dfw_algo_data {
150*4882a593Smuzhiyun 	__u32 set_params:2;
151*4882a593Smuzhiyun 	__u32 rsvd:30;
152*4882a593Smuzhiyun 	__u32 param_id;
153*4882a593Smuzhiyun 	__u32 max;
154*4882a593Smuzhiyun 	char params[0];
155*4882a593Smuzhiyun } __packed;
156*4882a593Smuzhiyun 
157*4882a593Smuzhiyun enum skl_tkn_dir {
158*4882a593Smuzhiyun 	SKL_DIR_IN,
159*4882a593Smuzhiyun 	SKL_DIR_OUT
160*4882a593Smuzhiyun };
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun enum skl_tuple_type {
163*4882a593Smuzhiyun 	SKL_TYPE_TUPLE,
164*4882a593Smuzhiyun 	SKL_TYPE_DATA
165*4882a593Smuzhiyun };
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun /* v4 configuration data */
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun struct skl_dfw_v4_module_pin {
170*4882a593Smuzhiyun 	__u16 module_id;
171*4882a593Smuzhiyun 	__u16 instance_id;
172*4882a593Smuzhiyun } __packed;
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun struct skl_dfw_v4_module_fmt {
175*4882a593Smuzhiyun 	__u32 channels;
176*4882a593Smuzhiyun 	__u32 freq;
177*4882a593Smuzhiyun 	__u32 bit_depth;
178*4882a593Smuzhiyun 	__u32 valid_bit_depth;
179*4882a593Smuzhiyun 	__u32 ch_cfg;
180*4882a593Smuzhiyun 	__u32 interleaving_style;
181*4882a593Smuzhiyun 	__u32 sample_type;
182*4882a593Smuzhiyun 	__u32 ch_map;
183*4882a593Smuzhiyun } __packed;
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun struct skl_dfw_v4_module_caps {
186*4882a593Smuzhiyun 	__u32 set_params:2;
187*4882a593Smuzhiyun 	__u32 rsvd:30;
188*4882a593Smuzhiyun 	__u32 param_id;
189*4882a593Smuzhiyun 	__u32 caps_size;
190*4882a593Smuzhiyun 	__u32 caps[HDA_SST_CFG_MAX];
191*4882a593Smuzhiyun } __packed;
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun struct skl_dfw_v4_pipe {
194*4882a593Smuzhiyun 	__u8 pipe_id;
195*4882a593Smuzhiyun 	__u8 pipe_priority;
196*4882a593Smuzhiyun 	__u16 conn_type:4;
197*4882a593Smuzhiyun 	__u16 rsvd:4;
198*4882a593Smuzhiyun 	__u16 memory_pages:8;
199*4882a593Smuzhiyun } __packed;
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun struct skl_dfw_v4_module {
202*4882a593Smuzhiyun 	char uuid[SKL_UUID_STR_SZ];
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun 	__u16 module_id;
205*4882a593Smuzhiyun 	__u16 instance_id;
206*4882a593Smuzhiyun 	__u32 max_mcps;
207*4882a593Smuzhiyun 	__u32 mem_pages;
208*4882a593Smuzhiyun 	__u32 obs;
209*4882a593Smuzhiyun 	__u32 ibs;
210*4882a593Smuzhiyun 	__u32 vbus_id;
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun 	__u32 max_in_queue:8;
213*4882a593Smuzhiyun 	__u32 max_out_queue:8;
214*4882a593Smuzhiyun 	__u32 time_slot:8;
215*4882a593Smuzhiyun 	__u32 core_id:4;
216*4882a593Smuzhiyun 	__u32 rsvd1:4;
217*4882a593Smuzhiyun 
218*4882a593Smuzhiyun 	__u32 module_type:8;
219*4882a593Smuzhiyun 	__u32 conn_type:4;
220*4882a593Smuzhiyun 	__u32 dev_type:4;
221*4882a593Smuzhiyun 	__u32 hw_conn_type:4;
222*4882a593Smuzhiyun 	__u32 rsvd2:12;
223*4882a593Smuzhiyun 
224*4882a593Smuzhiyun 	__u32 params_fixup:8;
225*4882a593Smuzhiyun 	__u32 converter:8;
226*4882a593Smuzhiyun 	__u32 input_pin_type:1;
227*4882a593Smuzhiyun 	__u32 output_pin_type:1;
228*4882a593Smuzhiyun 	__u32 is_dynamic_in_pin:1;
229*4882a593Smuzhiyun 	__u32 is_dynamic_out_pin:1;
230*4882a593Smuzhiyun 	__u32 is_loadable:1;
231*4882a593Smuzhiyun 	__u32 rsvd3:11;
232*4882a593Smuzhiyun 
233*4882a593Smuzhiyun 	struct skl_dfw_v4_pipe pipe;
234*4882a593Smuzhiyun 	struct skl_dfw_v4_module_fmt in_fmt[MAX_IN_QUEUE];
235*4882a593Smuzhiyun 	struct skl_dfw_v4_module_fmt out_fmt[MAX_OUT_QUEUE];
236*4882a593Smuzhiyun 	struct skl_dfw_v4_module_pin in_pin[MAX_IN_QUEUE];
237*4882a593Smuzhiyun 	struct skl_dfw_v4_module_pin out_pin[MAX_OUT_QUEUE];
238*4882a593Smuzhiyun 	struct skl_dfw_v4_module_caps caps;
239*4882a593Smuzhiyun } __packed;
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun #endif
242