xref: /utopia/UTPA2-700.0.x/modules/audio/drv/audio/internal/drvAUDIO_internal.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 //    Software and any modification/derivatives thereof.
18 //    No right, ownership, or interest to MStar Software and any
19 //    modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 //    supplied together with third party`s software and the use of MStar
23 //    Software may require additional licenses from third parties.
24 //    Therefore, you hereby agree it is your sole responsibility to separately
25 //    obtain any and all third party right and license necessary for your use of
26 //    such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 //    MStar`s confidential information and you agree to keep MStar`s
30 //    confidential information in strictest confidence and not disclose to any
31 //    third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35 //    without limitation, any warranties of merchantability, non-infringement of
36 //    intellectual property rights, fitness for a particular purpose, error free
37 //    and in conformity with any international standard.  You agree to waive any
38 //    claim against MStar for any loss, damage, cost or expense that you may
39 //    incur related to your use of MStar Software.
40 //    In no event shall MStar be liable for any direct, indirect, incidental or
41 //    consequential damages, including without limitation, lost of profit or
42 //    revenues, lost or damage of data, and unauthorized system use.
43 //    You agree that this Section 4 shall still apply without being affected
44 //    even if MStar Software has been modified by MStar in accordance with your
45 //    request or instruction for your use, except otherwise agreed by both
46 //    parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 //    services in relation with MStar Software to you for your use of
50 //    MStar Software in conjunction with your or your customer`s product
51 //    ("Services").
52 //    You understand and agree that, except otherwise agreed by both parties in
53 //    writing, Services are provided on an "AS IS" basis and the warranty
54 //    disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 //    or otherwise:
58 //    (a) conferring any license or right to use MStar name, trademark, service
59 //        mark, symbol or any other identification;
60 //    (b) obligating MStar or any of its affiliates to furnish any person,
61 //        including without limitation, you and your customers, any assistance
62 //        of any kind whatsoever, or any information; or
63 //    (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 //    of Taiwan, R.O.C., excluding its conflict of law rules.
67 //    Any and all dispute arising out hereof or related hereto shall be finally
68 //    settled by arbitration referred to the Chinese Arbitration Association,
69 //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 //    Rules of the Association by three (3) arbitrators appointed in accordance
71 //    with the said Rules.
72 //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73 //    be English.
74 //    The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 ////////////////////////////////////////////////////////////////////////////////
79 //
80 // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81 // All rights reserved.
82 //
83 // Unless otherwise stipulated in writing, any and all information contained
84 // herein regardless in any format shall remain the sole proprietary of
85 // MStar Semiconductor Inc. and be kept in strict confidence
86 // ("MStar Confidential Information") by the recipient.
87 // Any unauthorized act including without limitation unauthorized disclosure,
88 // copying, use, reproduction, sale, distribution, modification, disassembling,
89 // reverse engineering and compiling of the contents of MStar Confidential
90 // Information is unlawful and strictly prohibited. MStar hereby reserves the
91 // rights to any and all damages, losses, costs and expenses resulting therefrom.
92 //
93 ////////////////////////////////////////////////////////////////////////////////
94 
95 #ifndef _DRV_AUDIO_INTERNAL_H_
96 #define _DRV_AUDIO_INTERNAL_H_
97 
98 #include "MsTypes.h"
99 #include "ULog.h"
100 #include "apiAUDIO.h"
101 #include "drvAUDIO_if.h"
102 
103 #ifdef __cplusplus
104 extern "C"
105 {
106 #endif
107 
108 //=====================================================
109 //  Macro and Define
110 //=====================================================
111 #define AUDIO_DO_ALIGNMENT(Value, AlignmentSize) \
112     do { \
113         Value = (Value /AlignmentSize) * AlignmentSize; \
114     } while(0)
115 
116 //====== DSP code Type========
117 typedef enum
118 {
119     AU_DVB_STANDARD_INVALID             = -1,
120 
121     AU_DVB_NONE                         = 0x0,
122     AU_DVB_STANDARD_MPEG,
123     AU_DVB_STANDARD_AC3,
124     AU_DVB_STANDARD_AC3P,
125     AU_DVB_STANDARD_AAC,
126     AU_DVB_STANDARD_MP3,
127     AU_DVB_STANDARD_WMA,
128     AU_DVB_STANDARD_RA8LBR,
129     AU_DVB_STANDARD_XPCM,
130     AU_DVB_STANDARD_TONE,
131     AU_DVB_STANDARD_DTS,
132     AU_DVB_STANDARD_MS10_DDT,
133     AU_DVB_STANDARD_MS10_DDC,
134     AU_DVB_STANDARD_WMA_PRO,
135     AU_DVB_STANDARD_FLAC,
136     AU_DVB_STANDARD_VORBIS,
137     AU_DVB_STANDARD_DTSLBR,
138     AU_DVB_STANDARD_AMR_NB,
139     AU_DVB_STANDARD_AMR_WB,
140     AU_DVB_STANDARD_DRA,
141     AU_DVB_STANDARD_MPEG_AD,
142     AU_DVB_STANDARD_DolbyTrueHD_Bypass,
143     AU_DVB_STANDARD_DTSHD_ADO,
144     AU_DVB_MAX,
145 
146     AU_DVB_STANDARD_ENC,
147     AU_DVB_STANDARD_MPEG_EN,
148 
149     AU_DVB2_NONE,
150     AU_DVB2_STANDARD_MPEG_AD ,
151     AU_DVB2_STANDARD_AC3_AD,
152     AU_DVB2_STANDARD_AC3P_AD,
153     AU_DVB2_STANDARD_AAC_AD,
154     AU_DVB2_STANDARD_DDE,
155     AU_DVB2_STANDARD_GAAC_AD,
156     AU_DVB2_STANDARD_MP3,
157     AU_DVB2_STANDARD_MPEG_EN,
158     AU_DVB2_STANDARD_XPCM,
159     AU_DVB2_STANDARD_KTV,
160     AU_DVB2_STANDARD_KTV2,
161     AU_DVB2_STANDARD_DTS,
162     AU_DVB2_STANDARD_TONEGEN,
163     AU_DVB2_STANDARD_DolbyTrueHD_Bypass,
164     AU_DVB2_STANDARD_DTSHD_ADO,
165     AU_DVB2_MAX,
166 
167     AU_DVB2_ADVSND_NONE,
168     AU_DVB2_ADVSND_PL2,
169     AU_DVB2_ADVSND_BBE,
170     AU_DVB2_ADVSND_SRS,
171     AU_DVB2_ADVSND_VDS,
172     AU_DVB2_ADVSND_VSPK,
173     AU_DVB2_ADVSND_SUPV,
174     AU_DVB2_ADVSND_TSHD,
175     AU_DVB2_ADVSND_DTS_ULTRA_TV,
176     AU_DVB2_ADVSND_TSHDVIQ,
177     AU_DVB2_ADVSND_AUDSY,
178     AU_DVB2_ADVSND_DBX,
179     AU_DVB2_ADVSND_THEATERSOUND,
180     AU_DVB2_ADVSND_PURESND,
181     AU_DVB2_ADVSND_STUDIOSOUND_3D,
182     AU_DVB2_ADVSND_BONGIOVI_DPS,
183     AU_DVB2_ADVSND_SONICMOTION_ABS3D,
184     AU_DVB2_ADVSND_DOLBY_DAP,
185     AU_DVB2_ADVSND_MAX,
186 
187     AU_DEC_SYSTEM,
188     AU_SE_SYSTEM,
189 
190     AU_KTV_ENC,
191     AU_KTV_FUNC,
192     AU_KTV_SYSTEM,
193 
194     AU_SND_EFFECT,
195 
196     AU_SIF_NONE,
197     AU_SIF_BTSC,
198     AU_SIF_EIAJ,
199     AU_SIF_PALSUM,
200     AU_SIF_FM_RADIO,
201     AU_SIF_MAX,
202 
203     AU_ATVENC_NONE,
204     AU_ATVENC_FMTx,
205     AU_ATVENC_BTSC,
206 
207     AU_DVB2_ENCODE_NONE,    // define for snd_dsp encode code for because 0x30 has no free enum
208     AU_DVB2_ENCODE_DTSE,
209     AU_DVB2_ENCODE_MS10_DDE,
210     AU_DVB2_ENCODE_DDE,
211     AU_DVB2_ENCODE_MAX,
212 
213     AU_DEC_ES_BYPASS,
214 
215 }AUDIO_DSP_CODE_TYPE;
216 
217 #define IS_AUDIO_DSP_CODE_TYPE_DEC1_SYSTEM(dspCodeType)  ((dspCodeType >= AU_DVB_NONE) && (dspCodeType < AU_DVB_MAX))
218 #define IS_AUDIO_DSP_CODE_TYPE_DEC2_SYSTEM(dspCodeType)  ((dspCodeType >= AU_DVB2_NONE) && (dspCodeType < AU_DVB2_MAX))
219 #define IS_AUDIO_DSP_CODE_TYPE_ADVSND(dspCodeType)       ((dspCodeType >= AU_DVB2_ADVSND_NONE) && (dspCodeType < AU_DVB2_ADVSND_MAX))
220 #define IS_AUDIO_DSP_CODE_TYPE_DEC_SYSTEM(dspCodeType)   (dspCodeType == AU_DEC_SYSTEM)
221 #define IS_AUDIO_DSP_CODE_TYPE_SE_SYSTEM(dspCodeType)    (dspCodeType == AU_SE_SYSTEM)
222 #define IS_AUDIO_DSP_CODE_TYPE_SIF(dspCodeType)          ((dspCodeType >= AU_SIF_NONE) && (dspCodeType < AU_SIF_MAX))
223 #define IS_AUDIO_DSP_CODE_TYPE_SE_ENC(dspCodeType)       ((dspCodeType >= AU_DVB2_ENCODE_NONE) && (dspCodeType < AU_DVB2_ENCODE_MAX))
224 
225 //=====================================================
226 // Define
227 //=====================================================
228 #define MAX_AUDIO_BASE_ADDRESS_NUM2     3
229 #define AUDIO_PCM_MAXNUM                32
230 #define AUDIO_ENCODER_MAXNUM            2
231 
232 //==============================
233 //  IP Security Define
234 //==============================
235 #define  AU_DVB2_AUTHBIT_BBE            0
236 #define  AU_DVB2_AUTHBIT_SRS            2
237 #define  AU_DVB2_AUTHBIT_TSHD           3
238 #define  AU_DVB2_AUTHBIT_VIQ            4
239 #define  AU_DVB2_AUTHBIT_VDS            5
240 #define  AU_DVB2_AUTHBIT_VSPK           6
241 #define  AU_DVB2_AUTHBIT_AUDSY          9
242 // Dolby DD
243 #define  AU_DVB_AUTHBIT_AC3             11
244 #define  AU_DVB2_AUTHBIT_AC3_AD         11
245 // Dolby DDP
246 #define  AU_DVB_AUTHBIT_AC3P            12
247 #define  AU_DVB2_AUTHBIT_AC3P_AD        12
248 // Dolby DDCO
249 #define  AU_DVB2_AUTHBIT_DDE            13
250 // Dolby Pulse(DDT)
251 #define  AU_DVB_AUTHBIT_MS10_DDT        14
252 // DTS DMP (Core 2.0)
253 #define  AU_DVB_AUTHBIT_DTSDEC          15
254 #define  AU_DVB2_AUTHBIT_DTSDEC         15
255 // DTS HD
256 #define  AU_DVB_AUTHBIT_DTSHD           18
257 // COOK(RA8-LBR) same with RM video
258 #define  AU_DVB_AUTHBIT_COOK            28
259 // WMA
260 #define  AU_DVB_AUTHBIT_WMA             30
261 #define  AU_DVB2_AUTHBIT_WMA            30
262 // SRS StudioSound
263 #define  AU_DVB2_AUTHBIT_SRS_StudioSND  55
264 // Dolby Volume
265 #define  AU_DVB2_AUTHBIT_DolbyVolume    56
266 // Dolby DD Plus Encode
267 #define  AU_DVB2_AUTHBIT_DDP_ENC        57
268 // DTS LBR
269 #define  AU_DVB_AUTHBIT_DTS_LBR         58
270 #define  AU_DVB2_AUTHBIT_DTS_LBR        58
271 // DTS XLL
272 #define  AU_DVB_AUTHBIT_DTS_XLL         59
273 #define  AU_DVB2_AUTHBIT_DTS_XLL        59
274 #define  AU_DVB2_AUTHBIT_DBX            64
275 #define  AU_DVB_AUTHBIT_DRA             65
276 // SRS PureSound
277 #define  AU_DVB2_AUTHBIT_SRS_PURESND    66
278 //DTS StudioSound 3D(=TheaterSound3D)
279 #define  AU_DVB2_AUTHBIT_DTS_StudioSound3D  69
280 #define  AU_DVB_AUTHBIT_GAAC            70
281 #define  AU_DVB_AUTHBIT_DTSNeoUltra     72
282 #define  AU_DVB2_AUTHBIT_DTSNeoUltra    72
283 #define  AU_DVB_AUTHBIT_DTSE            73
284 #define  AU_DVB2_AUTHBIT_DTSE           73
285 #define  AU_DVB_AUTHBIT_DOLBY_MS11      80
286 #define  AU_DVB2_AUTHBIT_DOLBY_MS11     80
287 #define  AU_DVB_AUTHBIT_DOLBY_MS12_B    81
288 #define  AU_DVB_AUTHBIT_DOLBY_MS12_D    82
289 #define  AU_DVB_AUTHBIT_DOLBY_MS12_LC   83
290 #define  AU_DVB2_AUTHBIT_SONICMOTION_ABS3D  92
291 #define  AU_DVB2_AUTHBIT_BONGIOVI_DPS   93
292 #define  AU_DVB2_AUTHBIT_NULL           126
293 #define  AU_DVB_AUTHBIT_DEMOMODE        127
294 #define  AU_DVB2_AUTHBIT_DOLBY_MS11_WO_AAC       115
295 #define  AU_DVB2_AUTHBIT_DOLBY_MS12_B_WO_AAC     116
296 #define  AU_DVB2_AUTHBIT_DOLBY_MS12_D_WO_AAC     117
297 
298 #define AUDIO_PRINT(level, fmt, args...) \
299     do { \
300         if ( g_AudioVars2 != NULL) \
301         { \
302             if ( level <= g_AudioVars2->g_debug_level) \
303             { \
304                 switch(level) \
305                 { \
306                     case AUDIO_DEBUG_LEVEL_FATAL: \
307                         ULOGF("AUDIO", fmt, ## args); \
308                         break; \
309                     case AUDIO_DEBUG_LEVEL_ERROR: \
310                         ULOGE("AUDIO", fmt, ## args); \
311                         break; \
312                     case AUDIO_DEBUG_LEVEL_WARN: \
313                         ULOGW("AUDIO", fmt, ## args); \
314                         break; \
315                     case AUDIO_DEBUG_LEVEL_INFO: \
316                         ULOGI("AUDIO", fmt, ## args); \
317                         break; \
318                     case AUDIO_DEBUG_LEVEL_DEBUG: \
319                         ULOGD("AUDIO", fmt, ## args); \
320                         break; \
321                     case AUDIO_DEBUG_LEVEL_VERBOSE: \
322                         ULOGD("AUDIO", fmt, ## args); \
323                         break; \
324                     default : \
325                         break; \
326                 } \
327             } \
328         } \
329     } while(0)
330 
331 
332 //=====================================================
333 // Structure
334 //=====================================================
335 
336 
337 //=====================================================
338 // Enum
339 //=====================================================
340 typedef enum
341 {
342     AU_CHIP_T2,
343     AU_CHIP_U3,
344     AU_CHIP_T3,
345     AU_CHIP_T4,
346     AU_CHIP_T7,                         //single DSP
347     AU_CHIP_JANUS,                      //single DSP
348     AU_CHIP_U4,
349     AU_CHIP_T8,
350     AU_CHIP_T9,
351     AU_CHIP_T10,
352     AU_CHIP_T11,
353     AU_CHIP_T13,
354     AU_CHIP_T12,
355     AU_CHIP_J2,
356     AU_CHIP_K1,
357     AU_CHIP_K2,
358     AU_CHIP_A1,
359     AU_CHIP_A5,
360     AU_CHIP_A6,
361     AU_CHIP_A7,
362     AU_CHIP_A3,
363     AU_CHIP_A5P,
364     AU_CHIP_AMETHYST,
365     AU_CHIP_EAGLE,
366     AU_CHIP_EDISON,
367     AU_CHIP_EMERALD,
368     AU_CHIP_M12,
369     AU_CHIP_EINSTEIN,
370     AU_CHIP_EIFFEL,
371     AU_CHIP_NIKE,
372     AU_CHIP_Euler,
373     AU_CHIP_NUGGET,
374     AU_CHIP_NIKON,
375     AU_CHIP_EINSTEIN3,
376     AU_CHIP_NAPOLI,
377     AU_CHIP_MONACO,
378     AU_CHIP_MADISON,
379     AU_CHIP_MIAMI,
380     AU_CHIP_CLIPPERS,
381     AU_CHIP_MUJI,
382     AU_CHIP_KERES,
383     AU_CHIP_MUNICH,
384 }AU_CHIP_TYPE;
385 
386 typedef enum
387 {
388     AUDIO_ETMODE_DTV,     // DTV Mode
389     AUDIO_ETMODE_KTV,     // KTV Mode 1
390     AUDIO_ETMODE_GAME,  // GAME Mode
391     AUDIO_ETMODE_KTV2,   // KTV Mode 2
392     AUDIO_ETMODE_VOIP_ON,
393     AUDIO_ETMODE_VOIP_OFF,
394     AUDIO_ETMODE_KTV_STB, // STB KTV Mode, forward mix ch.6 and ch.7
395 }AUDIO_ENTERTAINMENT_MODE;
396 
397 // for dvb2 decoder command
398 typedef enum
399 {
400     AU_DVB2_DECCMD_STOP,                //0
401     AU_DVB2_DECCMD_PLAY,                //1
402     AU_DVB2_DECCMD_PLAYFILETSP          = 2,
403     AU_DVB2_DECCMD_RESYNC,
404     AU_DVB2_DECCMD_PLAYFILE             = 4,
405     AU_DVB2_DECCMD_PAUSE                = 6
406 }AU_DVB2_DECCMD;
407 
408 // for dvb2 free run mode
409 typedef enum
410 {
411     AU_DVB2_FreeRunMode_AVsync,         //0
412     AU_DVB2_FreeRunMode_FreeRun,        //1
413 }AU_DVB2_FreeRunMode;
414 
415 typedef enum
416 {
417     DSP_MEM_TYPE_PM,                    // DSP PM memory
418     DSP_MEM_TYPE_DM                     // DSP DM memory
419 }AUDIO_DSP_MEMORY_TYPE;
420 
421 typedef enum
422 {
423     AUDIO_DTV_DVB,
424     AUDIO_DTV_ATSC,
425     AUDIO_DTV_ISDB,
426     AUDIO_DTV_DMBT,
427     AUDIO_DTV_OTHER = 15
428 }AUDIO_DTV_SYSTEM;
429 
430 typedef enum
431 {
432     AUDIO_MULTICH_PCM_DMXL,
433     AUDIO_MULTICH_PCM_DMXR,
434     AUDIO_MULTICH_PCM_L,
435     AUDIO_MULTICH_PCM_C,
436     AUDIO_MULTICH_PCM_R,
437     AUDIO_MULTICH_PCM_LS,
438     AUDIO_MULTICH_PCM_RS,
439     AUDIO_MULTICH_PCM_LFE,
440     AUDIO_MULTICH_PCM_LRS,
441     AUDIO_MULTICH_PCM_RRS,
442 }AUDIO_MULTICH_PCM_TYPE;
443 
444 typedef enum
445 {
446     /* Set Cmd */
447     AUDIO_ENCODER_IOCTL_SET_READ_PTR_OFFSET,
448 
449     /* Get Cmd */
450     AUDIO_ENCODER_IOCTL_GET_WRITE_PTR_OFFSET,
451     AUDIO_ENCODER_IOCTL_GET_THRESHOLD,
452     AUDIO_ENCODER_IOCTL_GET_FRAME_SIZE,
453     AUDIO_ENCODER_IOCTL_GET_AVAILABLE_SIZE,
454     AUDIO_ENCODER_IOCTL_GET_FRAME_COUNT,
455     AUDIO_ENCODER_IOCTL_GET_TIMESTAMP_HIGH32BIT,
456     AUDIO_ENCODER_IOCTL_GET_TIMESTAMP_LOW32BIT,
457 }AUDIO_ENCODER_IOCTL_CMD;
458 
459 typedef struct
460 {
461     MS_S32 (*open)(void *pData);
462     MS_S32 (*close)(void);
463     MS_S32 (*start)(void);
464     MS_S32 (*stop)(void);
465     MS_S32 (*set)(MS_U32 u32Cmd, const void *pData);
466     MS_S32 (*get)(MS_U32 u32Cmd, void *pData);
467     MS_U32 (*read)(void *pBuf, MS_U32 u32Size);
468     MS_U32 (*write)(const void *pBuf, MS_U32 u32Size);
469     MS_S32 (*flush)(void);
470 } AUDIO_PCM_OPS_t;
471 
472 typedef struct
473 {
474     MS_U8 u8MultiChFlag;
475     MS_U8 u8MixingFlag;
476     MS_U8 u8CaptureFlag;
477     MS_U32 u32Channel[16];
478     MS_U32 u32SampleRate[32];
479     MS_U32 u32BitWidth[8];
480 } AUDIO_PCM_CAPS_t;
481 
482 typedef struct
483 {
484     MS_S8 *pBuffer;
485     MS_S8 *pReadPtr;
486     MS_S8 *pWritePtr;
487     MS_U32 u32BufferSize;
488     MS_U32 u32BufferHighThreshold;
489     MS_U32 u32RemainSize;
490 } AUDIO_PCM_BUFFER_INFO_t;
491 
492 typedef struct
493 {
494     MS_U8 u8Name[AUDIO_COMMON_PCM_IO_NAME_LENGTH]; /* PCM name (only 32 bytes, if change this length, must change u8Name of AUDIO_PCM_INFO_t as well!) */
495     AUDIO_PCM_OPS_t tPcmOps;  /* PCM operators */
496     AUDIO_PCM_CAPS_t tPcmCaps;  /* PCM operators */
497     AUDIO_PCM_BUFFER_INFO_t tPcmBufferInfo;  /* PCM buffer information */
498     AUDIO_PCM_INFO_t *pPcmInfo; /* PCM information */
499     MS_U8 u8SettingChangeFlag;
500     MS_U32 u32RemainSize;
501 } AUDIO_PCM_t;
502 
503 typedef struct
504 {
505     MS_S32 (*open)(void);
506     MS_S32 (*close)(void);
507     MS_S32 (*start)(void);
508     MS_S32 (*stop)(void);
509     MS_S32 (*ioctl)(MS_U32 u32Cmd, void *pData);
510     MS_U32 (*read)(void *pBuf, MS_U32 u32Size);
511     MS_S32 (*flush)(void);
512 } AUDIO_ENCODER_OPS_t;
513 
514 typedef struct __attribute__((packed))
515 {
516     MS_BOOL          bDecInUsed;
517     AUDIO_USAGE_TYPE eUsageType;
518     MMA_AudioType    eAudioType;
519 } AUDIO_DSP_USAGE;
520 
521 typedef struct
522 {
523     MS_U32  g_ShmID;
524 
525     MS_BOOL g_bDecPlayFileFlag;   // DEC MM interrupt flag
526     MS_BOOL g_bSePlayFileFlag;    // SE  MM interrupt flag
527     MS_BOOL g_bMMPlayFlag;        // MM  play flag
528     MS_BOOL g_Audio_PreInitFlag;
529     MS_BOOL g_Audio_InitFlag;
530     MS_BOOL g_SPDIF_MuteStatus;
531     AUDIO_SPDIF_OUTPUT_TYPE g_eSpdifOutputType;
532     MS_U8   g_SpdifNpcmPath;
533     MS_U8   g_PreMainDecodeId;
534     AUDIO_DSP_CODE_TYPE g_PreMainDspCodeType;
535 
536     MS_BOOL g_dolbyLoudness_Enable;
537     MS_U8   g_dolbyLoudness_DTVsystem;
538 
539     AUDIO_DSP_CODE_TYPE g_DspCodeType;
540     AUDIO_DSP_CODE_TYPE g_Dsp2CodeType;
541 
542     MS_U16  u16DecodeFrmCnt[AU_DEC_MAX];
543 
544     AUDIO_DSP_CODE_TYPE g_AdvSndEffDspCodeType;
545     MS_U8   g_u8DspAliveFlag;
546     MS_U8   g_u8AudioCrashFlag;
547 
548     MS_U8   g_u8SifDspType;
549     MS_U16  sif_gain_0[6];
550     MS_U16  sif_shift_0[6];
551 
552     MS_U8   g_u8IntTag;   // DEC MM interrupt flag
553     MS_U16  int_mb_cnt;
554 
555     MS_U8   CompressInfo;
556     MS_U8   g_DSPMadMIUBank[MAX_AUDIO_BASE_ADDRESS_NUM2];
557     MS_PHY  g_DSPBinBaseAddress[MAX_AUDIO_BASE_ADDRESS_NUM2];
558     MS_PHY  g_DSPMadBaseBufferAdr[MAX_AUDIO_BASE_ADDRESS_NUM2];
559     MS_PHY  g_DSPDDRBinBaseAddress[MAX_AUDIO_BASE_ADDRESS_NUM2];
560 
561     MS_U32  g_u32ClientCounter;
562 
563     AUDIO_SOURCE_INFO_TYPE eMainSourceType;
564     AUDIO_SOURCE_INFO_TYPE ePrevSourceType;
565     AUDIO_DSP_USAGE        DspUsage[AU_DEC_MAX];
566     AudioDecStatus_t            AudioDecStatus[AU_DEC_MAX];
567 
568     AUDIO_SOURCE_INFO_TYPE eAudioSource;
569     AUDIO_INPUT_TYPE       eMainAudioSource;
570     AUDIO_INPUT_TYPE       eSubAudioSource;
571     AUDIO_INPUT_TYPE       eScartAudioSource;
572 
573     AUDIO_INIT_INFO        AudioSystemInfo;
574     AUDIO_OUT_INFO         AudioOutputInfo;             // Store the connectivity of audio output device
575     AUDIO_PATH_INFO        AudioPathInfo;               // Store the connectivity of audio DSP & output path
576     OUTPUT_SOURCE_INFO     AudioOutputSourceInfo;       // Store the output port source setting
577 
578     DigitalOutSetting_t stDigitalOutSetting[DIGITAL_MAX_OUTPUT];
579     Digital_Out_Channel_Status_t stDigitalOutChannelStatus[DIGITAL_MAX_OUTPUT];
580 
581     MS_U16  mainAudioDelay;
582     MS_U8   ChipRevision;
583 
584     AUDIO_CAPABILITIES AudioCaps[AU_DEC_MAX];
585     Digital_Out_Device_Capability_t stDigitalOutCodecCapability[2][CODEC_MAX];
586 
587     MS_BOOL DolbyAACFlag;
588     MS_BOOL DolbyEncFlag;
589 
590     AUDIO_PCM_INFO_t g_PcmInfo[AUDIO_PCM_MAXNUM];
591 
592     AUDIO_DEBUG_LEVEL g_debug_level;
593 
594     MS_U8   g_R2_NonPcm_Sel;
595     MS_U8   g_DolbyDAPEnable;
596 
597     AUDIO_OUTPUT_DEVICE_SELECTION_t g_AudioOutputDeviceSelection;
598 
599     AUDIO_SPECIFIED_DIGITAL_OUTPUT_t g_AudioSpecifiedDigitalOutput;
600 
601     MS_BOOL  g_hbr_bypass_enable;
602 
603     MS_U8   g_u8MADSkipResetFlag;
604     MS_U8   g_u8MAD2SkipResetFlag;
605 
606     MS_BOOL  g_R2ShmInitFlag;
607 
608     MS_U8   g_HDMINonPcmPath;
609 
610     MS_BOOL g_bHashkeyFlag;
611 
612     DOLBY_DRC_MODE g_dolbyDrcMode;
613     AUDIO_INPUT_TYPE AudioSrcType;
614     AUDIO_INPUT_TYPE AudioSubSrcType;
615     MS_U8   g_ddenc_owner;    // 0:R2 1:DSP
616 
617     DIGITAL_OUTPUT_TYPE g_EdidOutputInterfaceType;
618     MS_BOOL g_EdidOutViaArc;
619 } AUDIO_SHARED_VARS2;
620 
621 typedef struct
622 {
623     MS_U32 Address;
624     MS_U8 Length;
625     MS_U16 u16Data[8];
626 } Audio_MBOX_BackUp_t;
627 
628 //=====================================================
629 
630 void MDrv_AUDIO_SetEntertainmentMode(AUDIO_ENTERTAINMENT_MODE u16Mode);
631 void MDrv_AUDIO_SPDIF_SetOutputType (AUDIO_SOURCE_INFO_TYPE eSource, AUDIO_SPDIF_OUTPUT_TYPE eType);
632 MS_BOOL MDrv_AUDIO_SetDataCaptureSource(AUDIO_DEVICE_TYPE eID, AUDIO_CAPTURE_SOURCE_TYPE eSource);
633 AUDIO_DEC_ID MDrv_AUDIO_OpenDecodeSystem(AudioDecStatus_t * p_AudioDecStatus);
634 MS_BOOL MDrv_AUDIO_CheckPlayDone(void);
635 
636 //================================================================
637 //  For Audio initialize
638 //================================================================
639 void    MDrv_AUDIO_SetPowerOn(MS_BOOL bPowerOn);
640 void    MDrv_AUDIO_RebootDSP(MS_BOOL bDspType);
641 MS_BOOL MDrv_AUDIO_GetDecSysSupportStatus(En_DVB_decSystemType enDecSystem);
642 MS_BOOL MDrv_AUDIO_GetEncodeDoneFlag(void);
643 MS_BOOL MDrv_AUDIO_Check_AsndR2_SupportStatus(void);
644 MS_BOOL MDrv_AUDIO_CheckBootOnInitState(void);
645 void    MDrv_AUDIO_WriteStopDecTable(void);
646 
647 //================================================================
648 // Audio I/O Config. function
649 //================================================================
650 void    MDrv_AUDIO_FwTriggerDSP(MS_U16 u16Cmd);
651 void    MDrv_AUDIO_SendIntrupt(MS_BOOL bDspType,MS_U16 u8Cmd);
652 void    MDrv_AUDIO_I2S_SetMode(MS_U8 u8Mode, MS_U8 u8Value);
653 void    MDrv_AUDIO_USBPCM_Enable(MS_BOOL bEnable);
654 void    MDrv_AUDIO_USBPCM_SetFlag(MS_BOOL bEnable);
655 MS_BOOL MDrv_AUDIO_USBPCM_GetFlag(void);
656 void    MDrv_AUDIO_USBPCM_GetMemInfo(AUDIO_UPLOAD_INFO *uploadInfo);
657 MS_BOOL MDrv_AUDIO_PCMCapture_Init(const AUDIO_DEVICE_TYPE eID, const AUDIO_CAPTURE_SOURCE_TYPE eSource);
658 MS_BOOL MDrv_AUDIO_PCMCapture_Start(const AUDIO_DEVICE_TYPE eID);
659 MS_BOOL MDrv_AUDIO_PCMCapture_Stop(const AUDIO_DEVICE_TYPE eID);
660 MS_BOOL MDrv_AUDIO_PCMCapture_Read(const AUDIO_DEVICE_TYPE eID, void* buffer, const MS_U32 bytes);
661 
662 //=====================================================
663 // AUDIO SPDIF Relational Hal Function
664 //=====================================================
665 void    MDrv_AUDIO_SPDIF_HWEN(MS_U8 spdif_hwen);
666 MS_U8   MDrv_AUDIO_SPDIF_GetMode(void);
667 void    MDrv_AUDIO_SPDIF_SetSCMS(MS_U8 C_bit_en, MS_U8 L_bit_en);
668 MS_U8   MDrv_AUDIO_SPDIF_GetSCMS(void);
669 MS_BOOL MDrv_AUDIO_SPDIF_ChannelStatus_CTRL(AUDIO_SPDIF_CS_TYPE cs_mode, AUDIO_SPDIF_CS_TYPE_STATUS status);
670 MS_BOOL Mdrv_AUDIO_DigitalOut_SetChannelStatus(DIGITAL_OUTPUT_TYPE ePath, Digital_Out_Channel_Status_t *stChannelStatus);
671 //=====================================================
672 // AUDIO HDMI Relational Hal Function
673 //=====================================================
674 MS_BOOL MDrv_AUDIO_HDMI_RX_GetHdmiInAudioStatus( ST_HDMI_AUDIO_STATUS *p_hdmiAudioSts);
675 void    MDrv_AUDIO_HDMI_Tx_SetMute(MS_U8 bEnMute);
676 AUDIO_HDMI_RX_TYPE MDrv_AUDIO_HDMI_SetNonpcm(MS_U8 u8NonPCM_en);
677 MS_U16  MDrv_AUDIO_HDMI_GetSynthFreq(void);
678 void    MDrv_AUDIO_HDMI_SetDownSample(MS_U8 ratio);
679 MS_BOOL MDrv_AUDIO_HDMI_NonpcmMonitor(void);
680 //================================================================
681 // for audio driver internal use function
682 //================================================================
683 void    MDrv_AUDIO_DmaReader_Init(SAMPLE_RATE sampleRate);
684 void    MDrv_AUDIO_DmaReader_AllInput_Init(void);
685 MS_BOOL MDrv_AUDIO_DmaReader_WritePCM(void* buffer, MS_U32 bytes);
686 void    MDrv_AUDIO_DmaWriter_Init(void);
687 MS_U16  MDrv_AUDIO_AbsReadReg(MS_U32 u32RegAddr);
688 void    MDrv_AUDIO_AbsWriteReg(MS_U32 u32RegAddr, MS_U16 u16Val);
689 MS_S32 MDrv_AUDIO_InputSwitch(AUDIO_SWITCH_GROUP enGroup);
690 
691 //================================================================
692 // Audio VoIP Interface Relational Function
693 //================================================================
694 MS_BOOL MDrv_AUDIO_VoIP_Config(AUDIO_VoIP_CONFIG_TYPE configType, MS_VIRT param1, MS_VIRT param2);
695 
696 //================================================================
697 // Audio ALSA Interface Relational Function
698 //================================================================
699 MS_BOOL MDrv_AUDIO_ALSA_Check(void);
700 
701 
702 MS_PHY MDrv_AUDIO_GetDDRInfo(AUDIO_DEC_ID DecId, EN_AUDIO_DDRINFO DDRInfo);
703 
704 void MDrv_AUDIO_PCM_Init(void);
705 void MDrv_AUDIO_PCM_DeInit(void);
706 MS_S32 MDrv_AUDIO_PCM_Open(void *pData);
707 MS_S32 MDrv_AUDIO_PCM_Close(MS_S32 s32DeviceId);
708 MS_S32 MDrv_AUDIO_PCM_Start(MS_S32 s32DeviceId);
709 MS_S32 MDrv_AUDIO_PCM_Stop(MS_S32 s32DeviceId);
710 MS_S32 MDrv_AUDIO_PCM_Set(MS_S32 s32DeviceId, MS_U32 u32Cmd, const void *pData);
711 MS_S32 MDrv_AUDIO_PCM_Get(MS_S32 s32DeviceId, MS_U32 u32Cmd, void *pData);
712 MS_U32 MDrv_AUDIO_PCM_Read(MS_S32 s32DeviceId, void *pBuf, MS_U32 u32Size);
713 MS_U32 MDrv_AUDIO_PCM_Write(MS_S32 s32DeviceId, const void *pBuf, MS_U32 u32Size);
714 MS_S32 MDrv_AUDIO_PCM_Flush(MS_S32 s32DeviceId);
715 
716 MS_S32 MDrv_AUDIO_ENCODER_Open(const char *pName);
717 MS_S32 MDrv_AUDIO_ENCODER_Close(MS_S32 s32DeviceId);
718 MS_S32 MDrv_AUDIO_ENCODER_Start(MS_S32 s32DeviceId);
719 MS_S32 MDrv_AUDIO_ENCODER_Stop(MS_S32 s32DeviceId);
720 MS_S32 MDrv_AUDIO_ENCODER_Ioctl(MS_S32 s32DeviceId, const char *pCmd, void *pData);
721 MS_U32 MDrv_AUDIO_ENCODER_Read(MS_S32 s32DeviceId, void *pBuf, MS_U32 u32Size);
722 MS_S32 MDrv_AUDIO_ENCODER_Flush(MS_S32 s32DeviceId);
723 
724 #ifdef __cplusplus
725 }
726 #endif
727 
728 #endif // _DRV_AUDIO_IF_H_
729