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