1bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#ifndef __INTEL_SST_IOCTL_H__
2bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define __INTEL_SST_IOCTL_H__
3bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
4bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum sst_codec_types {
5bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/*  AUDIO/MUSIC CODEC Type Definitions */
6bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_TYPE_UNKNOWN = 0,
7bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_TYPE_PCM,	/* Pass through Audio codec */
8bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_TYPE_MP3,
9bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_TYPE_MP24,
10bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_TYPE_AAC,
11bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_TYPE_AACP,
12bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_TYPE_eAACP,
13bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_TYPE_WMA9,
14bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_TYPE_WMA10,
15bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_TYPE_WMA10P,
16bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_TYPE_RA,
17bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_TYPE_DDAC3,
18bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_TYPE_STEREO_TRUE_HD,
19bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_TYPE_STEREO_HD_PLUS,
20bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
21bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	/*  VOICE CODEC Type Definitions */
22bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_TYPE_VOICE_PCM = 0x21, /* Pass through voice codec */
23bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_SRC = 0x64,
24bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_MIXER = 0x65,
25bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_DOWN_MIXER = 0x66,
26bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_VOLUME_CONTROL = 0x67,
27bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_OEM1 = 0xC8,
28bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_CODEC_OEM2 = 0xC9,
29bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
30bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
31bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum snd_sst_stream_ops {
32bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	STREAM_OPS_PLAYBACK = 0,	/* Decode */
33bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	STREAM_OPS_CAPTURE,		/* Encode */
34bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	STREAM_OPS_PLAYBACK_DRM,	/* Play Audio/Voice */
35bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	STREAM_OPS_PLAYBACK_ALERT,	/* Play Audio/Voice */
36bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	STREAM_OPS_CAPTURE_VOICE_CALL,	/* CSV Voice recording */
37bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
38bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
39bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum stream_type {
40bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	STREAM_TYPE_MUSIC = 1,
41bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	STREAM_TYPE_VOICE
42bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
43bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
44bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Firmware Version info */
45bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_fw_version {
46bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 build;	/* build number*/
47bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 minor;	/* minor number*/
48bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 major;	/* major number*/
49bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 type; /* build type*/
50bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
51bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
52bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Port info structure */
53bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_port_info {
54bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16 port_type;
55bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16  reserved;
56bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
57bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
58bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Mixer info structure */
59bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_mix_info {
60bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16 max_streams;
61bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16 reserved;
62bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
63bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
64bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* PCM Parameters */
65bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_pcm_params {
66bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16 codec;	/* codec type */
67bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 num_chan;	/* 1=Mono, 2=Stereo	*/
68bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 pcm_wd_sz;	/* 16/24 - bit*/
69bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 brate;	/* Bitrate in bits per second */
70bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 sfreq;	/* Sampling rate in Hz */
71bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16 frame_size;
72bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16 samples_per_frame;	/* Frame size num samples per frame */
73bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 period_count; /* period elapsed time count, in samples,*/
74bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
75bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
76bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* MP3 Music Parameters Message */
77bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_mp3_params {
78bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16  codec;
79bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8   num_chan;	/* 1=Mono, 2=Stereo	*/
80bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8   pcm_wd_sz; /* 16/24 - bit*/
81bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32  brate; /* Use the hard coded value. */
82bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32  sfreq; /* Sampling freq eg. 8000, 441000, 48000 */
83bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8  crc_check; /* crc_check - disable (0) or enable (1) */
84bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8  op_align; /* op align 0- 16 bit, 1- MSB, 2 LSB*/
85bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16  reserved;	/* Unused */
86bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
87bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
88bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define AAC_BIT_STREAM_ADTS		0
89bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define AAC_BIT_STREAM_ADIF		1
90bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define AAC_BIT_STREAM_RAW		2
91bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
92bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* AAC Music Parameters Message */
93bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_aac_params {
94bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16 codec;
95bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 num_chan; /* 1=Mono, 2=Stereo*/
96bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 pcm_wd_sz; /* 16/24 - bit*/
97bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 brate;
98bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 sfreq; /* Sampling freq eg. 8000, 441000, 48000 */
99bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 aac_srate;	/* Plain AAC decoder operating sample rate */
100bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 mpg_id; /* 0=MPEG-2, 1=MPEG-4 */
101bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 bs_format; /* input bit stream format adts=0, adif=1, raw=2 */
102bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 aac_profile; /* 0=Main Profile, 1=LC profile, 3=SSR profile */
103bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 ext_chl; /* No.of external channels */
104bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 aot; /* Audio object type. 1=Main , 2=LC , 3=SSR, 4=SBR*/
105bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 op_align; /* output alignment 0=16 bit , 1=MSB, 2= LSB align */
106bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 brate_type; /* 0=CBR, 1=VBR */
107bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 crc_check; /* crc check 0= disable, 1=enable */
108bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__s8 bit_stream_format[8]; /* input bit stream format adts/adif/raw */
109bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 jstereo; /* Joint stereo Flag */
110bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 sbr_present; /* 1 = SBR Present, 0 = SBR absent, for RAW */
111bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 downsample;       /* 1 = Downsampling ON, 0 = Downsampling OFF */
112bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 num_syntc_elems; /* 1- Mono/stereo, 0 - Dual Mono, 0 - for raw */
113bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__s8 syntc_id[2]; /* 0 for ID_SCE(Dula Mono), -1 for raw */
114bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__s8 syntc_tag[2]; /* raw - -1 and 0 -16 for rest of the streams */
115bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 pce_present; /* Flag. 1- present 0 - not present, for RAW */
116bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 reserved;
117bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16 reserved1;
118bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
119bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
120bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
121bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* WMA Music Parameters Message */
122bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_wma_params {
123bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16  codec;
124bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8   num_chan;	/* 1=Mono, 2=Stereo	*/
125bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8   pcm_wd_sz;	/* 16/24 - bit*/
126bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32  brate; 	/* Use the hard coded value. */
127bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32  sfreq;	/* Sampling freq eg. 8000, 441000, 48000 */
128bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32  channel_mask;  /* Channel Mask */
129bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16  format_tag;	/* Format Tag */
130bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16  block_align;	/* packet size */
131bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16  wma_encode_opt;/* Encoder option */
132bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 op_align;	/* op align 0- 16 bit, 1- MSB, 2 LSB*/
133bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 pcm_src;	/* input pcm bit width*/
134bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
135bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
136bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Pre processing param structure */
137bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_prp_params {
138bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32  reserved;	/* No pre-processing defined yet */
139bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
140bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
141bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Post processing Capability info structure */
142bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_postproc_info {
143bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 src_min;		/* Supported SRC Min sampling freq */
144bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 src_max;		/* Supported SRC Max sampling freq */
145bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8  src;		/* 0=Not supported, 1=Supported */
146bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8  bass_boost;		/* 0=Not Supported, 1=Supported */
147bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8  stereo_widening;	/* 0=Not Supported, 1=Supported */
148bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8  volume_control; 	/* 0=Not Supported, 1=Supported */
149bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__s16 min_vol;		/* Minimum value of Volume in dB */
150bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__s16 max_vol;		/* Maximum value of Volume in dB */
151bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 mute_control;		/*0=No Mute, 1=Mute*/
152bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 reserved1;
153bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16 reserved2;
154bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
155bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
156bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* pre processing Capability info structure */
157bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_prp_info {
158bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__s16 min_vol;			/* Minimum value of Volume in dB */
159bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__s16 max_vol;			/* Maximum value of Volume in dB */
160bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 volume_control; 		/* 0=Not Supported, 1=Supported */
161bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 reserved1;			/* for 32 bit alignment */
162bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16 reserved2;			/* for 32 bit alignment */
163bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} __attribute__ ((packed));
164bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
165bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Firmware capabilities info */
166bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_fw_info {
167bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_sst_fw_version fw_version; /* Firmware version */
168bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 audio_codecs_supported[8];	/* Codecs supported by FW */
169bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 recommend_min_duration; /* Min duration for Low power Playback*/
170bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 max_pcm_streams_supported; /*Max number of PCM streams supported */
171bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 max_enc_streams_supported;	/*Max number of Encoded streams */
172bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16 reserved;			/* 32 bit alignment*/
173bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_sst_postproc_info pop_info; /* Post processing capability*/
174bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_sst_prp_info prp_info; /* pre_processing mod cap info */
175bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_sst_port_info port_info[2]; /* Port info */
176bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_sst_mix_info mix_info; 	/* Mixer info */
177bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 min_input_buf; /*minmum i/p buffer for decode*/
178bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
179bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
180bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Add the codec parameter structures for new codecs to be supported */
181bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define CODEC_PARAM_STRUCTURES \
182bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_pcm_params pcm_params; \
183bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_mp3_params mp3_params; \
184bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_aac_params aac_params; \
185bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_wma_params wma_params;
186bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
187bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Pre and Post Processing param structures */
188bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define PPP_PARAM_STRUCTURES \
189bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_prp_params prp_params;
190bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
191bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Codec params struture */
192bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeunion  snd_sst_codec_params {
193bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	 CODEC_PARAM_STRUCTURES;
194bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
195bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
196bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Pre-processing params struture */
197bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeunion snd_sst_ppp_params{
198bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	 PPP_PARAM_STRUCTURES;
199bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
200bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
201bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_stream_params {
202bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	union snd_sst_codec_params uc;
203bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} __attribute__ ((packed));
204bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
205bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_params {
206bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 result;
207bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 stream_id;
208bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 codec;
209bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 ops;
210bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 stream_type;
211bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_sst_stream_params sparams;
212bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
213bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
214bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/*ioctl related stuff here*/
215bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_pmic_config {
216bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32  sfreq;                /* Sampling rate in Hz */
217bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16  num_chan;             /* Mono =1 or Stereo =2 */
218bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16  pcm_wd_sz;            /* Number of bits per sample */
219bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} __attribute__ ((packed));
220bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
221bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_get_stream_params {
222bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_sst_params codec_params;
223bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_sst_pmic_config pcm_params;
224bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
225bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
226bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum snd_sst_target_type {
227bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SND_SST_TARGET_PMIC = 1,
228bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SND_SST_TARGET_OTHER,
229bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
230bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
231bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum snd_sst_port_action {
232bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SND_SST_PORT_PREPARE = 1,
233bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SND_SST_PORT_ACTIVATE,
234bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
235bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
236bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Target selection per device structure */
237bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_slot_info {
238bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 mix_enable;		/* Mixer enable or disable */
239bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 device_type;
240bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 device_instance; 	/* 0, 1, 2 */
241bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 target_type;
242bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16 slot[2];
243bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 master;
244bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 action;
245bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u16 reserved;
246bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_sst_pmic_config pcm_params;
247bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} __attribute__ ((packed));
248bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
249bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* Target device list structure */
250bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_target_device  {
251bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 device_route;
252bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_sst_slot_info devices[2];
253bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} __attribute__ ((packed));
254bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
255bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_driver_info {
256bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 version;	/* Version of the driver */
257bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 active_pcm_streams;
258bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 active_enc_streams;
259bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 max_pcm_streams;
260bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 max_enc_streams;
261bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 buf_per_stream;
262bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
263bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
264bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_vol {
265bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32	stream_id;
266bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__s32		volume;
267bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32	ramp_duration;
268bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32 ramp_type;		/* Ramp type, default=0 */
269bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
270bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
271bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_mute {
272bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32	stream_id;
273bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u32	mute;
274bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
275bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
276bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeenum snd_sst_buff_type {
277bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_BUF_USER = 1,
278bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_BUF_MMAP,
279bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	SST_BUF_RAR,
280bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
281bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
282bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_mmap_buff_entry {
283bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	unsigned int offset;
284bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	unsigned int size;
285bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
286bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
287bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_mmap_buffs {
288bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	unsigned int entries;
289bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	enum snd_sst_buff_type type;
290bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_sst_mmap_buff_entry *buff;
291bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
292bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
293bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_buff_entry {
294bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	void *buffer;
295bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	unsigned int size;
296bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
297bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
298bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_buffs {
299bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	unsigned int entries;
300bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	__u8 type;
301bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_sst_buff_entry *buff_entry;
302bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
303bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
304bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestruct snd_sst_dbufs  {
305bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	unsigned long long input_bytes_consumed;
306bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	unsigned long long output_bytes_produced;
307bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_sst_buffs *ibufs;
308bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee	struct snd_sst_buffs *obufs;
309bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee};
310bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
311bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/*IOCTL defined here*/
312bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/*SST MMF IOCTLS only*/
313bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_STREAM_SET_PARAMS _IOR('L', 0x00, \
314bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee					struct snd_sst_stream_params *)
315bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_STREAM_GET_PARAMS _IOWR('L', 0x01, \
316bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee					struct snd_sst_get_stream_params *)
317bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_STREAM_GET_TSTAMP _IOWR('L', 0x02, __u64 *)
318bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define	SNDRV_SST_STREAM_DECODE	_IOWR('L', 0x03, struct snd_sst_dbufs *)
319bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_STREAM_BYTES_DECODED _IOWR('L', 0x04, __u64 *)
320bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_STREAM_START	_IO('A', 0x42)
321bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_STREAM_DROP 	_IO('A', 0x43)
322bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_STREAM_DRAIN	_IO('A', 0x44)
323bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_STREAM_PAUSE 	_IOW('A', 0x45, int)
324bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_STREAM_RESUME _IO('A', 0x47)
325bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_MMAP_PLAY	_IOW('L', 0x05, struct snd_sst_mmap_buffs *)
326bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_MMAP_CAPTURE _IOW('L', 0x06, struct snd_sst_mmap_buffs *)
327bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/*SST common ioctls */
328bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_DRIVER_INFO	_IOR('L', 0x10, struct snd_sst_driver_info *)
329bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_SET_VOL	_IOW('L', 0x11, struct snd_sst_vol *)
330bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_GET_VOL	_IOW('L', 0x12, struct snd_sst_vol *)
331bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_MUTE		_IOW('L', 0x13, struct snd_sst_mute *)
332bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/*AM Ioctly only*/
333bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_FW_INFO	_IOR('L', 0x20,  struct snd_sst_fw_info *)
334bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define SNDRV_SST_SET_TARGET_DEVICE _IOW('L', 0x21, \
335bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee					struct snd_sst_target_device *)
336bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
337bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#endif /*__INTEL_SST_IOCTL_H__*/
338