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