Merge remote-tracking branch 'asoc/topic/dt' into asoc-next
[sfrench/cifs-2.6.git] / sound / soc / intel / sst_dsp.h
1 #ifndef __SST_DSP_H__
2 #define __SST_DSP_H__
3 /*
4  *  sst_dsp.h - Intel SST Driver for audio engine
5  *
6  *  Copyright (C) 2008-12 Intel Corporation
7  *  Authors:    Vinod Koul <vinod.koul@linux.intel.com>
8  *  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
9  *
10  *  This program is free software; you can redistribute it and/or modify
11  *  it under the terms of the GNU General Public License as published by
12  *  the Free Software Foundation; version 2 of the License.
13  *
14  *  This program is distributed in the hope that it will be useful, but
15  *  WITHOUT ANY WARRANTY; without even the implied warranty of
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  *  General Public License for more details.
18  *
19  *  You should have received a copy of the GNU General Public License along
20  *  with this program; if not, write to the Free Software Foundation, Inc.,
21  *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
22  *
23  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24  */
25
26 enum sst_codec_types {
27         /*  AUDIO/MUSIC CODEC Type Definitions */
28         SST_CODEC_TYPE_UNKNOWN = 0,
29         SST_CODEC_TYPE_PCM,     /* Pass through Audio codec */
30         SST_CODEC_TYPE_MP3,
31         SST_CODEC_TYPE_MP24,
32         SST_CODEC_TYPE_AAC,
33         SST_CODEC_TYPE_AACP,
34         SST_CODEC_TYPE_eAACP,
35 };
36
37 enum stream_type {
38         SST_STREAM_TYPE_NONE = 0,
39         SST_STREAM_TYPE_MUSIC = 1,
40 };
41
42 struct snd_pcm_params {
43         u16 codec;      /* codec type */
44         u8 num_chan;    /* 1=Mono, 2=Stereo */
45         u8 pcm_wd_sz;   /* 16/24 - bit*/
46         u32 reserved;   /* Bitrate in bits per second */
47         u32 sfreq;      /* Sampling rate in Hz */
48         u8 use_offload_path;
49         u8 reserved2;
50         u16 reserved3;
51         u8 channel_map[8];
52 } __packed;
53
54 /* MP3 Music Parameters Message */
55 struct snd_mp3_params {
56         u16 codec;
57         u8  num_chan;   /* 1=Mono, 2=Stereo     */
58         u8  pcm_wd_sz; /* 16/24 - bit*/
59         u8  crc_check; /* crc_check - disable (0) or enable (1) */
60         u8  reserved1; /* unused*/
61         u16 reserved2;  /* Unused */
62 } __packed;
63
64 #define AAC_BIT_STREAM_ADTS             0
65 #define AAC_BIT_STREAM_ADIF             1
66 #define AAC_BIT_STREAM_RAW              2
67
68 /* AAC Music Parameters Message */
69 struct snd_aac_params {
70         u16 codec;
71         u8 num_chan; /* 1=Mono, 2=Stereo*/
72         u8 pcm_wd_sz; /* 16/24 - bit*/
73         u8 bdownsample; /*SBR downsampling 0 - disable 1 -enabled AAC+ only */
74         u8 bs_format; /* input bit stream format adts=0, adif=1, raw=2 */
75         u16  reser2;
76         u32 externalsr; /*sampling rate of basic AAC raw bit stream*/
77         u8 sbr_signalling;/*disable/enable/set automode the SBR tool.AAC+*/
78         u8 reser1;
79         u16  reser3;
80 } __packed;
81
82 /* WMA Music Parameters Message */
83 struct snd_wma_params {
84         u16 codec;
85         u8  num_chan;   /* 1=Mono, 2=Stereo */
86         u8  pcm_wd_sz;  /* 16/24 - bit*/
87         u32 brate;      /* Use the hard coded value. */
88         u32 sfreq;      /* Sampling freq eg. 8000, 441000, 48000 */
89         u32 channel_mask;  /* Channel Mask */
90         u16 format_tag; /* Format Tag */
91         u16 block_align;        /* packet size */
92         u16 wma_encode_opt;/* Encoder option */
93         u8 op_align;    /* op align 0- 16 bit, 1- MSB, 2 LSB */
94         u8 reserved;    /* reserved */
95 } __packed;
96
97 /* Codec params struture */
98 union  snd_sst_codec_params {
99         struct snd_pcm_params pcm_params;
100         struct snd_mp3_params mp3_params;
101         struct snd_aac_params aac_params;
102         struct snd_wma_params wma_params;
103 } __packed;
104
105 /* Address and size info of a frame buffer */
106 struct sst_address_info {
107         u32 addr; /* Address at IA */
108         u32 size; /* Size of the buffer */
109 };
110
111 struct snd_sst_alloc_params_ext {
112         struct sst_address_info  ring_buf_info[8];
113         u8 sg_count;
114         u8 reserved;
115         u16 reserved2;
116         u32 frag_size;  /*Number of samples after which period elapsed
117                                   message is sent valid only if path  = 0*/
118 } __packed;
119
120 struct snd_sst_stream_params {
121         union snd_sst_codec_params uc;
122 } __packed;
123
124 struct snd_sst_params {
125         u32 stream_id;
126         u8 codec;
127         u8 ops;
128         u8 stream_type;
129         u8 device_type;
130         struct snd_sst_stream_params sparams;
131         struct snd_sst_alloc_params_ext aparams;
132 };
133
134 #endif /* __SST_DSP_H__ */