xref: /utopia/UTPA2-700.0.x/modules/audio/hal/k6/audio/halMAD.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi 
96*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
97*53ee8cc1Swenshuai.xi //  Include Files
98*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
99*53ee8cc1Swenshuai.xi // Common Definition
100*53ee8cc1Swenshuai.xi #include "MsCommon.h"
101*53ee8cc1Swenshuai.xi #include "MsIRQ.h"
102*53ee8cc1Swenshuai.xi #include "MsOS.h"
103*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
104*53ee8cc1Swenshuai.xi #include <linux/string.h>
105*53ee8cc1Swenshuai.xi #else
106*53ee8cc1Swenshuai.xi #include <string.h>
107*53ee8cc1Swenshuai.xi #endif
108*53ee8cc1Swenshuai.xi 
109*53ee8cc1Swenshuai.xi // Internal Definition
110*53ee8cc1Swenshuai.xi #include "regCHIP.h"
111*53ee8cc1Swenshuai.xi #include "drvAUDIO.h"
112*53ee8cc1Swenshuai.xi #include "regAUDIO.h"
113*53ee8cc1Swenshuai.xi #include "halAUDIO.h"
114*53ee8cc1Swenshuai.xi #include "halADVAUDIO.h"
115*53ee8cc1Swenshuai.xi #include "halMAD.h"
116*53ee8cc1Swenshuai.xi #include "halMAD2.h"
117*53ee8cc1Swenshuai.xi #include "halSOUND.h"
118*53ee8cc1Swenshuai.xi #include "halSIF.h"
119*53ee8cc1Swenshuai.xi #include "r2_shm_comm.h"
120*53ee8cc1Swenshuai.xi #include "decR2_shm.h"
121*53ee8cc1Swenshuai.xi #if ASND_R2_SUPPORT
122*53ee8cc1Swenshuai.xi #include "sndR2_shm.h"
123*53ee8cc1Swenshuai.xi #endif
124*53ee8cc1Swenshuai.xi #include "halAUR2.h"
125*53ee8cc1Swenshuai.xi #include "ddr_config.h"
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi #if (defined ANDROID)
128*53ee8cc1Swenshuai.xi 
129*53ee8cc1Swenshuai.xi #include <sys/mman.h>
130*53ee8cc1Swenshuai.xi #include <cutils/ashmem.h>
131*53ee8cc1Swenshuai.xi #include <cutils/log.h>
132*53ee8cc1Swenshuai.xi 
133*53ee8cc1Swenshuai.xi #ifndef LOGI // android 4.1 rename LOGx to ALOGx
134*53ee8cc1Swenshuai.xi #define LOGI ALOGI
135*53ee8cc1Swenshuai.xi #endif
136*53ee8cc1Swenshuai.xi 
137*53ee8cc1Swenshuai.xi #ifndef LOGE // android 4.1 rename LOGx to ALOGx
138*53ee8cc1Swenshuai.xi #define LOGE ALOGE
139*53ee8cc1Swenshuai.xi #endif
140*53ee8cc1Swenshuai.xi 
141*53ee8cc1Swenshuai.xi #define HALMAD_PRINT(fmt, args...)    LOGI("<<android>>      " fmt, ## args)
142*53ee8cc1Swenshuai.xi #define HALMAD_ERROR(fmt, args...)    LOGE("<<android>>      " fmt, ## args)
143*53ee8cc1Swenshuai.xi 
144*53ee8cc1Swenshuai.xi #else
145*53ee8cc1Swenshuai.xi     #ifdef CONFIG_MBOOT //mboot Speed up
146*53ee8cc1Swenshuai.xi         #define HALMAD_PRINT(fmt, args...)
147*53ee8cc1Swenshuai.xi         #define HALMAD_ERROR(fmt, args...)    printf("[[utopia]]      " fmt, ## args)
148*53ee8cc1Swenshuai.xi     #else
149*53ee8cc1Swenshuai.xi         #define HALMAD_PRINT(fmt, args...)    printf("[[utopia]]      " fmt, ## args)
150*53ee8cc1Swenshuai.xi         #define HALMAD_ERROR(fmt, args...)    printf("[[utopia]]      " fmt, ## args)
151*53ee8cc1Swenshuai.xi     #endif
152*53ee8cc1Swenshuai.xi #endif
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi 
155*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
156*53ee8cc1Swenshuai.xi //  Driver Compiler Options
157*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
158*53ee8cc1Swenshuai.xi #define OMX_AUDIO_DEBUG  0
159*53ee8cc1Swenshuai.xi #define DBG_MAD(msg) //msg
160*53ee8cc1Swenshuai.xi #define AUD_ERRMSG(msg)  MS_CRITICAL_MSG(msg)
161*53ee8cc1Swenshuai.xi #define AUD_DBGMSG(msg)  MS_DEBUG_MSG(msg)
162*53ee8cc1Swenshuai.xi 
163*53ee8cc1Swenshuai.xi #define HALMAD_CHECK_SHM_INIT \
164*53ee8cc1Swenshuai.xi     do { \
165*53ee8cc1Swenshuai.xi         if (g_AudioVars2 == NULL) \
166*53ee8cc1Swenshuai.xi         { \
167*53ee8cc1Swenshuai.xi             HALMAD_ERROR("%s() : Warning! g_AudioVars2 should not be NULL !!!\n", __FUNCTION__); \
168*53ee8cc1Swenshuai.xi             HALMAD_ERROR("%s() : Perform SHM Init here !!!\n", __FUNCTION__); \
169*53ee8cc1Swenshuai.xi             if (HAL_AUDIO_InitialVars() == FALSE) \
170*53ee8cc1Swenshuai.xi             { \
171*53ee8cc1Swenshuai.xi                 MS_ASSERT(0);\
172*53ee8cc1Swenshuai.xi             } \
173*53ee8cc1Swenshuai.xi         } \
174*53ee8cc1Swenshuai.xi     } while(0)
175*53ee8cc1Swenshuai.xi 
176*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
177*53ee8cc1Swenshuai.xi //  Local Defines
178*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
179*53ee8cc1Swenshuai.xi 
180*53ee8cc1Swenshuai.xi #define H2BYTE(value)             ((MS_U8)((value) / 0x10000))
181*53ee8cc1Swenshuai.xi #define HIBYTE(value)             ((MS_U8)((value >>8) & 0x0000FF))
182*53ee8cc1Swenshuai.xi #define LOBYTE(value)             ((MS_U8)((value) & 0x0000FF))
183*53ee8cc1Swenshuai.xi 
184*53ee8cc1Swenshuai.xi #ifndef UNUSED
185*53ee8cc1Swenshuai.xi #define UNUSED(x) ((x)=(x))
186*53ee8cc1Swenshuai.xi #endif
187*53ee8cc1Swenshuai.xi 
188*53ee8cc1Swenshuai.xi /* TVOS2.0 DTV */
189*53ee8cc1Swenshuai.xi #define STC_CLOCK_TICK 90
190*53ee8cc1Swenshuai.xi #define STC_BITS_MASK   0x1FFFFFFFF
191*53ee8cc1Swenshuai.xi #define STC_TICK_TO_NS(t) ((((t) & STC_BITS_MASK) * 1000LL) /STC_CLOCK_TICK)
192*53ee8cc1Swenshuai.xi 
193*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
194*53ee8cc1Swenshuai.xi //  Local Structures
195*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
196*53ee8cc1Swenshuai.xi 
197*53ee8cc1Swenshuai.xi AES_INFO audio_aes_info[2];
198*53ee8cc1Swenshuai.xi 
199*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
200*53ee8cc1Swenshuai.xi //  Global Variables
201*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
202*53ee8cc1Swenshuai.xi extern MS_U8 MDrv_AUTH_IPCheck(MS_U8 u8Bit);
203*53ee8cc1Swenshuai.xi extern AUDIO_SOURCE_INFO_TYPE AudioInputSrcInfo;
204*53ee8cc1Swenshuai.xi extern MS_VIRT                 _gMIO_MapBase;
205*53ee8cc1Swenshuai.xi extern MS_U32                 g_audioDumpInfo_interval;
206*53ee8cc1Swenshuai.xi extern AUDIO_SPDIF_OUTPUT_TYPE gSpdifOutputType;
207*53ee8cc1Swenshuai.xi extern HDMI_TX_OUTPUT_TYPE gHdmiOutputType;
208*53ee8cc1Swenshuai.xi extern MS_PHY g_DSPDDRBinBaseAddress[MAX_AUDIO_BASE_ADDRESS_NUM2];
209*53ee8cc1Swenshuai.xi MS_U32                        g_AudioDumpInfoCtrl = Audio_DumpInfo_Off;
210*53ee8cc1Swenshuai.xi 
211*53ee8cc1Swenshuai.xi extern MS_S32  _s32MutexLoadCode;
212*53ee8cc1Swenshuai.xi extern MS_S32  _s32AUDIOMutexIDMA;
213*53ee8cc1Swenshuai.xi 
214*53ee8cc1Swenshuai.xi //====== STAOS PIP START 2012/02/12 ========
215*53ee8cc1Swenshuai.xi 
216*53ee8cc1Swenshuai.xi extern pFuncPtr_SetAudioParam2  g_FuncPrt_Hal_SetAudioParam2;
217*53ee8cc1Swenshuai.xi extern pFuncPtr_GetAudioInfo2   g_FuncPrt_Hal_GetAudioInfo2;
218*53ee8cc1Swenshuai.xi 
219*53ee8cc1Swenshuai.xi //====== STAOS PIP END 2012/02/12 ========
220*53ee8cc1Swenshuai.xi 
221*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
222*53ee8cc1Swenshuai.xi //  Local Variables
223*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
224*53ee8cc1Swenshuai.xi //static MS_BOOL EncodeInProcess;
225*53ee8cc1Swenshuai.xi //#define ENC_BUF_SIZE 6;
226*53ee8cc1Swenshuai.xi extern AUDIO_SHARED_VARS2 *g_AudioVars2;
227*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_NUTTX
228*53ee8cc1Swenshuai.xi extern AUDIO_TEE_INFO_SHARE_MEM   *pAudioTeeInfoShm;
229*53ee8cc1Swenshuai.xi extern MS_BOOL g_bAudioTeeEnabled, g_bAudioTeeMbxInitialized;
230*53ee8cc1Swenshuai.xi extern MS_BOOL g_bDecDspSecureTeeAccessed, g_bSndDspSecureTeeAccessed;
231*53ee8cc1Swenshuai.xi #endif
232*53ee8cc1Swenshuai.xi extern MS_BOOL (*g_FuncPtr_CheckCapability)(AUDIO_DEC_ID eDecId, AudioDecStatus_t * p_AudioDecStatus);
233*53ee8cc1Swenshuai.xi 
234*53ee8cc1Swenshuai.xi MS_U32  EncFrameIdx;
235*53ee8cc1Swenshuai.xi MS_U32  EncBuf_W_idx;
236*53ee8cc1Swenshuai.xi MS_U32  EncBuf_R_idx;
237*53ee8cc1Swenshuai.xi MS_U8   EncBuf_Count;
238*53ee8cc1Swenshuai.xi MS_U16  Reg_REG_SOUND_MAIN_SNDEFFECT = 0x0;
239*53ee8cc1Swenshuai.xi MS_U16  Reg_REG_SOUND_ADV_CFG0 = 0x0;
240*53ee8cc1Swenshuai.xi MS_BOOL Flag_MAIN_SNDEFFET_CHG = FALSE;
241*53ee8cc1Swenshuai.xi 
242*53ee8cc1Swenshuai.xi AU_DVB_ENC_FRAME_INFO MPEG_EN_BUF[6];
243*53ee8cc1Swenshuai.xi 
244*53ee8cc1Swenshuai.xi MS_BOOL FLAG_HDMI_AC3_IN_SE = FALSE;
245*53ee8cc1Swenshuai.xi 
246*53ee8cc1Swenshuai.xi static MS_U32 g_ReadTargetAddr=0x2D00;
247*53ee8cc1Swenshuai.xi static MS_BOOL g_bR2Adec1AD = FALSE;
248*53ee8cc1Swenshuai.xi static MS_BOOL g_bR2Adec2AD = FALSE;
249*53ee8cc1Swenshuai.xi 
250*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_AC3                 0x1
251*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_AC3P                0x2
252*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DDCO                0x4
253*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DTS                 0x8
254*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DOLBY_MS10          0x10
255*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_WMA                 0x20
256*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DRA                 0x40
257*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DTSLBR              0x80
258*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_GAAC                0x100
259*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DOLBY_MS11          0x200
260*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DTSE                0x400
261*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DTS_NEO_ULTRA       0x800
262*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DEMO_MODE                   0x1000
263*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_SRS_TSHD            0x2000
264*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_SRS_THEATERSOUND    0x4000
265*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DTS_STUDIO_SOUND_3D 0x8000
266*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_COOK                0x10000
267*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_DTS_XLL             0x20000
268*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_MS12_LC_PROFILE     0x40000
269*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_MS12_C_PROFILE      0x80000
270*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_ABS_3D              0x100000
271*53ee8cc1Swenshuai.xi #define AUDIO_HASHKEY_DISABLE_MS12_B_PROFILE      0x200000
272*53ee8cc1Swenshuai.xi 
273*53ee8cc1Swenshuai.xi const MS_U16 MpegBitRateTable[6][16] =
274*53ee8cc1Swenshuai.xi {
275*53ee8cc1Swenshuai.xi     // V1, L1
276*53ee8cc1Swenshuai.xi     {0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 0},
277*53ee8cc1Swenshuai.xi     // V1, L2
278*53ee8cc1Swenshuai.xi     {0, 32, 48, 56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, 384, 0},
279*53ee8cc1Swenshuai.xi     // V1, L3
280*53ee8cc1Swenshuai.xi     {0, 32, 40, 48,  56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, 0},
281*53ee8cc1Swenshuai.xi     // V2, L1
282*53ee8cc1Swenshuai.xi     {0, 32, 48, 56,  64,  80,  96, 112, 128, 144, 160, 176, 192, 224, 256, 0},
283*53ee8cc1Swenshuai.xi     // V2, L2
284*53ee8cc1Swenshuai.xi     {0,  8, 16, 24,  32,  40,  48,  56,  64,  80,  96, 112, 128, 144, 160, 0},
285*53ee8cc1Swenshuai.xi     // V2, L3
286*53ee8cc1Swenshuai.xi     {0,  8, 16, 24,  32,  40,  48,  56,  64,  80,  96, 112, 128, 144, 160, 0},
287*53ee8cc1Swenshuai.xi };
288*53ee8cc1Swenshuai.xi 
289*53ee8cc1Swenshuai.xi 
290*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
291*53ee8cc1Swenshuai.xi //  Debug Functions
292*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
293*53ee8cc1Swenshuai.xi 
294*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
295*53ee8cc1Swenshuai.xi //  Local Functions
296*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
_GetAudioCaps(AUDIO_DEC_ID eDecId)297*53ee8cc1Swenshuai.xi MMA_AudioType _GetAudioCaps(AUDIO_DEC_ID eDecId)
298*53ee8cc1Swenshuai.xi {
299*53ee8cc1Swenshuai.xi     MMA_AudioType eAudioCaps = 0;
300*53ee8cc1Swenshuai.xi 
301*53ee8cc1Swenshuai.xi     if ( eDecId == AU_DEC_ID1 )
302*53ee8cc1Swenshuai.xi     {
303*53ee8cc1Swenshuai.xi         if(g_AudioVars2->g_hbr_bypass_enable==true)
304*53ee8cc1Swenshuai.xi         {
305*53ee8cc1Swenshuai.xi             eAudioCaps = Audio_DEC_PCM        | Audio_DEC_MPEG     |
306*53ee8cc1Swenshuai.xi                      Audio_DEC_MP3        | Audio_DEC_AC3      |
307*53ee8cc1Swenshuai.xi                      Audio_DEC_AC3P       | Audio_DEC_AAC_LC   |
308*53ee8cc1Swenshuai.xi                      Audio_DEC_HEAAC_V1   | Audio_DEC_HEAAC_V2 |
309*53ee8cc1Swenshuai.xi                      Audio_DEC_DOLBYPULSE | Audio_DEC_RA8      |
310*53ee8cc1Swenshuai.xi                      Audio_DEC_WMA        | Audio_DEC_WMAPRO   |
311*53ee8cc1Swenshuai.xi                      Audio_DEC_XPCM      | Audio_DEC_VORBIS   |
312*53ee8cc1Swenshuai.xi                      Audio_DEC_DTS        | Audio_DEC_FLAC   |
313*53ee8cc1Swenshuai.xi                      Audio_DEC_DTSLBR     | Audio_DEC_DRA |
314*53ee8cc1Swenshuai.xi                      Audio_DEC_DTS_HD_ADO_R2    | Audio_DEC_Dolby_TrueHD_Bypass_R2;
315*53ee8cc1Swenshuai.xi         }
316*53ee8cc1Swenshuai.xi         else
317*53ee8cc1Swenshuai.xi         {
318*53ee8cc1Swenshuai.xi             eAudioCaps = Audio_DEC_PCM        | Audio_DEC_MPEG     |
319*53ee8cc1Swenshuai.xi                      Audio_DEC_MP3        | Audio_DEC_AC3      |
320*53ee8cc1Swenshuai.xi                      Audio_DEC_AC3P       | Audio_DEC_AAC_LC   |
321*53ee8cc1Swenshuai.xi                      Audio_DEC_HEAAC_V1   | Audio_DEC_HEAAC_V2 |
322*53ee8cc1Swenshuai.xi                      Audio_DEC_DOLBYPULSE | Audio_DEC_RA8      |
323*53ee8cc1Swenshuai.xi                      Audio_DEC_WMA        | Audio_DEC_WMAPRO   |
324*53ee8cc1Swenshuai.xi                      Audio_DEC_XPCM      | Audio_DEC_VORBIS   |
325*53ee8cc1Swenshuai.xi                      Audio_DEC_DTS        | Audio_DEC_FLAC   |
326*53ee8cc1Swenshuai.xi                      Audio_DEC_DTSLBR     | Audio_DEC_DRA | Audio_DEC_DTS_HD_ADO_R2;
327*53ee8cc1Swenshuai.xi         }
328*53ee8cc1Swenshuai.xi     }
329*53ee8cc1Swenshuai.xi     else if ( eDecId == AU_DEC_ID2 )
330*53ee8cc1Swenshuai.xi     {
331*53ee8cc1Swenshuai.xi         eAudioCaps = 0;
332*53ee8cc1Swenshuai.xi     }
333*53ee8cc1Swenshuai.xi     else if ( eDecId == AU_DEC_ID3 )
334*53ee8cc1Swenshuai.xi     {
335*53ee8cc1Swenshuai.xi         if(g_AudioVars2->g_hbr_bypass_enable==true)
336*53ee8cc1Swenshuai.xi         {
337*53ee8cc1Swenshuai.xi             eAudioCaps = Audio_DEC_PCM        | Audio_DEC_MPEG     |
338*53ee8cc1Swenshuai.xi                         Audio_DEC_MP3        | Audio_DEC_AC3      |
339*53ee8cc1Swenshuai.xi                         Audio_DEC_AC3P       | Audio_DEC_AAC_LC   |
340*53ee8cc1Swenshuai.xi                         Audio_DEC_HEAAC_V1   | Audio_DEC_HEAAC_V2 |
341*53ee8cc1Swenshuai.xi                         Audio_DEC_DOLBYPULSE | Audio_DEC_RA8      |
342*53ee8cc1Swenshuai.xi                         Audio_DEC_WMA        | Audio_DEC_WMAPRO   |
343*53ee8cc1Swenshuai.xi                         Audio_DEC_XPCM       | Audio_DEC_VORBIS   |
344*53ee8cc1Swenshuai.xi                         Audio_DEC_DTS        | Audio_DEC_FLAC   |
345*53ee8cc1Swenshuai.xi                         Audio_DEC_DTSLBR     | Audio_DEC_DRA |
346*53ee8cc1Swenshuai.xi                         Audio_DEC_DTS_HD_ADO_R2    | Audio_DEC_Dolby_TrueHD_Bypass_R2;
347*53ee8cc1Swenshuai.xi         }
348*53ee8cc1Swenshuai.xi         else
349*53ee8cc1Swenshuai.xi         {
350*53ee8cc1Swenshuai.xi             eAudioCaps = Audio_DEC_PCM        | Audio_DEC_MPEG     |
351*53ee8cc1Swenshuai.xi                         Audio_DEC_MP3        | Audio_DEC_AC3      |
352*53ee8cc1Swenshuai.xi                         Audio_DEC_AC3P       | Audio_DEC_AAC_LC   |
353*53ee8cc1Swenshuai.xi                         Audio_DEC_HEAAC_V1   | Audio_DEC_HEAAC_V2 |
354*53ee8cc1Swenshuai.xi                         Audio_DEC_DOLBYPULSE | Audio_DEC_RA8      |
355*53ee8cc1Swenshuai.xi                         Audio_DEC_WMA        | Audio_DEC_WMAPRO   |
356*53ee8cc1Swenshuai.xi                         Audio_DEC_XPCM       | Audio_DEC_VORBIS   |
357*53ee8cc1Swenshuai.xi                         Audio_DEC_DTS        | Audio_DEC_FLAC   |
358*53ee8cc1Swenshuai.xi                         Audio_DEC_DTSLBR     | Audio_DEC_DRA | Audio_DEC_DTS_HD_ADO_R2;
359*53ee8cc1Swenshuai.xi         }
360*53ee8cc1Swenshuai.xi     }
361*53ee8cc1Swenshuai.xi 
362*53ee8cc1Swenshuai.xi     return eAudioCaps;
363*53ee8cc1Swenshuai.xi }
364*53ee8cc1Swenshuai.xi 
365*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
366*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetAudioCapability()
367*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get DSP capability
368*53ee8cc1Swenshuai.xi /// @param <IN>        \b eDecId    : Dec ID
369*53ee8cc1Swenshuai.xi /// @param <IN>        \b p_AudioDecStatus :   Audio Dec Status structure
370*53ee8cc1Swenshuai.xi /// @param <RET>       \b value :     0-- eDecId not support
371*53ee8cc1Swenshuai.xi ///                                                  1--  eDecId support
372*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetAudioCapability(AUDIO_DEC_ID eDecId,AudioDecStatus_t * p_AudioDecStatus)373*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_GetAudioCapability(AUDIO_DEC_ID eDecId, AudioDecStatus_t * p_AudioDecStatus)
374*53ee8cc1Swenshuai.xi {
375*53ee8cc1Swenshuai.xi     MS_BOOL ret = FALSE;
376*53ee8cc1Swenshuai.xi 
377*53ee8cc1Swenshuai.xi     if (eDecId == AU_DEC_ID2)
378*53ee8cc1Swenshuai.xi     {
379*53ee8cc1Swenshuai.xi         return ret;
380*53ee8cc1Swenshuai.xi     }
381*53ee8cc1Swenshuai.xi 
382*53ee8cc1Swenshuai.xi     switch ((p_AudioDecStatus->eSourceType))
383*53ee8cc1Swenshuai.xi     {
384*53ee8cc1Swenshuai.xi         case E_AUDIO_INFO_HDMI_IN: // HDMI should decode in SE and DEC DSP, always return true
385*53ee8cc1Swenshuai.xi         case E_AUDIO_INFO_ATV_IN:
386*53ee8cc1Swenshuai.xi             ret = TRUE;
387*53ee8cc1Swenshuai.xi             break;
388*53ee8cc1Swenshuai.xi 
389*53ee8cc1Swenshuai.xi         case E_AUDIO_INFO_DTV_IN:
390*53ee8cc1Swenshuai.xi             if ((p_AudioDecStatus->eGroup == E_CONNECT_MAIN) ||
391*53ee8cc1Swenshuai.xi                  (p_AudioDecStatus->eGroup == E_CONNECT_SUB))
392*53ee8cc1Swenshuai.xi             {
393*53ee8cc1Swenshuai.xi                 ret = TRUE;
394*53ee8cc1Swenshuai.xi             }
395*53ee8cc1Swenshuai.xi             break;
396*53ee8cc1Swenshuai.xi 
397*53ee8cc1Swenshuai.xi         case E_AUDIO_INFO_MM_IN:
398*53ee8cc1Swenshuai.xi         case E_AUDIO_INFO_GAME_IN:
399*53ee8cc1Swenshuai.xi             ret = TRUE;
400*53ee8cc1Swenshuai.xi             break;
401*53ee8cc1Swenshuai.xi 
402*53ee8cc1Swenshuai.xi         default:
403*53ee8cc1Swenshuai.xi             if ((p_AudioDecStatus->eAudFormat) == (_GetAudioCaps(eDecId) & (p_AudioDecStatus->eAudFormat)))
404*53ee8cc1Swenshuai.xi             {
405*53ee8cc1Swenshuai.xi                 ret = TRUE;
406*53ee8cc1Swenshuai.xi             }
407*53ee8cc1Swenshuai.xi             break;
408*53ee8cc1Swenshuai.xi     }
409*53ee8cc1Swenshuai.xi 
410*53ee8cc1Swenshuai.xi     return ret;
411*53ee8cc1Swenshuai.xi }
412*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
413*53ee8cc1Swenshuai.xi //  Global Functions
414*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
415*53ee8cc1Swenshuai.xi 
416*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
417*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
418*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
419*53ee8cc1Swenshuai.xi ///
420*53ee8cc1Swenshuai.xi ///        AUDIO_MAD SYSETM Relational Hal Function
421*53ee8cc1Swenshuai.xi ///
422*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
423*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
424*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
425*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
426*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_Read_DSP_sram()
427*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Read DSP internal sram value by IDMA
428*53ee8cc1Swenshuai.xi /// @param <IN>        \b dsp_addr    : DSP internal sram address
429*53ee8cc1Swenshuai.xi /// @param <IN>        \b dsp_memory_type :    0--DSP_MEM_TYPE_PM
430*53ee8cc1Swenshuai.xi ///                                1--DSP_MEM_TYPE_DM
431*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
432*53ee8cc1Swenshuai.xi /// @param <RET>       \b value :    U32 sram value
433*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
434*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_Read_DSP_sram(MS_U16 u16Dsp_addr,AUDIO_DSP_MEMORY_TYPE dsp_memory_type)435*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_Read_DSP_sram(MS_U16 u16Dsp_addr,AUDIO_DSP_MEMORY_TYPE dsp_memory_type)
436*53ee8cc1Swenshuai.xi {
437*53ee8cc1Swenshuai.xi // Do nothing because no DEC-DSP in Monoco
438*53ee8cc1Swenshuai.xi     UNUSED(u16Dsp_addr);
439*53ee8cc1Swenshuai.xi     UNUSED(dsp_memory_type);
440*53ee8cc1Swenshuai.xi 
441*53ee8cc1Swenshuai.xi     return 0;
442*53ee8cc1Swenshuai.xi }
443*53ee8cc1Swenshuai.xi 
444*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
445*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_Write_DSP_sram()
446*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Write DSP internal sram value by IDMA
447*53ee8cc1Swenshuai.xi /// @param <IN>        \b dsp_addr    : DSP internal sram address
448*53ee8cc1Swenshuai.xi /// @param <IN>        \b value     : data want to write
449*53ee8cc1Swenshuai.xi /// @param <IN>        \b dsp_memory_type :    0-- write to DSP_MEM_TYPE_PM
450*53ee8cc1Swenshuai.xi ///                                        1-- write to DSP_MEM_TYPE_DM
451*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
452*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE  : TRUE/FALSE
453*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
454*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_Write_DSP_sram(MS_U16 dsp_addr,MS_U32 value,AUDIO_DSP_MEMORY_TYPE dsp_memory_type)455*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_Write_DSP_sram(MS_U16 dsp_addr, MS_U32 value, AUDIO_DSP_MEMORY_TYPE dsp_memory_type)
456*53ee8cc1Swenshuai.xi {
457*53ee8cc1Swenshuai.xi  // Do nothing because no DEC-DSP in Monoco
458*53ee8cc1Swenshuai.xi     UNUSED(dsp_addr);
459*53ee8cc1Swenshuai.xi     UNUSED(value);
460*53ee8cc1Swenshuai.xi     UNUSED(dsp_memory_type);
461*53ee8cc1Swenshuai.xi 
462*53ee8cc1Swenshuai.xi     return TRUE;
463*53ee8cc1Swenshuai.xi }
464*53ee8cc1Swenshuai.xi 
465*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
466*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_Init()
467*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:  This routine is the initialization for DVB module
468*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
469*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
470*53ee8cc1Swenshuai.xi /// @param <RET>       \b  NONE    :
471*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
472*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_Init(void)473*53ee8cc1Swenshuai.xi void HAL_MAD_Init(void)
474*53ee8cc1Swenshuai.xi {
475*53ee8cc1Swenshuai.xi //CarhyNeedReview
476*53ee8cc1Swenshuai.xi 
477*53ee8cc1Swenshuai.xi     // to do : R2 init
478*53ee8cc1Swenshuai.xi     HAL_MAD_LoadCode(AU_DVB_STANDARD_MPEG);
479*53ee8cc1Swenshuai.xi 
480*53ee8cc1Swenshuai.xi     g_FuncPrt_Hal_SetAudioParam2 = HAL_MAD_SetAudioParam2;
481*53ee8cc1Swenshuai.xi     g_FuncPrt_Hal_GetAudioInfo2 = HAL_MAD_GetAudioInfo2;
482*53ee8cc1Swenshuai.xi     g_FuncPtr_CheckCapability = HAL_MAD_GetAudioCapability;
483*53ee8cc1Swenshuai.xi }
484*53ee8cc1Swenshuai.xi 
485*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
486*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetMemInfo()
487*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:  This routine is used to set the DEC-DSP memory information
488*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
489*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
490*53ee8cc1Swenshuai.xi /// @param <RET>       \b  NONE    :
491*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
492*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetMemInfo(void)493*53ee8cc1Swenshuai.xi void HAL_MAD_SetMemInfo(void)
494*53ee8cc1Swenshuai.xi {
495*53ee8cc1Swenshuai.xi   // Remove all memory Info(SE-DSP & R2) to SetMemInfo2
496*53ee8cc1Swenshuai.xi     return;
497*53ee8cc1Swenshuai.xi }
498*53ee8cc1Swenshuai.xi 
499*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
500*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetEncCmd()
501*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to set encode command.
502*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8EncCmd    :
503*53ee8cc1Swenshuai.xi ///                                    0--STOP
504*53ee8cc1Swenshuai.xi ///                                    1--START ENCODE
505*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
506*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
507*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
508*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetEncCmd(AU_DVB_ENCCMD u8EncCmd)509*53ee8cc1Swenshuai.xi void HAL_MAD_SetEncCmd(AU_DVB_ENCCMD u8EncCmd)
510*53ee8cc1Swenshuai.xi {
511*53ee8cc1Swenshuai.xi     // not use,  remove
512*53ee8cc1Swenshuai.xi }
513*53ee8cc1Swenshuai.xi 
514*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
515*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_EncodeInit()    @@ function can be extended
516*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to init encode parameter.
517*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8EncBr    :
518*53ee8cc1Swenshuai.xi ///                               Encode Output Bitrate:   0:192kBps, 1:384kBps, 2:128kBps, 3:64kBps
519*53ee8cc1Swenshuai.xi ///                           \b
520*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
521*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
522*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
523*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_EncodeInit(AU_DVB_ENCBR u8EncBr,MS_U8 u8EncFrameNum)524*53ee8cc1Swenshuai.xi void HAL_MAD_EncodeInit(AU_DVB_ENCBR u8EncBr, MS_U8 u8EncFrameNum)
525*53ee8cc1Swenshuai.xi {
526*53ee8cc1Swenshuai.xi     // not use,  remove
527*53ee8cc1Swenshuai.xi }
528*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
529*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_AUDIO_GetEncodeFrameInfo()   @@kochien added for PVR
530*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:  This routine is used to get encoded frame information
531*53ee8cc1Swenshuai.xi /// @param <IN>        \b u32Addr    : encoded frame start address
532*53ee8cc1Swenshuai.xi /// @param <IN>        \b u32Size     : encoded frame data size
533*53ee8cc1Swenshuai.xi /// @param <IN>        \b u64EncIdx  :  frame idx for PTS
534*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
535*53ee8cc1Swenshuai.xi /// @param <RET>       \b  NONE    :
536*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
537*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_AUDIO_GetEncodeFrameInfo(AU_DVB_ENC_FRAME_INFO * FrameInfo)538*53ee8cc1Swenshuai.xi void HAL_AUDIO_GetEncodeFrameInfo(AU_DVB_ENC_FRAME_INFO *FrameInfo)
539*53ee8cc1Swenshuai.xi {
540*53ee8cc1Swenshuai.xi     // not use,  remove
541*53ee8cc1Swenshuai.xi }
542*53ee8cc1Swenshuai.xi 
543*53ee8cc1Swenshuai.xi 
544*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
545*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_setDecCmd()
546*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to set  the DVB1 decode command.
547*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8DecCmd    :
548*53ee8cc1Swenshuai.xi ///                                    0--STOP
549*53ee8cc1Swenshuai.xi ///                                    1--PLAY
550*53ee8cc1Swenshuai.xi ///                                    1--RESYNC
551*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
552*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
553*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
554*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetDecCmd(AU_DVB_DECCMD u8DecCmd)555*53ee8cc1Swenshuai.xi void HAL_MAD_SetDecCmd(AU_DVB_DECCMD u8DecCmd)
556*53ee8cc1Swenshuai.xi {
557*53ee8cc1Swenshuai.xi     MS_U8   FREERUN_STATE = 0;
558*53ee8cc1Swenshuai.xi     MS_U16  u16_timeout = 0;
559*53ee8cc1Swenshuai.xi     MS_U32  u32_r2_cmd = 0, u32_driver_cmd = 0;
560*53ee8cc1Swenshuai.xi     DBG_MAD(printf("HAL_MAD_setDecCmd:(%x)\r\n",u8DecCmd));
561*53ee8cc1Swenshuai.xi 
562*53ee8cc1Swenshuai.xi     if (u8DecCmd == AU_DVB_DECCMD_AVSYNC)
563*53ee8cc1Swenshuai.xi     {
564*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x80, 0x00);  // bit[15] = 0
565*53ee8cc1Swenshuai.xi     }
566*53ee8cc1Swenshuai.xi     else if (u8DecCmd == AU_DVB_DECCMD_FREERUN)
567*53ee8cc1Swenshuai.xi     {
568*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x80, 0x80); // bit[15] = 1, AU_DEC_R2_CMD_FREERUN
569*53ee8cc1Swenshuai.xi     }
570*53ee8cc1Swenshuai.xi     else
571*53ee8cc1Swenshuai.xi     {
572*53ee8cc1Swenshuai.xi 
573*53ee8cc1Swenshuai.xi         switch(u8DecCmd)
574*53ee8cc1Swenshuai.xi         {
575*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_STOP:
576*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FILE_REQ_SIZE, ADEC1, 0, 0);
577*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, 0, 0);           //Set ES write pointer  to start point.
578*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0xEF, AU_DEC_R2_CMD_STOP);
579*53ee8cc1Swenshuai.xi                 break;
580*53ee8cc1Swenshuai.xi 
581*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_PLAY:
582*53ee8cc1Swenshuai.xi                 if (g_AudioVars2->g_u8MADSkipResetFlag == TRUE)
583*53ee8cc1Swenshuai.xi                 {
584*53ee8cc1Swenshuai.xi                     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FILE_REQ_SIZE, ADEC1, 0, 0);
585*53ee8cc1Swenshuai.xi                     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, 0, 0);           //Set ES write pointer  to start point.
586*53ee8cc1Swenshuai.xi                     HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0xFF, AU_DEC_R2_CMD_STOP);
587*53ee8cc1Swenshuai.xi                     g_AudioVars2->g_u8MADSkipResetFlag = FALSE;
588*53ee8cc1Swenshuai.xi                 }
589*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x6F, AU_DEC_R2_CMD_PLAY);
590*53ee8cc1Swenshuai.xi                 break;
591*53ee8cc1Swenshuai.xi 
592*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_PLAYFILETSP:
593*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x6F, AU_DEC_R2_CMD_PLAYFILETSP);
594*53ee8cc1Swenshuai.xi                 break;
595*53ee8cc1Swenshuai.xi 
596*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_PLAYFRAME_GS :
597*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x6F, AU_DEC_R2_CMD_PLAYUNI);
598*53ee8cc1Swenshuai.xi                 break;
599*53ee8cc1Swenshuai.xi 
600*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_PLAYFILE:
601*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_PLAYFILE2_PTS:
602*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x6F, AU_DEC_R2_CMD_PLAYFILE);
603*53ee8cc1Swenshuai.xi                 break;
604*53ee8cc1Swenshuai.xi 
605*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_PLAY_AD:
606*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x10, AU_DEC_R2_CMD_PLAY_AD);
607*53ee8cc1Swenshuai.xi                 break;
608*53ee8cc1Swenshuai.xi 
609*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_STOP_AD:
610*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x10, 0x00);
611*53ee8cc1Swenshuai.xi                 break;
612*53ee8cc1Swenshuai.xi 
613*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_PAUSE:
614*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x40, AU_DEC_R2_CMD_PAUSE);
615*53ee8cc1Swenshuai.xi                 break;
616*53ee8cc1Swenshuai.xi 
617*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_SKIP:
618*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x7F, AU_DEC_R2_CMD_SKIP);
619*53ee8cc1Swenshuai.xi                 g_AudioVars2->g_u8MADSkipResetFlag = TRUE;
620*53ee8cc1Swenshuai.xi                 break;
621*53ee8cc1Swenshuai.xi 
622*53ee8cc1Swenshuai.xi             default:
623*53ee8cc1Swenshuai.xi                 break;
624*53ee8cc1Swenshuai.xi         }
625*53ee8cc1Swenshuai.xi 
626*53ee8cc1Swenshuai.xi         FREERUN_STATE = HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_CMD)&0x80; // check free-run
627*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x80, FREERUN_STATE);
628*53ee8cc1Swenshuai.xi 
629*53ee8cc1Swenshuai.xi         /* handshake scheme between R2 and Driver */
630*53ee8cc1Swenshuai.xi         if((u8DecCmd == AU_DVB_DECCMD_PLAY)||(u8DecCmd == AU_DVB_DECCMD_PLAYFILETSP)||(u8DecCmd == AU_DVB_DECCMD_PLAYFILE)
631*53ee8cc1Swenshuai.xi         ||(u8DecCmd == AU_DVB_DECCMD_PLAYFRAME)||(u8DecCmd == AU_DVB_DECCMD_PLAYFRAME_STAGE)||(u8DecCmd == AU_DVB_DECCMD_PLAYFRAME_GS)||(u8DecCmd == AU_DVB_DECCMD_PLAYFILE2_PTS))
632*53ee8cc1Swenshuai.xi         {
633*53ee8cc1Swenshuai.xi             u32_driver_cmd = R2_DECCMD_PLAY;  //DEC_PLAYSTATE_PLAY
634*53ee8cc1Swenshuai.xi         }
635*53ee8cc1Swenshuai.xi         else if(u8DecCmd == AU_DVB_DECCMD_STOP)
636*53ee8cc1Swenshuai.xi         {
637*53ee8cc1Swenshuai.xi             u32_driver_cmd = R2_DECCMD_STOP;  //DEC_PLAYSTATE_STOP
638*53ee8cc1Swenshuai.xi         }
639*53ee8cc1Swenshuai.xi         else if(u8DecCmd == AU_DVB_DECCMD_PAUSE)
640*53ee8cc1Swenshuai.xi         {
641*53ee8cc1Swenshuai.xi             u32_driver_cmd = R2_DECCMD_PAUSE;  //DEC_PLAYSTATE_PAUSE
642*53ee8cc1Swenshuai.xi         }
643*53ee8cc1Swenshuai.xi         else
644*53ee8cc1Swenshuai.xi         {
645*53ee8cc1Swenshuai.xi             return;
646*53ee8cc1Swenshuai.xi         }
647*53ee8cc1Swenshuai.xi 
648*53ee8cc1Swenshuai.xi         /* wait command passing to r2 */
649*53ee8cc1Swenshuai.xi         while(u16_timeout++ < 100)
650*53ee8cc1Swenshuai.xi         {
651*53ee8cc1Swenshuai.xi             u32_r2_cmd = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PLAY_STATE, ADEC1)&0x00FFFFFF;
652*53ee8cc1Swenshuai.xi             AUDIO_DELAY1MS(1);
653*53ee8cc1Swenshuai.xi             if (u32_r2_cmd == u32_driver_cmd)
654*53ee8cc1Swenshuai.xi                 break;
655*53ee8cc1Swenshuai.xi         }
656*53ee8cc1Swenshuai.xi 
657*53ee8cc1Swenshuai.xi         if (u16_timeout >= 100 )
658*53ee8cc1Swenshuai.xi         {
659*53ee8cc1Swenshuai.xi             HALMAD_ERROR(" ===  HAL_MAD_SetDecCmd %d fail===\n",u8DecCmd);
660*53ee8cc1Swenshuai.xi         }
661*53ee8cc1Swenshuai.xi     }
662*53ee8cc1Swenshuai.xi }
663*53ee8cc1Swenshuai.xi 
HAL_MAD_SetDecCmd2(AUDIO_DEC_ID DecId,AU_DVB_DECCMD u8DecCmd)664*53ee8cc1Swenshuai.xi void HAL_MAD_SetDecCmd2(AUDIO_DEC_ID DecId, AU_DVB_DECCMD u8DecCmd)
665*53ee8cc1Swenshuai.xi {
666*53ee8cc1Swenshuai.xi     if (AUDIO_DSP_ID_DEC == g_AudioVars2->AudioDecStatus[DecId].eDSPId)
667*53ee8cc1Swenshuai.xi     {
668*53ee8cc1Swenshuai.xi         // ADEC DSP
669*53ee8cc1Swenshuai.xi         HAL_MAD_SetDecCmd(u8DecCmd);
670*53ee8cc1Swenshuai.xi     }
671*53ee8cc1Swenshuai.xi     else if (AUDIO_DSP_ID_SND == g_AudioVars2->AudioDecStatus[DecId].eDSPId)
672*53ee8cc1Swenshuai.xi     {
673*53ee8cc1Swenshuai.xi         // ASND DSP
674*53ee8cc1Swenshuai.xi         HAL_MAD_SetDSP2DecCmd(u8DecCmd);
675*53ee8cc1Swenshuai.xi     }
676*53ee8cc1Swenshuai.xi     else
677*53ee8cc1Swenshuai.xi     {
678*53ee8cc1Swenshuai.xi         // AU_DEC_ID2 only for ATV SIF
679*53ee8cc1Swenshuai.xi         // For other case should not use AU_DEC_ID2
680*53ee8cc1Swenshuai.xi         return;
681*53ee8cc1Swenshuai.xi     }
682*53ee8cc1Swenshuai.xi 
683*53ee8cc1Swenshuai.xi     if(g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_DTV_IN)
684*53ee8cc1Swenshuai.xi     {
685*53ee8cc1Swenshuai.xi         switch(DecId)
686*53ee8cc1Swenshuai.xi         {
687*53ee8cc1Swenshuai.xi             case AU_DEC_ID1:
688*53ee8cc1Swenshuai.xi             case AU_DEC_ID2:
689*53ee8cc1Swenshuai.xi             {
690*53ee8cc1Swenshuai.xi                 switch(u8DecCmd)
691*53ee8cc1Swenshuai.xi                 {
692*53ee8cc1Swenshuai.xi                     case AU_DVB_DECCMD_PLAY_AD:
693*53ee8cc1Swenshuai.xi                     {
694*53ee8cc1Swenshuai.xi                         g_bR2Adec1AD = TRUE;
695*53ee8cc1Swenshuai.xi                     }
696*53ee8cc1Swenshuai.xi                     break;
697*53ee8cc1Swenshuai.xi                     case AU_DVB_DECCMD_STOP_AD:
698*53ee8cc1Swenshuai.xi                     {
699*53ee8cc1Swenshuai.xi                         g_bR2Adec1AD = FALSE;
700*53ee8cc1Swenshuai.xi                     }
701*53ee8cc1Swenshuai.xi                     break;
702*53ee8cc1Swenshuai.xi                     default:
703*53ee8cc1Swenshuai.xi                         break;
704*53ee8cc1Swenshuai.xi                 }
705*53ee8cc1Swenshuai.xi             }
706*53ee8cc1Swenshuai.xi             break;
707*53ee8cc1Swenshuai.xi             case AU_DEC_ID3:
708*53ee8cc1Swenshuai.xi             {
709*53ee8cc1Swenshuai.xi                 switch(u8DecCmd)
710*53ee8cc1Swenshuai.xi                 {
711*53ee8cc1Swenshuai.xi                     case AU_DVB_DECCMD_PLAY_AD:
712*53ee8cc1Swenshuai.xi                     {
713*53ee8cc1Swenshuai.xi                         g_bR2Adec2AD = TRUE;
714*53ee8cc1Swenshuai.xi                     }
715*53ee8cc1Swenshuai.xi                     break;
716*53ee8cc1Swenshuai.xi                     case AU_DVB_DECCMD_STOP_AD:
717*53ee8cc1Swenshuai.xi                     {
718*53ee8cc1Swenshuai.xi                         g_bR2Adec2AD = FALSE;
719*53ee8cc1Swenshuai.xi                     }
720*53ee8cc1Swenshuai.xi                     break;
721*53ee8cc1Swenshuai.xi                     default:
722*53ee8cc1Swenshuai.xi                         break;
723*53ee8cc1Swenshuai.xi                 }
724*53ee8cc1Swenshuai.xi             }
725*53ee8cc1Swenshuai.xi             break;
726*53ee8cc1Swenshuai.xi             default:
727*53ee8cc1Swenshuai.xi                 break;
728*53ee8cc1Swenshuai.xi         }
729*53ee8cc1Swenshuai.xi     }
730*53ee8cc1Swenshuai.xi 
731*53ee8cc1Swenshuai.xi     switch(DecId)
732*53ee8cc1Swenshuai.xi     {
733*53ee8cc1Swenshuai.xi         case AU_DEC_ID1:
734*53ee8cc1Swenshuai.xi         case AU_DEC_ID2:
735*53ee8cc1Swenshuai.xi         {
736*53ee8cc1Swenshuai.xi             switch(g_bR2Adec1AD)
737*53ee8cc1Swenshuai.xi             {
738*53ee8cc1Swenshuai.xi                 case TRUE:
739*53ee8cc1Swenshuai.xi                 {
740*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAY_AD);
741*53ee8cc1Swenshuai.xi                 }
742*53ee8cc1Swenshuai.xi                 break;
743*53ee8cc1Swenshuai.xi                 case FALSE:
744*53ee8cc1Swenshuai.xi                 {
745*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDecCmd(AU_DVB_DECCMD_STOP_AD);
746*53ee8cc1Swenshuai.xi                 }
747*53ee8cc1Swenshuai.xi                 break;
748*53ee8cc1Swenshuai.xi                 default:
749*53ee8cc1Swenshuai.xi                     break;
750*53ee8cc1Swenshuai.xi             }
751*53ee8cc1Swenshuai.xi         }
752*53ee8cc1Swenshuai.xi         break;
753*53ee8cc1Swenshuai.xi         case AU_DEC_ID3:
754*53ee8cc1Swenshuai.xi         {
755*53ee8cc1Swenshuai.xi             switch(g_bR2Adec2AD)
756*53ee8cc1Swenshuai.xi             {
757*53ee8cc1Swenshuai.xi                 case TRUE:
758*53ee8cc1Swenshuai.xi                 {
759*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_PLAY_AD);
760*53ee8cc1Swenshuai.xi                 }
761*53ee8cc1Swenshuai.xi                 break;
762*53ee8cc1Swenshuai.xi                 case FALSE:
763*53ee8cc1Swenshuai.xi                 {
764*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_STOP_AD);
765*53ee8cc1Swenshuai.xi                 }
766*53ee8cc1Swenshuai.xi                 break;
767*53ee8cc1Swenshuai.xi                 default:
768*53ee8cc1Swenshuai.xi                     break;
769*53ee8cc1Swenshuai.xi             }
770*53ee8cc1Swenshuai.xi         }
771*53ee8cc1Swenshuai.xi         break;
772*53ee8cc1Swenshuai.xi         default:
773*53ee8cc1Swenshuai.xi             break;
774*53ee8cc1Swenshuai.xi     }
775*53ee8cc1Swenshuai.xi }
776*53ee8cc1Swenshuai.xi 
777*53ee8cc1Swenshuai.xi 
778*53ee8cc1Swenshuai.xi 
779*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
780*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetDSP2DecCmd()
781*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to set  the DVB3 decode command.
782*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8DecCmd    :
783*53ee8cc1Swenshuai.xi ///                                    0--STOP
784*53ee8cc1Swenshuai.xi ///                                    1--PLAY
785*53ee8cc1Swenshuai.xi ///                                    1--RESYNC
786*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
787*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
788*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
789*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD u8DecCmd)790*53ee8cc1Swenshuai.xi void HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD u8DecCmd)
791*53ee8cc1Swenshuai.xi {
792*53ee8cc1Swenshuai.xi     MS_U8   FREERUN_STATE = 0;
793*53ee8cc1Swenshuai.xi     MS_U16  u16_timeout = 0;
794*53ee8cc1Swenshuai.xi     MS_U32  u32_r2_cmd = 0, u32_driver_cmd = 0;
795*53ee8cc1Swenshuai.xi     DBG_MAD(printf("HAL_MAD_SetDSP2DecCmd:(%x)\r\n", u8DecCmd));
796*53ee8cc1Swenshuai.xi 
797*53ee8cc1Swenshuai.xi     if (u8DecCmd == AU_DVB_DECCMD_AVSYNC)
798*53ee8cc1Swenshuai.xi     {
799*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x80, 0x00);  // bit[15] = 0
800*53ee8cc1Swenshuai.xi     }
801*53ee8cc1Swenshuai.xi     else if (u8DecCmd == AU_DVB_DECCMD_FREERUN)
802*53ee8cc1Swenshuai.xi     {
803*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x80, 0x80); // bit[15] = 1, AU_DEC_R2_CMD_FREERUN
804*53ee8cc1Swenshuai.xi     }
805*53ee8cc1Swenshuai.xi     else
806*53ee8cc1Swenshuai.xi     {
807*53ee8cc1Swenshuai.xi 
808*53ee8cc1Swenshuai.xi         switch(u8DecCmd)
809*53ee8cc1Swenshuai.xi         {
810*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_STOP:
811*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FILE_REQ_SIZE, ADEC2, 0, 0);
812*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, 0, 0);           //Set ES write pointer  to start point.
813*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0xFF, AU_DEC_R2_CMD_STOP);
814*53ee8cc1Swenshuai.xi                 break;
815*53ee8cc1Swenshuai.xi 
816*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_PLAY:
817*53ee8cc1Swenshuai.xi                 if (g_AudioVars2->g_u8MAD2SkipResetFlag == TRUE)
818*53ee8cc1Swenshuai.xi                 {
819*53ee8cc1Swenshuai.xi                     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FILE_REQ_SIZE, ADEC2, 0, 0);
820*53ee8cc1Swenshuai.xi                     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, 0, 0);           //Set ES write pointer  to start point.
821*53ee8cc1Swenshuai.xi                     HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x7F, AU_DEC_R2_CMD_STOP);
822*53ee8cc1Swenshuai.xi                     g_AudioVars2->g_u8MAD2SkipResetFlag = FALSE;
823*53ee8cc1Swenshuai.xi                     AUDIO_DELAY1MS(20);
824*53ee8cc1Swenshuai.xi                 }
825*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x7F, AU_DEC_R2_CMD_PLAY);
826*53ee8cc1Swenshuai.xi                 break;
827*53ee8cc1Swenshuai.xi 
828*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_PLAYFILETSP:
829*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x7F, AU_DEC_R2_CMD_PLAYFILETSP);
830*53ee8cc1Swenshuai.xi                 break;
831*53ee8cc1Swenshuai.xi 
832*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_PLAYFRAME_GS :
833*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x7F, AU_DEC_R2_CMD_PLAYUNI);
834*53ee8cc1Swenshuai.xi                 break;
835*53ee8cc1Swenshuai.xi 
836*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_PLAYFILE:
837*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_PLAYFILE2_PTS:
838*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x7F, AU_DEC_R2_CMD_PLAYFILE);
839*53ee8cc1Swenshuai.xi                 break;
840*53ee8cc1Swenshuai.xi 
841*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_PAUSE:
842*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x40, AU_DEC_R2_CMD_PAUSE);
843*53ee8cc1Swenshuai.xi                 break;
844*53ee8cc1Swenshuai.xi 
845*53ee8cc1Swenshuai.xi             case AU_DVB_DECCMD_SKIP:
846*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x7F, AU_DEC_R2_CMD_SKIP);
847*53ee8cc1Swenshuai.xi                 g_AudioVars2->g_u8MAD2SkipResetFlag = TRUE;
848*53ee8cc1Swenshuai.xi                 break;
849*53ee8cc1Swenshuai.xi 
850*53ee8cc1Swenshuai.xi             default:
851*53ee8cc1Swenshuai.xi                 break;
852*53ee8cc1Swenshuai.xi         }
853*53ee8cc1Swenshuai.xi 
854*53ee8cc1Swenshuai.xi         FREERUN_STATE = HAL_AUDIO_AbsReadByte(REG_R2_DECODE2_CMD)&0x80; // check free-run
855*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE2_CMD, 0x80, FREERUN_STATE);
856*53ee8cc1Swenshuai.xi         /* handshake scheme between R2 and Driver */
857*53ee8cc1Swenshuai.xi         if((u8DecCmd == AU_DVB_DECCMD_PLAY)||(u8DecCmd == AU_DVB_DECCMD_PLAYFILETSP)||(u8DecCmd == AU_DVB_DECCMD_PLAYFILE)
858*53ee8cc1Swenshuai.xi         ||(u8DecCmd == AU_DVB_DECCMD_PLAYFRAME)||(u8DecCmd == AU_DVB_DECCMD_PLAYFRAME_STAGE)||(u8DecCmd == AU_DVB_DECCMD_PLAYFRAME_GS)||(u8DecCmd == AU_DVB_DECCMD_PLAYFILE2_PTS))
859*53ee8cc1Swenshuai.xi         {
860*53ee8cc1Swenshuai.xi             u32_driver_cmd = R2_DECCMD_PLAY;  //DEC_PLAYSTATE_PLAY
861*53ee8cc1Swenshuai.xi         }
862*53ee8cc1Swenshuai.xi         else if(u8DecCmd == AU_DVB_DECCMD_STOP)
863*53ee8cc1Swenshuai.xi         {
864*53ee8cc1Swenshuai.xi             u32_driver_cmd = R2_DECCMD_STOP;  //DEC_PLAYSTATE_STOP
865*53ee8cc1Swenshuai.xi         }
866*53ee8cc1Swenshuai.xi         else if(u8DecCmd == AU_DVB_DECCMD_PAUSE)
867*53ee8cc1Swenshuai.xi         {
868*53ee8cc1Swenshuai.xi             u32_driver_cmd = R2_DECCMD_PAUSE;  //DEC_PLAYSTATE_PAUSE
869*53ee8cc1Swenshuai.xi         }
870*53ee8cc1Swenshuai.xi         else
871*53ee8cc1Swenshuai.xi         {
872*53ee8cc1Swenshuai.xi             return;
873*53ee8cc1Swenshuai.xi         }
874*53ee8cc1Swenshuai.xi 
875*53ee8cc1Swenshuai.xi         /* wait command passing to r2 */
876*53ee8cc1Swenshuai.xi         while(u16_timeout++ < 100)
877*53ee8cc1Swenshuai.xi         {
878*53ee8cc1Swenshuai.xi             u32_r2_cmd = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PLAY_STATE, ADEC2)&0x00FFFFFF;
879*53ee8cc1Swenshuai.xi             AUDIO_DELAY1MS(1);
880*53ee8cc1Swenshuai.xi             if (u32_r2_cmd == u32_driver_cmd)
881*53ee8cc1Swenshuai.xi                 break;
882*53ee8cc1Swenshuai.xi         }
883*53ee8cc1Swenshuai.xi 
884*53ee8cc1Swenshuai.xi         if (u16_timeout >= 100 )
885*53ee8cc1Swenshuai.xi         {
886*53ee8cc1Swenshuai.xi             HALMAD_ERROR(" ===  HAL_MAD_SetDSP2DecCmd %d fail===\n",u8DecCmd);
887*53ee8cc1Swenshuai.xi         }
888*53ee8cc1Swenshuai.xi     }
889*53ee8cc1Swenshuai.xi }
890*53ee8cc1Swenshuai.xi 
891*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
892*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetDecCmd()
893*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to get  the DVB1 decode command.
894*53ee8cc1Swenshuai.xi /// @param <OUT>        \b AU_DVB_DECCMD   :
895*53ee8cc1Swenshuai.xi //                                          AU_DVB_DECCMD_STOP,      //0
896*53ee8cc1Swenshuai.xi //                                          AU_DVB_DECCMD_PLAY,      //1
897*53ee8cc1Swenshuai.xi //                                          AU_DVB_DECCMD_PLAYFILETSP = 2,
898*53ee8cc1Swenshuai.xi //                                          AU_DVB_DECCMD_RESYNC,
899*53ee8cc1Swenshuai.xi //                                          ....etc
900*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
901*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
902*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
903*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetDecCmd(En_DVB_AudioDecoder AdoDecoderNo)904*53ee8cc1Swenshuai.xi AU_DVB_DECCMD HAL_MAD_GetDecCmd(En_DVB_AudioDecoder AdoDecoderNo)
905*53ee8cc1Swenshuai.xi {
906*53ee8cc1Swenshuai.xi     AU_DEC_R2_CMD   r2cmd_status = AU_DEC_R2_CMD_STOP;
907*53ee8cc1Swenshuai.xi     AU_DVB_DECCMD  ret_deccmd = AU_DVB_DECCMD_STOP;
908*53ee8cc1Swenshuai.xi 
909*53ee8cc1Swenshuai.xi     switch (AdoDecoderNo)
910*53ee8cc1Swenshuai.xi     {
911*53ee8cc1Swenshuai.xi         case DVB_Audio_Decoder1:
912*53ee8cc1Swenshuai.xi         {
913*53ee8cc1Swenshuai.xi             r2cmd_status = HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_CMD);
914*53ee8cc1Swenshuai.xi             r2cmd_status &= ~AU_DEC_R2_CMD_PLAY_AD; /* Discard AU_DEC_R2_CMD_PLAY_AD */
915*53ee8cc1Swenshuai.xi             r2cmd_status &= ~AU_DEC_R2_CMD_FREERUN; /* Discard AU_DEC_R2_CMD_FREERUN */
916*53ee8cc1Swenshuai.xi             break;
917*53ee8cc1Swenshuai.xi         }
918*53ee8cc1Swenshuai.xi 
919*53ee8cc1Swenshuai.xi         case DVB_Audio_Decoder2:
920*53ee8cc1Swenshuai.xi         {
921*53ee8cc1Swenshuai.xi             r2cmd_status = HAL_AUDIO_AbsReadByte(REG_R2_DECODE2_CMD);
922*53ee8cc1Swenshuai.xi             r2cmd_status = r2cmd_status & 0x7F;
923*53ee8cc1Swenshuai.xi             break;
924*53ee8cc1Swenshuai.xi         }
925*53ee8cc1Swenshuai.xi 
926*53ee8cc1Swenshuai.xi         default:
927*53ee8cc1Swenshuai.xi             break;
928*53ee8cc1Swenshuai.xi     }
929*53ee8cc1Swenshuai.xi 
930*53ee8cc1Swenshuai.xi     /*
931*53ee8cc1Swenshuai.xi         need to report status cmd first (stauts cmd : free-run, pause, browse, play AD)
932*53ee8cc1Swenshuai.xi     */
933*53ee8cc1Swenshuai.xi 
934*53ee8cc1Swenshuai.xi     if((r2cmd_status & AU_DEC_R2_CMD_PAUSE) == AU_DEC_R2_CMD_PAUSE) // check pause
935*53ee8cc1Swenshuai.xi     {
936*53ee8cc1Swenshuai.xi         ret_deccmd = AU_DVB_DECCMD_PAUSE;
937*53ee8cc1Swenshuai.xi     }
938*53ee8cc1Swenshuai.xi     else if((r2cmd_status & AU_DEC_R2_CMD_STARTBROWSE) == AU_DEC_R2_CMD_STARTBROWSE)   // check startbrowse
939*53ee8cc1Swenshuai.xi     {
940*53ee8cc1Swenshuai.xi         ret_deccmd = AU_DVB_DECCMD_STARTBROWSE;
941*53ee8cc1Swenshuai.xi     }
942*53ee8cc1Swenshuai.xi     else if((r2cmd_status & AU_DEC_R2_CMD_PLAY_AD) == AU_DEC_R2_CMD_PLAY_AD)    // check play AD
943*53ee8cc1Swenshuai.xi     {
944*53ee8cc1Swenshuai.xi         ret_deccmd = AU_DVB_DECCMD_PLAY_AD;
945*53ee8cc1Swenshuai.xi     }
946*53ee8cc1Swenshuai.xi     else    // others : not status cmd
947*53ee8cc1Swenshuai.xi     {
948*53ee8cc1Swenshuai.xi         switch(r2cmd_status)
949*53ee8cc1Swenshuai.xi         {
950*53ee8cc1Swenshuai.xi             case AU_DEC_R2_CMD_STOP:
951*53ee8cc1Swenshuai.xi                 ret_deccmd = AU_DVB_DECCMD_STOP;
952*53ee8cc1Swenshuai.xi                 break;
953*53ee8cc1Swenshuai.xi 
954*53ee8cc1Swenshuai.xi             case AU_DEC_R2_CMD_PLAY:
955*53ee8cc1Swenshuai.xi                 ret_deccmd = AU_DVB_DECCMD_PLAY;
956*53ee8cc1Swenshuai.xi                 break;
957*53ee8cc1Swenshuai.xi 
958*53ee8cc1Swenshuai.xi             case AU_DEC_R2_CMD_PLAYFILETSP:
959*53ee8cc1Swenshuai.xi                 ret_deccmd = AU_DVB_DECCMD_PLAYFILETSP;
960*53ee8cc1Swenshuai.xi                 break;
961*53ee8cc1Swenshuai.xi 
962*53ee8cc1Swenshuai.xi             case AU_DEC_R2_CMD_PLAYUNI:
963*53ee8cc1Swenshuai.xi                 ret_deccmd = AU_DVB_DECCMD_PLAYFILE2_PTS;
964*53ee8cc1Swenshuai.xi                 break;
965*53ee8cc1Swenshuai.xi 
966*53ee8cc1Swenshuai.xi             case AU_DEC_R2_CMD_PLAYFILE:
967*53ee8cc1Swenshuai.xi                 ret_deccmd = AU_DVB_DECCMD_PLAYFILE;
968*53ee8cc1Swenshuai.xi                 break;
969*53ee8cc1Swenshuai.xi 
970*53ee8cc1Swenshuai.xi             default:
971*53ee8cc1Swenshuai.xi                 break;
972*53ee8cc1Swenshuai.xi         }
973*53ee8cc1Swenshuai.xi     }
974*53ee8cc1Swenshuai.xi 
975*53ee8cc1Swenshuai.xi     return ret_deccmd;
976*53ee8cc1Swenshuai.xi }
977*53ee8cc1Swenshuai.xi 
978*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
979*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_setFreeRun()
980*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to set  the decoder in free run or AV-sync mode.
981*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8FreeRun    :    0--normal AV sync
982*53ee8cc1Swenshuai.xi ///                                        1--free-run mode
983*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
984*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
985*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
986*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetFreeRun(MS_U8 u8FreeRun)987*53ee8cc1Swenshuai.xi void HAL_MAD_SetFreeRun( MS_U8  u8FreeRun )
988*53ee8cc1Swenshuai.xi {
989*53ee8cc1Swenshuai.xi     DBG_MAD(printf("HAL_MAD_setFreeRun:(%x)\r\n",u8FreeRun));
990*53ee8cc1Swenshuai.xi     if( u8FreeRun >= 2 ){
991*53ee8cc1Swenshuai.xi         DBG_MAD(printf("Invalid mode\r\n"));
992*53ee8cc1Swenshuai.xi         return;
993*53ee8cc1Swenshuai.xi     }
994*53ee8cc1Swenshuai.xi 
995*53ee8cc1Swenshuai.xi     HAL_AUDIO_AbsWriteMaskByte(REG_R2_DECODE1_CMD, 0x80, (u8FreeRun << 7));
996*53ee8cc1Swenshuai.xi }
997*53ee8cc1Swenshuai.xi 
998*53ee8cc1Swenshuai.xi 
999*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1000*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_DisEn_MIUREQ()
1001*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to reset DVB1 MIU request command.
1002*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE  :
1003*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE  :
1004*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE  :
1005*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE  :
1006*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_DisEn_MIUREQ(void)1007*53ee8cc1Swenshuai.xi void HAL_MAD_DisEn_MIUREQ(void)
1008*53ee8cc1Swenshuai.xi {
1009*53ee8cc1Swenshuai.xi     // Disable MIU Request
1010*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0040, 0x0040 );
1011*53ee8cc1Swenshuai.xi     AUDIO_DELAY1MS(1);
1012*53ee8cc1Swenshuai.xi     // Enable MIU Request
1013*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0040, 0x0000 );
1014*53ee8cc1Swenshuai.xi }
1015*53ee8cc1Swenshuai.xi 
1016*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1017*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_Dis_MIUREQ()
1018*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to reset DVB1 MIU request command.
1019*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE  :
1020*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE  :
1021*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE  :
1022*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE  :
1023*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_Dis_MIUREQ(void)1024*53ee8cc1Swenshuai.xi void HAL_MAD_Dis_MIUREQ(void)
1025*53ee8cc1Swenshuai.xi {
1026*53ee8cc1Swenshuai.xi     // Disable MIU Request
1027*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0040, 0x0040 );        // disable
1028*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0080, 0x0080 );          // reset MAD module
1029*53ee8cc1Swenshuai.xi }
1030*53ee8cc1Swenshuai.xi 
1031*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1032*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_RSTMAD_DisEn_MIUREQ()
1033*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to reset DVB1 MIU request command.
1034*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE  :
1035*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE  :
1036*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE  :
1037*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE  :
1038*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_RSTMAD_DisEn_MIUREQ(void)1039*53ee8cc1Swenshuai.xi void HAL_MAD_RSTMAD_DisEn_MIUREQ(void)
1040*53ee8cc1Swenshuai.xi {
1041*53ee8cc1Swenshuai.xi     // Disable MIU Request
1042*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0040, 0x0040 );        // disable
1043*53ee8cc1Swenshuai.xi     // Reset MAD
1044*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0080, 0x0080 );          // reset MAD module
1045*53ee8cc1Swenshuai.xi     AUDIO_DELAY1MS(1);
1046*53ee8cc1Swenshuai.xi     // Set MAD
1047*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0080, 0x00 );
1048*53ee8cc1Swenshuai.xi     // Enable MIU Request
1049*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskReg(REG_DEC_AUD_DTRL, 0x0040, 0x0000 );
1050*53ee8cc1Swenshuai.xi }
1051*53ee8cc1Swenshuai.xi 
1052*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1053*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_DSPACK()
1054*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to report DSP reload ACK cmd.
1055*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE  :
1056*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE  :
1057*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE  :
1058*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE  :
1059*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetReloadCodeAck(void)1060*53ee8cc1Swenshuai.xi MS_U8 HAL_MAD_GetReloadCodeAck(void)
1061*53ee8cc1Swenshuai.xi {
1062*53ee8cc1Swenshuai.xi     //NOT_DEFINE : to do
1063*53ee8cc1Swenshuai.xi     return(HAL_AUDIO_ReadByte(REG_MB_DE_ACK2));
1064*53ee8cc1Swenshuai.xi }
1065*53ee8cc1Swenshuai.xi 
1066*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1067*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_DSPACK()
1068*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to report DSP reload ACK cmd.
1069*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE  :
1070*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE  :
1071*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE  :
1072*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE  :
1073*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetLoadCodeAck(void)1074*53ee8cc1Swenshuai.xi MS_U8 HAL_MAD_GetLoadCodeAck(void)
1075*53ee8cc1Swenshuai.xi {
1076*53ee8cc1Swenshuai.xi     //NOT_DEFINE : to do
1077*53ee8cc1Swenshuai.xi     return(HAL_AUDIO_ReadByte(REG_MB_DE_ACK1));
1078*53ee8cc1Swenshuai.xi }
1079*53ee8cc1Swenshuai.xi 
1080*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1081*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_Rpt_DTVES()
1082*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to report AC3/MPEG stream if exist or not.
1083*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1084*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1085*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U8  :    the decoder status
1086*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1087*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_Rpt_DTVES(void)1088*53ee8cc1Swenshuai.xi MS_U8 HAL_MAD_Rpt_DTVES(void)
1089*53ee8cc1Swenshuai.xi {
1090*53ee8cc1Swenshuai.xi     MS_U8   Rpt_DTVES_tmp;
1091*53ee8cc1Swenshuai.xi     Rpt_DTVES_tmp = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, ADEC1);
1092*53ee8cc1Swenshuai.xi 
1093*53ee8cc1Swenshuai.xi     return Rpt_DTVES_tmp;
1094*53ee8cc1Swenshuai.xi }
1095*53ee8cc1Swenshuai.xi 
1096*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1097*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetStreamID_Mod()
1098*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to AC3 Stream ID mod.
1099*53ee8cc1Swenshuai.xi /// @param <IN>        \b stream_id_mod    :
1100*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1101*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE :
1102*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1103*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetStreamID_Mod(MS_U8 stream_id_mod)1104*53ee8cc1Swenshuai.xi void HAL_MAD_SetStreamID_Mod(MS_U8 stream_id_mod)
1105*53ee8cc1Swenshuai.xi {
1106*53ee8cc1Swenshuai.xi     //NOT_DEFINE : not used, remove
1107*53ee8cc1Swenshuai.xi }
1108*53ee8cc1Swenshuai.xi 
1109*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1110*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_ReadTimeStamp()
1111*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine returns the stmestamp while decoding file format.
1112*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1113*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1114*53ee8cc1Swenshuai.xi /// @param <RET>       \b timestamp    :    time stamp value
1115*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1116*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_ReadTimeStamp(void)1117*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_ReadTimeStamp(void)
1118*53ee8cc1Swenshuai.xi {
1119*53ee8cc1Swenshuai.xi     MS_U32 timestamp = 0;
1120*53ee8cc1Swenshuai.xi     MS_U32  pts = 0;
1121*53ee8cc1Swenshuai.xi 
1122*53ee8cc1Swenshuai.xi     pts = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_CURR_PTS, ADEC1);
1123*53ee8cc1Swenshuai.xi     timestamp = pts/45;
1124*53ee8cc1Swenshuai.xi 
1125*53ee8cc1Swenshuai.xi     return timestamp;
1126*53ee8cc1Swenshuai.xi }
1127*53ee8cc1Swenshuai.xi 
1128*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1129*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD__SetAdMixMode()
1130*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set MPEG mixed with AD or AD mixed with MPEG or not.
1131*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Mix_mode    :    0--main mix to AD
1132*53ee8cc1Swenshuai.xi ///                                    1--AD mix to main
1133*53ee8cc1Swenshuai.xi /// @param <IN>        \b bEnMix    :    0--disable AD mix
1134*53ee8cc1Swenshuai.xi ///                                    1--enable AD mix
1135*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1136*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE :
1137*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1138*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetAdMixMode(AD_MIX_MODE u8Mix_mode,MS_BOOL bEnMix)1139*53ee8cc1Swenshuai.xi void HAL_MAD_SetAdMixMode (AD_MIX_MODE u8Mix_mode, MS_BOOL bEnMix)
1140*53ee8cc1Swenshuai.xi {
1141*53ee8cc1Swenshuai.xi     //NOT_DEFINE
1142*53ee8cc1Swenshuai.xi     switch (u8Mix_mode)
1143*53ee8cc1Swenshuai.xi     {
1144*53ee8cc1Swenshuai.xi     case MAIN_MIX_AD:
1145*53ee8cc1Swenshuai.xi     case AD_MIX_MAIN:
1146*53ee8cc1Swenshuai.xi         HAL_AUDIO_WriteMaskReg(REG_MB_DEC3_CTRL, 0x8000, bEnMix<<15);  // IO_100 [15]
1147*53ee8cc1Swenshuai.xi         break;
1148*53ee8cc1Swenshuai.xi 
1149*53ee8cc1Swenshuai.xi     default:
1150*53ee8cc1Swenshuai.xi         break;
1151*53ee8cc1Swenshuai.xi     }
1152*53ee8cc1Swenshuai.xi }
1153*53ee8cc1Swenshuai.xi 
1154*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1155*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetMcuCmd()
1156*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to write MCU cmd for PIO.
1157*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE  :
1158*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE  :
1159*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE  :
1160*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE  :
1161*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetPIOCmd(MS_U8 cmd)1162*53ee8cc1Swenshuai.xi void HAL_MAD_SetPIOCmd(MS_U8 cmd)
1163*53ee8cc1Swenshuai.xi {
1164*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskReg(REG_MB_DEC_PIO_ID,0xFF00, cmd<<8);
1165*53ee8cc1Swenshuai.xi }
1166*53ee8cc1Swenshuai.xi 
1167*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1168*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetMcuCmd()
1169*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is to write MCU cmd.
1170*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE  :
1171*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE  :
1172*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE  :
1173*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE  :
1174*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetMcuCmd(MS_U8 cmd)1175*53ee8cc1Swenshuai.xi void HAL_MAD_SetMcuCmd(MS_U8 cmd)
1176*53ee8cc1Swenshuai.xi {
1177*53ee8cc1Swenshuai.xi     //NOT_DEFINE : not used, remove
1178*53ee8cc1Swenshuai.xi }
1179*53ee8cc1Swenshuai.xi 
1180*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1181*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetDspIDMA()
1182*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:  This function is used to set DSP IDMA.
1183*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1184*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1185*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE  :
1186*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1187*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetDspIDMA(void)1188*53ee8cc1Swenshuai.xi void HAL_MAD_SetDspIDMA(void)
1189*53ee8cc1Swenshuai.xi {
1190*53ee8cc1Swenshuai.xi     //NOT_DEFINE : not used, remove
1191*53ee8cc1Swenshuai.xi }
1192*53ee8cc1Swenshuai.xi 
1193*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1194*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_TriggerPIO8()
1195*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:  This function is used to trigger PIO8 init.
1196*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1197*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1198*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE  :
1199*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1200*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_TriggerPIO8(void)1201*53ee8cc1Swenshuai.xi void HAL_MAD_TriggerPIO8(void)
1202*53ee8cc1Swenshuai.xi {
1203*53ee8cc1Swenshuai.xi     //NOT_DEFINE : not used, remove
1204*53ee8cc1Swenshuai.xi }
1205*53ee8cc1Swenshuai.xi 
1206*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1207*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_DvbFLockSynthesizer_En()
1208*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:  This function is used to set DSP IDMA.
1209*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1210*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1211*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE  :
1212*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1213*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_DvbFLockSynthesizer_En(void)1214*53ee8cc1Swenshuai.xi void HAL_MAD_DvbFLockSynthesizer_En(void)
1215*53ee8cc1Swenshuai.xi {
1216*53ee8cc1Swenshuai.xi     // enable force lock current DVB SYNC synthesizer freq
1217*53ee8cc1Swenshuai.xi     // SIF only in SE DSP
1218*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskReg(REG_AUDIO_INPUT_CFG, 0x0040, 0x0040 );
1219*53ee8cc1Swenshuai.xi }
1220*53ee8cc1Swenshuai.xi 
1221*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1222*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_AUDIO_SetCertMode()
1223*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:
1224*53ee8cc1Swenshuai.xi /// @param CertType    \b :   AUDIO_DOLBY_DD_Cert,
1225*53ee8cc1Swenshuai.xi /// @param CertType    \b :   AUDIO_DOLBY_DDP_Cert,
1226*53ee8cc1Swenshuai.xi /// @param CertType    \b :   AUDIO_DOLBY_PULSE_Cert,
1227*53ee8cc1Swenshuai.xi /// @param CertType    \b :   AUDIO_DOLBY_MS10_Cert,
1228*53ee8cc1Swenshuai.xi /// @param CertType    \b :   AUDIO_DTS_DMP_Cert,
1229*53ee8cc1Swenshuai.xi /// @param CertType    \b :   AUDIO_DTS_BC_Cert,
1230*53ee8cc1Swenshuai.xi /// @param CertType    \b :   AUDIO_DTS_PremiumTV_Cert,
1231*53ee8cc1Swenshuai.xi /// @param CertType    \b :   AUDIO_SRS_XT_Cert,
1232*53ee8cc1Swenshuai.xi /// @param enable      \b :   AUDIO_CERT_Enable / AUDIO_CERT_Disable
1233*53ee8cc1Swenshuai.xi ///
1234*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_AUDIO_SetCertMode(Audio_CertMode CertType,Audio_CertEnable enCert)1235*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_SetCertMode( Audio_CertMode CertType,Audio_CertEnable enCert )
1236*53ee8cc1Swenshuai.xi {
1237*53ee8cc1Swenshuai.xi     switch(CertType)
1238*53ee8cc1Swenshuai.xi     {
1239*53ee8cc1Swenshuai.xi         case AUDIO_DOLBY_DD_Cert:
1240*53ee8cc1Swenshuai.xi         case AUDIO_DOLBY_DDP_Cert:
1241*53ee8cc1Swenshuai.xi         case AUDIO_DOLBY_PULSE_Cert:
1242*53ee8cc1Swenshuai.xi         case AUDIO_DOLBY_MS10_Cert:
1243*53ee8cc1Swenshuai.xi         case AUDIO_DTS_DMP_Cert:
1244*53ee8cc1Swenshuai.xi         case AUDIO_DTS_BC_Cert:
1245*53ee8cc1Swenshuai.xi             // sound effect bypass setting
1246*53ee8cc1Swenshuai.xi             break;
1247*53ee8cc1Swenshuai.xi 
1248*53ee8cc1Swenshuai.xi         case AUDIO_DOLBY_DDCO_Cert:
1249*53ee8cc1Swenshuai.xi             break;
1250*53ee8cc1Swenshuai.xi 
1251*53ee8cc1Swenshuai.xi         case AUDIO_DTS_SYMMETRY_Cert:
1252*53ee8cc1Swenshuai.xi             break;
1253*53ee8cc1Swenshuai.xi 
1254*53ee8cc1Swenshuai.xi         case AUDIO_DTS_ENVELO_Cert:
1255*53ee8cc1Swenshuai.xi             break;
1256*53ee8cc1Swenshuai.xi 
1257*53ee8cc1Swenshuai.xi         case AUDIO_SRS_XT_Cert:
1258*53ee8cc1Swenshuai.xi             break;
1259*53ee8cc1Swenshuai.xi 
1260*53ee8cc1Swenshuai.xi         default:
1261*53ee8cc1Swenshuai.xi             break;
1262*53ee8cc1Swenshuai.xi     }
1263*53ee8cc1Swenshuai.xi     return(true);
1264*53ee8cc1Swenshuai.xi }
1265*53ee8cc1Swenshuai.xi 
1266*53ee8cc1Swenshuai.xi 
1267*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1268*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_MM2_initAesInfo()
1269*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description  : Initialize AES info
1270*53ee8cc1Swenshuai.xi /// @param <IN>        \b dec_id  : Decoder ID
1271*53ee8cc1Swenshuai.xi /// @param <OUT>       \b MS_BOOL : return TRUE if ok, else return FALSE
1272*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1273*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1274*53ee8cc1Swenshuai.xi static MS_U32 prv_PTS = 0, prv_PTS1 = 0;
1275*53ee8cc1Swenshuai.xi static MS_U32 accum_ES = 0, prv_accum_ES = 0, accum_ES1 = 0, prv_accum_ES1 = 0;
HAL_MAD_MM2_initAesInfo(AUDIO_DEC_ID dec_id)1276*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_MM2_initAesInfo( AUDIO_DEC_ID dec_id )
1277*53ee8cc1Swenshuai.xi {
1278*53ee8cc1Swenshuai.xi     if ( dec_id == AU_DEC_ID1 )
1279*53ee8cc1Swenshuai.xi     {
1280*53ee8cc1Swenshuai.xi         audio_aes_info[0].aes_base_addr =  OFFSET_ES1_DRAM_ADDR;
1281*53ee8cc1Swenshuai.xi         audio_aes_info[0].aes_BufSize = ES1_DRAM_SIZE;
1282*53ee8cc1Swenshuai.xi         audio_aes_info[0].aes_end_addr = audio_aes_info[0].aes_base_addr + audio_aes_info[0].aes_BufSize;
1283*53ee8cc1Swenshuai.xi         audio_aes_info[0].aes_write_addr = audio_aes_info[0].aes_base_addr;
1284*53ee8cc1Swenshuai.xi         audio_aes_info[0].aes_freeSpace = audio_aes_info[0].aes_BufSize -  (BYTES_IN_MIU_LINE*2);
1285*53ee8cc1Swenshuai.xi         audio_aes_info[0].aes_level = 0;
1286*53ee8cc1Swenshuai.xi         audio_aes_info[0].aes_lastPTS = 0;
1287*53ee8cc1Swenshuai.xi         audio_aes_info[0].aes_ptsCnt = 0;
1288*53ee8cc1Swenshuai.xi 
1289*53ee8cc1Swenshuai.xi         prv_PTS = 0;
1290*53ee8cc1Swenshuai.xi         accum_ES = 0;
1291*53ee8cc1Swenshuai.xi         prv_accum_ES = 0;
1292*53ee8cc1Swenshuai.xi 
1293*53ee8cc1Swenshuai.xi         /* Set ES write pointer to DSP */
1294*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, dec_id, 0, 0);           //Set ES write pointer  to start point.
1295*53ee8cc1Swenshuai.xi 
1296*53ee8cc1Swenshuai.xi         DBG_MAD(printf("ID1: HAL_AUDIO_MM2_init end !!\r\n"));
1297*53ee8cc1Swenshuai.xi         return TRUE;
1298*53ee8cc1Swenshuai.xi     }
1299*53ee8cc1Swenshuai.xi     else if( dec_id == AU_DEC_ID3 )
1300*53ee8cc1Swenshuai.xi     {
1301*53ee8cc1Swenshuai.xi         audio_aes_info[1].aes_base_addr =  OFFSET_ES3_DRAM_ADDR;
1302*53ee8cc1Swenshuai.xi         audio_aes_info[1].aes_BufSize = ES3_DRAM_SIZE;
1303*53ee8cc1Swenshuai.xi         audio_aes_info[1].aes_end_addr = audio_aes_info[1].aes_base_addr + audio_aes_info[1].aes_BufSize;
1304*53ee8cc1Swenshuai.xi         audio_aes_info[1].aes_write_addr = audio_aes_info[1].aes_base_addr;
1305*53ee8cc1Swenshuai.xi         audio_aes_info[1].aes_freeSpace = audio_aes_info[1].aes_BufSize -  (BYTES_IN_MIU_LINE*2);
1306*53ee8cc1Swenshuai.xi         audio_aes_info[1].aes_level = 0;
1307*53ee8cc1Swenshuai.xi         audio_aes_info[1].aes_lastPTS = 0;
1308*53ee8cc1Swenshuai.xi         audio_aes_info[1].aes_ptsCnt = 0;
1309*53ee8cc1Swenshuai.xi 
1310*53ee8cc1Swenshuai.xi         prv_PTS1 = 0;
1311*53ee8cc1Swenshuai.xi         accum_ES1 = 0;
1312*53ee8cc1Swenshuai.xi         prv_accum_ES1 = 0;
1313*53ee8cc1Swenshuai.xi 
1314*53ee8cc1Swenshuai.xi         /* Set ES write pointer to DSP */
1315*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, dec_id, 0, 0);           //Set ES write pointer  to start point.
1316*53ee8cc1Swenshuai.xi 
1317*53ee8cc1Swenshuai.xi         DBG_MAD(printf("ID3: HAL_AUDIO_MM2_init end !!\r\n"));
1318*53ee8cc1Swenshuai.xi         return TRUE;
1319*53ee8cc1Swenshuai.xi     }
1320*53ee8cc1Swenshuai.xi     else
1321*53ee8cc1Swenshuai.xi         return FALSE;
1322*53ee8cc1Swenshuai.xi }
1323*53ee8cc1Swenshuai.xi 
1324*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1325*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_MM2_checkAesInfo()
1326*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description  : Get AES info from audio decoder
1327*53ee8cc1Swenshuai.xi /// @param <IN>        \b dec_id       : Decoder ID
1328*53ee8cc1Swenshuai.xi /// @param <IN>        \b aes_info     : AES info structure pointer
1329*53ee8cc1Swenshuai.xi /// @param <OUT>       \b MS_BOOL : return TRUE if ok, else return FALSE
1330*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1331*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_MM2_checkAesInfo(AUDIO_DEC_ID dec_id,AES_INFO * aes_info)1332*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_MM2_checkAesInfo( AUDIO_DEC_ID  dec_id, AES_INFO *aes_info )
1333*53ee8cc1Swenshuai.xi {
1334*53ee8cc1Swenshuai.xi     if ( dec_id == AU_DEC_ID1 )
1335*53ee8cc1Swenshuai.xi     {
1336*53ee8cc1Swenshuai.xi         MS_U32 tmp1, tmp2;
1337*53ee8cc1Swenshuai.xi 
1338*53ee8cc1Swenshuai.xi         /* es level */
1339*53ee8cc1Swenshuai.xi         audio_aes_info[0].aes_level = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, dec_id);
1340*53ee8cc1Swenshuai.xi 
1341*53ee8cc1Swenshuai.xi         /* calculate free space for next data input */
1342*53ee8cc1Swenshuai.xi         tmp1 = audio_aes_info[0].aes_end_addr - audio_aes_info[0].aes_write_addr;
1343*53ee8cc1Swenshuai.xi         tmp2 = audio_aes_info[0].aes_BufSize - audio_aes_info[0].aes_level;
1344*53ee8cc1Swenshuai.xi 
1345*53ee8cc1Swenshuai.xi         if ( tmp2 <  audio_aes_info[0].aes_BufSize/2)
1346*53ee8cc1Swenshuai.xi             tmp2 = 0;
1347*53ee8cc1Swenshuai.xi         else
1348*53ee8cc1Swenshuai.xi             tmp2 -= (audio_aes_info[0].aes_BufSize/2);
1349*53ee8cc1Swenshuai.xi 
1350*53ee8cc1Swenshuai.xi         if (tmp2 > (audio_aes_info[0].aes_BufSize/4))
1351*53ee8cc1Swenshuai.xi             tmp2 = audio_aes_info[0].aes_BufSize/4;
1352*53ee8cc1Swenshuai.xi 
1353*53ee8cc1Swenshuai.xi         audio_aes_info[0].aes_freeSpace = (tmp1 > tmp2)?tmp2:tmp1;
1354*53ee8cc1Swenshuai.xi         audio_aes_info[0].aes_read_addr = OFFSET_ES1_DRAM_ADDR + HAL_DEC_R2_Get_SHM_INFO( R2_SHM_INFO_ES_RD_PTR, ADEC1 );
1355*53ee8cc1Swenshuai.xi 
1356*53ee8cc1Swenshuai.xi         memcpy( (void *)aes_info,  (void *)&audio_aes_info[0], sizeof(AES_INFO));
1357*53ee8cc1Swenshuai.xi         DBG_MAD(printf("[ID1:HAL_MAD_MM2_checkAesInfo] Ptr[w:%x,r:%x] LvL:%x, FreeSpace:%x, tmpFree:%x \n",
1358*53ee8cc1Swenshuai.xi             audio_aes_info[0].aes_write_addr,
1359*53ee8cc1Swenshuai.xi             audio_aes_info[0].aes_read_addr,
1360*53ee8cc1Swenshuai.xi             audio_aes_info[0].aes_level,
1361*53ee8cc1Swenshuai.xi             audio_aes_info[0].aes_BufSize - audio_aes_info[0].aes_level,
1362*53ee8cc1Swenshuai.xi             audio_aes_info[0].aes_freeSpace));
1363*53ee8cc1Swenshuai.xi 
1364*53ee8cc1Swenshuai.xi         return TRUE;
1365*53ee8cc1Swenshuai.xi     }
1366*53ee8cc1Swenshuai.xi     else if( dec_id == AU_DEC_ID3 )
1367*53ee8cc1Swenshuai.xi     {
1368*53ee8cc1Swenshuai.xi         MS_U32 tmp1, tmp2;
1369*53ee8cc1Swenshuai.xi 
1370*53ee8cc1Swenshuai.xi         /* es level */
1371*53ee8cc1Swenshuai.xi         audio_aes_info[1].aes_level = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, dec_id);
1372*53ee8cc1Swenshuai.xi 
1373*53ee8cc1Swenshuai.xi         /* calculate free space for next data input */
1374*53ee8cc1Swenshuai.xi         tmp1 = audio_aes_info[1].aes_end_addr - audio_aes_info[1].aes_write_addr;
1375*53ee8cc1Swenshuai.xi         tmp2 = audio_aes_info[1].aes_BufSize - audio_aes_info[1].aes_level;
1376*53ee8cc1Swenshuai.xi 
1377*53ee8cc1Swenshuai.xi         if ( tmp2 <  audio_aes_info[1].aes_BufSize/2)
1378*53ee8cc1Swenshuai.xi             tmp2 = 0;
1379*53ee8cc1Swenshuai.xi         else
1380*53ee8cc1Swenshuai.xi             tmp2 -= (audio_aes_info[1].aes_BufSize/2);
1381*53ee8cc1Swenshuai.xi 
1382*53ee8cc1Swenshuai.xi         if (tmp2 > (audio_aes_info[1].aes_BufSize/4))
1383*53ee8cc1Swenshuai.xi             tmp2 = audio_aes_info[1].aes_BufSize/4;
1384*53ee8cc1Swenshuai.xi 
1385*53ee8cc1Swenshuai.xi         audio_aes_info[1].aes_freeSpace = (tmp1 > tmp2)?tmp2:tmp1;
1386*53ee8cc1Swenshuai.xi         audio_aes_info[1].aes_read_addr = OFFSET_ES3_DRAM_ADDR + HAL_DEC_R2_Get_SHM_INFO( R2_SHM_INFO_ES_RD_PTR, ADEC2 );
1387*53ee8cc1Swenshuai.xi 
1388*53ee8cc1Swenshuai.xi         memcpy( (void *)aes_info,  (void *)&audio_aes_info[1], sizeof(AES_INFO));
1389*53ee8cc1Swenshuai.xi         DBG_MAD(printf("[ID3:HAL_MAD_MM2_checkAesInfo] Ptr[w:%x,r:%x] LvL:%x, FreeSpace:%x, tmpFree:%x \n",
1390*53ee8cc1Swenshuai.xi             audio_aes_info[1].aes_write_addr,
1391*53ee8cc1Swenshuai.xi             audio_aes_info[1].aes_read_addr,
1392*53ee8cc1Swenshuai.xi             audio_aes_info[1].aes_level,
1393*53ee8cc1Swenshuai.xi             audio_aes_info[1].aes_BufSize - audio_aes_info[1].aes_level,
1394*53ee8cc1Swenshuai.xi             audio_aes_info[1].aes_freeSpace));
1395*53ee8cc1Swenshuai.xi 
1396*53ee8cc1Swenshuai.xi         return TRUE;
1397*53ee8cc1Swenshuai.xi     }
1398*53ee8cc1Swenshuai.xi     else
1399*53ee8cc1Swenshuai.xi     {
1400*53ee8cc1Swenshuai.xi         return FALSE;
1401*53ee8cc1Swenshuai.xi     }
1402*53ee8cc1Swenshuai.xi }
1403*53ee8cc1Swenshuai.xi 
1404*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1405*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_MM2_inputAesFinished()
1406*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description  : Inform DSP how much ES data is sent
1407*53ee8cc1Swenshuai.xi /// @param <IN>        \b dec_id	   : Decoder ID
1408*53ee8cc1Swenshuai.xi /// @param <IN>        \b es_size  : Size of ES data
1409*53ee8cc1Swenshuai.xi /// @param <IN>        \b ptsExist : Whether ES data contains PTS or not
1410*53ee8cc1Swenshuai.xi /// @param <IN>        \b pts	   : PTS
1411*53ee8cc1Swenshuai.xi /// @param <OUT>       \b MS_BOOL  : return TRUE if ok, else return FALSE
1412*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE     :
1413*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_MM2_inputAesFinished(AUDIO_DEC_ID dec_id,MS_U32 es_size,MS_BOOL ptsExist,MS_U64 pts)1414*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_MM2_inputAesFinished( AUDIO_DEC_ID dec_id, MS_U32 es_size, MS_BOOL ptsExist, MS_U64 pts )
1415*53ee8cc1Swenshuai.xi {
1416*53ee8cc1Swenshuai.xi     MS_U32 es_writeLineOffset;
1417*53ee8cc1Swenshuai.xi     MS_U32 tmp1, tmp2;
1418*53ee8cc1Swenshuai.xi 
1419*53ee8cc1Swenshuai.xi     if (es_size == 0)
1420*53ee8cc1Swenshuai.xi         return FALSE;
1421*53ee8cc1Swenshuai.xi 
1422*53ee8cc1Swenshuai.xi     if ( dec_id == AU_DEC_ID1 )
1423*53ee8cc1Swenshuai.xi     {
1424*53ee8cc1Swenshuai.xi         /* es level */
1425*53ee8cc1Swenshuai.xi         audio_aes_info[0].aes_level = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, dec_id);
1426*53ee8cc1Swenshuai.xi 
1427*53ee8cc1Swenshuai.xi         /* calculate free space for next data input */
1428*53ee8cc1Swenshuai.xi         tmp1 = audio_aes_info[0].aes_end_addr - audio_aes_info[0].aes_write_addr;
1429*53ee8cc1Swenshuai.xi         tmp2 = audio_aes_info[0].aes_BufSize - audio_aes_info[0].aes_level;
1430*53ee8cc1Swenshuai.xi 
1431*53ee8cc1Swenshuai.xi         audio_aes_info[0].aes_freeSpace = (tmp1 - tmp2)?tmp2:tmp1;
1432*53ee8cc1Swenshuai.xi 
1433*53ee8cc1Swenshuai.xi         if ( es_size > audio_aes_info[0].aes_freeSpace )
1434*53ee8cc1Swenshuai.xi         {
1435*53ee8cc1Swenshuai.xi             printf("ID1:==> Error, input AES size(0x%x) is larger than current Free space(0x%x)\r\n", es_size, audio_aes_info[0].aes_freeSpace );
1436*53ee8cc1Swenshuai.xi             return FALSE;
1437*53ee8cc1Swenshuai.xi         }
1438*53ee8cc1Swenshuai.xi 
1439*53ee8cc1Swenshuai.xi         DBG_MAD(printf("[ID1:HAL_MAD_MM2_inputAesFinished] wPtr:%08x => ", audio_aes_info[0].aes_write_addr));
1440*53ee8cc1Swenshuai.xi 
1441*53ee8cc1Swenshuai.xi         /* update write pointer */
1442*53ee8cc1Swenshuai.xi         audio_aes_info[0].aes_write_addr += es_size;
1443*53ee8cc1Swenshuai.xi 
1444*53ee8cc1Swenshuai.xi         if ( audio_aes_info[0].aes_write_addr >= audio_aes_info[0].aes_end_addr )
1445*53ee8cc1Swenshuai.xi             audio_aes_info[0].aes_write_addr -= audio_aes_info[0].aes_BufSize;
1446*53ee8cc1Swenshuai.xi 
1447*53ee8cc1Swenshuai.xi         DBG_MAD(printf("%08x, size=%08x,isPtsExist:%d,PTS=%09lld",
1448*53ee8cc1Swenshuai.xi         audio_aes_info[0].aes_write_addr,
1449*53ee8cc1Swenshuai.xi         es_size,
1450*53ee8cc1Swenshuai.xi         ptsExist,
1451*53ee8cc1Swenshuai.xi         pts/90));
1452*53ee8cc1Swenshuai.xi 
1453*53ee8cc1Swenshuai.xi         if (ptsExist)
1454*53ee8cc1Swenshuai.xi         {
1455*53ee8cc1Swenshuai.xi             if (prv_PTS != 0)
1456*53ee8cc1Swenshuai.xi             {
1457*53ee8cc1Swenshuai.xi                 DBG_MAD(printf(",PTS_diff=%08lld,accum_ES = %08x,ES_diff= %08d, ES PTS diff=%08d\n",
1458*53ee8cc1Swenshuai.xi                 (pts - prv_PTS)/90,
1459*53ee8cc1Swenshuai.xi                 accum_ES,
1460*53ee8cc1Swenshuai.xi                 accum_ES - prv_accum_ES,
1461*53ee8cc1Swenshuai.xi                 (accum_ES - prv_accum_ES)*32/1536));
1462*53ee8cc1Swenshuai.xi             }
1463*53ee8cc1Swenshuai.xi             else
1464*53ee8cc1Swenshuai.xi             {
1465*53ee8cc1Swenshuai.xi                 DBG_MAD(printf(", PTS_diff=%08x, accum_ES = %08x\n", 0, 0));
1466*53ee8cc1Swenshuai.xi             }
1467*53ee8cc1Swenshuai.xi 
1468*53ee8cc1Swenshuai.xi             prv_PTS = pts;
1469*53ee8cc1Swenshuai.xi             prv_accum_ES = accum_ES;
1470*53ee8cc1Swenshuai.xi         }
1471*53ee8cc1Swenshuai.xi         else
1472*53ee8cc1Swenshuai.xi         {
1473*53ee8cc1Swenshuai.xi             DBG_MAD(printf("\n"));
1474*53ee8cc1Swenshuai.xi         }
1475*53ee8cc1Swenshuai.xi 
1476*53ee8cc1Swenshuai.xi         accum_ES += es_size;
1477*53ee8cc1Swenshuai.xi 
1478*53ee8cc1Swenshuai.xi         es_writeLineOffset = audio_aes_info[0].aes_write_addr - audio_aes_info[0].aes_base_addr;
1479*53ee8cc1Swenshuai.xi 
1480*53ee8cc1Swenshuai.xi         if (ptsExist)
1481*53ee8cc1Swenshuai.xi         {
1482*53ee8cc1Swenshuai.xi             if ((audio_aes_info[0].aes_lastPTS  == pts)&&(audio_aes_info[0].aes_ptsCnt != 0))
1483*53ee8cc1Swenshuai.xi                 printf(" ======== Error PTS is same !! =============\n");
1484*53ee8cc1Swenshuai.xi             else
1485*53ee8cc1Swenshuai.xi             {
1486*53ee8cc1Swenshuai.xi                     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_INPUT_PTS, dec_id, (pts >> 1), 0);
1487*53ee8cc1Swenshuai.xi                     audio_aes_info[0].aes_ptsCnt++;
1488*53ee8cc1Swenshuai.xi                     audio_aes_info[0].aes_lastPTS = pts;
1489*53ee8cc1Swenshuai.xi                     AUDIO_DELAY1US(500);
1490*53ee8cc1Swenshuai.xi             }
1491*53ee8cc1Swenshuai.xi         }
1492*53ee8cc1Swenshuai.xi 
1493*53ee8cc1Swenshuai.xi         /* Set ES write pointer to DSP */
1494*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, dec_id, es_writeLineOffset, 0);
1495*53ee8cc1Swenshuai.xi         AUDIO_DELAY1US(250);                                                                                        //Since DSP timer update ES_MEM_CNT at each 125us, need this delay to keep
1496*53ee8cc1Swenshuai.xi     }
1497*53ee8cc1Swenshuai.xi     else if (dec_id == AU_DEC_ID3)
1498*53ee8cc1Swenshuai.xi     {
1499*53ee8cc1Swenshuai.xi         /* es level */
1500*53ee8cc1Swenshuai.xi         audio_aes_info[1].aes_level = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, dec_id);
1501*53ee8cc1Swenshuai.xi 
1502*53ee8cc1Swenshuai.xi         /* calculate free space for next data input */
1503*53ee8cc1Swenshuai.xi         tmp1 = audio_aes_info[1].aes_end_addr - audio_aes_info[1].aes_write_addr;
1504*53ee8cc1Swenshuai.xi         tmp2 = audio_aes_info[1].aes_BufSize - audio_aes_info[1].aes_level;
1505*53ee8cc1Swenshuai.xi 
1506*53ee8cc1Swenshuai.xi         audio_aes_info[1].aes_freeSpace = (tmp1 - tmp2)?tmp2:tmp1;
1507*53ee8cc1Swenshuai.xi 
1508*53ee8cc1Swenshuai.xi         if ( es_size > audio_aes_info[1].aes_freeSpace )
1509*53ee8cc1Swenshuai.xi         {
1510*53ee8cc1Swenshuai.xi             printf("ID3:==> Error, input AES size(0x%x) is larger than current Free space(0x%x)\r\n", es_size, audio_aes_info[1].aes_freeSpace );
1511*53ee8cc1Swenshuai.xi             return FALSE;
1512*53ee8cc1Swenshuai.xi         }
1513*53ee8cc1Swenshuai.xi 
1514*53ee8cc1Swenshuai.xi         DBG_MAD(printf("[ID3:HAL_MAD_MM2_inputAesFinished] wPtr:%08x => ", audio_aes_info[1].aes_write_addr));
1515*53ee8cc1Swenshuai.xi 
1516*53ee8cc1Swenshuai.xi         /* update write pointer */
1517*53ee8cc1Swenshuai.xi         audio_aes_info[1].aes_write_addr += es_size;
1518*53ee8cc1Swenshuai.xi 
1519*53ee8cc1Swenshuai.xi         if ( audio_aes_info[1].aes_write_addr >= audio_aes_info[1].aes_end_addr )
1520*53ee8cc1Swenshuai.xi             audio_aes_info[1].aes_write_addr -= audio_aes_info[1].aes_BufSize;
1521*53ee8cc1Swenshuai.xi 
1522*53ee8cc1Swenshuai.xi         DBG_MAD(printf("%08x, size=%08x,isPtsExist:%d,PTS=%09lld",
1523*53ee8cc1Swenshuai.xi         audio_aes_info[1].aes_write_addr,
1524*53ee8cc1Swenshuai.xi         es_size,
1525*53ee8cc1Swenshuai.xi         ptsExist,
1526*53ee8cc1Swenshuai.xi         pts/90));
1527*53ee8cc1Swenshuai.xi 
1528*53ee8cc1Swenshuai.xi         if (ptsExist)
1529*53ee8cc1Swenshuai.xi         {
1530*53ee8cc1Swenshuai.xi             if (prv_PTS1 != 0)
1531*53ee8cc1Swenshuai.xi             {
1532*53ee8cc1Swenshuai.xi                 DBG_MAD(printf(",PTS_diff=%08lld,accum_ES = %08x,ES_diff= %08d, ES PTS diff=%08d\n",
1533*53ee8cc1Swenshuai.xi                 (pts - prv_PTS1)/90,
1534*53ee8cc1Swenshuai.xi                 accum_ES1,
1535*53ee8cc1Swenshuai.xi                 accum_ES1 - prv_accum_ES1,
1536*53ee8cc1Swenshuai.xi                 (accum_ES1 - prv_accum_ES1)*32/1536));
1537*53ee8cc1Swenshuai.xi             }
1538*53ee8cc1Swenshuai.xi             else
1539*53ee8cc1Swenshuai.xi             {
1540*53ee8cc1Swenshuai.xi                 DBG_MAD(printf(", PTS_diff=%08x, accum_ES = %08x\n", 0, 0));
1541*53ee8cc1Swenshuai.xi             }
1542*53ee8cc1Swenshuai.xi 
1543*53ee8cc1Swenshuai.xi             prv_PTS1 = pts;
1544*53ee8cc1Swenshuai.xi             prv_accum_ES1 = accum_ES1;
1545*53ee8cc1Swenshuai.xi         }
1546*53ee8cc1Swenshuai.xi         else
1547*53ee8cc1Swenshuai.xi         {
1548*53ee8cc1Swenshuai.xi             DBG_MAD(printf("\n"));
1549*53ee8cc1Swenshuai.xi         }
1550*53ee8cc1Swenshuai.xi 
1551*53ee8cc1Swenshuai.xi         accum_ES1 += es_size;
1552*53ee8cc1Swenshuai.xi 
1553*53ee8cc1Swenshuai.xi         es_writeLineOffset = audio_aes_info[1].aes_write_addr - audio_aes_info[1].aes_base_addr;
1554*53ee8cc1Swenshuai.xi 
1555*53ee8cc1Swenshuai.xi         if (ptsExist)
1556*53ee8cc1Swenshuai.xi         {
1557*53ee8cc1Swenshuai.xi             if ((audio_aes_info[1].aes_lastPTS  == pts)&&(audio_aes_info[1].aes_ptsCnt != 0))
1558*53ee8cc1Swenshuai.xi                 printf(" ======== Error PTS is same !! =============\n");
1559*53ee8cc1Swenshuai.xi             else
1560*53ee8cc1Swenshuai.xi             {
1561*53ee8cc1Swenshuai.xi                     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_INPUT_PTS, dec_id, (pts >> 1), 0);
1562*53ee8cc1Swenshuai.xi                     audio_aes_info[1].aes_ptsCnt++;
1563*53ee8cc1Swenshuai.xi                     audio_aes_info[1].aes_lastPTS = pts;
1564*53ee8cc1Swenshuai.xi                     AUDIO_DELAY1US(500);
1565*53ee8cc1Swenshuai.xi             }
1566*53ee8cc1Swenshuai.xi         }
1567*53ee8cc1Swenshuai.xi 
1568*53ee8cc1Swenshuai.xi         /* Set ES write pointer to DSP */
1569*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, dec_id, es_writeLineOffset, 0);
1570*53ee8cc1Swenshuai.xi         AUDIO_DELAY1US(250);                                                                                        //Since DSP timer update ES_MEM_CNT at each 125us, need this delay to keep
1571*53ee8cc1Swenshuai.xi     }
1572*53ee8cc1Swenshuai.xi     return TRUE;
1573*53ee8cc1Swenshuai.xi }
1574*53ee8cc1Swenshuai.xi 
1575*53ee8cc1Swenshuai.xi 
1576*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1577*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1578*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1579*53ee8cc1Swenshuai.xi ///
1580*53ee8cc1Swenshuai.xi ///        AUDIO_MAD MPEG Relational Hal Function
1581*53ee8cc1Swenshuai.xi ///
1582*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1583*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1584*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1585*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1586*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_MPEG_GetHeaderInfo()
1587*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine will return the 32bit mpeg header
1588*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1589*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1590*53ee8cc1Swenshuai.xi /// @param <RET>       \b U32    : mpeg header information
1591*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1592*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_MPEG_GetHeaderInfo(void)1593*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_MPEG_GetHeaderInfo(void)
1594*53ee8cc1Swenshuai.xi {
1595*53ee8cc1Swenshuai.xi     MS_U16 data;
1596*53ee8cc1Swenshuai.xi 
1597*53ee8cc1Swenshuai.xi     data = (MS_U16)HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MPEG_HEADER, ADEC1);
1598*53ee8cc1Swenshuai.xi 
1599*53ee8cc1Swenshuai.xi     return (data & 0x0FFF);
1600*53ee8cc1Swenshuai.xi }
1601*53ee8cc1Swenshuai.xi 
1602*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1603*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_MPEG_GetSampleRate()
1604*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine will return the 16bit mpeg samplerate
1605*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1606*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1607*53ee8cc1Swenshuai.xi /// @param <RET>       \b U16    : mpeg sampling rate
1608*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1609*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_MPEG_GetSampleRate(void)1610*53ee8cc1Swenshuai.xi MS_U16 HAL_MAD_MPEG_GetSampleRate(void)
1611*53ee8cc1Swenshuai.xi {
1612*53ee8cc1Swenshuai.xi     return (MS_U16)HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, ADEC1);
1613*53ee8cc1Swenshuai.xi }
1614*53ee8cc1Swenshuai.xi 
1615*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1616*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_MPEG_GetBitRate()
1617*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine will return the 16-bit mpeg bit rate
1618*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1619*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1620*53ee8cc1Swenshuai.xi /// @param <RET>       \b U16    : mpeg bit rate
1621*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1622*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_MPEG_GetBitRate(void)1623*53ee8cc1Swenshuai.xi MS_U16 HAL_MAD_MPEG_GetBitRate(void)
1624*53ee8cc1Swenshuai.xi {
1625*53ee8cc1Swenshuai.xi    return (MS_U16) HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_BIT_RATE, ADEC1);
1626*53ee8cc1Swenshuai.xi }
1627*53ee8cc1Swenshuai.xi 
1628*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1629*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_MPEG_GetSoundMode()
1630*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine will return the 8bit mpeg sound mode
1631*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1632*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1633*53ee8cc1Swenshuai.xi /// @param <RET>       \b MPEG_SOUND_MODE :
1634*53ee8cc1Swenshuai.xi ///                                         MPEG_SOUND_MODE_STEREO =0,
1635*53ee8cc1Swenshuai.xi ///                                         MPEG_SOUND_MODE_JOINT_STEREO,
1636*53ee8cc1Swenshuai.xi ///                                         MPEG_SOUND_MODE_DUAL_CHAN,
1637*53ee8cc1Swenshuai.xi ///                                         MPEG_SOUND_MODE_MONO
1638*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1639*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_MPEG_GetSoundMode(void)1640*53ee8cc1Swenshuai.xi MPEG_SOUND_MODE HAL_MAD_MPEG_GetSoundMode(void)
1641*53ee8cc1Swenshuai.xi {
1642*53ee8cc1Swenshuai.xi     return (MPEG_SOUND_MODE)HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MPEG_STEREOMODE, ADEC1);
1643*53ee8cc1Swenshuai.xi }
1644*53ee8cc1Swenshuai.xi 
1645*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1646*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1647*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1648*53ee8cc1Swenshuai.xi ///
1649*53ee8cc1Swenshuai.xi ///        AUDIO_MAD Dolby Relational Hal Function
1650*53ee8cc1Swenshuai.xi ///
1651*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1652*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1653*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1654*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
1655*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_Monitor_DDPlus_SPDIF_Rate()
1656*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set reference ADC clock by DD+ dsp code
1657*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1658*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1659*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE :
1660*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1661*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_Monitor_DDPlus_SPDIF_Rate(void)1662*53ee8cc1Swenshuai.xi void HAL_MAD_Monitor_DDPlus_SPDIF_Rate(void)
1663*53ee8cc1Swenshuai.xi {
1664*53ee8cc1Swenshuai.xi     MS_U8 u8SpdifMode = SPDIF_OUT_PCM;
1665*53ee8cc1Swenshuai.xi     MS_U8 eAudioSource = 0;
1666*53ee8cc1Swenshuai.xi     MS_U8 u8MainDecodeId = 0;
1667*53ee8cc1Swenshuai.xi     AUDIO_DSP_CODE_TYPE MainDspCodeType = AU_DVB_STANDARD_INVALID;
1668*53ee8cc1Swenshuai.xi     AUDIO_DSP_CODE_TYPE Dsp1CodeType = AU_DVB_STANDARD_INVALID;
1669*53ee8cc1Swenshuai.xi     AUDIO_DSP_CODE_TYPE Dsp2CodeType = AU_DVB_STANDARD_INVALID;
1670*53ee8cc1Swenshuai.xi     Digital_Out_Channel_Status_t stDigitalChannelStatusTx1, stDigitalChannelStatusTx2;
1671*53ee8cc1Swenshuai.xi     MS_BOOL retTx1, retTx2;
1672*53ee8cc1Swenshuai.xi 
1673*53ee8cc1Swenshuai.xi     HALMAD_CHECK_SHM_INIT;
1674*53ee8cc1Swenshuai.xi 
1675*53ee8cc1Swenshuai.xi     memset(&stDigitalChannelStatusTx1, 0x00, sizeof(Digital_Out_Channel_Status_t));
1676*53ee8cc1Swenshuai.xi     memset(&stDigitalChannelStatusTx2, 0x00, sizeof(Digital_Out_Channel_Status_t));
1677*53ee8cc1Swenshuai.xi 
1678*53ee8cc1Swenshuai.xi     eAudioSource = (MS_U8)g_AudioVars2->eAudioSource;
1679*53ee8cc1Swenshuai.xi     Dsp1CodeType = g_AudioVars2->g_DspCodeType;
1680*53ee8cc1Swenshuai.xi     Dsp2CodeType = g_AudioVars2->g_Dsp2CodeType;
1681*53ee8cc1Swenshuai.xi 
1682*53ee8cc1Swenshuai.xi     HAL_AUDIO_SPDIF_SetMode(gSpdifOutputType, eAudioSource);
1683*53ee8cc1Swenshuai.xi     HAL_AUDIO_HDMI_TX_SetMode(gHdmiOutputType, eAudioSource);
1684*53ee8cc1Swenshuai.xi 
1685*53ee8cc1Swenshuai.xi     u8SpdifMode = _HAL_AUDIO_SPDIF_GetMode();
1686*53ee8cc1Swenshuai.xi 
1687*53ee8cc1Swenshuai.xi     retTx1 = HAL_AUDIO_DigitalOut_GetChannelStatus(DIGITAL_SPDIF_OUTPUT, &stDigitalChannelStatusTx1);
1688*53ee8cc1Swenshuai.xi     retTx2 = HAL_AUDIO_DigitalOut_GetChannelStatus(DIGITAL_HDMI_ARC_OUTPUT, &stDigitalChannelStatusTx2);
1689*53ee8cc1Swenshuai.xi     if (retTx1 == FALSE || retTx2 == FALSE)
1690*53ee8cc1Swenshuai.xi     {
1691*53ee8cc1Swenshuai.xi         HALMAD_ERROR("%s() : Failed to get channel status !!!\n", __FUNCTION__);
1692*53ee8cc1Swenshuai.xi     }
1693*53ee8cc1Swenshuai.xi 
1694*53ee8cc1Swenshuai.xi     switch(eAudioSource)
1695*53ee8cc1Swenshuai.xi     {
1696*53ee8cc1Swenshuai.xi         case E_AUDIO_INFO_DTV_IN:
1697*53ee8cc1Swenshuai.xi         case E_AUDIO_INFO_MM_IN:
1698*53ee8cc1Swenshuai.xi         case E_AUDIO_INFO_GAME_IN:
1699*53ee8cc1Swenshuai.xi         {
1700*53ee8cc1Swenshuai.xi             if (((eAudioSource == E_AUDIO_INFO_MM_IN) || (eAudioSource == E_AUDIO_INFO_GAME_IN)) &&
1701*53ee8cc1Swenshuai.xi                 (HAL_MAD_GetDecCmd(DVB_Audio_Decoder2) == AU_DVB_DECCMD_PLAYFRAME_GS))
1702*53ee8cc1Swenshuai.xi             {
1703*53ee8cc1Swenshuai.xi                 MainDspCodeType = Dsp2CodeType;
1704*53ee8cc1Swenshuai.xi                 u8MainDecodeId = ADEC2;
1705*53ee8cc1Swenshuai.xi             }
1706*53ee8cc1Swenshuai.xi             else if ((eAudioSource == E_AUDIO_INFO_HDMI_IN) && (HAL_MAD_GetAC3PInfo(Audio_AC3P_infoType_hdmiAC3inSE) == 1))
1707*53ee8cc1Swenshuai.xi             {
1708*53ee8cc1Swenshuai.xi                 MainDspCodeType = Dsp2CodeType;
1709*53ee8cc1Swenshuai.xi                 u8MainDecodeId = ADEC2;
1710*53ee8cc1Swenshuai.xi             }
1711*53ee8cc1Swenshuai.xi             else
1712*53ee8cc1Swenshuai.xi             {
1713*53ee8cc1Swenshuai.xi                 MainDspCodeType = Dsp1CodeType;
1714*53ee8cc1Swenshuai.xi                 u8MainDecodeId = ADEC1;
1715*53ee8cc1Swenshuai.xi             }
1716*53ee8cc1Swenshuai.xi 
1717*53ee8cc1Swenshuai.xi 
1718*53ee8cc1Swenshuai.xi             if (u8SpdifMode == SPDIF_OUT_PCM)
1719*53ee8cc1Swenshuai.xi             {
1720*53ee8cc1Swenshuai.xi                 /* change SPDIF Tx 1&2 channel status --> 48KHz */
1721*53ee8cc1Swenshuai.xi                 stDigitalChannelStatusTx1.u8SamplingRate = 0x40;
1722*53ee8cc1Swenshuai.xi                 stDigitalChannelStatusTx2.u8SamplingRate = 0x40;
1723*53ee8cc1Swenshuai.xi             }
1724*53ee8cc1Swenshuai.xi             else
1725*53ee8cc1Swenshuai.xi             {
1726*53ee8cc1Swenshuai.xi                 switch(HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SPDIFTx_SMP_RATE, u8MainDecodeId))
1727*53ee8cc1Swenshuai.xi                 {
1728*53ee8cc1Swenshuai.xi                     case 44100:
1729*53ee8cc1Swenshuai.xi                     {
1730*53ee8cc1Swenshuai.xi                         /* change SPDIF Tx 1&2 channel status --> 44.1KHz */
1731*53ee8cc1Swenshuai.xi                         stDigitalChannelStatusTx1.u8SamplingRate = 0x00;
1732*53ee8cc1Swenshuai.xi                         stDigitalChannelStatusTx2.u8SamplingRate = 0x00;
1733*53ee8cc1Swenshuai.xi                         break;
1734*53ee8cc1Swenshuai.xi                     }
1735*53ee8cc1Swenshuai.xi 
1736*53ee8cc1Swenshuai.xi                     case 32000:
1737*53ee8cc1Swenshuai.xi                     {
1738*53ee8cc1Swenshuai.xi                         /* change SPDIF Tx 1&2 channel status --> 32KHz */
1739*53ee8cc1Swenshuai.xi                         stDigitalChannelStatusTx1.u8SamplingRate = 0xC0;
1740*53ee8cc1Swenshuai.xi                         stDigitalChannelStatusTx2.u8SamplingRate = 0xC0;
1741*53ee8cc1Swenshuai.xi                         break;
1742*53ee8cc1Swenshuai.xi                     }
1743*53ee8cc1Swenshuai.xi 
1744*53ee8cc1Swenshuai.xi                     default:
1745*53ee8cc1Swenshuai.xi                     {
1746*53ee8cc1Swenshuai.xi                         /* change SPDIF Tx 1&2 channel status --> 48KHz */
1747*53ee8cc1Swenshuai.xi                         stDigitalChannelStatusTx1.u8SamplingRate = 0x40;
1748*53ee8cc1Swenshuai.xi                         stDigitalChannelStatusTx2.u8SamplingRate = 0x40;
1749*53ee8cc1Swenshuai.xi                         break;
1750*53ee8cc1Swenshuai.xi                     }
1751*53ee8cc1Swenshuai.xi                 }
1752*53ee8cc1Swenshuai.xi             }
1753*53ee8cc1Swenshuai.xi 
1754*53ee8cc1Swenshuai.xi             if (g_AudioVars2->g_EdidOutViaArc == TRUE)
1755*53ee8cc1Swenshuai.xi             {
1756*53ee8cc1Swenshuai.xi                 if (HAL_AUDIO_ReadByte(REG_M2D_MAILBOX_SPDIF_CTRL+1)&0x20)
1757*53ee8cc1Swenshuai.xi                 {
1758*53ee8cc1Swenshuai.xi                     switch(HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_HDMITx_SMP_RATE, u8MainDecodeId))
1759*53ee8cc1Swenshuai.xi                     {
1760*53ee8cc1Swenshuai.xi                         case 19200:
1761*53ee8cc1Swenshuai.xi                         {
1762*53ee8cc1Swenshuai.xi                             /* change SPDIF Tx 2 channel status --> 192KHz */
1763*53ee8cc1Swenshuai.xi                             stDigitalChannelStatusTx2.u8SamplingRate = 0x70;
1764*53ee8cc1Swenshuai.xi                             break;
1765*53ee8cc1Swenshuai.xi                         }
1766*53ee8cc1Swenshuai.xi 
1767*53ee8cc1Swenshuai.xi                         case 17600:
1768*53ee8cc1Swenshuai.xi                         {
1769*53ee8cc1Swenshuai.xi                             /* change SPDIF Tx 2 channel status --> 176KHz */
1770*53ee8cc1Swenshuai.xi                             stDigitalChannelStatusTx2.u8SamplingRate = 0x30;
1771*53ee8cc1Swenshuai.xi                             break;
1772*53ee8cc1Swenshuai.xi                         }
1773*53ee8cc1Swenshuai.xi 
1774*53ee8cc1Swenshuai.xi                         case 9600:
1775*53ee8cc1Swenshuai.xi                         {
1776*53ee8cc1Swenshuai.xi                             /* change SPDIF Tx 2 channel status --> 96KHz */
1777*53ee8cc1Swenshuai.xi                             stDigitalChannelStatusTx2.u8SamplingRate = 0x50;
1778*53ee8cc1Swenshuai.xi                             break;
1779*53ee8cc1Swenshuai.xi                         }
1780*53ee8cc1Swenshuai.xi 
1781*53ee8cc1Swenshuai.xi                         case 8800:
1782*53ee8cc1Swenshuai.xi                         {
1783*53ee8cc1Swenshuai.xi                             /* change SPDIF Tx 2 channel status --> 88KHz */
1784*53ee8cc1Swenshuai.xi                             stDigitalChannelStatusTx2.u8SamplingRate = 0x10;
1785*53ee8cc1Swenshuai.xi                             break;
1786*53ee8cc1Swenshuai.xi                         }
1787*53ee8cc1Swenshuai.xi 
1788*53ee8cc1Swenshuai.xi                         case 44100:
1789*53ee8cc1Swenshuai.xi                         {
1790*53ee8cc1Swenshuai.xi                             /* change SPDIF Tx 2 channel status --> 44.1KHz */
1791*53ee8cc1Swenshuai.xi                             stDigitalChannelStatusTx2.u8SamplingRate = 0x00;
1792*53ee8cc1Swenshuai.xi                             break;
1793*53ee8cc1Swenshuai.xi                         }
1794*53ee8cc1Swenshuai.xi 
1795*53ee8cc1Swenshuai.xi                         case 32000:
1796*53ee8cc1Swenshuai.xi                         {
1797*53ee8cc1Swenshuai.xi                             /* change SPDIF Tx 2 channel status --> 32KHz */
1798*53ee8cc1Swenshuai.xi                             stDigitalChannelStatusTx2.u8SamplingRate = 0xC0;
1799*53ee8cc1Swenshuai.xi                             break;
1800*53ee8cc1Swenshuai.xi                         }
1801*53ee8cc1Swenshuai.xi 
1802*53ee8cc1Swenshuai.xi                         default:
1803*53ee8cc1Swenshuai.xi                         {
1804*53ee8cc1Swenshuai.xi                             /* change SPDIF Tx 2 channel status --> 48KHz */
1805*53ee8cc1Swenshuai.xi                             stDigitalChannelStatusTx2.u8SamplingRate = 0x40;
1806*53ee8cc1Swenshuai.xi                             break;
1807*53ee8cc1Swenshuai.xi                         }
1808*53ee8cc1Swenshuai.xi                     }
1809*53ee8cc1Swenshuai.xi                 }
1810*53ee8cc1Swenshuai.xi                 else
1811*53ee8cc1Swenshuai.xi                 {
1812*53ee8cc1Swenshuai.xi                     stDigitalChannelStatusTx2.u8SamplingRate = 0x40;
1813*53ee8cc1Swenshuai.xi                 }
1814*53ee8cc1Swenshuai.xi             }
1815*53ee8cc1Swenshuai.xi             break;
1816*53ee8cc1Swenshuai.xi         }
1817*53ee8cc1Swenshuai.xi 
1818*53ee8cc1Swenshuai.xi         default:
1819*53ee8cc1Swenshuai.xi         {
1820*53ee8cc1Swenshuai.xi             /* change SPDIF Tx 1&2 channel status --> 48KHz */
1821*53ee8cc1Swenshuai.xi             stDigitalChannelStatusTx1.u8SamplingRate = 0x40;
1822*53ee8cc1Swenshuai.xi             stDigitalChannelStatusTx2.u8SamplingRate = 0x40;
1823*53ee8cc1Swenshuai.xi             break;
1824*53ee8cc1Swenshuai.xi         }
1825*53ee8cc1Swenshuai.xi     }
1826*53ee8cc1Swenshuai.xi 
1827*53ee8cc1Swenshuai.xi     HAL_AUDIO_DigitalOut_SetChannelStatus(DIGITAL_SPDIF_OUTPUT, &stDigitalChannelStatusTx1);
1828*53ee8cc1Swenshuai.xi     HAL_AUDIO_DigitalOut_SetChannelStatus(DIGITAL_HDMI_ARC_OUTPUT, &stDigitalChannelStatusTx2);
1829*53ee8cc1Swenshuai.xi }
1830*53ee8cc1Swenshuai.xi 
1831*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1832*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1833*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1834*53ee8cc1Swenshuai.xi ///
1835*53ee8cc1Swenshuai.xi ///        AUDIO_MAD WMA Relational Hal Function
1836*53ee8cc1Swenshuai.xi ///
1837*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1838*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1839*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1840*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1841*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_WMA_SetASFParm()
1842*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine will set WMA ASF Paramaters.
1843*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    : WMA_ASF_PARMTYPE, value
1844*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1845*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE  :
1846*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1847*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_WMA_SetASFParm(WMA_ASF_PARMTYPE parm_type,MS_U32 value)1848*53ee8cc1Swenshuai.xi void HAL_MAD_WMA_SetASFParm(WMA_ASF_PARMTYPE parm_type, MS_U32 value)
1849*53ee8cc1Swenshuai.xi {
1850*53ee8cc1Swenshuai.xi     switch ( parm_type )
1851*53ee8cc1Swenshuai.xi     {
1852*53ee8cc1Swenshuai.xi         case WMA_PARAMTYPE_VERSION:
1853*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_VERSION, ADEC1, value, 0);
1854*53ee8cc1Swenshuai.xi             break;
1855*53ee8cc1Swenshuai.xi         case WMA_PARAMTYPE_CHANNELS:
1856*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_CHANNELS, ADEC1, value, 0);
1857*53ee8cc1Swenshuai.xi             break;
1858*53ee8cc1Swenshuai.xi         case WMA_PARAMTYPE_SAMPLERATE:
1859*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_SAMPLERATE, ADEC1, value, 0);
1860*53ee8cc1Swenshuai.xi             break;
1861*53ee8cc1Swenshuai.xi         case WMA_PARAMTYPE_BYTERATE:
1862*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_BYTERATE, ADEC1, value, 0);
1863*53ee8cc1Swenshuai.xi             break;
1864*53ee8cc1Swenshuai.xi         case WMA_PARAMTYPE_BLOCKALIGN:
1865*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_BLOCKALIGN, ADEC1, value, 0);
1866*53ee8cc1Swenshuai.xi             break;
1867*53ee8cc1Swenshuai.xi         case WMA_PARAMTYPE_ENCOPT:
1868*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_ENCOPT, ADEC1, value, 0);
1869*53ee8cc1Swenshuai.xi             break;
1870*53ee8cc1Swenshuai.xi         case WMA_PARAMTYPE_PARSINGBYAPP:
1871*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_PARSINGBYAPP, ADEC1, value, 0);
1872*53ee8cc1Swenshuai.xi             break;
1873*53ee8cc1Swenshuai.xi         case WMA_PARAMTYPE_BITS_PER_SAMPLE:
1874*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_BITS_PER_SAMPLE, ADEC1, value, 0);
1875*53ee8cc1Swenshuai.xi             break;
1876*53ee8cc1Swenshuai.xi         case WMA_PARAMTYPE_CHANNELMASK:
1877*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_CHANNELMASK, ADEC1, value, 0);
1878*53ee8cc1Swenshuai.xi             break;
1879*53ee8cc1Swenshuai.xi         case WMA_PARAMTYPE_DRC_PARAM_EXIST:
1880*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_PARAM_EXIST, ADEC1, value, 0);
1881*53ee8cc1Swenshuai.xi             break;
1882*53ee8cc1Swenshuai.xi         case WMA_PARAMTYPE_DRC_RMS_AMP_REF:
1883*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_RMS_AMP_REF, ADEC1, value, 0);
1884*53ee8cc1Swenshuai.xi             break;
1885*53ee8cc1Swenshuai.xi         case WMA_PARAMTYPE_DRC_RMS_AMP_TARGET:
1886*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_RMS_AMP_TARGET, ADEC1, value, 0);
1887*53ee8cc1Swenshuai.xi             break;
1888*53ee8cc1Swenshuai.xi         case WMA_PARAMTYPE_DRC_PEAK_AMP_REF:
1889*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_PEAK_AMP_REF, ADEC1, value, 0);
1890*53ee8cc1Swenshuai.xi             break;
1891*53ee8cc1Swenshuai.xi         case WMA_PARAMTYPE_DRC_PEAK_AMP_TARGET:
1892*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_PEAK_AMP_TARGET, ADEC1, value, 0);
1893*53ee8cc1Swenshuai.xi             break;
1894*53ee8cc1Swenshuai.xi         case WMA_PARAMTYPE_MAX_PACKET_SIZE:
1895*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_MAX_PACKET_SIZE, ADEC1, value, 0);
1896*53ee8cc1Swenshuai.xi             break;
1897*53ee8cc1Swenshuai.xi         default:
1898*53ee8cc1Swenshuai.xi             break;
1899*53ee8cc1Swenshuai.xi     }
1900*53ee8cc1Swenshuai.xi }
1901*53ee8cc1Swenshuai.xi 
1902*53ee8cc1Swenshuai.xi 
1903*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1904*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1905*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1906*53ee8cc1Swenshuai.xi ///
1907*53ee8cc1Swenshuai.xi ///        AUDIO_MAD OTHER Relational Hal Function
1908*53ee8cc1Swenshuai.xi ///
1909*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1910*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1911*53ee8cc1Swenshuai.xi ///-----------------------------------------------------------------------------
1912*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1913*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_RA8_setParam()
1914*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine configures necessary parameters when playing RA8 LBR data
1915*53ee8cc1Swenshuai.xi /// @param <IN>        \b mNumCodecs    :    1--stereo or mono
1916*53ee8cc1Swenshuai.xi ///                                        2~5-- multi channels
1917*53ee8cc1Swenshuai.xi /// @param <IN>        \b mSamples    :         output samples--256, 512, 1024
1918*53ee8cc1Swenshuai.xi /// @param <IN>        \b mSampleRate    :    8, 11.025, 16, 22.05, 44.1, 48 (KHz)
1919*53ee8cc1Swenshuai.xi /// @param <IN>        \b Channels    :    1-- mono
1920*53ee8cc1Swenshuai.xi ///                                    2-- stereo
1921*53ee8cc1Swenshuai.xi /// @param <IN>        \b cplStart    :    0 ~ 51
1922*53ee8cc1Swenshuai.xi /// @param <IN>        \b Regions    :    0 ~ 31
1923*53ee8cc1Swenshuai.xi /// @param <IN>        \b cplQbits    :    0, 2, 3, 4, 5, 6
1924*53ee8cc1Swenshuai.xi /// @param <IN>        \b FrameSize    :    bitstream size of every NumCodes (bytes)
1925*53ee8cc1Swenshuai.xi ///                                    Range--0 ~ 65535
1926*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1927*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U8 :    TRUE--parameters are correct
1928*53ee8cc1Swenshuai.xi ///                            FALSE--parameters are incorrect
1929*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1930*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_RA8_setParam(MS_U16 mNumCodecs,MS_U16 mSamples,MS_U16 mSampleRate,MS_U16 * Channels,MS_U16 * Regions,MS_U16 * cplStart,MS_U16 * cplQbits,MS_U16 * FrameSize)1931*53ee8cc1Swenshuai.xi MS_U8 HAL_MAD_RA8_setParam(MS_U16 mNumCodecs, MS_U16 mSamples, MS_U16 mSampleRate,
1932*53ee8cc1Swenshuai.xi                            MS_U16* Channels, MS_U16* Regions, MS_U16* cplStart, MS_U16* cplQbits,
1933*53ee8cc1Swenshuai.xi                            MS_U16* FrameSize)
1934*53ee8cc1Swenshuai.xi {
1935*53ee8cc1Swenshuai.xi 
1936*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_NUMCODECS, ADEC1, mNumCodecs, 0 );
1937*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_SAMPLES, ADEC1, mSamples, 0 );
1938*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_SAMPLERATES, ADEC1, mSampleRate, 0 );
1939*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, Channels[0], 0 );
1940*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, Regions[0], 0 );
1941*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, cplStart[0], 0 );
1942*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, cplQbits[0], 0 );
1943*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, FrameSize[0], 0 );
1944*53ee8cc1Swenshuai.xi 
1945*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, Channels[1], 1 );
1946*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, Regions[1], 1 );
1947*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, cplStart[1], 1 );
1948*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, cplQbits[1], 1 );
1949*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, FrameSize[1], 1 );
1950*53ee8cc1Swenshuai.xi 
1951*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, Channels[2], 2 );
1952*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, Regions[2], 2 );
1953*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, cplStart[2], 2 );
1954*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, cplQbits[2], 2 );
1955*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, FrameSize[2], 2 );
1956*53ee8cc1Swenshuai.xi 
1957*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, Channels[3], 3 );
1958*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, Regions[3], 3 );
1959*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, cplStart[3], 3 );
1960*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, cplQbits[3], 3 );
1961*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, FrameSize[3], 3 );
1962*53ee8cc1Swenshuai.xi 
1963*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, Channels[4], 4 );
1964*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, Regions[4], 4 );
1965*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, cplStart[4], 4 );
1966*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, cplQbits[4], 4 );
1967*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, FrameSize[4], 4 );
1968*53ee8cc1Swenshuai.xi 
1969*53ee8cc1Swenshuai.xi     return TRUE;
1970*53ee8cc1Swenshuai.xi }
1971*53ee8cc1Swenshuai.xi 
1972*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1973*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_XPCM_GetParaBase()
1974*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the base address for XPCM parameter
1975*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1976*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1977*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U16  : XPCM parameter base address in DSP
1978*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1979*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_XPCM_GetParaBase(void)1980*53ee8cc1Swenshuai.xi MS_U16 HAL_MAD_XPCM_GetParaBase(void)
1981*53ee8cc1Swenshuai.xi {
1982*53ee8cc1Swenshuai.xi     //NOT_DEFINE : not used
1983*53ee8cc1Swenshuai.xi     return 0;
1984*53ee8cc1Swenshuai.xi }
1985*53ee8cc1Swenshuai.xi 
1986*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1987*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_RA8_GetParaBase()
1988*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the base address for Ra8 parameter
1989*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1990*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1991*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U16  : Ra8 parameter base address in DSP
1992*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1993*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_Ra8_GetParaBase(void)1994*53ee8cc1Swenshuai.xi MS_U16 HAL_MAD_Ra8_GetParaBase(void)
1995*53ee8cc1Swenshuai.xi {
1996*53ee8cc1Swenshuai.xi     //NOT_DEFINE : not used
1997*53ee8cc1Swenshuai.xi     return 0;
1998*53ee8cc1Swenshuai.xi }
1999*53ee8cc1Swenshuai.xi 
2000*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
2001*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetCommInfo()
2002*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different paramter to audio decoder
2003*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_COMM_infoType    : common audio parameter type
2004*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32    : common audio parameter 1
2005*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32    : common audio parameter 2
2006*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
2007*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_BOOL :    TRUE ( SUCCESS ) / FALSE (FAIL)
2008*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
2009*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetCommInfo(Audio_COMM_infoType infoType,MS_VIRT param1,MS_VIRT param2)2010*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetCommInfo( Audio_COMM_infoType infoType, MS_VIRT param1, MS_VIRT param2 )
2011*53ee8cc1Swenshuai.xi {
2012*53ee8cc1Swenshuai.xi     HALMAD_CHECK_SHM_INIT;
2013*53ee8cc1Swenshuai.xi 
2014*53ee8cc1Swenshuai.xi     MS_BOOL retTx1, retTx2;
2015*53ee8cc1Swenshuai.xi     Digital_Out_Channel_Status_t stDigitalChannelStatusTx1, stDigitalChannelStatusTx2;
2016*53ee8cc1Swenshuai.xi     memset(&stDigitalChannelStatusTx1, 0x00, sizeof(Digital_Out_Channel_Status_t));
2017*53ee8cc1Swenshuai.xi     memset(&stDigitalChannelStatusTx2, 0x00, sizeof(Digital_Out_Channel_Status_t));
2018*53ee8cc1Swenshuai.xi 
2019*53ee8cc1Swenshuai.xi     switch(infoType)
2020*53ee8cc1Swenshuai.xi     {
2021*53ee8cc1Swenshuai.xi         /********************************************************************************
2022*53ee8cc1Swenshuai.xi         *       Other CMD
2023*53ee8cc1Swenshuai.xi         ********************************************************************************/
2024*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Set_UNI_NEED_DECODE_FRMCNT:
2025*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_UNI_SETUP_DECODE_FRMCNT, ADEC1, param1, 0);
2026*53ee8cc1Swenshuai.xi             break;
2027*53ee8cc1Swenshuai.xi 
2028*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Set_UNI_ES_Wptr:
2029*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, param1, 0);
2030*53ee8cc1Swenshuai.xi             break;
2031*53ee8cc1Swenshuai.xi 
2032*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_setBypassSPDIF_PAPB_chk:       //HAL_MAD_SetDtsBypassFlag
2033*53ee8cc1Swenshuai.xi             break;
2034*53ee8cc1Swenshuai.xi 
2035*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_MMA_init:
2036*53ee8cc1Swenshuai.xi             HAL_AUDIO_SetEntertainmentMode(AUDIO_ETMODE_GAME);
2037*53ee8cc1Swenshuai.xi             HAL_SOUND_SetMixModeVolume(E_AUDIO_INFO_GAME_IN, GAME1_VOL, 0x12, 0x00);     //DEC1 Vol
2038*53ee8cc1Swenshuai.xi             HAL_SOUND_SetMixModeVolume(E_AUDIO_INFO_GAME_IN, GAME2_VOL, 0x12, 0x00);     //DEC2 Vol
2039*53ee8cc1Swenshuai.xi             HAL_SOUND_SetMixModeVolume(E_AUDIO_INFO_GAME_IN, PCM_VOL,   0x12, 0x00);     //DEC3 Vol
2040*53ee8cc1Swenshuai.xi             break;
2041*53ee8cc1Swenshuai.xi 
2042*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_MMA_finish:
2043*53ee8cc1Swenshuai.xi             HAL_AUDIO_SetEntertainmentMode(AUDIO_ETMODE_DTV);
2044*53ee8cc1Swenshuai.xi             break;
2045*53ee8cc1Swenshuai.xi 
2046*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DMAReader_Command:
2047*53ee8cc1Swenshuai.xi             if (param1)
2048*53ee8cc1Swenshuai.xi             {
2049*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskReg(0x2B80, 0x0001, 0x0001);
2050*53ee8cc1Swenshuai.xi                 AUDIO_DELAY1MS(2);
2051*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskReg(0x2B80, 0x0100, 0x0100);
2052*53ee8cc1Swenshuai.xi             }
2053*53ee8cc1Swenshuai.xi             else
2054*53ee8cc1Swenshuai.xi             {
2055*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskReg(0x2B80, 0x0001, 0x0000);
2056*53ee8cc1Swenshuai.xi                 AUDIO_DELAY1MS(2);
2057*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskReg(0x2B80, 0x0100, 0x0000);
2058*53ee8cc1Swenshuai.xi                 AUDIO_DELAY1MS(2);
2059*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskReg(0x2B80, 0x0040, 0x0040); //read_init, clear dma reader data & pointer
2060*53ee8cc1Swenshuai.xi                 AUDIO_DELAY1MS(1);
2061*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskReg(0x2B80, 0x0040, 0x0000);
2062*53ee8cc1Swenshuai.xi             }
2063*53ee8cc1Swenshuai.xi             break;
2064*53ee8cc1Swenshuai.xi 
2065*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_CompressBin_LoadCode:
2066*53ee8cc1Swenshuai.xi             g_AudioVars2->CompressInfo = param1;
2067*53ee8cc1Swenshuai.xi             break;
2068*53ee8cc1Swenshuai.xi 
2069*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_CompressBin_DDRAddress:
2070*53ee8cc1Swenshuai.xi             g_AudioVars2->g_DSPDDRBinBaseAddress[param1] = param2;
2071*53ee8cc1Swenshuai.xi             g_DSPDDRBinBaseAddress[param1] = param2;
2072*53ee8cc1Swenshuai.xi             break;
2073*53ee8cc1Swenshuai.xi 
2074*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_SetSCMS:
2075*53ee8cc1Swenshuai.xi         {
2076*53ee8cc1Swenshuai.xi             retTx1= HAL_AUDIO_DigitalOut_GetChannelStatus(DIGITAL_SPDIF_OUTPUT, &stDigitalChannelStatusTx1);
2077*53ee8cc1Swenshuai.xi             retTx2= HAL_AUDIO_DigitalOut_GetChannelStatus(DIGITAL_HDMI_ARC_OUTPUT, &stDigitalChannelStatusTx2);
2078*53ee8cc1Swenshuai.xi 
2079*53ee8cc1Swenshuai.xi             if (retTx1 == FALSE || retTx2 == FALSE)
2080*53ee8cc1Swenshuai.xi             {
2081*53ee8cc1Swenshuai.xi                 HALMAD_ERROR("%s() : Failed to get channel status !!!\n", __FUNCTION__);
2082*53ee8cc1Swenshuai.xi                 break;
2083*53ee8cc1Swenshuai.xi             }
2084*53ee8cc1Swenshuai.xi 
2085*53ee8cc1Swenshuai.xi             if(param1)
2086*53ee8cc1Swenshuai.xi             {
2087*53ee8cc1Swenshuai.xi                 stDigitalChannelStatusTx1.stCopyRight.CBit = 1;
2088*53ee8cc1Swenshuai.xi                 stDigitalChannelStatusTx2.stCopyRight.CBit = 1;
2089*53ee8cc1Swenshuai.xi             }
2090*53ee8cc1Swenshuai.xi             else
2091*53ee8cc1Swenshuai.xi             {
2092*53ee8cc1Swenshuai.xi                 stDigitalChannelStatusTx1.stCopyRight.CBit = 0;
2093*53ee8cc1Swenshuai.xi                 stDigitalChannelStatusTx2.stCopyRight.CBit = 0;
2094*53ee8cc1Swenshuai.xi             }
2095*53ee8cc1Swenshuai.xi 
2096*53ee8cc1Swenshuai.xi             if(param2)
2097*53ee8cc1Swenshuai.xi             {
2098*53ee8cc1Swenshuai.xi                 stDigitalChannelStatusTx1.stCopyRight.LBit = 1;
2099*53ee8cc1Swenshuai.xi                 stDigitalChannelStatusTx2.stCopyRight.LBit = 1;
2100*53ee8cc1Swenshuai.xi             }
2101*53ee8cc1Swenshuai.xi             else
2102*53ee8cc1Swenshuai.xi             {
2103*53ee8cc1Swenshuai.xi                 stDigitalChannelStatusTx1.stCopyRight.LBit = 0;
2104*53ee8cc1Swenshuai.xi                 stDigitalChannelStatusTx2.stCopyRight.LBit = 0;
2105*53ee8cc1Swenshuai.xi             }
2106*53ee8cc1Swenshuai.xi 
2107*53ee8cc1Swenshuai.xi             HAL_AUDIO_DigitalOut_SetChannelStatus(DIGITAL_SPDIF_OUTPUT, &stDigitalChannelStatusTx1);
2108*53ee8cc1Swenshuai.xi             HAL_AUDIO_DigitalOut_SetChannelStatus(DIGITAL_HDMI_ARC_OUTPUT, &stDigitalChannelStatusTx2);
2109*53ee8cc1Swenshuai.xi        }
2110*53ee8cc1Swenshuai.xi             break;
2111*53ee8cc1Swenshuai.xi 
2112*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADC_InputGain:
2113*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(0x2CE5 , 0xE0, (AUD_ADC_GAIN_TYPE)param1<<5);
2114*53ee8cc1Swenshuai.xi             break;
2115*53ee8cc1Swenshuai.xi 
2116*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADC1_InputGain:
2117*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(0x2CE5 , 0x1C, (AUD_ADC_GAIN_TYPE)param1<<2);
2118*53ee8cc1Swenshuai.xi             break;
2119*53ee8cc1Swenshuai.xi 
2120*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_KTV_SetType:
2121*53ee8cc1Swenshuai.xi             switch((AUDIO_KTV_MODEL)param1)
2122*53ee8cc1Swenshuai.xi             {
2123*53ee8cc1Swenshuai.xi                 case AUD_KTV_MODEL1:     // iSing99
2124*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(0x2D47 , 0x7F, 0x00);  // No this model in T12
2125*53ee8cc1Swenshuai.xi                     break;
2126*53ee8cc1Swenshuai.xi                 case AUD_KTV_MODEL2:     // Multak
2127*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(0x2D47 , 0x7F, 0x21);
2128*53ee8cc1Swenshuai.xi                     break;
2129*53ee8cc1Swenshuai.xi                 case AUD_KTV_MODEL3:     // ¹p¥Û
2130*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(0x2D47 , 0x7F, 0x02);
2131*53ee8cc1Swenshuai.xi                     break;
2132*53ee8cc1Swenshuai.xi                 case AUD_KTV_MODEL4:     // Konka
2133*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(0x2D47 , 0x7F, 0x14);
2134*53ee8cc1Swenshuai.xi                     break;
2135*53ee8cc1Swenshuai.xi                 default:
2136*53ee8cc1Swenshuai.xi                     break;
2137*53ee8cc1Swenshuai.xi             }
2138*53ee8cc1Swenshuai.xi             break;
2139*53ee8cc1Swenshuai.xi 
2140*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_syncSTC_in_mmTs:
2141*53ee8cc1Swenshuai.xi             if ( param1 )
2142*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_TS_SYNC_STC, ADEC1, 1, 0);
2143*53ee8cc1Swenshuai.xi             else
2144*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_TS_SYNC_STC, ADEC1, 0, 0);
2145*53ee8cc1Swenshuai.xi             break;
2146*53ee8cc1Swenshuai.xi 
2147*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_PUSI_disable_Info:
2148*53ee8cc1Swenshuai.xi             if(param1)
2149*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_PARSER_PUSI_DISABLE, ADEC1, 1, 0);
2150*53ee8cc1Swenshuai.xi             else
2151*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_PARSER_PUSI_DISABLE, ADEC1, 0, 0);
2152*53ee8cc1Swenshuai.xi             break;
2153*53ee8cc1Swenshuai.xi 
2154*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Parser_Spec:
2155*53ee8cc1Swenshuai.xi             if(param1)
2156*53ee8cc1Swenshuai.xi             {
2157*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_PARSER_SPEC, ADEC1, 1, 0);
2158*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_PARSER_PUSI_DISABLE, ADEC1, 1, 0);
2159*53ee8cc1Swenshuai.xi             }
2160*53ee8cc1Swenshuai.xi             else
2161*53ee8cc1Swenshuai.xi             {
2162*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_PARSER_SPEC, ADEC1, 0, 0);
2163*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_PARSER_PUSI_DISABLE, ADEC1, 0, 0);
2164*53ee8cc1Swenshuai.xi             }
2165*53ee8cc1Swenshuai.xi             break;
2166*53ee8cc1Swenshuai.xi 
2167*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_setNR_Threshold:
2168*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteByte(0x2D32, (MS_U8) param1);
2169*53ee8cc1Swenshuai.xi             break;
2170*53ee8cc1Swenshuai.xi 
2171*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Set_CallBackFunc:
2172*53ee8cc1Swenshuai.xi             if ( g_FuncPrt_Hal_SetAudioParam2 == NULL )
2173*53ee8cc1Swenshuai.xi             {
2174*53ee8cc1Swenshuai.xi                 g_FuncPrt_Hal_SetAudioParam2 = HAL_MAD_SetAudioParam2;
2175*53ee8cc1Swenshuai.xi                 HALMAD_ERROR ("%s: g_FuncPrt_Hal_SetAudioParam2 hook OK !!\r\n", __FUNCTION__);
2176*53ee8cc1Swenshuai.xi             }
2177*53ee8cc1Swenshuai.xi             else
2178*53ee8cc1Swenshuai.xi             {
2179*53ee8cc1Swenshuai.xi                 HALMAD_ERROR ("%s: g_FuncPrt_Hal_SetAudioParam2 already register !!\r\n", __FUNCTION__);
2180*53ee8cc1Swenshuai.xi             }
2181*53ee8cc1Swenshuai.xi             if ( g_FuncPrt_Hal_GetAudioInfo2 == NULL )
2182*53ee8cc1Swenshuai.xi             {
2183*53ee8cc1Swenshuai.xi                 g_FuncPrt_Hal_GetAudioInfo2 = HAL_MAD_GetAudioInfo2;
2184*53ee8cc1Swenshuai.xi                 HALMAD_ERROR ("%s: g_FuncPrt_Hal_GetAudioInfo2 hook OK !!\r\n", __FUNCTION__);
2185*53ee8cc1Swenshuai.xi             }
2186*53ee8cc1Swenshuai.xi             else
2187*53ee8cc1Swenshuai.xi             {
2188*53ee8cc1Swenshuai.xi                 HALMAD_ERROR ("%s: g_FuncPrt_Hal_GetAudioInfo2 already register !!\r\n", __FUNCTION__);
2189*53ee8cc1Swenshuai.xi             }
2190*53ee8cc1Swenshuai.xi             break;
2191*53ee8cc1Swenshuai.xi 
2192*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Set_DFS_PowerSave:
2193*53ee8cc1Swenshuai.xi         {
2194*53ee8cc1Swenshuai.xi             MS_BOOL mistake_case = FALSE;
2195*53ee8cc1Swenshuai.xi             AUDIO_DSP_CODE_TYPE MainDspCodeType = g_AudioVars2->g_DspCodeType;
2196*53ee8cc1Swenshuai.xi             if(param1)
2197*53ee8cc1Swenshuai.xi             {
2198*53ee8cc1Swenshuai.xi                 if(((HAL_AUDIO_ReadByte(REG_M2D_MAILBOX_SPDIF_CTRL+1)&0x20) == 0x20) ||
2199*53ee8cc1Swenshuai.xi                     ((HAL_AUDIO_ReadByte(REG_M2D_MAILBOX_SPDIF_CTRL)&0x02) == 0x02))
2200*53ee8cc1Swenshuai.xi                 {
2201*53ee8cc1Swenshuai.xi                     if(param2<4)
2202*53ee8cc1Swenshuai.xi                     {
2203*53ee8cc1Swenshuai.xi                         HALMAD_ERROR("%s: When NonPCM case, audio fs can't set under level 4\n", __FUNCTION__ );
2204*53ee8cc1Swenshuai.xi                         mistake_case = TRUE;
2205*53ee8cc1Swenshuai.xi                         param2 = 4;
2206*53ee8cc1Swenshuai.xi                     }
2207*53ee8cc1Swenshuai.xi                  }
2208*53ee8cc1Swenshuai.xi                 else if(HAL_AUR2_ReadByte(REG_R2_DECODE1_CMD)!=0x0)  //not_stop case
2209*53ee8cc1Swenshuai.xi                 {
2210*53ee8cc1Swenshuai.xi                     switch(MainDspCodeType)
2211*53ee8cc1Swenshuai.xi                     {
2212*53ee8cc1Swenshuai.xi                         case AU_DVB_STANDARD_AAC:
2213*53ee8cc1Swenshuai.xi                         case AU_DVB_STANDARD_MS10_DDT:
2214*53ee8cc1Swenshuai.xi                         case AU_DVB_STANDARD_DTS:
2215*53ee8cc1Swenshuai.xi                         case AU_DVB_STANDARD_DTSLBR:
2216*53ee8cc1Swenshuai.xi                             if(param2<3)
2217*53ee8cc1Swenshuai.xi                             {
2218*53ee8cc1Swenshuai.xi                                 HALMAD_ERROR("%s: When playing AAC/DTS stream, audio fs can't set under level 3\n", __FUNCTION__ );
2219*53ee8cc1Swenshuai.xi                                 mistake_case = TRUE;
2220*53ee8cc1Swenshuai.xi                                 param2 = 3;
2221*53ee8cc1Swenshuai.xi                             }
2222*53ee8cc1Swenshuai.xi                             break;
2223*53ee8cc1Swenshuai.xi 
2224*53ee8cc1Swenshuai.xi                         default:
2225*53ee8cc1Swenshuai.xi                             if(param2<2)
2226*53ee8cc1Swenshuai.xi                             {
2227*53ee8cc1Swenshuai.xi                                 HALMAD_ERROR("%s: When playing any stream except AAC/DTS, audio fs can't set under level 2\n", __FUNCTION__ );
2228*53ee8cc1Swenshuai.xi                                 mistake_case = TRUE;
2229*53ee8cc1Swenshuai.xi                                 param2 = 2;
2230*53ee8cc1Swenshuai.xi                              }
2231*53ee8cc1Swenshuai.xi                             break;
2232*53ee8cc1Swenshuai.xi                     }
2233*53ee8cc1Swenshuai.xi                 }
2234*53ee8cc1Swenshuai.xi 
2235*53ee8cc1Swenshuai.xi                 switch(param2)
2236*53ee8cc1Swenshuai.xi                 {
2237*53ee8cc1Swenshuai.xi                     case 1:  //lowest speed
2238*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_DSP_DFS_REG, 0x1F, 0x0A);  //DSP = 11/32 fs
2239*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_DSP_DFS_REG, 0x80, 0x80);
2240*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_R2_DFS_REG, 0x1F, 0x00);   //R2 = 1/32 fs
2241*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_R2_DFS_REG, 0x80, 0x80);
2242*53ee8cc1Swenshuai.xi                         break;
2243*53ee8cc1Swenshuai.xi                     case 2:
2244*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_DSP_DFS_REG, 0x1F, 0x15);  //DSP = 22/32 fs
2245*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_DSP_DFS_REG, 0x80, 0x80);
2246*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_R2_DFS_REG, 0x1F, 0x0A);   //R2 = 11/32 fs
2247*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_R2_DFS_REG, 0x80, 0x80);
2248*53ee8cc1Swenshuai.xi                         break;
2249*53ee8cc1Swenshuai.xi                     case 3:
2250*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_DSP_DFS_REG, 0x1F, 0x1A);  //DSP = 27/32 fs
2251*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_DSP_DFS_REG, 0x80, 0x80);
2252*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_R2_DFS_REG, 0x1F, 0x15);   //R2 = 22/32 fs
2253*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_R2_DFS_REG, 0x80, 0x80);
2254*53ee8cc1Swenshuai.xi                         break;
2255*53ee8cc1Swenshuai.xi                     case 4:  //full speed
2256*53ee8cc1Swenshuai.xi                     default:
2257*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_DSP_DFS_REG, 0x1F, 0x1F);  //DSP = 1 fs
2258*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_DSP_DFS_REG, 0x80, 0x80);
2259*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_R2_DFS_REG, 0x1F, 0x1F);   //R2 = 1  fs
2260*53ee8cc1Swenshuai.xi                         HAL_AUDIO_AbsWriteMaskByte(REG_R2_DFS_REG, 0x80, 0x80);
2261*53ee8cc1Swenshuai.xi                         break;
2262*53ee8cc1Swenshuai.xi                 }
2263*53ee8cc1Swenshuai.xi             }
2264*53ee8cc1Swenshuai.xi             else  //full speed
2265*53ee8cc1Swenshuai.xi             {
2266*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_DSP_DFS_REG, 0x1F, 0x1F);  //DSP = 1 fs
2267*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_DSP_DFS_REG, 0x80, 0x80);
2268*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DFS_REG, 0x1F, 0x1F);   //R2 = 1  fs
2269*53ee8cc1Swenshuai.xi                 HAL_AUDIO_AbsWriteMaskByte(REG_R2_DFS_REG, 0x80, 0x80);
2270*53ee8cc1Swenshuai.xi             }
2271*53ee8cc1Swenshuai.xi             HAL_AUDIO_AbsWriteMaskByte(REG_DSP_DFS_REG, 0x80, 0x00);
2272*53ee8cc1Swenshuai.xi             HAL_AUDIO_AbsWriteMaskByte(REG_R2_DFS_REG, 0x80, 0x00);
2273*53ee8cc1Swenshuai.xi 
2274*53ee8cc1Swenshuai.xi             if(mistake_case == TRUE)
2275*53ee8cc1Swenshuai.xi                 return FALSE;
2276*53ee8cc1Swenshuai.xi         }
2277*53ee8cc1Swenshuai.xi         break;
2278*53ee8cc1Swenshuai.xi 
2279*53ee8cc1Swenshuai.xi         #if 0
2280*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_HDMI_HWbypassmode:
2281*53ee8cc1Swenshuai.xi         {
2282*53ee8cc1Swenshuai.xi            if (param1)
2283*53ee8cc1Swenshuai.xi            {
2284*53ee8cc1Swenshuai.xi                HAL_AUDIO_WriteMaskByte(REG_AUDIO_HDMI_MATRIX0+1, 0x80, 0x80); //HDMI data bypass to TX without store to DDR
2285*53ee8cc1Swenshuai.xi                HAL_AUDIO_WriteMaskByte(REG_AUDIO_NEW_MODE_CFG, 0x04, 0x00);
2286*53ee8cc1Swenshuai.xi            }
2287*53ee8cc1Swenshuai.xi            else
2288*53ee8cc1Swenshuai.xi            {
2289*53ee8cc1Swenshuai.xi                HAL_AUDIO_WriteMaskByte(REG_AUDIO_HDMI_MATRIX0+1, 0x80, 0x00); //HDMI data send to dsp
2290*53ee8cc1Swenshuai.xi                HAL_AUDIO_WriteMaskByte(REG_AUDIO_NEW_MODE_CFG, 0x04, 0x00);
2291*53ee8cc1Swenshuai.xi            }
2292*53ee8cc1Swenshuai.xi            break;
2293*53ee8cc1Swenshuai.xi         }
2294*53ee8cc1Swenshuai.xi         #endif
2295*53ee8cc1Swenshuai.xi         /********************************************************************************
2296*53ee8cc1Swenshuai.xi         *       DECODER 1
2297*53ee8cc1Swenshuai.xi         ********************************************************************************/
2298*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_Set_play_smpRate:
2299*53ee8cc1Swenshuai.xi         {
2300*53ee8cc1Swenshuai.xi             MS_U16 play_cmd;
2301*53ee8cc1Swenshuai.xi             MS_U32 synth_H;
2302*53ee8cc1Swenshuai.xi 
2303*53ee8cc1Swenshuai.xi             play_cmd = HAL_AUR2_ReadByte(REG_R2_DECODE1_CMD) & 0xF;
2304*53ee8cc1Swenshuai.xi             if (play_cmd != 0x02)
2305*53ee8cc1Swenshuai.xi                 printf("[%s : Audio_Comm_infoType_ADEC1_Set_play_smpRate]: audio play cmd is not Ts file Play !!\n", __FUNCTION__);
2306*53ee8cc1Swenshuai.xi 
2307*53ee8cc1Swenshuai.xi             if (param1)
2308*53ee8cc1Swenshuai.xi             {
2309*53ee8cc1Swenshuai.xi                 if ((param2 > 50000) ||(param2<6000))
2310*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
2311*53ee8cc1Swenshuai.xi                     printf("[%s : Audio_Comm_infoType_ADEC1_Set_play_smpRate]: play rate [%ld] is invalid !!\n", __FUNCTION__, param2);
2312*53ee8cc1Swenshuai.xi #else
2313*53ee8cc1Swenshuai.xi                     printf("[%s : Audio_Comm_infoType_ADEC1_Set_play_smpRate]: play rate [%d] is invalid !!\n", __FUNCTION__, param2);
2314*53ee8cc1Swenshuai.xi #endif
2315*53ee8cc1Swenshuai.xi                 synth_H = 216000000 / param2;
2316*53ee8cc1Swenshuai.xi                 synth_H <<= 16;
2317*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_EXT_SMPRATE_CTRL, ADEC1, 1, synth_H);
2318*53ee8cc1Swenshuai.xi             }
2319*53ee8cc1Swenshuai.xi             else
2320*53ee8cc1Swenshuai.xi             {
2321*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_EXT_SMPRATE_CTRL, ADEC1, 0, 0x11940000);
2322*53ee8cc1Swenshuai.xi             }
2323*53ee8cc1Swenshuai.xi         }
2324*53ee8cc1Swenshuai.xi         break;
2325*53ee8cc1Swenshuai.xi 
2326*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_soundmod:
2327*53ee8cc1Swenshuai.xi             {
2328*53ee8cc1Swenshuai.xi                 MS_U8 value = 0;
2329*53ee8cc1Swenshuai.xi 
2330*53ee8cc1Swenshuai.xi                 switch((AUD_Dolby_SOUNDMODE)param1)
2331*53ee8cc1Swenshuai.xi                 {
2332*53ee8cc1Swenshuai.xi                     case AUD_Dolby_SOUNDMODE_LR:     value = 0x0;  break;
2333*53ee8cc1Swenshuai.xi                     case AUD_Dolby_SOUNDMODE_LL:     value = 0x1;  break;
2334*53ee8cc1Swenshuai.xi                     case AUD_Dolby_SOUNDMODE_RR:     value = 0x2;  break;
2335*53ee8cc1Swenshuai.xi                     default:                         value = 0x0;  break;
2336*53ee8cc1Swenshuai.xi                 }
2337*53ee8cc1Swenshuai.xi 
2338*53ee8cc1Swenshuai.xi                 //NOT_DEFINE : to do
2339*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_SOUND_MODE, ADEC1, value, 0);
2340*53ee8cc1Swenshuai.xi             }
2341*53ee8cc1Swenshuai.xi             break;
2342*53ee8cc1Swenshuai.xi 
2343*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_SoundMode:                     //HAL_MAD_SetSoundMode
2344*53ee8cc1Swenshuai.xi             HAL_AUDIO_SeWriteMaskByte(REG_MB_MODE_SELECT, 0x03, (AU_DVB_MODE) param1);
2345*53ee8cc1Swenshuai.xi             break;
2346*53ee8cc1Swenshuai.xi 
2347*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_reqDataSize:
2348*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_MMFileSize:                    //HAL_MAD_SetMadFileSize
2349*53ee8cc1Swenshuai.xi             {
2350*53ee8cc1Swenshuai.xi                 MS_U32   file_size_value = 0x800;
2351*53ee8cc1Swenshuai.xi 
2352*53ee8cc1Swenshuai.xi                 switch (param1)
2353*53ee8cc1Swenshuai.xi                 {
2354*53ee8cc1Swenshuai.xi                     case FILE_SIZE_1KB:     file_size_value = 0x00400;        break;
2355*53ee8cc1Swenshuai.xi                     case FILE_SIZE_2KB:     file_size_value = 0x00800;        break;
2356*53ee8cc1Swenshuai.xi                     case FILE_SIZE_4KB:     file_size_value = 0x01000;        break;
2357*53ee8cc1Swenshuai.xi                     case FILE_SIZE_8KB:     file_size_value = 0x02000;        break;
2358*53ee8cc1Swenshuai.xi                     case FILE_SIZE_16KB:    file_size_value = 0x04000;        break;
2359*53ee8cc1Swenshuai.xi                     case FILE_SIZE_32KB:    file_size_value = 0x08000;        break;
2360*53ee8cc1Swenshuai.xi                     case FILE_SIZE_64KB:    file_size_value = 0x10000;        break;
2361*53ee8cc1Swenshuai.xi                     default:                                                 break;
2362*53ee8cc1Swenshuai.xi                 }
2363*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FILE_REQ_SIZE, ADEC1, file_size_value, 0);
2364*53ee8cc1Swenshuai.xi             }
2365*53ee8cc1Swenshuai.xi             break;
2366*53ee8cc1Swenshuai.xi 
2367*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_esBuf_informDataRdy:
2368*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DEC1_MMTag:                    //HAL_MAD_SetMMIntTag
2369*53ee8cc1Swenshuai.xi             {
2370*53ee8cc1Swenshuai.xi                MS_U32 es_wrPtr = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, 0);
2371*53ee8cc1Swenshuai.xi                MS_U32 es_bufSz = ES1_DRAM_SIZE;
2372*53ee8cc1Swenshuai.xi                MS_U32 es_reqsz = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, ADEC1);
2373*53ee8cc1Swenshuai.xi                 es_wrPtr += es_reqsz;
2374*53ee8cc1Swenshuai.xi 
2375*53ee8cc1Swenshuai.xi                 if ( es_wrPtr >= es_bufSz )
2376*53ee8cc1Swenshuai.xi                     es_wrPtr -= es_bufSz;
2377*53ee8cc1Swenshuai.xi 
2378*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, es_wrPtr, 0);
2379*53ee8cc1Swenshuai.xi             }
2380*53ee8cc1Swenshuai.xi             break;
2381*53ee8cc1Swenshuai.xi 
2382*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_FF2X:
2383*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_MM_FFx2:                       //HAL_MAD_SetMMFFx2Mode
2384*53ee8cc1Swenshuai.xi             if ( param1 )
2385*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FF2X, ADEC1, 1, 0);
2386*53ee8cc1Swenshuai.xi             else
2387*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FF2X, ADEC1, 0, 0);
2388*53ee8cc1Swenshuai.xi             break;
2389*53ee8cc1Swenshuai.xi 
2390*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_mute:
2391*53ee8cc1Swenshuai.xi             if ( param1 )
2392*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DECODE_MUTE, ADEC1, 1, 0);
2393*53ee8cc1Swenshuai.xi             else
2394*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DECODE_MUTE, ADEC1, 0, 0);
2395*53ee8cc1Swenshuai.xi             break;
2396*53ee8cc1Swenshuai.xi 
2397*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_play_wo_output:
2398*53ee8cc1Swenshuai.xi             if (param1)
2399*53ee8cc1Swenshuai.xi                 HAL_AUDIO_DecWriteMaskByte(REG_MB_DEC_CTRL, 0x80, 0x80);
2400*53ee8cc1Swenshuai.xi             else
2401*53ee8cc1Swenshuai.xi                 HAL_AUDIO_DecWriteMaskByte(REG_MB_DEC_CTRL, 0x80, 0x00);
2402*53ee8cc1Swenshuai.xi             break;
2403*53ee8cc1Swenshuai.xi 
2404*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_playControl:
2405*53ee8cc1Swenshuai.xi             switch((MMA_AUDIO_CONTROL)param1)
2406*53ee8cc1Swenshuai.xi             {
2407*53ee8cc1Swenshuai.xi                 case MMA_STOP:
2408*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDecCmd(AU_DVB_DECCMD_STOP);
2409*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDecCmd(AU_DVB_DECCMD_AVSYNC);
2410*53ee8cc1Swenshuai.xi                     g_AudioVars2->g_bDecPlayFileFlag = FALSE;
2411*53ee8cc1Swenshuai.xi                     break;
2412*53ee8cc1Swenshuai.xi 
2413*53ee8cc1Swenshuai.xi                 case MMA_PLAY:
2414*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAY);
2415*53ee8cc1Swenshuai.xi                     break;
2416*53ee8cc1Swenshuai.xi 
2417*53ee8cc1Swenshuai.xi                 case MMA_PLAY_FILETSP:
2418*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAYFILETSP);
2419*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDecCmd(AU_DVB_DECCMD_FREERUN);
2420*53ee8cc1Swenshuai.xi                     break;
2421*53ee8cc1Swenshuai.xi 
2422*53ee8cc1Swenshuai.xi                 case MMA_RESYNC:
2423*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDecCmd(AU_DVB_DECCMD_RESYNC);
2424*53ee8cc1Swenshuai.xi                     break;
2425*53ee8cc1Swenshuai.xi 
2426*53ee8cc1Swenshuai.xi                 case MMA_PLAY_FILE:
2427*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAYFILE);
2428*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDecCmd(AU_DVB_DECCMD_FREERUN);
2429*53ee8cc1Swenshuai.xi                     break;
2430*53ee8cc1Swenshuai.xi 
2431*53ee8cc1Swenshuai.xi                 case MMA_BROWSE:
2432*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDecCmd(AU_DVB_DECCMD_STARTBROWSE);
2433*53ee8cc1Swenshuai.xi                     break;
2434*53ee8cc1Swenshuai.xi 
2435*53ee8cc1Swenshuai.xi                 case MMA_PAUSE:
2436*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PAUSE);
2437*53ee8cc1Swenshuai.xi                     break;
2438*53ee8cc1Swenshuai.xi 
2439*53ee8cc1Swenshuai.xi                 case MMA_PLAY_FRAME:
2440*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAYFRAME);
2441*53ee8cc1Swenshuai.xi                     HAL_MAD_SetDecCmd(AU_DVB_DECCMD_FREERUN);
2442*53ee8cc1Swenshuai.xi                     break;
2443*53ee8cc1Swenshuai.xi 
2444*53ee8cc1Swenshuai.xi                 default:
2445*53ee8cc1Swenshuai.xi                     break;
2446*53ee8cc1Swenshuai.xi             }
2447*53ee8cc1Swenshuai.xi             break;
2448*53ee8cc1Swenshuai.xi 
2449*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_setDecParam:
2450*53ee8cc1Swenshuai.xi             //NOT_DEFINE : remove
2451*53ee8cc1Swenshuai.xi             break;
2452*53ee8cc1Swenshuai.xi 
2453*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_UNI_PCMOutCnt:
2454*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_UNI_PCM_SET_OUTPUT_CNT, ADEC1, param1, 0);
2455*53ee8cc1Swenshuai.xi             break;
2456*53ee8cc1Swenshuai.xi 
2457*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_UNI_PCMInput_Addr:   //assume UNI get data from PCM1.
2458*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteReg(REG_DEC1_UNI_PCM3_WPTR, (MS_U16)((param1>>BYTES_IN_MIU_LINE_LOG2) - OFFSET_PCM1_DRAM_ADDR));
2459*53ee8cc1Swenshuai.xi             break;
2460*53ee8cc1Swenshuai.xi 
2461*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DEC1_setBufferProcess:
2462*53ee8cc1Swenshuai.xi             // Need Decoder Add delay support in DEC1-DSP
2463*53ee8cc1Swenshuai.xi             break;
2464*53ee8cc1Swenshuai.xi 
2465*53ee8cc1Swenshuai.xi         /********************************************************************************
2466*53ee8cc1Swenshuai.xi         *       DECODER 2
2467*53ee8cc1Swenshuai.xi         ********************************************************************************/
2468*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_soundmod:
2469*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_reqDataSize:
2470*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_FF2X:
2471*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_mute:
2472*53ee8cc1Swenshuai.xi             break;
2473*53ee8cc1Swenshuai.xi 
2474*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_esBuf_informDataRdy:
2475*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DEC2_MMTag:                    //HAL_MAD2_SetMMIntTag
2476*53ee8cc1Swenshuai.xi             {
2477*53ee8cc1Swenshuai.xi                 MS_U32 es_wrPtr, es_bufSz, es_reqsz;
2478*53ee8cc1Swenshuai.xi                 es_wrPtr = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, 0);
2479*53ee8cc1Swenshuai.xi                 es_bufSz = ES2_DRAM_SIZE;
2480*53ee8cc1Swenshuai.xi                 es_reqsz = param2;
2481*53ee8cc1Swenshuai.xi                 es_wrPtr += es_reqsz;
2482*53ee8cc1Swenshuai.xi 
2483*53ee8cc1Swenshuai.xi                 if ( es_wrPtr >= es_bufSz )
2484*53ee8cc1Swenshuai.xi                    es_wrPtr -= es_bufSz;
2485*53ee8cc1Swenshuai.xi                  HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, es_wrPtr, 0);
2486*53ee8cc1Swenshuai.xi             }
2487*53ee8cc1Swenshuai.xi             break;
2488*53ee8cc1Swenshuai.xi 
2489*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_playControl:
2490*53ee8cc1Swenshuai.xi             {
2491*53ee8cc1Swenshuai.xi                 switch((MMA_AUDIO_CONTROL)param1)
2492*53ee8cc1Swenshuai.xi                 {
2493*53ee8cc1Swenshuai.xi                     case MMA_STOP:
2494*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_STOP);
2495*53ee8cc1Swenshuai.xi                         g_AudioVars2->g_bSePlayFileFlag = FALSE;
2496*53ee8cc1Swenshuai.xi                         break;
2497*53ee8cc1Swenshuai.xi 
2498*53ee8cc1Swenshuai.xi                     case MMA_PLAY:
2499*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_PLAY);
2500*53ee8cc1Swenshuai.xi                         break;
2501*53ee8cc1Swenshuai.xi 
2502*53ee8cc1Swenshuai.xi                     case MMA_PLAY_FILETSP:
2503*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_PLAYFILETSP);
2504*53ee8cc1Swenshuai.xi                         break;
2505*53ee8cc1Swenshuai.xi 
2506*53ee8cc1Swenshuai.xi                     case MMA_RESYNC:
2507*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_RESYNC);
2508*53ee8cc1Swenshuai.xi                         break;
2509*53ee8cc1Swenshuai.xi 
2510*53ee8cc1Swenshuai.xi                     case MMA_PLAY_FILE:
2511*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_PLAYFILE);
2512*53ee8cc1Swenshuai.xi                         break;
2513*53ee8cc1Swenshuai.xi 
2514*53ee8cc1Swenshuai.xi                     case MMA_BROWSE:
2515*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_STARTBROWSE);
2516*53ee8cc1Swenshuai.xi                         break;
2517*53ee8cc1Swenshuai.xi 
2518*53ee8cc1Swenshuai.xi                     case MMA_PAUSE:
2519*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_PAUSE);
2520*53ee8cc1Swenshuai.xi                         break;
2521*53ee8cc1Swenshuai.xi 
2522*53ee8cc1Swenshuai.xi                     case MMA_PLAY_FRAME:
2523*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDSP2DecCmd(AU_DVB_DECCMD_PLAYFRAME);
2524*53ee8cc1Swenshuai.xi                         break;
2525*53ee8cc1Swenshuai.xi 
2526*53ee8cc1Swenshuai.xi                     default:
2527*53ee8cc1Swenshuai.xi                         break;
2528*53ee8cc1Swenshuai.xi                 }
2529*53ee8cc1Swenshuai.xi             }
2530*53ee8cc1Swenshuai.xi             break;
2531*53ee8cc1Swenshuai.xi 
2532*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_setDecParam:
2533*53ee8cc1Swenshuai.xi             //NOT_DEFINE : remove
2534*53ee8cc1Swenshuai.xi             break;
2535*53ee8cc1Swenshuai.xi 
2536*53ee8cc1Swenshuai.xi         /********************************************************************************
2537*53ee8cc1Swenshuai.xi         *       OTHERS
2538*53ee8cc1Swenshuai.xi         ********************************************************************************/
2539*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_setSpdifDelay: // set spdif dealy time
2540*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_setSpdif_BufferProcess:
2541*53ee8cc1Swenshuai.xi             HAL_SOUND_SetSpdifAudioDelay((MS_U16)param1);
2542*53ee8cc1Swenshuai.xi             break;
2543*53ee8cc1Swenshuai.xi 
2544*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_setHdmiDelay: // set hdmi dealy time for CDI project
2545*53ee8cc1Swenshuai.xi             HAL_SOUND_SetHdmiAudioDelay((MS_U16)param1);
2546*53ee8cc1Swenshuai.xi             break;
2547*53ee8cc1Swenshuai.xi 
2548*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ReadByte: // For APP to read  register value directly.
2549*53ee8cc1Swenshuai.xi             g_ReadTargetAddr=param1;
2550*53ee8cc1Swenshuai.xi             break;
2551*53ee8cc1Swenshuai.xi 
2552*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_WriteByte: // For APP to write register value directly.
2553*53ee8cc1Swenshuai.xi             HAL_AUDIO_AbsWriteMaskByte(param1,0xFF,(MS_U8)(param2&0xFF));
2554*53ee8cc1Swenshuai.xi             break;
2555*53ee8cc1Swenshuai.xi 
2556*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_PTS_info:
2557*53ee8cc1Swenshuai.xi             HAL_AUDIO_PTS_info(param1);
2558*53ee8cc1Swenshuai.xi             break;
2559*53ee8cc1Swenshuai.xi 
2560*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_RTSP_Mem:
2561*53ee8cc1Swenshuai.xi             {
2562*53ee8cc1Swenshuai.xi                 AUDIO_RTSP_INFO *ptmp = (AUDIO_RTSP_INFO *)param1;
2563*53ee8cc1Swenshuai.xi                 ptmp->Mem_addr = RTSP_MEM_ADDR;
2564*53ee8cc1Swenshuai.xi                 ptmp->Mem_size= RTSP_MEM_SIZE;
2565*53ee8cc1Swenshuai.xi             }
2566*53ee8cc1Swenshuai.xi             break;
2567*53ee8cc1Swenshuai.xi 
2568*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Dump_Dsp_Info:
2569*53ee8cc1Swenshuai.xi             {
2570*53ee8cc1Swenshuai.xi                  g_AudioDumpInfoCtrl = param1;
2571*53ee8cc1Swenshuai.xi 
2572*53ee8cc1Swenshuai.xi                 if (param2 > 50 )
2573*53ee8cc1Swenshuai.xi                     g_audioDumpInfo_interval = param2;
2574*53ee8cc1Swenshuai.xi             }
2575*53ee8cc1Swenshuai.xi             break;
2576*53ee8cc1Swenshuai.xi 
2577*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Set_Video_STCPTS_DIFF:
2578*53ee8cc1Swenshuai.xi             break;
2579*53ee8cc1Swenshuai.xi 
2580*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_HDMI_Unstable_Protect:
2581*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_Xbox(DSP2XboxAddr_hdmi_unstable_protect, param1);
2582*53ee8cc1Swenshuai.xi             break;
2583*53ee8cc1Swenshuai.xi 
2584*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Vorbis_header_size:
2585*53ee8cc1Swenshuai.xi             if ( param1 )
2586*53ee8cc1Swenshuai.xi             {
2587*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_VORBIS_HEADER_SIZE, ADEC1, param2, 0);
2588*53ee8cc1Swenshuai.xi             }
2589*53ee8cc1Swenshuai.xi             else
2590*53ee8cc1Swenshuai.xi             {
2591*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_VORBIS_HEADER_SIZE, ADEC1, param2, 0);
2592*53ee8cc1Swenshuai.xi             }
2593*53ee8cc1Swenshuai.xi             break;
2594*53ee8cc1Swenshuai.xi 
2595*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_HDMI_Unstable_Threshold:
2596*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_Xbox(DSP2XboxAddr_hdmi_unstable_threshold, param1);
2597*53ee8cc1Swenshuai.xi             break;
2598*53ee8cc1Swenshuai.xi 
2599*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_mainAudio_setBufferProcess:
2600*53ee8cc1Swenshuai.xi             HAL_SOUND_SetCH1AudioDelay(param1);
2601*53ee8cc1Swenshuai.xi             break;
2602*53ee8cc1Swenshuai.xi 
2603*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_STC_Select:
2604*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_STC_SELECT, ADEC1, param1, 0);
2605*53ee8cc1Swenshuai.xi             break;
2606*53ee8cc1Swenshuai.xi 
2607*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_NUTTX
2608*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Set_TEE_Capibility:
2609*53ee8cc1Swenshuai.xi             HALAUDIO_CHECK_TEE_INFO_SHM_INIT;
2610*53ee8cc1Swenshuai.xi             switch ((Audio_TEE_Capability)param1)
2611*53ee8cc1Swenshuai.xi             {
2612*53ee8cc1Swenshuai.xi                 case Audio_TEE_Setup:
2613*53ee8cc1Swenshuai.xi                     g_bAudioTeeEnabled = TRUE;       audio_tee_enabled = TRUE;
2614*53ee8cc1Swenshuai.xi                     if (audio_tee_mbx_initialized == FALSE)
2615*53ee8cc1Swenshuai.xi                     {
2616*53ee8cc1Swenshuai.xi                         if (HAL_AUDIO_RegisterMBX() == TRUE)
2617*53ee8cc1Swenshuai.xi                         {
2618*53ee8cc1Swenshuai.xi                             g_bAudioTeeMbxInitialized = TRUE;   audio_tee_mbx_initialized = TRUE;
2619*53ee8cc1Swenshuai.xi                         }
2620*53ee8cc1Swenshuai.xi                     }
2621*53ee8cc1Swenshuai.xi                     break;
2622*53ee8cc1Swenshuai.xi 
2623*53ee8cc1Swenshuai.xi                 case Audio_TEE_Setup_and_ALL_DSP_Secure_Accessed:
2624*53ee8cc1Swenshuai.xi                     g_bAudioTeeEnabled = TRUE;        audio_tee_enabled = TRUE;
2625*53ee8cc1Swenshuai.xi                     if (audio_tee_mbx_initialized == FALSE)
2626*53ee8cc1Swenshuai.xi                     {
2627*53ee8cc1Swenshuai.xi                         if (HAL_AUDIO_RegisterMBX() == TRUE)
2628*53ee8cc1Swenshuai.xi                         {
2629*53ee8cc1Swenshuai.xi                             g_bAudioTeeMbxInitialized = TRUE;             audio_tee_mbx_initialized = TRUE;
2630*53ee8cc1Swenshuai.xi                             g_bDecDspSecureTeeAccessed = TRUE;        dec_dsp_secure_tee_accessed = TRUE;
2631*53ee8cc1Swenshuai.xi                             g_bSndDspSecureTeeAccessed = TRUE;        snd_dsp_secure_tee_accessed = TRUE;
2632*53ee8cc1Swenshuai.xi                         }
2633*53ee8cc1Swenshuai.xi                     }
2634*53ee8cc1Swenshuai.xi                     break;
2635*53ee8cc1Swenshuai.xi 
2636*53ee8cc1Swenshuai.xi                 case Audio_TEE_Set_DSP_Secure_Accessed:
2637*53ee8cc1Swenshuai.xi                     if ((audio_tee_enabled ==  TRUE) && (audio_tee_mbx_initialized == TRUE))
2638*53ee8cc1Swenshuai.xi                     {
2639*53ee8cc1Swenshuai.xi                         if (((AUDIO_DSP_ID)param2) == AUDIO_DSP_ID_DEC)
2640*53ee8cc1Swenshuai.xi                         {
2641*53ee8cc1Swenshuai.xi                             g_bDecDspSecureTeeAccessed = TRUE;            dec_dsp_secure_tee_accessed = TRUE;
2642*53ee8cc1Swenshuai.xi                         }
2643*53ee8cc1Swenshuai.xi                         else if (((AUDIO_DSP_ID)param2) == AUDIO_DSP_ID_SND)
2644*53ee8cc1Swenshuai.xi                         {
2645*53ee8cc1Swenshuai.xi                             g_bSndDspSecureTeeAccessed = TRUE;           snd_dsp_secure_tee_accessed = TRUE;
2646*53ee8cc1Swenshuai.xi                         }
2647*53ee8cc1Swenshuai.xi                         else if (((AUDIO_DSP_ID)param2) == AUDIO_DSP_ID_ALL)
2648*53ee8cc1Swenshuai.xi                         {
2649*53ee8cc1Swenshuai.xi                             g_bDecDspSecureTeeAccessed = TRUE;            dec_dsp_secure_tee_accessed = TRUE;
2650*53ee8cc1Swenshuai.xi                             g_bSndDspSecureTeeAccessed = TRUE;            snd_dsp_secure_tee_accessed = TRUE;
2651*53ee8cc1Swenshuai.xi                         }
2652*53ee8cc1Swenshuai.xi                     }
2653*53ee8cc1Swenshuai.xi                     break;
2654*53ee8cc1Swenshuai.xi 
2655*53ee8cc1Swenshuai.xi                 case Audio_TEE_Set_DSP_Normal_Accessed:
2656*53ee8cc1Swenshuai.xi                     if (((AUDIO_DSP_ID)param2) == AUDIO_DSP_ID_DEC)
2657*53ee8cc1Swenshuai.xi                     {
2658*53ee8cc1Swenshuai.xi                         g_bDecDspSecureTeeAccessed = FALSE;            dec_dsp_secure_tee_accessed = FALSE;
2659*53ee8cc1Swenshuai.xi                     }
2660*53ee8cc1Swenshuai.xi                     else if (((AUDIO_DSP_ID)param2) == AUDIO_DSP_ID_SND)
2661*53ee8cc1Swenshuai.xi                     {
2662*53ee8cc1Swenshuai.xi                         g_bSndDspSecureTeeAccessed = FALSE;           snd_dsp_secure_tee_accessed = FALSE;
2663*53ee8cc1Swenshuai.xi                     }
2664*53ee8cc1Swenshuai.xi                     else if (((AUDIO_DSP_ID)param2) == AUDIO_DSP_ID_ALL)
2665*53ee8cc1Swenshuai.xi                     {
2666*53ee8cc1Swenshuai.xi                         g_bDecDspSecureTeeAccessed = FALSE;           dec_dsp_secure_tee_accessed = FALSE;
2667*53ee8cc1Swenshuai.xi                         g_bSndDspSecureTeeAccessed = FALSE;           snd_dsp_secure_tee_accessed = FALSE;
2668*53ee8cc1Swenshuai.xi                     }
2669*53ee8cc1Swenshuai.xi                     break;
2670*53ee8cc1Swenshuai.xi 
2671*53ee8cc1Swenshuai.xi                 default:
2672*53ee8cc1Swenshuai.xi                     break;
2673*53ee8cc1Swenshuai.xi             }
2674*53ee8cc1Swenshuai.xi             break;
2675*53ee8cc1Swenshuai.xi #endif
2676*53ee8cc1Swenshuai.xi 
2677*53ee8cc1Swenshuai.xi         /* not supported cmd */
2678*53ee8cc1Swenshuai.xi         default:
2679*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
2680*53ee8cc1Swenshuai.xi             printf("%s: infoType[0x%x,0x%lx,0x%lx] not Supported\n",__FUNCTION__, infoType, param1, param2);
2681*53ee8cc1Swenshuai.xi #else
2682*53ee8cc1Swenshuai.xi             printf("%s: infoType[0x%x,0x%x,0x%x] not Supported\n",__FUNCTION__, infoType, param1, param2);
2683*53ee8cc1Swenshuai.xi #endif
2684*53ee8cc1Swenshuai.xi             break;
2685*53ee8cc1Swenshuai.xi     }
2686*53ee8cc1Swenshuai.xi 
2687*53ee8cc1Swenshuai.xi     return TRUE;
2688*53ee8cc1Swenshuai.xi }
2689*53ee8cc1Swenshuai.xi 
2690*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2691*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetCommInfo()
2692*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine info of audio decoders
2693*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_COMM_infoType    : request info type of audio decoder
2694*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
2695*53ee8cc1Swenshuai.xi /// @param <RET>       \b long long :  info type
2696*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
2697*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetCommInfo(Audio_COMM_infoType infoType)2698*53ee8cc1Swenshuai.xi MS_U64 HAL_MAD_GetCommInfo( Audio_COMM_infoType infoType )
2699*53ee8cc1Swenshuai.xi {
2700*53ee8cc1Swenshuai.xi     MS_U64 result = 0;
2701*53ee8cc1Swenshuai.xi 
2702*53ee8cc1Swenshuai.xi     HALMAD_CHECK_SHM_INIT;
2703*53ee8cc1Swenshuai.xi 
2704*53ee8cc1Swenshuai.xi     switch(infoType)
2705*53ee8cc1Swenshuai.xi     {
2706*53ee8cc1Swenshuai.xi         /********************************************************************************
2707*53ee8cc1Swenshuai.xi         *       Common
2708*53ee8cc1Swenshuai.xi         ********************************************************************************/
2709*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_getHDMI_CopyRight_C_Bit:
2710*53ee8cc1Swenshuai.xi             result = _AU_AbsReadByte(0x1027B4) & 0x20;
2711*53ee8cc1Swenshuai.xi             break;
2712*53ee8cc1Swenshuai.xi 
2713*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_getHDMI_CopyRight_L_Bit:
2714*53ee8cc1Swenshuai.xi             result = _AU_AbsReadByte(0x1027B5) & 0x01;
2715*53ee8cc1Swenshuai.xi             break;
2716*53ee8cc1Swenshuai.xi 
2717*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Get_UNI_ES_MEMCNT:
2718*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, ADEC1);
2719*53ee8cc1Swenshuai.xi             break;
2720*53ee8cc1Swenshuai.xi 
2721*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Get_UNI_ES_Base:
2722*53ee8cc1Swenshuai.xi             result = HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + OFFSET_ES1_DRAM_ADDR;
2723*53ee8cc1Swenshuai.xi             break;
2724*53ee8cc1Swenshuai.xi 
2725*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Get_UNI_ES_Size:
2726*53ee8cc1Swenshuai.xi             result = ES1_DRAM_SIZE ;
2727*53ee8cc1Swenshuai.xi             break;
2728*53ee8cc1Swenshuai.xi 
2729*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Get_UNI_PCM_Base:
2730*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_ADDR, ADEC1);
2731*53ee8cc1Swenshuai.xi             break;
2732*53ee8cc1Swenshuai.xi 
2733*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Get_UNI_PCM_Size:
2734*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_SIZE, ADEC1);
2735*53ee8cc1Swenshuai.xi             break;
2736*53ee8cc1Swenshuai.xi 
2737*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Get_AccumEsCnt:
2738*53ee8cc1Swenshuai.xi //            result = HAL_MAD_Read_DSP_sram(REG_PTS_AccumEsCnt, DSP_MEM_TYPE_DM);
2739*53ee8cc1Swenshuai.xi             result = 0;
2740*53ee8cc1Swenshuai.xi             break;
2741*53ee8cc1Swenshuai.xi 
2742*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Is_Decoder_In_R2:
2743*53ee8cc1Swenshuai.xi             result = 1;
2744*53ee8cc1Swenshuai.xi             break;
2745*53ee8cc1Swenshuai.xi 
2746*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Is_Audio_Sync:
2747*53ee8cc1Swenshuai.xi             {
2748*53ee8cc1Swenshuai.xi                 long long tmp = 0;
2749*53ee8cc1Swenshuai.xi                 MS_U32 i, no_sync_cnt = 0;
2750*53ee8cc1Swenshuai.xi 
2751*53ee8cc1Swenshuai.xi                 tmp = HAL_MAD_GetCommInfo(Audio_Comm_infoType_ADEC1_1ms_timeStamp);
2752*53ee8cc1Swenshuai.xi                 if (tmp == 0)
2753*53ee8cc1Swenshuai.xi                 {
2754*53ee8cc1Swenshuai.xi                     result = 0;
2755*53ee8cc1Swenshuai.xi                     break;
2756*53ee8cc1Swenshuai.xi                 }
2757*53ee8cc1Swenshuai.xi 
2758*53ee8cc1Swenshuai.xi                 tmp = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_AVSYNC_STATE, ADEC1)&0x0F;
2759*53ee8cc1Swenshuai.xi                 if (tmp != 2)
2760*53ee8cc1Swenshuai.xi                 {
2761*53ee8cc1Swenshuai.xi                     result = 0;
2762*53ee8cc1Swenshuai.xi                     break;
2763*53ee8cc1Swenshuai.xi                 }
2764*53ee8cc1Swenshuai.xi 
2765*53ee8cc1Swenshuai.xi                 for (i = 0;i<3;i++)
2766*53ee8cc1Swenshuai.xi                 {
2767*53ee8cc1Swenshuai.xi                     tmp = HAL_MAD_GetCommInfo (Audio_Comm_infoType_ADEC1_33bit_STCPTS_DIFF);
2768*53ee8cc1Swenshuai.xi                     if ((tmp >= (100*90))||(tmp <= (-100*90))) //100ms
2769*53ee8cc1Swenshuai.xi                     {
2770*53ee8cc1Swenshuai.xi                         no_sync_cnt ++;
2771*53ee8cc1Swenshuai.xi                     }
2772*53ee8cc1Swenshuai.xi                 }
2773*53ee8cc1Swenshuai.xi 
2774*53ee8cc1Swenshuai.xi                 if (no_sync_cnt == 0)
2775*53ee8cc1Swenshuai.xi                 {
2776*53ee8cc1Swenshuai.xi                     result = 1;
2777*53ee8cc1Swenshuai.xi                 }
2778*53ee8cc1Swenshuai.xi             }
2779*53ee8cc1Swenshuai.xi             break;
2780*53ee8cc1Swenshuai.xi 
2781*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Parser_Info:
2782*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PARSER_INFO, ADEC1);
2783*53ee8cc1Swenshuai.xi             break;
2784*53ee8cc1Swenshuai.xi         /********************************************************************************
2785*53ee8cc1Swenshuai.xi         *       hdmiTx
2786*53ee8cc1Swenshuai.xi         ********************************************************************************/
2787*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_hdmiTx_outType:
2788*53ee8cc1Swenshuai.xi         {
2789*53ee8cc1Swenshuai.xi             MS_U32 r2_hdmiTx_HBR = 0xFFFF;
2790*53ee8cc1Swenshuai.xi 
2791*53ee8cc1Swenshuai.xi             if(HAL_AUDIO_ReadByte(REG_M2D_MAILBOX_SPDIF_CTRL+1)&0x20)
2792*53ee8cc1Swenshuai.xi             {
2793*53ee8cc1Swenshuai.xi                 if(HAL_AUR2_ReadByte(REG_R2_HDMI_NONPCM_PATH) == ADEC1)
2794*53ee8cc1Swenshuai.xi                 {
2795*53ee8cc1Swenshuai.xi                     r2_hdmiTx_HBR = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_HDMIbuf_HBR, ADEC1);
2796*53ee8cc1Swenshuai.xi                 }
2797*53ee8cc1Swenshuai.xi                 else
2798*53ee8cc1Swenshuai.xi                 {
2799*53ee8cc1Swenshuai.xi                     r2_hdmiTx_HBR = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_HDMIbuf_HBR, ADEC2);
2800*53ee8cc1Swenshuai.xi                 }
2801*53ee8cc1Swenshuai.xi 
2802*53ee8cc1Swenshuai.xi                 if(r2_hdmiTx_HBR == 1)
2803*53ee8cc1Swenshuai.xi                     result = HDMI_OUT_8CH_NONPCM;
2804*53ee8cc1Swenshuai.xi                 else
2805*53ee8cc1Swenshuai.xi                     result = HDMI_OUT_NONPCM;
2806*53ee8cc1Swenshuai.xi             }
2807*53ee8cc1Swenshuai.xi             else
2808*53ee8cc1Swenshuai.xi                 result = HDMI_OUT_PCM;
2809*53ee8cc1Swenshuai.xi         }
2810*53ee8cc1Swenshuai.xi             break;
2811*53ee8cc1Swenshuai.xi 
2812*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_hdmiTx_outFreq:
2813*53ee8cc1Swenshuai.xi         {
2814*53ee8cc1Swenshuai.xi             if(HAL_AUDIO_ReadByte(REG_M2D_MAILBOX_SPDIF_CTRL+1)&0x20)
2815*53ee8cc1Swenshuai.xi             {
2816*53ee8cc1Swenshuai.xi                 MS_U32 r2_hdmiTx_smpRate = 0xFFFF;
2817*53ee8cc1Swenshuai.xi 
2818*53ee8cc1Swenshuai.xi                 if(HAL_AUR2_ReadByte(REG_R2_HDMI_NONPCM_PATH) == ADEC1)
2819*53ee8cc1Swenshuai.xi                 {
2820*53ee8cc1Swenshuai.xi                     if(g_AudioVars2->g_EdidOutViaArc == TRUE)
2821*53ee8cc1Swenshuai.xi                         r2_hdmiTx_smpRate = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SPDIFTx_SMP_RATE, ADEC1);
2822*53ee8cc1Swenshuai.xi                     else
2823*53ee8cc1Swenshuai.xi                         r2_hdmiTx_smpRate = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_HDMITx_SMP_RATE, ADEC1);
2824*53ee8cc1Swenshuai.xi                 }
2825*53ee8cc1Swenshuai.xi                 else
2826*53ee8cc1Swenshuai.xi                 {
2827*53ee8cc1Swenshuai.xi                     if(g_AudioVars2->g_EdidOutViaArc == TRUE)
2828*53ee8cc1Swenshuai.xi                         r2_hdmiTx_smpRate = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SPDIFTx_SMP_RATE, ADEC2);
2829*53ee8cc1Swenshuai.xi                     else
2830*53ee8cc1Swenshuai.xi                         r2_hdmiTx_smpRate = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_HDMITx_SMP_RATE, ADEC2);
2831*53ee8cc1Swenshuai.xi                 }
2832*53ee8cc1Swenshuai.xi 
2833*53ee8cc1Swenshuai.xi                 result = AUDIO_FS_NONE;
2834*53ee8cc1Swenshuai.xi 
2835*53ee8cc1Swenshuai.xi                 switch(r2_hdmiTx_smpRate)
2836*53ee8cc1Swenshuai.xi                 {
2837*53ee8cc1Swenshuai.xi                     case 32000: result = AUDIO_FS_32KHZ;   break;
2838*53ee8cc1Swenshuai.xi                     case 44100: result = AUDIO_FS_44KHZ;   break;
2839*53ee8cc1Swenshuai.xi                     case 48000: result = AUDIO_FS_48KHZ;   break;
2840*53ee8cc1Swenshuai.xi                     case 64000: result = AUDIO_FS_64KHZ;   break;
2841*53ee8cc1Swenshuai.xi                     case 88200: result = AUDIO_FS_88KHZ;   break;
2842*53ee8cc1Swenshuai.xi                     case 96000: result = AUDIO_FS_96KHZ;   break;
2843*53ee8cc1Swenshuai.xi                     case 176400: result = AUDIO_FS_176KHZ; break;
2844*53ee8cc1Swenshuai.xi                     case 192000: result = AUDIO_FS_192KHZ; break;
2845*53ee8cc1Swenshuai.xi                     default: result = AUDIO_FS_48KHZ;      break;
2846*53ee8cc1Swenshuai.xi                 }
2847*53ee8cc1Swenshuai.xi             }
2848*53ee8cc1Swenshuai.xi             else
2849*53ee8cc1Swenshuai.xi             {
2850*53ee8cc1Swenshuai.xi                 result = AUDIO_FS_48KHZ;
2851*53ee8cc1Swenshuai.xi             }
2852*53ee8cc1Swenshuai.xi         }
2853*53ee8cc1Swenshuai.xi             break;
2854*53ee8cc1Swenshuai.xi 
2855*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_HDMI_ChannelStatus_1st_64bits:
2856*53ee8cc1Swenshuai.xi         {
2857*53ee8cc1Swenshuai.xi             MS_U64 HDMI_value;
2858*53ee8cc1Swenshuai.xi             HAL_AUDIO_AbsWriteMaskByte(REG_HDMI_STATUS_REG12, 0x30, 0x20);
2859*53ee8cc1Swenshuai.xi             AUDIO_DELAY1MS(1);
2860*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG0);
2861*53ee8cc1Swenshuai.xi             result = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG0);
2862*53ee8cc1Swenshuai.xi             if (HDMI_value!=result)
2863*53ee8cc1Swenshuai.xi             {
2864*53ee8cc1Swenshuai.xi                 result = 0;
2865*53ee8cc1Swenshuai.xi                 break;
2866*53ee8cc1Swenshuai.xi             }
2867*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG1);
2868*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<16);
2869*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG2);
2870*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<32);
2871*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG3);
2872*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<48);
2873*53ee8cc1Swenshuai.xi         }
2874*53ee8cc1Swenshuai.xi             break;
2875*53ee8cc1Swenshuai.xi 
2876*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_HDMI_ChannelStatus_2nd_64bits:
2877*53ee8cc1Swenshuai.xi         {
2878*53ee8cc1Swenshuai.xi             MS_U64 HDMI_value;
2879*53ee8cc1Swenshuai.xi             HAL_AUDIO_AbsWriteMaskByte(REG_HDMI_STATUS_REG12, 0x30, 0x20);
2880*53ee8cc1Swenshuai.xi             result = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG4);
2881*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG5);
2882*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<16);
2883*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG6);
2884*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<32);
2885*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG7);
2886*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<48);
2887*53ee8cc1Swenshuai.xi         }
2888*53ee8cc1Swenshuai.xi             break;
2889*53ee8cc1Swenshuai.xi 
2890*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_HDMI_ChannelStatus_3rd_64bits:
2891*53ee8cc1Swenshuai.xi         {
2892*53ee8cc1Swenshuai.xi             MS_U64 HDMI_value;
2893*53ee8cc1Swenshuai.xi             HAL_AUDIO_AbsWriteMaskByte(REG_HDMI_STATUS_REG12, 0x30, 0x20);
2894*53ee8cc1Swenshuai.xi             result = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG8);
2895*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG9);
2896*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<16);
2897*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG10);
2898*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<32);
2899*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG11);
2900*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<48);
2901*53ee8cc1Swenshuai.xi         }
2902*53ee8cc1Swenshuai.xi             break;
2903*53ee8cc1Swenshuai.xi 
2904*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_HDMI_UserData_1st_64bits:
2905*53ee8cc1Swenshuai.xi         {
2906*53ee8cc1Swenshuai.xi             MS_U64 HDMI_value;
2907*53ee8cc1Swenshuai.xi             HAL_AUDIO_AbsWriteMaskByte(REG_HDMI_STATUS_REG12, 0x30, 0x10);
2908*53ee8cc1Swenshuai.xi             AUDIO_DELAY1MS(1);
2909*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG0);
2910*53ee8cc1Swenshuai.xi             result = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG0);
2911*53ee8cc1Swenshuai.xi             if (HDMI_value!=result)
2912*53ee8cc1Swenshuai.xi             {
2913*53ee8cc1Swenshuai.xi                 result = 0;
2914*53ee8cc1Swenshuai.xi                 break;
2915*53ee8cc1Swenshuai.xi             }
2916*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG1);
2917*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<16);
2918*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG2);
2919*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<32);
2920*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG3);
2921*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<48);
2922*53ee8cc1Swenshuai.xi         }
2923*53ee8cc1Swenshuai.xi             break;
2924*53ee8cc1Swenshuai.xi 
2925*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_HDMI_UserData_2nd_64bits:
2926*53ee8cc1Swenshuai.xi         {
2927*53ee8cc1Swenshuai.xi             MS_U64 HDMI_value;
2928*53ee8cc1Swenshuai.xi             HAL_AUDIO_AbsWriteMaskByte(REG_HDMI_STATUS_REG12, 0x30, 0x10);
2929*53ee8cc1Swenshuai.xi             result = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG4);
2930*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG5);
2931*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<16);
2932*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG6);
2933*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<32);
2934*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG7);
2935*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<48);
2936*53ee8cc1Swenshuai.xi         }
2937*53ee8cc1Swenshuai.xi             break;
2938*53ee8cc1Swenshuai.xi 
2939*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_HDMI_UserData_3rd_64bits:
2940*53ee8cc1Swenshuai.xi         {
2941*53ee8cc1Swenshuai.xi             MS_U64 HDMI_value;
2942*53ee8cc1Swenshuai.xi             HAL_AUDIO_AbsWriteMaskByte(REG_HDMI_STATUS_REG12, 0x30, 0x10);
2943*53ee8cc1Swenshuai.xi             result = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG8);
2944*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG9);
2945*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<16);
2946*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG10);
2947*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<32);
2948*53ee8cc1Swenshuai.xi             HDMI_value = HAL_AUR2_ReadReg(REG_HDMI_STATUS_REG11);
2949*53ee8cc1Swenshuai.xi             result = result + (HDMI_value<<48);
2950*53ee8cc1Swenshuai.xi         }
2951*53ee8cc1Swenshuai.xi             break;
2952*53ee8cc1Swenshuai.xi         /********************************************************************************
2953*53ee8cc1Swenshuai.xi         *       DECODER 1
2954*53ee8cc1Swenshuai.xi         ********************************************************************************/
2955*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_capability:
2956*53ee8cc1Swenshuai.xi         {
2957*53ee8cc1Swenshuai.xi             MMA_AudioType audioType = Audio_DEC_NULL;
2958*53ee8cc1Swenshuai.xi             audioType = _GetAudioCaps(AU_DEC_ID1);
2959*53ee8cc1Swenshuai.xi             result = (long long)audioType;
2960*53ee8cc1Swenshuai.xi         }
2961*53ee8cc1Swenshuai.xi             break;
2962*53ee8cc1Swenshuai.xi 
2963*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_currAudDecStatus:
2964*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DecStatus:                     //no change
2965*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, ADEC1);
2966*53ee8cc1Swenshuai.xi             break;
2967*53ee8cc1Swenshuai.xi 
2968*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_AudioSyncStatus:
2969*53ee8cc1Swenshuai.xi             if(HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_CMD)&0x80)
2970*53ee8cc1Swenshuai.xi                 result = 0;  // Free-run
2971*53ee8cc1Swenshuai.xi             else
2972*53ee8cc1Swenshuai.xi                 result = 1;  // AV-sync
2973*53ee8cc1Swenshuai.xi             break;
2974*53ee8cc1Swenshuai.xi 
2975*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_sampleRate:
2976*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_SampleRate:                    //HAL_MAD_GetMadSamplingRate
2977*53ee8cc1Swenshuai.xi         {
2978*53ee8cc1Swenshuai.xi             MS_U32 r2_smpRate = 0xFFFF;
2979*53ee8cc1Swenshuai.xi             r2_smpRate = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, ADEC1);
2980*53ee8cc1Swenshuai.xi             result = AUDIO_FS_NONE;
2981*53ee8cc1Swenshuai.xi 
2982*53ee8cc1Swenshuai.xi             switch(r2_smpRate)
2983*53ee8cc1Swenshuai.xi             {
2984*53ee8cc1Swenshuai.xi                 case 8000:   result = AUDIO_FS_8KHZ;   break;
2985*53ee8cc1Swenshuai.xi                 case 11025:  result = AUDIO_FS_11KHZ;  break;
2986*53ee8cc1Swenshuai.xi                 case 12000:  result = AUDIO_FS_12KHZ;  break;
2987*53ee8cc1Swenshuai.xi                 case 16000:  result = AUDIO_FS_16KHZ;  break;
2988*53ee8cc1Swenshuai.xi                 case 22050:  result = AUDIO_FS_22KHZ;  break;
2989*53ee8cc1Swenshuai.xi                 case 24000:  result = AUDIO_FS_24KHZ;  break;
2990*53ee8cc1Swenshuai.xi                 case 32000:  result = AUDIO_FS_32KHZ;  break;
2991*53ee8cc1Swenshuai.xi                 case 44100:  result = AUDIO_FS_44KHZ;  break;
2992*53ee8cc1Swenshuai.xi                 case 48000:  result = AUDIO_FS_48KHZ;  break;
2993*53ee8cc1Swenshuai.xi                 case 65535:  result = AUDIO_FS_NONE;   break;
2994*53ee8cc1Swenshuai.xi                 case 64000:  result = AUDIO_FS_64KHZ;  break;
2995*53ee8cc1Swenshuai.xi                 case 88200:  result = AUDIO_FS_88KHZ;  break;
2996*53ee8cc1Swenshuai.xi                 case 96000:  result = AUDIO_FS_96KHZ;  break;
2997*53ee8cc1Swenshuai.xi                 case 176000: //result = AUDIO_FS_176KHZ; break;
2998*53ee8cc1Swenshuai.xi                 case 192000: //result = AUDIO_FS_192KHZ; break;
2999*53ee8cc1Swenshuai.xi                 default:     result = AUDIO_FS_NONE;   break;
3000*53ee8cc1Swenshuai.xi             }
3001*53ee8cc1Swenshuai.xi         }
3002*53ee8cc1Swenshuai.xi         break;
3003*53ee8cc1Swenshuai.xi 
3004*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_bitRate:
3005*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_BIT_RATE, ADEC1);
3006*53ee8cc1Swenshuai.xi             break;
3007*53ee8cc1Swenshuai.xi 
3008*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_acmod:
3009*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ChannelMode:                   //HAL_MAD_GetMadChannelMode
3010*53ee8cc1Swenshuai.xi         {
3011*53ee8cc1Swenshuai.xi             MS_U32 ac_mode = 0xFF;
3012*53ee8cc1Swenshuai.xi             MS_U32 channel_mapping = 0x0;
3013*53ee8cc1Swenshuai.xi             ac_mode = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MODE, ADEC1);
3014*53ee8cc1Swenshuai.xi             channel_mapping = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MAPPING, ADEC1);
3015*53ee8cc1Swenshuai.xi 
3016*53ee8cc1Swenshuai.xi             switch(ac_mode)
3017*53ee8cc1Swenshuai.xi             {
3018*53ee8cc1Swenshuai.xi                 case adec_ch_mono:
3019*53ee8cc1Swenshuai.xi                     result =  AUD_CH_MODE_MONO;
3020*53ee8cc1Swenshuai.xi                     break;
3021*53ee8cc1Swenshuai.xi 
3022*53ee8cc1Swenshuai.xi                 case adec_ch_joint_stereo:
3023*53ee8cc1Swenshuai.xi                     result =  AUD_CH_MODE_JOINT_STEREO;
3024*53ee8cc1Swenshuai.xi                     break;
3025*53ee8cc1Swenshuai.xi 
3026*53ee8cc1Swenshuai.xi                 case adec_ch_stereo:
3027*53ee8cc1Swenshuai.xi                     result =  AUD_CH_MODE_STEREO;
3028*53ee8cc1Swenshuai.xi                     break;
3029*53ee8cc1Swenshuai.xi 
3030*53ee8cc1Swenshuai.xi                 case adec_ch_dual_mono:
3031*53ee8cc1Swenshuai.xi                     result =  AUD_CH_MODE_DUAL_MONO;
3032*53ee8cc1Swenshuai.xi                     break;
3033*53ee8cc1Swenshuai.xi 
3034*53ee8cc1Swenshuai.xi                 case adec_ch_multi:
3035*53ee8cc1Swenshuai.xi                     {
3036*53ee8cc1Swenshuai.xi                         MS_U32 channel_mapping_mask_C_L_R, channel_mapping_mask_Ls_Rs =0x00;
3037*53ee8cc1Swenshuai.xi                         channel_mapping_mask_Ls_Rs = (channel_mapping&(ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS));
3038*53ee8cc1Swenshuai.xi                         channel_mapping_mask_C_L_R = (channel_mapping&(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L|ACMOD_CH_MASK_R));
3039*53ee8cc1Swenshuai.xi 
3040*53ee8cc1Swenshuai.xi                         if(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L|ACMOD_CH_MASK_R))
3041*53ee8cc1Swenshuai.xi                         {
3042*53ee8cc1Swenshuai.xi                             if(channel_mapping_mask_Ls_Rs == (ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS))
3043*53ee8cc1Swenshuai.xi                                result =  AUD_CH_MODE_3_2_MODE;
3044*53ee8cc1Swenshuai.xi                             else if(channel_mapping_mask_Ls_Rs == ACMOD_CH_MASK_NULL)
3045*53ee8cc1Swenshuai.xi                                result =  AUD_CH_MODE_3_0_MODE;
3046*53ee8cc1Swenshuai.xi                             else
3047*53ee8cc1Swenshuai.xi                                result =  AUD_CH_MODE_3_1_MODE;
3048*53ee8cc1Swenshuai.xi                         }
3049*53ee8cc1Swenshuai.xi                         else if((channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L))||(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_L|ACMOD_CH_MASK_R))
3050*53ee8cc1Swenshuai.xi                                 ||(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_R)))
3051*53ee8cc1Swenshuai.xi                         {
3052*53ee8cc1Swenshuai.xi                             if(channel_mapping_mask_Ls_Rs == (ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS))
3053*53ee8cc1Swenshuai.xi                                result =  AUD_CH_MODE_2_2_MODE;
3054*53ee8cc1Swenshuai.xi                             else
3055*53ee8cc1Swenshuai.xi                                result =  AUD_CH_MODE_2_1_MODE;
3056*53ee8cc1Swenshuai.xi                         }
3057*53ee8cc1Swenshuai.xi                         else //other multi-channel case, set it to AUD_CH_MODE_3_2_MODE
3058*53ee8cc1Swenshuai.xi                         {
3059*53ee8cc1Swenshuai.xi                             result =  AUD_CH_MODE_3_2_MODE;
3060*53ee8cc1Swenshuai.xi                         }
3061*53ee8cc1Swenshuai.xi                     }
3062*53ee8cc1Swenshuai.xi                     break;
3063*53ee8cc1Swenshuai.xi 
3064*53ee8cc1Swenshuai.xi                 default:
3065*53ee8cc1Swenshuai.xi                     result =  AUD_CH_MODE_NONE;
3066*53ee8cc1Swenshuai.xi                     break;
3067*53ee8cc1Swenshuai.xi             }
3068*53ee8cc1Swenshuai.xi         }
3069*53ee8cc1Swenshuai.xi             break;
3070*53ee8cc1Swenshuai.xi 
3071*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_soundmod:
3072*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_SoundMode:
3073*53ee8cc1Swenshuai.xi             result = HAL_AUDIO_ReadReg(REG_MB_MODE_SELECT)&0x3;
3074*53ee8cc1Swenshuai.xi             break;
3075*53ee8cc1Swenshuai.xi 
3076*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_okFrmCnt:
3077*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_OK_FRMCNT, ADEC1);
3078*53ee8cc1Swenshuai.xi             break;
3079*53ee8cc1Swenshuai.xi 
3080*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_errFrmCnt:
3081*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DecodeErrorCnt:                //HAL_MAD_Get_DecodeErrorCnt
3082*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ERR_FRMCNT, ADEC1);
3083*53ee8cc1Swenshuai.xi             break;
3084*53ee8cc1Swenshuai.xi 
3085*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_1ms_timeStamp:
3086*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_1ms_PTS:                       //no change
3087*53ee8cc1Swenshuai.xi             {
3088*53ee8cc1Swenshuai.xi                 MS_U32  pts;
3089*53ee8cc1Swenshuai.xi                 pts = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_CURR_PTS, ADEC1);
3090*53ee8cc1Swenshuai.xi                 result = pts/45;
3091*53ee8cc1Swenshuai.xi             }
3092*53ee8cc1Swenshuai.xi             break;
3093*53ee8cc1Swenshuai.xi 
3094*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_33bit_PTS:
3095*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_33Bit_PTS:                     //HAL_MAD_GetMadPts
3096*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_CURR_PTS, ADEC1);
3097*53ee8cc1Swenshuai.xi             result <<= 1;
3098*53ee8cc1Swenshuai.xi             break;
3099*53ee8cc1Swenshuai.xi 
3100*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_getlatest_PTS:
3101*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PTS, ADEC1);
3102*53ee8cc1Swenshuai.xi             result <<= 1;
3103*53ee8cc1Swenshuai.xi             break;
3104*53ee8cc1Swenshuai.xi 
3105*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_33bit_STCPTS_DIFF:
3106*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_33Bit_STCPTS_DIFF:             //HAL_MAD_GetMadPtsStcDelta
3107*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_TD, ADEC1);
3108*53ee8cc1Swenshuai.xi 
3109*53ee8cc1Swenshuai.xi             //sign ext
3110*53ee8cc1Swenshuai.xi             result <<= 32;
3111*53ee8cc1Swenshuai.xi             result >>= 31;
3112*53ee8cc1Swenshuai.xi             break;
3113*53ee8cc1Swenshuai.xi 
3114*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_Get_PTS_latency:
3115*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PTS_LATENCY, ADEC1);
3116*53ee8cc1Swenshuai.xi 
3117*53ee8cc1Swenshuai.xi             //sign ext
3118*53ee8cc1Swenshuai.xi             result <<= 32;
3119*53ee8cc1Swenshuai.xi             result >>= 31;
3120*53ee8cc1Swenshuai.xi             break;
3121*53ee8cc1Swenshuai.xi 
3122*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_Get_PCM_bufferEmpty:
3123*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_EMPTY_CNT, ADEC1);
3124*53ee8cc1Swenshuai.xi             break;
3125*53ee8cc1Swenshuai.xi 
3126*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_esBuf_reqFlag:
3127*53ee8cc1Swenshuai.xi             {
3128*53ee8cc1Swenshuai.xi                 if (HAL_AUDIO_GetPlayFileFlag(DSP_DEC))
3129*53ee8cc1Swenshuai.xi                     result = 1;
3130*53ee8cc1Swenshuai.xi                 else
3131*53ee8cc1Swenshuai.xi                     result = 0;
3132*53ee8cc1Swenshuai.xi             }
3133*53ee8cc1Swenshuai.xi             break;
3134*53ee8cc1Swenshuai.xi 
3135*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DEC1_BufferAddr:               //HAL_MAD_GetBufferAddr
3136*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, 0) + OFFSET_ES1_DRAM_ADDR;
3137*53ee8cc1Swenshuai.xi             break;
3138*53ee8cc1Swenshuai.xi 
3139*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_esBuf_reqAddr:
3140*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, 0) + OFFSET_ES1_DRAM_ADDR + HAL_AUDIO_GetDspMadBaseAddr(DSP_SE);
3141*53ee8cc1Swenshuai.xi             break;
3142*53ee8cc1Swenshuai.xi 
3143*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_esBuf_reqSize:
3144*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DEC1_BufferSize:               //HAL_MAD_GetBufferSize
3145*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, ADEC1);
3146*53ee8cc1Swenshuai.xi             break;
3147*53ee8cc1Swenshuai.xi 
3148*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_esBuf_currLevel:
3149*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DEC1_ESBufferSize:             //HAL_MAD_GetESBufferSize
3150*53ee8cc1Swenshuai.xi              result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, ADEC1);
3151*53ee8cc1Swenshuai.xi             break;
3152*53ee8cc1Swenshuai.xi 
3153*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_pcmBuf_currLevel:
3154*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DEC1_MMResidualPCM:            //HAL_MAD_GetMMResidualPCM
3155*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DEC1_PCMBufferSize:            //HAL_MAD_GetPCMBufferSize
3156*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_DMX_LEVEL, ADEC1);
3157*53ee8cc1Swenshuai.xi             break;
3158*53ee8cc1Swenshuai.xi 
3159*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_UNI_pcm_wptr:
3160*53ee8cc1Swenshuai.xi             result = HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + ASND_DSP_DDR_SIZE + OFFSET_PCM1_DRAM_ADDR + HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_WR_PTR, 0);
3161*53ee8cc1Swenshuai.xi             break;
3162*53ee8cc1Swenshuai.xi 
3163*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_UNI_pcm_decSize:
3164*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_UNI_DECODE_DONE_PCM_SIZE, ADEC1);
3165*53ee8cc1Swenshuai.xi             break;
3166*53ee8cc1Swenshuai.xi 
3167*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_UNI_OutPCMLevel:
3168*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_DMX_LEVEL, ADEC1);
3169*53ee8cc1Swenshuai.xi             break;
3170*53ee8cc1Swenshuai.xi 
3171*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_getDecInfo1:
3172*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_getDecInfo2:
3173*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_getDecInfo3:
3174*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_getDecInfo4:
3175*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_getDecInfo5:
3176*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_getDecInfo6:
3177*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_getDecInfo7:
3178*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_getDecInfo8:
3179*53ee8cc1Swenshuai.xi             {
3180*53ee8cc1Swenshuai.xi                 // not used, remove
3181*53ee8cc1Swenshuai.xi             }
3182*53ee8cc1Swenshuai.xi             break;
3183*53ee8cc1Swenshuai.xi 
3184*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DMAReader_BufferLevel:
3185*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskReg(0x2B80, 0x0010, 0x0010);
3186*53ee8cc1Swenshuai.xi             result = ((MS_U32)HAL_AUDIO_ReadReg(0x2B8C)<<3);      // 0x2B8C is line size
3187*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskReg(0x2B80, 0x0010, 0x0000);
3188*53ee8cc1Swenshuai.xi             break;
3189*53ee8cc1Swenshuai.xi 
3190*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DMAReader_BufferSize:
3191*53ee8cc1Swenshuai.xi             result = (DSP2_DMA_READER_DRAM_SIZE+1)*BYTES_IN_MIU_LINE;
3192*53ee8cc1Swenshuai.xi             break;
3193*53ee8cc1Swenshuai.xi 
3194*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_syncSTC_in_mmTs:
3195*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_AVSYNC_MMTsSyncFlag, ADEC1);
3196*53ee8cc1Swenshuai.xi             break;
3197*53ee8cc1Swenshuai.xi 
3198*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_getDecChannelInfo:
3199*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MAPPING, ADEC1);
3200*53ee8cc1Swenshuai.xi             break;
3201*53ee8cc1Swenshuai.xi 
3202*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC1_audio_unsupported:
3203*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_UNSUPPORT_TYPE, ADEC1);
3204*53ee8cc1Swenshuai.xi             break;
3205*53ee8cc1Swenshuai.xi 
3206*53ee8cc1Swenshuai.xi         /*******************************************************************************
3207*53ee8cc1Swenshuai.xi         *       DECODER 2
3208*53ee8cc1Swenshuai.xi         *******************************************************************************/
3209*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_capability:
3210*53ee8cc1Swenshuai.xi             result = Audio_DEC_MP3;
3211*53ee8cc1Swenshuai.xi             break;
3212*53ee8cc1Swenshuai.xi 
3213*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_currAudDecStatus:
3214*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, ADEC2);
3215*53ee8cc1Swenshuai.xi             break;
3216*53ee8cc1Swenshuai.xi 
3217*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_sampleRate:
3218*53ee8cc1Swenshuai.xi             {
3219*53ee8cc1Swenshuai.xi                 MS_U32 r2_smpRate = 0xFFFF;
3220*53ee8cc1Swenshuai.xi                 r2_smpRate = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, ADEC2);
3221*53ee8cc1Swenshuai.xi                 result = AUDIO_FS_NONE;
3222*53ee8cc1Swenshuai.xi 
3223*53ee8cc1Swenshuai.xi                 switch(r2_smpRate)
3224*53ee8cc1Swenshuai.xi                 {
3225*53ee8cc1Swenshuai.xi                     case 8000:   result = AUDIO_FS_8KHZ;   break;
3226*53ee8cc1Swenshuai.xi                     case 11025:  result = AUDIO_FS_11KHZ;  break;
3227*53ee8cc1Swenshuai.xi                     case 12000:  result = AUDIO_FS_12KHZ;  break;
3228*53ee8cc1Swenshuai.xi                     case 16000:  result = AUDIO_FS_16KHZ;  break;
3229*53ee8cc1Swenshuai.xi                     case 22050:  result = AUDIO_FS_22KHZ;  break;
3230*53ee8cc1Swenshuai.xi                     case 24000:  result = AUDIO_FS_24KHZ;  break;
3231*53ee8cc1Swenshuai.xi                     case 32000:  result = AUDIO_FS_32KHZ;  break;
3232*53ee8cc1Swenshuai.xi                     case 44100:  result = AUDIO_FS_44KHZ;  break;
3233*53ee8cc1Swenshuai.xi                     case 48000:  result = AUDIO_FS_48KHZ;  break;
3234*53ee8cc1Swenshuai.xi                     case 65535:  result = AUDIO_FS_NONE;   break;
3235*53ee8cc1Swenshuai.xi                     case 64000:  result = AUDIO_FS_64KHZ;  break;
3236*53ee8cc1Swenshuai.xi                     case 88200:  result = AUDIO_FS_88KHZ;  break;
3237*53ee8cc1Swenshuai.xi                     case 96000:  result = AUDIO_FS_96KHZ;  break;
3238*53ee8cc1Swenshuai.xi                     case 176000: //result = AUDIO_FS_176KHZ; break;
3239*53ee8cc1Swenshuai.xi                     case 192000: //result = AUDIO_FS_192KHZ; break;
3240*53ee8cc1Swenshuai.xi                     default:     result = AUDIO_FS_NONE;   break;
3241*53ee8cc1Swenshuai.xi                 }
3242*53ee8cc1Swenshuai.xi             }
3243*53ee8cc1Swenshuai.xi             break;
3244*53ee8cc1Swenshuai.xi 
3245*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_bitRate:
3246*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_BIT_RATE, ADEC2);
3247*53ee8cc1Swenshuai.xi             break;
3248*53ee8cc1Swenshuai.xi 
3249*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_acmod:
3250*53ee8cc1Swenshuai.xi         {
3251*53ee8cc1Swenshuai.xi             MS_U32 ac_mode = 0xFF;
3252*53ee8cc1Swenshuai.xi             MS_U32 channel_mapping = 0x0;
3253*53ee8cc1Swenshuai.xi             ac_mode = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MODE, ADEC2);
3254*53ee8cc1Swenshuai.xi             channel_mapping = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MAPPING, ADEC2);
3255*53ee8cc1Swenshuai.xi 
3256*53ee8cc1Swenshuai.xi             switch(ac_mode)
3257*53ee8cc1Swenshuai.xi             {
3258*53ee8cc1Swenshuai.xi                 case adec_ch_mono:
3259*53ee8cc1Swenshuai.xi                     result =  AUD_CH_MODE_MONO;
3260*53ee8cc1Swenshuai.xi                     break;
3261*53ee8cc1Swenshuai.xi 
3262*53ee8cc1Swenshuai.xi                 case adec_ch_joint_stereo:
3263*53ee8cc1Swenshuai.xi                     result =  AUD_CH_MODE_JOINT_STEREO;
3264*53ee8cc1Swenshuai.xi                     break;
3265*53ee8cc1Swenshuai.xi 
3266*53ee8cc1Swenshuai.xi                 case adec_ch_stereo:
3267*53ee8cc1Swenshuai.xi                     result =  AUD_CH_MODE_STEREO;
3268*53ee8cc1Swenshuai.xi                     break;
3269*53ee8cc1Swenshuai.xi 
3270*53ee8cc1Swenshuai.xi                 case adec_ch_dual_mono:
3271*53ee8cc1Swenshuai.xi                     result =  AUD_CH_MODE_DUAL_MONO;
3272*53ee8cc1Swenshuai.xi                     break;
3273*53ee8cc1Swenshuai.xi 
3274*53ee8cc1Swenshuai.xi                 case adec_ch_multi:
3275*53ee8cc1Swenshuai.xi                     {
3276*53ee8cc1Swenshuai.xi                         MS_U32 channel_mapping_mask_C_L_R, channel_mapping_mask_Ls_Rs =0x00;
3277*53ee8cc1Swenshuai.xi                         channel_mapping_mask_Ls_Rs = (channel_mapping&(ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS));
3278*53ee8cc1Swenshuai.xi                         channel_mapping_mask_C_L_R = (channel_mapping&(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L|ACMOD_CH_MASK_R));
3279*53ee8cc1Swenshuai.xi 
3280*53ee8cc1Swenshuai.xi                         if(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L|ACMOD_CH_MASK_R))
3281*53ee8cc1Swenshuai.xi                         {
3282*53ee8cc1Swenshuai.xi                             if(channel_mapping_mask_Ls_Rs == (ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS))
3283*53ee8cc1Swenshuai.xi                                result = AUD_CH_MODE_3_2_MODE;
3284*53ee8cc1Swenshuai.xi                             else if(channel_mapping_mask_Ls_Rs == ACMOD_CH_MASK_NULL)
3285*53ee8cc1Swenshuai.xi                                result = AUD_CH_MODE_3_0_MODE;
3286*53ee8cc1Swenshuai.xi                             else
3287*53ee8cc1Swenshuai.xi                                result = AUD_CH_MODE_3_1_MODE;
3288*53ee8cc1Swenshuai.xi                         }
3289*53ee8cc1Swenshuai.xi                         else if((channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L))||(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_L|ACMOD_CH_MASK_R))
3290*53ee8cc1Swenshuai.xi                                 ||(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_R)))
3291*53ee8cc1Swenshuai.xi                         {
3292*53ee8cc1Swenshuai.xi                             if(channel_mapping_mask_Ls_Rs == (ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS))
3293*53ee8cc1Swenshuai.xi                                result = AUD_CH_MODE_2_2_MODE;
3294*53ee8cc1Swenshuai.xi                             else
3295*53ee8cc1Swenshuai.xi                                result = AUD_CH_MODE_2_1_MODE;
3296*53ee8cc1Swenshuai.xi                         }
3297*53ee8cc1Swenshuai.xi                         else //other multi-channel case, set it to AUD_CH_MODE_3_2_MODE
3298*53ee8cc1Swenshuai.xi                         {
3299*53ee8cc1Swenshuai.xi                             result = AUD_CH_MODE_3_2_MODE;
3300*53ee8cc1Swenshuai.xi                         }
3301*53ee8cc1Swenshuai.xi                     }
3302*53ee8cc1Swenshuai.xi                     break;
3303*53ee8cc1Swenshuai.xi 
3304*53ee8cc1Swenshuai.xi                 default:
3305*53ee8cc1Swenshuai.xi                     result =  AUD_CH_MODE_NONE;
3306*53ee8cc1Swenshuai.xi                     break;
3307*53ee8cc1Swenshuai.xi             }
3308*53ee8cc1Swenshuai.xi         }
3309*53ee8cc1Swenshuai.xi             break;
3310*53ee8cc1Swenshuai.xi 
3311*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_soundmod:
3312*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_okFrmCnt:
3313*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_errFrmCnt:
3314*53ee8cc1Swenshuai.xi             break;
3315*53ee8cc1Swenshuai.xi 
3316*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_1ms_timeStamp:
3317*53ee8cc1Swenshuai.xi             {
3318*53ee8cc1Swenshuai.xi                 MS_U32  pts;
3319*53ee8cc1Swenshuai.xi                 pts = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_CURR_PTS, ADEC2);
3320*53ee8cc1Swenshuai.xi                 result = pts/45;
3321*53ee8cc1Swenshuai.xi             }
3322*53ee8cc1Swenshuai.xi             break;
3323*53ee8cc1Swenshuai.xi 
3324*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_33bit_PTS:
3325*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_CURR_PTS, ADEC2);
3326*53ee8cc1Swenshuai.xi             result <<= 1;
3327*53ee8cc1Swenshuai.xi             break;
3328*53ee8cc1Swenshuai.xi 
3329*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_33bit_STCPTS_DIFF:
3330*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_TD, ADEC2);
3331*53ee8cc1Swenshuai.xi             //sign ext
3332*53ee8cc1Swenshuai.xi             result <<= 32;
3333*53ee8cc1Swenshuai.xi             result >>= 31;
3334*53ee8cc1Swenshuai.xi             break;
3335*53ee8cc1Swenshuai.xi 
3336*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_esBuf_reqFlag:
3337*53ee8cc1Swenshuai.xi             {
3338*53ee8cc1Swenshuai.xi                 if (HAL_AUDIO_GetPlayFileFlag(DSP_SE))
3339*53ee8cc1Swenshuai.xi                     result = 1;
3340*53ee8cc1Swenshuai.xi                 else
3341*53ee8cc1Swenshuai.xi                     result = 0;
3342*53ee8cc1Swenshuai.xi             }
3343*53ee8cc1Swenshuai.xi             break;
3344*53ee8cc1Swenshuai.xi 
3345*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DEC2_BufferAddr:               //HAL_MAD2_GetBufferAddr
3346*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, 0) + OFFSET_ES2_DRAM_ADDR;
3347*53ee8cc1Swenshuai.xi             break;
3348*53ee8cc1Swenshuai.xi 
3349*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_esBuf_reqAddr:
3350*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, 0) + OFFSET_ES2_DRAM_ADDR + HAL_AUDIO_GetDspMadBaseAddr(DSP_SE);
3351*53ee8cc1Swenshuai.xi             break;
3352*53ee8cc1Swenshuai.xi 
3353*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_esBuf_reqSize:
3354*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, ADEC2);
3355*53ee8cc1Swenshuai.xi             break;
3356*53ee8cc1Swenshuai.xi 
3357*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DEC2_BufferSize:               //HAL_MAD2_GetBufferSize
3358*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, ADEC2);
3359*53ee8cc1Swenshuai.xi             break;
3360*53ee8cc1Swenshuai.xi 
3361*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_esBuf_currLevel:
3362*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, ADEC2);
3363*53ee8cc1Swenshuai.xi             break;
3364*53ee8cc1Swenshuai.xi 
3365*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_pcmBuf_currLevel:
3366*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_DEC2_MMResidualPCM:            //HAL_MAD2_GetMMResidualPCM
3367*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_DMX_LEVEL, ADEC2);
3368*53ee8cc1Swenshuai.xi             break;
3369*53ee8cc1Swenshuai.xi 
3370*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_syncSTC_in_mmTs:
3371*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_AVSYNC_MMTsSyncFlag, ADEC2);
3372*53ee8cc1Swenshuai.xi             break;
3373*53ee8cc1Swenshuai.xi 
3374*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_getDecInfo1:
3375*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_getDecInfo2:
3376*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_getDecInfo3:
3377*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_getDecInfo4:
3378*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_getDecInfo5:
3379*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_getDecInfo6:
3380*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_getDecInfo7:
3381*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_getDecInfo8:
3382*53ee8cc1Swenshuai.xi             //{
3383*53ee8cc1Swenshuai.xi             //    MS_U8 param_offset = infoType - Audio_Comm_infoType_ADEC2_getDecInfo1;
3384*53ee8cc1Swenshuai.xi             //    result = HAL_MAD2_Read_DSP_sram(REG_DEC2_INFO_BASE+param_offset, DSP_MEM_TYPE_DM);
3385*53ee8cc1Swenshuai.xi             //}
3386*53ee8cc1Swenshuai.xi             break;
3387*53ee8cc1Swenshuai.xi 
3388*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC2_getDecChannelInfo:
3389*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MAPPING, ADEC2);
3390*53ee8cc1Swenshuai.xi             break;
3391*53ee8cc1Swenshuai.xi 
3392*53ee8cc1Swenshuai.xi         /********************************************************************************
3393*53ee8cc1Swenshuai.xi         *       DECODER 3
3394*53ee8cc1Swenshuai.xi         ********************************************************************************/
3395*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_capability:
3396*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_currAudDecStatus:
3397*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_sampleRate:
3398*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_bitRate:
3399*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_acmod:
3400*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_soundmod:
3401*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_reqDataSize:
3402*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_okFrmCnt:
3403*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_errFrmCnt:
3404*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_1ms_timeStamp:
3405*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_33bit_PTS:
3406*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_33bit_STCPTS_DIFF:
3407*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_esBuf_reqFlag:
3408*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_esBuf_reqAddr:
3409*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_esBuf_reqSize:
3410*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_esBuf_currLevel:
3411*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_pcmBuf_currLevel:
3412*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_getDecInfo1:
3413*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_getDecInfo2:
3414*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_getDecInfo3:
3415*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_getDecInfo4:
3416*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_getDecInfo5:
3417*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_getDecInfo6:
3418*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_getDecInfo7:
3419*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_getDecInfo8:
3420*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_getDecChannelInfo:
3421*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ADEC3_getlatest_PTS:
3422*53ee8cc1Swenshuai.xi             break;
3423*53ee8cc1Swenshuai.xi 
3424*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_ReadByte:
3425*53ee8cc1Swenshuai.xi             result = (MS_U64)HAL_AUDIO_AbsReadByte(g_ReadTargetAddr);
3426*53ee8cc1Swenshuai.xi             break;
3427*53ee8cc1Swenshuai.xi 
3428*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_getSignal_Energy:
3429*53ee8cc1Swenshuai.xi             result = HAL_MAD2_Read_DSP_Xbox(DSP2XboxAddr_dec1_signal_energy);
3430*53ee8cc1Swenshuai.xi             break;
3431*53ee8cc1Swenshuai.xi 
3432*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_getNR_Status:
3433*53ee8cc1Swenshuai.xi             result = (HAL_AUDIO_ReadByte(S2M_MBOX_NR_STATUS)& 0x01);
3434*53ee8cc1Swenshuai.xi             break;
3435*53ee8cc1Swenshuai.xi 
3436*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_HDMI_Unstable_Protect:
3437*53ee8cc1Swenshuai.xi             result = HAL_MAD2_Read_DSP_Xbox(DSP2XboxAddr_hdmi_unstable_protect);
3438*53ee8cc1Swenshuai.xi             break;
3439*53ee8cc1Swenshuai.xi 
3440*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_HDMI_Unstable_Threshold:
3441*53ee8cc1Swenshuai.xi             result = HAL_MAD2_Read_DSP_Xbox(DSP2XboxAddr_hdmi_unstable_threshold);
3442*53ee8cc1Swenshuai.xi             break;
3443*53ee8cc1Swenshuai.xi 
3444*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Get_MultiPlayer_Capability:
3445*53ee8cc1Swenshuai.xi             result = 1;
3446*53ee8cc1Swenshuai.xi             break;
3447*53ee8cc1Swenshuai.xi 
3448*53ee8cc1Swenshuai.xi         case Audio_comm_infoType_Get_audio_crash_status:
3449*53ee8cc1Swenshuai.xi             result = g_AudioVars2->g_u8AudioCrashFlag;
3450*53ee8cc1Swenshuai.xi             break;
3451*53ee8cc1Swenshuai.xi 
3452*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Get_Parser_Architecture:
3453*53ee8cc1Swenshuai.xi             result = E_AUD_4_PARSER_type2; // 4 AFIFO & 4 audio parser arch
3454*53ee8cc1Swenshuai.xi             break;
3455*53ee8cc1Swenshuai.xi 
3456*53ee8cc1Swenshuai.xi         case Audio_comm_infoType_Get_Main_Input_Source_Info:
3457*53ee8cc1Swenshuai.xi             result = g_AudioVars2->eAudioSource;
3458*53ee8cc1Swenshuai.xi             break;
3459*53ee8cc1Swenshuai.xi 
3460*53ee8cc1Swenshuai.xi         case Audio_comm_infoType_Get_Sub_Input_Source_Info:
3461*53ee8cc1Swenshuai.xi             result = HAL_AUDIO_ConvertInputType2SourceInfo(g_AudioVars2->eSubAudioSource);
3462*53ee8cc1Swenshuai.xi             break;
3463*53ee8cc1Swenshuai.xi 
3464*53ee8cc1Swenshuai.xi         case Audio_comm_infoType_Get_Main_Input_Type:
3465*53ee8cc1Swenshuai.xi             result = g_AudioVars2->eMainAudioSource;
3466*53ee8cc1Swenshuai.xi             break;
3467*53ee8cc1Swenshuai.xi 
3468*53ee8cc1Swenshuai.xi         case Audio_comm_infoType_Get_Sub_Input_Type:
3469*53ee8cc1Swenshuai.xi             result = g_AudioVars2->eSubAudioSource;
3470*53ee8cc1Swenshuai.xi             break;
3471*53ee8cc1Swenshuai.xi 
3472*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Get_Dra_ChannelMode:
3473*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MAPPING, ADEC1);
3474*53ee8cc1Swenshuai.xi             break;
3475*53ee8cc1Swenshuai.xi 
3476*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_LFE_Channel_Info:
3477*53ee8cc1Swenshuai.xi         {
3478*53ee8cc1Swenshuai.xi             MS_U32 channel_mapping = 0x0;
3479*53ee8cc1Swenshuai.xi             channel_mapping = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MAPPING, ADEC1);
3480*53ee8cc1Swenshuai.xi             if ((channel_mapping&ACMOD_CH_MASK_LFE)==0x20)
3481*53ee8cc1Swenshuai.xi             {
3482*53ee8cc1Swenshuai.xi                 result = 0x1; // 1:LFE   0:no LFE
3483*53ee8cc1Swenshuai.xi             }
3484*53ee8cc1Swenshuai.xi             else
3485*53ee8cc1Swenshuai.xi             {
3486*53ee8cc1Swenshuai.xi                 result =  0x0; // 1:LFE   0:no LFE
3487*53ee8cc1Swenshuai.xi             }
3488*53ee8cc1Swenshuai.xi             break;
3489*53ee8cc1Swenshuai.xi         }
3490*53ee8cc1Swenshuai.xi 
3491*53ee8cc1Swenshuai.xi         case Audio_Comm_infoType_Get_AD_Cabability:
3492*53ee8cc1Swenshuai.xi         {
3493*53ee8cc1Swenshuai.xi #if AUDIO_AD_SUPPORT
3494*53ee8cc1Swenshuai.xi             result = 1;
3495*53ee8cc1Swenshuai.xi #endif
3496*53ee8cc1Swenshuai.xi             break;
3497*53ee8cc1Swenshuai.xi         }
3498*53ee8cc1Swenshuai.xi 
3499*53ee8cc1Swenshuai.xi         /* not support cmd */
3500*53ee8cc1Swenshuai.xi         default:
3501*53ee8cc1Swenshuai.xi             printf("%s: cmd not Supported\n", __FUNCTION__ );
3502*53ee8cc1Swenshuai.xi             break;
3503*53ee8cc1Swenshuai.xi     }
3504*53ee8cc1Swenshuai.xi 
3505*53ee8cc1Swenshuai.xi     return result;
3506*53ee8cc1Swenshuai.xi }
3507*53ee8cc1Swenshuai.xi 
3508*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
3509*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetMpegInfo()
3510*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different paramter to mpeg decoder
3511*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_MPEG_infoType    : mpeg audio parameter type
3512*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32    : common mpeg parameter 1
3513*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32    : common mpeg parameter 2
3514*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
3515*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_BOOL :    TRUE ( SUCCESS ) / FALSE (FAIL)
3516*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
3517*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetMpegInfo(Audio_MPEG_infoType infoType,MS_VIRT param1,MS_VIRT param2)3518*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetMpegInfo( Audio_MPEG_infoType infoType, MS_VIRT param1, MS_VIRT param2 )
3519*53ee8cc1Swenshuai.xi {
3520*53ee8cc1Swenshuai.xi     switch(infoType)
3521*53ee8cc1Swenshuai.xi     {
3522*53ee8cc1Swenshuai.xi         case Audio_MPEG_infoType_SoundMode:                 //HAL_MAD_MPEG_SetSoundMode
3523*53ee8cc1Swenshuai.xi             {
3524*53ee8cc1Swenshuai.xi                 MS_U8 value = 0;                            //default LL mode
3525*53ee8cc1Swenshuai.xi 
3526*53ee8cc1Swenshuai.xi                 switch((AUD_MPEG_SOUNDMODE)param1)
3527*53ee8cc1Swenshuai.xi                 {
3528*53ee8cc1Swenshuai.xi                     case AUD_MPEG_SOUNDMODE_LL:     value = 0x4;  break;
3529*53ee8cc1Swenshuai.xi                     case AUD_MPEG_SOUNDMODE_RR:     value = 0x8;  break;
3530*53ee8cc1Swenshuai.xi                     case AUD_MPEG_SOUNDMODE_LR:     value = 0x0;  break;
3531*53ee8cc1Swenshuai.xi                     case AUD_MPEG_SOUNDMODE_MIX_LR: value = 0xC;  break;
3532*53ee8cc1Swenshuai.xi                     default:                        value = 0x0;  break;
3533*53ee8cc1Swenshuai.xi                 }
3534*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MPEG_SOUNDMODE, ADEC1, (MS_U32)value, 0);
3535*53ee8cc1Swenshuai.xi             }
3536*53ee8cc1Swenshuai.xi             break;
3537*53ee8cc1Swenshuai.xi 
3538*53ee8cc1Swenshuai.xi         case Audio_MPEG_infoType_MMFileSize:                //HAL_MAD_MPEG_SetFileSize
3539*53ee8cc1Swenshuai.xi             HAL_MAD_SetCommInfo(Audio_Comm_infoType_MMFileSize, param1, param2);
3540*53ee8cc1Swenshuai.xi             break;
3541*53ee8cc1Swenshuai.xi 
3542*53ee8cc1Swenshuai.xi         case Audio_MPEG_DTV_AVSYNC_OFFSET:
3543*53ee8cc1Swenshuai.xi             if ((param1<DELAY_LOWER_LIMIT)||(param1>DELAY_UPPER_LIMIT))              //delay offset range from 30ms ~ 300ms
3544*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MPG_AVOFFSET, ADEC1, (MS_U32)MPG_AV_DEFAULT_DELAY, 0);
3545*53ee8cc1Swenshuai.xi             else
3546*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MPG_AVOFFSET, ADEC1, (MS_U32)param1, 0);
3547*53ee8cc1Swenshuai.xi             break;
3548*53ee8cc1Swenshuai.xi 
3549*53ee8cc1Swenshuai.xi         case Audio_MPEG_DTV_AVSYNC_DISABLE_SETTING:
3550*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MPG_AVOFFSET, ADEC1, (MS_U32)MPG_AV_DEFAULT_DELAY, 0);
3551*53ee8cc1Swenshuai.xi             break;
3552*53ee8cc1Swenshuai.xi 
3553*53ee8cc1Swenshuai.xi         default:
3554*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
3555*53ee8cc1Swenshuai.xi             printf("%s: infoType[0x%x,0x%08lx,0x%08lx] not Supported\n",__FUNCTION__, infoType, param1, param2);
3556*53ee8cc1Swenshuai.xi #else
3557*53ee8cc1Swenshuai.xi             printf("%s: infoType[0x%x,0x%08x,0x%08x] not Supported\n",__FUNCTION__, infoType, param1, param2);
3558*53ee8cc1Swenshuai.xi #endif
3559*53ee8cc1Swenshuai.xi             break;
3560*53ee8cc1Swenshuai.xi     }
3561*53ee8cc1Swenshuai.xi 
3562*53ee8cc1Swenshuai.xi     return TRUE;
3563*53ee8cc1Swenshuai.xi }
3564*53ee8cc1Swenshuai.xi 
3565*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
3566*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetMpegInfo()
3567*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine info of mpeg decoder
3568*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_MPEG_infoType    : request info type of mpeg decoder
3569*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
3570*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U32  :  info type
3571*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
3572*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetMpegInfo(Audio_MPEG_infoType infoType)3573*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetMpegInfo( Audio_MPEG_infoType infoType )
3574*53ee8cc1Swenshuai.xi {
3575*53ee8cc1Swenshuai.xi     MS_U32 result = 0;
3576*53ee8cc1Swenshuai.xi 
3577*53ee8cc1Swenshuai.xi     switch(infoType)
3578*53ee8cc1Swenshuai.xi     {
3579*53ee8cc1Swenshuai.xi         case Audio_MPEG_infoType_DecStatus:     //no change
3580*53ee8cc1Swenshuai.xi             if (((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_mpeg) && (HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, ADEC1) & 0x0001))
3581*53ee8cc1Swenshuai.xi                 result = 1;
3582*53ee8cc1Swenshuai.xi             else
3583*53ee8cc1Swenshuai.xi                 result = 0;
3584*53ee8cc1Swenshuai.xi             break;
3585*53ee8cc1Swenshuai.xi 
3586*53ee8cc1Swenshuai.xi         case Audio_MPEG_infoType_BitRate:       //HAL_MAD_MPEG_GetBitRate
3587*53ee8cc1Swenshuai.xi             result = HAL_MAD_MPEG_GetBitRate();
3588*53ee8cc1Swenshuai.xi             break;
3589*53ee8cc1Swenshuai.xi 
3590*53ee8cc1Swenshuai.xi         case Audio_MPEG_infoType_FrameNum:      //HAL_MAD_MPEG_GetframeNum
3591*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_OK_FRMCNT, ADEC1);
3592*53ee8cc1Swenshuai.xi             break;
3593*53ee8cc1Swenshuai.xi 
3594*53ee8cc1Swenshuai.xi         case Audio_MPEG_infoType_Layer:         //HAL_MAD_MPEG_GetLayer
3595*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MPEG_LAYER, ADEC1);
3596*53ee8cc1Swenshuai.xi             break;
3597*53ee8cc1Swenshuai.xi 
3598*53ee8cc1Swenshuai.xi         case Audio_MPEG_infoType_SampleRate:    //HAL_MAD_MPEG_GetSampleRate
3599*53ee8cc1Swenshuai.xi             result = HAL_MAD_MPEG_GetSampleRate();
3600*53ee8cc1Swenshuai.xi             break;
3601*53ee8cc1Swenshuai.xi 
3602*53ee8cc1Swenshuai.xi         case Audio_MPEG_infoType_stereoMode:    //HAL_MAD_MPEG_GetSoundMode
3603*53ee8cc1Swenshuai.xi             result = HAL_MAD_MPEG_GetSoundMode();
3604*53ee8cc1Swenshuai.xi             break;
3605*53ee8cc1Swenshuai.xi 
3606*53ee8cc1Swenshuai.xi         case Audio_MPEG_infoType_Header:        //HAL_MAD_MPEG_GetHeaderInfo
3607*53ee8cc1Swenshuai.xi             result = HAL_MAD_MPEG_GetHeaderInfo();
3608*53ee8cc1Swenshuai.xi             break;
3609*53ee8cc1Swenshuai.xi 
3610*53ee8cc1Swenshuai.xi         default:
3611*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
3612*53ee8cc1Swenshuai.xi             break;
3613*53ee8cc1Swenshuai.xi     }
3614*53ee8cc1Swenshuai.xi 
3615*53ee8cc1Swenshuai.xi     return result;
3616*53ee8cc1Swenshuai.xi }
3617*53ee8cc1Swenshuai.xi 
3618*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
3619*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetWmaInfo()
3620*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different paramter to wma decoder
3621*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_WMA_infoType    : wma audio parameter type
3622*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32    : common wma parameter 1
3623*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32    : common wma parameter 2
3624*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
3625*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_BOOL :    TRUE ( SUCCESS ) / FALSE (FAIL)
3626*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
3627*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetWmaInfo(Audio_WMA_infoType infoType,MS_VIRT param1,MS_VIRT param2)3628*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetWmaInfo( Audio_WMA_infoType infoType, MS_VIRT param1, MS_VIRT param2 )
3629*53ee8cc1Swenshuai.xi {
3630*53ee8cc1Swenshuai.xi     switch(infoType)
3631*53ee8cc1Swenshuai.xi     {
3632*53ee8cc1Swenshuai.xi         case Audio_WMA_infoType_Asf_Param:
3633*53ee8cc1Swenshuai.xi             HAL_MAD_WMA_SetASFParm((WMA_ASF_PARMTYPE)param1, param2);       //HAL_MAD_WMA_SetASFParm
3634*53ee8cc1Swenshuai.xi             break;
3635*53ee8cc1Swenshuai.xi 
3636*53ee8cc1Swenshuai.xi         case Audio_WMA_infoType_FFSpeed:                                    //HAL_MAD_WMA_SetFastFowardSpeed
3637*53ee8cc1Swenshuai.xi             printf("Currently, it is not used\n");
3638*53ee8cc1Swenshuai.xi             break;
3639*53ee8cc1Swenshuai.xi 
3640*53ee8cc1Swenshuai.xi         case Audio_WMA_infoType_MMFileSize:
3641*53ee8cc1Swenshuai.xi             HAL_MAD_SetCommInfo(Audio_Comm_infoType_MMFileSize, param1, param2);
3642*53ee8cc1Swenshuai.xi             break;
3643*53ee8cc1Swenshuai.xi 
3644*53ee8cc1Swenshuai.xi         default:
3645*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
3646*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x,%08lx,%08lx] not Supported\n",__FUNCTION__, infoType, param1, param2);
3647*53ee8cc1Swenshuai.xi #else
3648*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x,%08x,%08x] not Supported\n",__FUNCTION__, infoType, param1, param2);
3649*53ee8cc1Swenshuai.xi #endif
3650*53ee8cc1Swenshuai.xi             break;
3651*53ee8cc1Swenshuai.xi     }
3652*53ee8cc1Swenshuai.xi 
3653*53ee8cc1Swenshuai.xi     return TRUE;
3654*53ee8cc1Swenshuai.xi }
3655*53ee8cc1Swenshuai.xi 
3656*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
3657*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetWmaInfo()
3658*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine info of wma decoder
3659*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_WMA_infoType    : request info type of wma decoder
3660*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
3661*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U32  :  info type
3662*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
3663*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetWmaInfo(Audio_WMA_infoType infoType)3664*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetWmaInfo( Audio_WMA_infoType infoType )
3665*53ee8cc1Swenshuai.xi {
3666*53ee8cc1Swenshuai.xi     MS_U32 result = 0;
3667*53ee8cc1Swenshuai.xi 
3668*53ee8cc1Swenshuai.xi     switch(infoType)
3669*53ee8cc1Swenshuai.xi     {
3670*53ee8cc1Swenshuai.xi         case Audio_WMA_infoType_BitRate:                    //HAL_MAD_WMA_GetBitRate
3671*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_BIT_RATE, ADEC1);
3672*53ee8cc1Swenshuai.xi             break;
3673*53ee8cc1Swenshuai.xi 
3674*53ee8cc1Swenshuai.xi         case Audio_WMA_infoType_SampleRate:                 //HAL_MAD_WMA_GetSampleRate
3675*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, ADEC1);
3676*53ee8cc1Swenshuai.xi             break;
3677*53ee8cc1Swenshuai.xi 
3678*53ee8cc1Swenshuai.xi         default:
3679*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
3680*53ee8cc1Swenshuai.xi             break;
3681*53ee8cc1Swenshuai.xi     }
3682*53ee8cc1Swenshuai.xi 
3683*53ee8cc1Swenshuai.xi     return result;
3684*53ee8cc1Swenshuai.xi }
3685*53ee8cc1Swenshuai.xi 
3686*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
3687*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetAC3PInfo()
3688*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different parameter to ac3+ decoder
3689*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_AC3P_infoType    : AC3+ parameter type
3690*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32    : AC3+ parameter 1
3691*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32    : AC3+ parameter 2
3692*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
3693*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_BOOL :    TRUE ( SUCCESS ) / FALSE (FAIL)
3694*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
3695*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetAC3PInfo(Audio_AC3P_infoType infoType,MS_VIRT param1,MS_VIRT param2)3696*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetAC3PInfo( Audio_AC3P_infoType infoType, MS_VIRT param1, MS_VIRT param2 )
3697*53ee8cc1Swenshuai.xi {
3698*53ee8cc1Swenshuai.xi     switch(infoType)
3699*53ee8cc1Swenshuai.xi     {
3700*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_DownmixMode:                //HAL_MAD_SetDolbyDownmixMode
3701*53ee8cc1Swenshuai.xi             if((DOLBY_DOWNMIX_MODE)param1 == DOLBY_DOWNMIX_MODE_LORO)
3702*53ee8cc1Swenshuai.xi             {
3703*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, ADEC1, 1, 0);
3704*53ee8cc1Swenshuai.xi             }
3705*53ee8cc1Swenshuai.xi             else if ((DOLBY_DOWNMIX_MODE)param1 == DOLBY_DOWNMIX_MODE_LTRT)
3706*53ee8cc1Swenshuai.xi             {
3707*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, ADEC1, 0, 0);
3708*53ee8cc1Swenshuai.xi             }
3709*53ee8cc1Swenshuai.xi             else
3710*53ee8cc1Swenshuai.xi             {
3711*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, ADEC1, 2, 0);
3712*53ee8cc1Swenshuai.xi             }
3713*53ee8cc1Swenshuai.xi             break;
3714*53ee8cc1Swenshuai.xi 
3715*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_DrcMode:                    //HAL_MAD_SetDolbyDrcMode
3716*53ee8cc1Swenshuai.xi             if((DOLBY_DRC_MODE)param1 == RF_MODE)
3717*53ee8cc1Swenshuai.xi             {
3718*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC1, 1, 0);
3719*53ee8cc1Swenshuai.xi             }
3720*53ee8cc1Swenshuai.xi             else
3721*53ee8cc1Swenshuai.xi             {
3722*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC1, 0, 0);
3723*53ee8cc1Swenshuai.xi             }
3724*53ee8cc1Swenshuai.xi             break;
3725*53ee8cc1Swenshuai.xi 
3726*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_MMFileSize:            //HAL_MAD_ac3p_setFileSize
3727*53ee8cc1Swenshuai.xi             HAL_MAD_SetCommInfo(Audio_Comm_infoType_MMFileSize, param1, param2);
3728*53ee8cc1Swenshuai.xi             break;
3729*53ee8cc1Swenshuai.xi 
3730*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_syncSTC_in_mmTs:
3731*53ee8cc1Swenshuai.xi             HAL_MAD_SetCommInfo(Audio_Comm_infoType_syncSTC_in_mmTs, param1, param2);
3732*53ee8cc1Swenshuai.xi             break;
3733*53ee8cc1Swenshuai.xi 
3734*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_hdmiTxBypass_enable:
3735*53ee8cc1Swenshuai.xi             if(param1)
3736*53ee8cc1Swenshuai.xi             {
3737*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DDP_HDMI_BYPASS,  param2, param1, 0);
3738*53ee8cc1Swenshuai.xi             }
3739*53ee8cc1Swenshuai.xi             else
3740*53ee8cc1Swenshuai.xi             {
3741*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DDP_HDMI_BYPASS,  param2, param1, 0);
3742*53ee8cc1Swenshuai.xi             }
3743*53ee8cc1Swenshuai.xi 
3744*53ee8cc1Swenshuai.xi             // MS12_hashkey enable --> DDPE
3745*53ee8cc1Swenshuai.xi             if((MDrv_AUTH_IPCheck(AU_DVB_AUTHBIT_DOLBY_MS12_B)||
3746*53ee8cc1Swenshuai.xi                 MDrv_AUTH_IPCheck(AU_DVB2_AUTHBIT_DOLBY_MS12_B_WO_AAC)||
3747*53ee8cc1Swenshuai.xi                 MDrv_AUTH_IPCheck(AU_DVB_AUTHBIT_DOLBY_MS12_D)||
3748*53ee8cc1Swenshuai.xi                 MDrv_AUTH_IPCheck(AU_DVB2_AUTHBIT_DOLBY_MS12_D_WO_AAC)))
3749*53ee8cc1Swenshuai.xi             {
3750*53ee8cc1Swenshuai.xi                 if(param1)
3751*53ee8cc1Swenshuai.xi                 {
3752*53ee8cc1Swenshuai.xi                     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_TTS_EN,  param2, 1, 0);
3753*53ee8cc1Swenshuai.xi                     HAL_AUR2_WriteMaskByte(REG_SNDR2_MBOX_BYTE_DAP_SEL, 0x20, 0x20);   //enable DDP encoder
3754*53ee8cc1Swenshuai.xi                     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DDP_ENCODE_EN, param2, 1, 0);
3755*53ee8cc1Swenshuai.xi                 }
3756*53ee8cc1Swenshuai.xi                 else
3757*53ee8cc1Swenshuai.xi                 {
3758*53ee8cc1Swenshuai.xi                     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_TTS_EN,  param2, 0, 0);
3759*53ee8cc1Swenshuai.xi                     HAL_AUR2_WriteMaskByte(REG_SNDR2_MBOX_BYTE_DAP_SEL, 0x20, 0x0);   //disable DDP encoder
3760*53ee8cc1Swenshuai.xi                     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DDP_ENCODE_EN, param2, 0, 0);
3761*53ee8cc1Swenshuai.xi                 }
3762*53ee8cc1Swenshuai.xi             }
3763*53ee8cc1Swenshuai.xi             break;
3764*53ee8cc1Swenshuai.xi 
3765*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_BYTESWAP:
3766*53ee8cc1Swenshuai.xi             if(param1 == 1)
3767*53ee8cc1Swenshuai.xi             {
3768*53ee8cc1Swenshuai.xi                  HAL_AUDIO_WriteMaskByte(0x2C48, 0x10, 0x10);
3769*53ee8cc1Swenshuai.xi                  HAL_AUDIO_WriteMaskByte(0x2C49, 0x05, 0x05);
3770*53ee8cc1Swenshuai.xi             }
3771*53ee8cc1Swenshuai.xi             else
3772*53ee8cc1Swenshuai.xi             {
3773*53ee8cc1Swenshuai.xi                  HAL_AUDIO_WriteMaskByte(0x2C48, 0x10, 0x00);
3774*53ee8cc1Swenshuai.xi                  HAL_AUDIO_WriteMaskByte(0x2C49, 0x05, 0x00);
3775*53ee8cc1Swenshuai.xi             }
3776*53ee8cc1Swenshuai.xi             break;
3777*53ee8cc1Swenshuai.xi 
3778*53ee8cc1Swenshuai.xi         case Audio_AC3P_DTV_AVSYNC_OFFSET:
3779*53ee8cc1Swenshuai.xi             if ((param1<DELAY_LOWER_LIMIT)||(param1>DELAY_UPPER_LIMIT))
3780*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_AC3_AVOFFSET, ADEC1, AC3_AV_DEFAULT_DELAY, 0);
3781*53ee8cc1Swenshuai.xi             else
3782*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_AC3_AVOFFSET, ADEC1, param1, 0);
3783*53ee8cc1Swenshuai.xi             break;
3784*53ee8cc1Swenshuai.xi 
3785*53ee8cc1Swenshuai.xi         case Audio_AC3P_DTV_AVSYNC_DISABLE_SETTING:
3786*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_AC3_AVOFFSET, ADEC1, AC3_AV_DEFAULT_DELAY, 0);
3787*53ee8cc1Swenshuai.xi             break;
3788*53ee8cc1Swenshuai.xi 
3789*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_hdmiAC3inSE:
3790*53ee8cc1Swenshuai.xi             if(param1 == TRUE)
3791*53ee8cc1Swenshuai.xi             {
3792*53ee8cc1Swenshuai.xi                 FLAG_HDMI_AC3_IN_SE = TRUE;
3793*53ee8cc1Swenshuai.xi             }
3794*53ee8cc1Swenshuai.xi             else
3795*53ee8cc1Swenshuai.xi             {
3796*53ee8cc1Swenshuai.xi                 FLAG_HDMI_AC3_IN_SE = FALSE;
3797*53ee8cc1Swenshuai.xi             }
3798*53ee8cc1Swenshuai.xi             break;
3799*53ee8cc1Swenshuai.xi 
3800*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_enableDolbyBulletin11:
3801*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_LoudnessMatching:
3802*53ee8cc1Swenshuai.xi             if ( param1 )
3803*53ee8cc1Swenshuai.xi             {
3804*53ee8cc1Swenshuai.xi                 HAL_AUDIO_DecWriteMaskByte(REG_MB_DOLBY_LOUDNESS_INFO+1, 0x80, 0x80);
3805*53ee8cc1Swenshuai.xi                 g_AudioVars2->g_dolbyLoudness_Enable = TRUE;
3806*53ee8cc1Swenshuai.xi             }
3807*53ee8cc1Swenshuai.xi             else
3808*53ee8cc1Swenshuai.xi             {
3809*53ee8cc1Swenshuai.xi                 HAL_AUDIO_DecWriteMaskByte(REG_MB_DOLBY_LOUDNESS_INFO+1, 0x80, 0x00);
3810*53ee8cc1Swenshuai.xi                 g_AudioVars2->g_dolbyLoudness_Enable = FALSE;
3811*53ee8cc1Swenshuai.xi             }
3812*53ee8cc1Swenshuai.xi 
3813*53ee8cc1Swenshuai.xi             if ((g_AudioVars2->AudioSystemInfo.dtv_system == AUDIO_DTV_ATSC) || (g_AudioVars2->AudioSystemInfo.dtv_system == AUDIO_DTV_DMBT))
3814*53ee8cc1Swenshuai.xi             {
3815*53ee8cc1Swenshuai.xi                 HAL_AUDIO_DecWriteMaskByte(REG_MB_DOLBY_LOUDNESS_INFO+1, 0x60, 0x40);
3816*53ee8cc1Swenshuai.xi                 g_AudioVars2->g_dolbyLoudness_DTVsystem = ATSC_MODE;
3817*53ee8cc1Swenshuai.xi             }
3818*53ee8cc1Swenshuai.xi             else if(g_AudioVars2->AudioSystemInfo.dtv_system == AUDIO_DTV_DVB)
3819*53ee8cc1Swenshuai.xi             {
3820*53ee8cc1Swenshuai.xi                 HAL_AUDIO_DecWriteMaskByte(REG_MB_DOLBY_LOUDNESS_INFO+1, 0x60, 0x00);
3821*53ee8cc1Swenshuai.xi                 g_AudioVars2->g_dolbyLoudness_DTVsystem = DVB_MODE;
3822*53ee8cc1Swenshuai.xi             }
3823*53ee8cc1Swenshuai.xi             else
3824*53ee8cc1Swenshuai.xi             {
3825*53ee8cc1Swenshuai.xi                 HAL_AUDIO_DecWriteMaskByte(REG_MB_DOLBY_LOUDNESS_INFO+1, 0x60, 0x20);
3826*53ee8cc1Swenshuai.xi                 g_AudioVars2->g_dolbyLoudness_DTVsystem = OTHER_MODE;
3827*53ee8cc1Swenshuai.xi             }
3828*53ee8cc1Swenshuai.xi 
3829*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_RFSIGNAL_TYPE, ADEC1, g_AudioVars2->g_dolbyLoudness_DTVsystem, 0);
3830*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_TB11_ENABLE, ADEC1, g_AudioVars2->g_dolbyLoudness_Enable, 0);
3831*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_RFSIGNAL_TYPE, ADEC2, g_AudioVars2->g_dolbyLoudness_DTVsystem, 0);
3832*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_TB11_ENABLE, ADEC2, g_AudioVars2->g_dolbyLoudness_Enable, 0);
3833*53ee8cc1Swenshuai.xi             break;
3834*53ee8cc1Swenshuai.xi 
3835*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_Drc_HighCutScale:
3836*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_HIGH_CUT, ADEC1, param1, 0);
3837*53ee8cc1Swenshuai.xi             break;
3838*53ee8cc1Swenshuai.xi 
3839*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_Drc_LowBootScale:
3840*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_LOW_BOOST, ADEC1, param1, 0);
3841*53ee8cc1Swenshuai.xi             break;
3842*53ee8cc1Swenshuai.xi 
3843*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_Mixer_Balance:
3844*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_AD_Mixer_Balance:
3845*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_MIXER_BALANCE, ADEC1, param1, 0);
3846*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_MIXER_BALANCE, ADEC2, param1, 0);
3847*53ee8cc1Swenshuai.xi             break;
3848*53ee8cc1Swenshuai.xi 
3849*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_DDP_AD_Substream:
3850*53ee8cc1Swenshuai.xi             if (param2==0)
3851*53ee8cc1Swenshuai.xi             {
3852*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DDP_AD_SUBSTREAM, ADEC1, param1, 0);
3853*53ee8cc1Swenshuai.xi             }
3854*53ee8cc1Swenshuai.xi             else
3855*53ee8cc1Swenshuai.xi             {
3856*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DDP_AD_SUBSTREAM, ADEC2, param1, 0);
3857*53ee8cc1Swenshuai.xi             }
3858*53ee8cc1Swenshuai.xi             break;
3859*53ee8cc1Swenshuai.xi 
3860*53ee8cc1Swenshuai.xi         default:
3861*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
3862*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x,%08lx,%08lx] not Supported\n",__FUNCTION__, infoType, param1, param2);
3863*53ee8cc1Swenshuai.xi #else
3864*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x,%08x,%08x] not Supported\n",__FUNCTION__, infoType, param1, param2);
3865*53ee8cc1Swenshuai.xi #endif
3866*53ee8cc1Swenshuai.xi             break;
3867*53ee8cc1Swenshuai.xi     }
3868*53ee8cc1Swenshuai.xi 
3869*53ee8cc1Swenshuai.xi     return TRUE;
3870*53ee8cc1Swenshuai.xi }
3871*53ee8cc1Swenshuai.xi 
3872*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
3873*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetAC3PInfo()
3874*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine return info type of ac3+ decoder
3875*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_AC3P_infoType    : AC3+ parameter type
3876*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
3877*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U32 :    AC3+ paramter info
3878*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
3879*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetAC3PInfo(Audio_AC3P_infoType infoType)3880*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetAC3PInfo( Audio_AC3P_infoType infoType )
3881*53ee8cc1Swenshuai.xi {
3882*53ee8cc1Swenshuai.xi     MS_U32 result = 0;
3883*53ee8cc1Swenshuai.xi 
3884*53ee8cc1Swenshuai.xi     switch(infoType)
3885*53ee8cc1Swenshuai.xi     {
3886*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_DecStatus:
3887*53ee8cc1Swenshuai.xi             if ((((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_ac3) ||
3888*53ee8cc1Swenshuai.xi                 ((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_ac3p)) &&
3889*53ee8cc1Swenshuai.xi                 (HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, ADEC1)&0x0001))
3890*53ee8cc1Swenshuai.xi                 result = 1;
3891*53ee8cc1Swenshuai.xi             else
3892*53ee8cc1Swenshuai.xi                 result = 0;
3893*53ee8cc1Swenshuai.xi             break;
3894*53ee8cc1Swenshuai.xi 
3895*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_SampleRate:
3896*53ee8cc1Swenshuai.xi             {
3897*53ee8cc1Swenshuai.xi                 MS_U32 SMP_RATE = 0;
3898*53ee8cc1Swenshuai.xi 
3899*53ee8cc1Swenshuai.xi                 SMP_RATE = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, ADEC1);        //DD+
3900*53ee8cc1Swenshuai.xi                 switch(SMP_RATE)
3901*53ee8cc1Swenshuai.xi                 {
3902*53ee8cc1Swenshuai.xi                     case 44100: result = SAMPLE_RATE_44100; break;
3903*53ee8cc1Swenshuai.xi                     case 32000: result = SAMPLE_RATE_32000; break;
3904*53ee8cc1Swenshuai.xi                     default:
3905*53ee8cc1Swenshuai.xi                     case 48000: result = SAMPLE_RATE_48000; break;
3906*53ee8cc1Swenshuai.xi                 }
3907*53ee8cc1Swenshuai.xi             }
3908*53ee8cc1Swenshuai.xi             break;
3909*53ee8cc1Swenshuai.xi 
3910*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_BitRate:  //unit : kbps
3911*53ee8cc1Swenshuai.xi             {
3912*53ee8cc1Swenshuai.xi                 result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_BIT_RATE, ADEC1);        //DD+
3913*53ee8cc1Swenshuai.xi             }
3914*53ee8cc1Swenshuai.xi             break;
3915*53ee8cc1Swenshuai.xi 
3916*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_Acmod:
3917*53ee8cc1Swenshuai.xi             result = HAL_MAD_GetCommInfo(Audio_Comm_infoType_ADEC1_acmod);
3918*53ee8cc1Swenshuai.xi             break;
3919*53ee8cc1Swenshuai.xi 
3920*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_DrcMode:
3921*53ee8cc1Swenshuai.xi             if (HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC1, 0) == 1)
3922*53ee8cc1Swenshuai.xi                 result = RF_MODE;
3923*53ee8cc1Swenshuai.xi             else
3924*53ee8cc1Swenshuai.xi                 result = LINE_MODE;
3925*53ee8cc1Swenshuai.xi             break;
3926*53ee8cc1Swenshuai.xi 
3927*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_DownmixMode:
3928*53ee8cc1Swenshuai.xi             if (HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, ADEC1, 0) == 1)
3929*53ee8cc1Swenshuai.xi                 result = DOLBY_DOWNMIX_MODE_LORO;
3930*53ee8cc1Swenshuai.xi             else
3931*53ee8cc1Swenshuai.xi                 result = DOLBY_DOWNMIX_MODE_LTRT;
3932*53ee8cc1Swenshuai.xi             break;
3933*53ee8cc1Swenshuai.xi 
3934*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_AC3Type:
3935*53ee8cc1Swenshuai.xi             if ((((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_ac3) ||
3936*53ee8cc1Swenshuai.xi                 ((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_ac3p)) &&
3937*53ee8cc1Swenshuai.xi                 (HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, ADEC1) & 0x0001))
3938*53ee8cc1Swenshuai.xi             {
3939*53ee8cc1Swenshuai.xi                 result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DOLBY_DEC_TYPE, ADEC1);
3940*53ee8cc1Swenshuai.xi                 result += 1;
3941*53ee8cc1Swenshuai.xi             }
3942*53ee8cc1Swenshuai.xi             else
3943*53ee8cc1Swenshuai.xi             {
3944*53ee8cc1Swenshuai.xi                 result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DOLBY_DEC_TYPE, ADEC1);
3945*53ee8cc1Swenshuai.xi             }
3946*53ee8cc1Swenshuai.xi             break;
3947*53ee8cc1Swenshuai.xi 
3948*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_FrameSize:
3949*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DOLBY_FRAME_SIZE, ADEC1);
3950*53ee8cc1Swenshuai.xi             break;
3951*53ee8cc1Swenshuai.xi 
3952*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_BSMode:
3953*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DOLBY_BS_MODE, ADEC1);
3954*53ee8cc1Swenshuai.xi             break;
3955*53ee8cc1Swenshuai.xi 
3956*53ee8cc1Swenshuai.xi 
3957*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_hdmiAC3inSE:
3958*53ee8cc1Swenshuai.xi             if(FLAG_HDMI_AC3_IN_SE == TRUE)
3959*53ee8cc1Swenshuai.xi             {
3960*53ee8cc1Swenshuai.xi                 result = 1;
3961*53ee8cc1Swenshuai.xi             }
3962*53ee8cc1Swenshuai.xi             else
3963*53ee8cc1Swenshuai.xi             {
3964*53ee8cc1Swenshuai.xi                 result = 0;
3965*53ee8cc1Swenshuai.xi             }
3966*53ee8cc1Swenshuai.xi             break;
3967*53ee8cc1Swenshuai.xi 
3968*53ee8cc1Swenshuai.xi          case  Audio_AC3P_infoType_hdmi_in_support_DDP:
3969*53ee8cc1Swenshuai.xi             result = 1;
3970*53ee8cc1Swenshuai.xi             break;
3971*53ee8cc1Swenshuai.xi 
3972*53ee8cc1Swenshuai.xi         case Audio_AC3P_infoType_ATMOS_support:
3973*53ee8cc1Swenshuai.xi             result = ((g_AudioVars2->stDigitalOutCodecCapability[0][CODEC_DDP].support_SAD_byte3) & 0x1);
3974*53ee8cc1Swenshuai.xi             break;
3975*53ee8cc1Swenshuai.xi 
3976*53ee8cc1Swenshuai.xi         default:
3977*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
3978*53ee8cc1Swenshuai.xi             break;
3979*53ee8cc1Swenshuai.xi     }
3980*53ee8cc1Swenshuai.xi 
3981*53ee8cc1Swenshuai.xi     return result;
3982*53ee8cc1Swenshuai.xi }
3983*53ee8cc1Swenshuai.xi 
3984*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
3985*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetAC3Info()
3986*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different paramter to ac3 decoder
3987*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_WMA_infoType    : ac3 audio parameter type
3988*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32    : common ac3 parameter 1
3989*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32    : common ac3 parameter 2
3990*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
3991*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_BOOL :    TRUE ( SUCCESS ) / FALSE (FAIL)
3992*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
3993*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetAC3Info(Audio_AC3_infoType infoType,MS_VIRT param1,MS_VIRT param2)3994*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetAC3Info( Audio_AC3_infoType infoType, MS_VIRT param1, MS_VIRT param2 )
3995*53ee8cc1Swenshuai.xi {
3996*53ee8cc1Swenshuai.xi     switch(infoType)
3997*53ee8cc1Swenshuai.xi     {
3998*53ee8cc1Swenshuai.xi         case Audio_AC3_infoType_DownmixMode:                //HAL_MAD_SetDolbyDownmixMode
3999*53ee8cc1Swenshuai.xi             HAL_MAD_SetAC3PInfo( Audio_AC3P_infoType_DownmixMode, param1, param2);
4000*53ee8cc1Swenshuai.xi             break;
4001*53ee8cc1Swenshuai.xi 
4002*53ee8cc1Swenshuai.xi         case Audio_AC3_infoType_DrcMode:                    //HAL_MAD_SetDolbyDrcMode
4003*53ee8cc1Swenshuai.xi             HAL_MAD_SetAC3PInfo( Audio_AC3P_infoType_DrcMode, param1, param2);
4004*53ee8cc1Swenshuai.xi             break;
4005*53ee8cc1Swenshuai.xi 
4006*53ee8cc1Swenshuai.xi         case Audio_AC3_infoType_AD_Mixer_Balance:
4007*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_MIXER_BALANCE, ADEC1, param1, 0);
4008*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_MIXER_BALANCE, ADEC2, param1, 0);
4009*53ee8cc1Swenshuai.xi             break;
4010*53ee8cc1Swenshuai.xi 
4011*53ee8cc1Swenshuai.xi         default:
4012*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
4013*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x,%08lx,%08lx] not Supported\n",__FUNCTION__, infoType, param1, param2);
4014*53ee8cc1Swenshuai.xi #else
4015*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x,%08x,%08x] not Supported\n",__FUNCTION__, infoType, param1, param2);
4016*53ee8cc1Swenshuai.xi #endif
4017*53ee8cc1Swenshuai.xi             break;
4018*53ee8cc1Swenshuai.xi     }
4019*53ee8cc1Swenshuai.xi 
4020*53ee8cc1Swenshuai.xi     return TRUE;
4021*53ee8cc1Swenshuai.xi }
4022*53ee8cc1Swenshuai.xi 
4023*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4024*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetAC3Info()
4025*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine info of ac3 decoder
4026*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_AC3_infoType    : request info type of ac3 decoder
4027*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
4028*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U32  :  info type
4029*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
4030*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetAC3Info(Audio_AC3_infoType infoType)4031*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetAC3Info( Audio_AC3_infoType infoType )
4032*53ee8cc1Swenshuai.xi {
4033*53ee8cc1Swenshuai.xi     MS_U32 result = 0;
4034*53ee8cc1Swenshuai.xi 
4035*53ee8cc1Swenshuai.xi     switch(infoType)
4036*53ee8cc1Swenshuai.xi     {
4037*53ee8cc1Swenshuai.xi         case Audio_AC3_infoType_DecStatus:
4038*53ee8cc1Swenshuai.xi             if ((((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_ac3) ||
4039*53ee8cc1Swenshuai.xi                 ((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_ac3p)) &&
4040*53ee8cc1Swenshuai.xi                 (HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, ADEC1) & 0x0001))
4041*53ee8cc1Swenshuai.xi                 result = 1;
4042*53ee8cc1Swenshuai.xi             else
4043*53ee8cc1Swenshuai.xi                 result = 0;
4044*53ee8cc1Swenshuai.xi             break;
4045*53ee8cc1Swenshuai.xi 
4046*53ee8cc1Swenshuai.xi         case Audio_AC3_infoType_Acmod:
4047*53ee8cc1Swenshuai.xi             result = HAL_MAD_GetAC3PInfo(Audio_AC3P_infoType_Acmod);
4048*53ee8cc1Swenshuai.xi             break;
4049*53ee8cc1Swenshuai.xi 
4050*53ee8cc1Swenshuai.xi         case Audio_AC3_infoType_BitRate:
4051*53ee8cc1Swenshuai.xi             result = HAL_MAD_GetAC3PInfo(Audio_AC3P_infoType_BitRate);
4052*53ee8cc1Swenshuai.xi             break;
4053*53ee8cc1Swenshuai.xi 
4054*53ee8cc1Swenshuai.xi         case Audio_AC3_infoType_SampleRate:
4055*53ee8cc1Swenshuai.xi             result = HAL_MAD_GetAC3PInfo(Audio_AC3P_infoType_SampleRate);
4056*53ee8cc1Swenshuai.xi             break;
4057*53ee8cc1Swenshuai.xi 
4058*53ee8cc1Swenshuai.xi         case Audio_AC3_infoType_DownmixMode:
4059*53ee8cc1Swenshuai.xi             result = HAL_MAD_GetAC3PInfo(Audio_AC3P_infoType_DownmixMode);
4060*53ee8cc1Swenshuai.xi             break;
4061*53ee8cc1Swenshuai.xi 
4062*53ee8cc1Swenshuai.xi         case Audio_AC3_infoType_DrcMode:
4063*53ee8cc1Swenshuai.xi             result = HAL_MAD_GetAC3PInfo(Audio_AC3P_infoType_DrcMode);
4064*53ee8cc1Swenshuai.xi             break;
4065*53ee8cc1Swenshuai.xi 
4066*53ee8cc1Swenshuai.xi         default:
4067*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
4068*53ee8cc1Swenshuai.xi             break;
4069*53ee8cc1Swenshuai.xi     }
4070*53ee8cc1Swenshuai.xi 
4071*53ee8cc1Swenshuai.xi     return result;
4072*53ee8cc1Swenshuai.xi }
4073*53ee8cc1Swenshuai.xi 
4074*53ee8cc1Swenshuai.xi 
4075*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4076*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetDTSCommonCtrl()
4077*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different control to DTS decoder
4078*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_DTS_infoType    : DTS control type
4079*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U16    : DTS control value
4080*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
4081*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_BOOL :    TRUE ( SUCCESS ) / FALSE (FAIL)
4082*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
4083*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetDTSCommonCtrl(Audio_DTS_infoType infoType,Audio_DTS_CtrlType ctrl_type)4084*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetDTSCommonCtrl( Audio_DTS_infoType infoType, Audio_DTS_CtrlType ctrl_type )
4085*53ee8cc1Swenshuai.xi {
4086*53ee8cc1Swenshuai.xi     switch(infoType)
4087*53ee8cc1Swenshuai.xi     {
4088*53ee8cc1Swenshuai.xi         case Audio_DTS_infoType_DMIX_LFE_EN:
4089*53ee8cc1Swenshuai.xi             if (ctrl_type == Audio_DTS_Ctrl_DMIX_LFE_OFF)
4090*53ee8cc1Swenshuai.xi             {
4091*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DTS_DMX_LFE_ENABLE, ADEC1, 0, 0);
4092*53ee8cc1Swenshuai.xi             }
4093*53ee8cc1Swenshuai.xi             else
4094*53ee8cc1Swenshuai.xi             {
4095*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DTS_DMX_LFE_ENABLE, ADEC1, 1, 0);
4096*53ee8cc1Swenshuai.xi             }
4097*53ee8cc1Swenshuai.xi             break;
4098*53ee8cc1Swenshuai.xi 
4099*53ee8cc1Swenshuai.xi         case Audio_DTS_infoType_Dialnorm_EN:
4100*53ee8cc1Swenshuai.xi             // always enable
4101*53ee8cc1Swenshuai.xi             break;
4102*53ee8cc1Swenshuai.xi 
4103*53ee8cc1Swenshuai.xi         case Audio_DTS_infoType_DrcMode:
4104*53ee8cc1Swenshuai.xi             // always disable in T3
4105*53ee8cc1Swenshuai.xi             break;
4106*53ee8cc1Swenshuai.xi 
4107*53ee8cc1Swenshuai.xi         case Audio_DTS_infoType_DownmixMode:
4108*53ee8cc1Swenshuai.xi             if (ctrl_type == Audio_DTS_Ctrl_Downmix_LoRo)
4109*53ee8cc1Swenshuai.xi             {
4110*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DTS_DMX_MODE, ADEC1, 0, 0);
4111*53ee8cc1Swenshuai.xi             }
4112*53ee8cc1Swenshuai.xi             else
4113*53ee8cc1Swenshuai.xi             {
4114*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DTS_DMX_MODE, ADEC1, 1, 0);
4115*53ee8cc1Swenshuai.xi             }
4116*53ee8cc1Swenshuai.xi             break;
4117*53ee8cc1Swenshuai.xi 
4118*53ee8cc1Swenshuai.xi         case Audio_DTS_infoType_ESDataServiceMode:
4119*53ee8cc1Swenshuai.xi             //force Audio_DTS_Ctrl_INTRPTMode in T3
4120*53ee8cc1Swenshuai.xi             break;
4121*53ee8cc1Swenshuai.xi 
4122*53ee8cc1Swenshuai.xi         case Audio_DTS_infoType_ESData_ByteSwap:
4123*53ee8cc1Swenshuai.xi             //Currently, it is not used;
4124*53ee8cc1Swenshuai.xi             break;
4125*53ee8cc1Swenshuai.xi 
4126*53ee8cc1Swenshuai.xi         case Audio_DTS_infoType_CertMode:
4127*53ee8cc1Swenshuai.xi             //DTS Certification Mode, Need to disable Sound Eeffect
4128*53ee8cc1Swenshuai.xi             if (ctrl_type == Audio_DTS_Ctrl_CertMode_ON)
4129*53ee8cc1Swenshuai.xi             {
4130*53ee8cc1Swenshuai.xi                 Flag_MAIN_SNDEFFET_CHG = TRUE;
4131*53ee8cc1Swenshuai.xi                 Reg_REG_SOUND_MAIN_SNDEFFECT = HAL_AUDIO_ReadReg(REG_SOUND_MAIN_SNDEFFECT);
4132*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteReg(REG_SOUND_MAIN_SNDEFFECT,0x0000);
4133*53ee8cc1Swenshuai.xi                 Reg_REG_SOUND_ADV_CFG0 = HAL_AUDIO_ReadReg(REG_SOUND_ADV_CFG0);
4134*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteReg(REG_SOUND_ADV_CFG0,0x0000);
4135*53ee8cc1Swenshuai.xi             }
4136*53ee8cc1Swenshuai.xi             if (ctrl_type == Audio_DTS_Ctrl_CertMode_OFF)
4137*53ee8cc1Swenshuai.xi             {
4138*53ee8cc1Swenshuai.xi                 if(Flag_MAIN_SNDEFFET_CHG)
4139*53ee8cc1Swenshuai.xi                 {
4140*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteReg(REG_SOUND_MAIN_SNDEFFECT, Reg_REG_SOUND_MAIN_SNDEFFECT);
4141*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteReg(REG_SOUND_ADV_CFG0, Reg_REG_SOUND_ADV_CFG0);
4142*53ee8cc1Swenshuai.xi                     Flag_MAIN_SNDEFFET_CHG = FALSE;
4143*53ee8cc1Swenshuai.xi                 }
4144*53ee8cc1Swenshuai.xi             }
4145*53ee8cc1Swenshuai.xi             break;
4146*53ee8cc1Swenshuai.xi 
4147*53ee8cc1Swenshuai.xi         case Audio_DTS_infoType_DTSHD_HDMITxBypass_Enable:
4148*53ee8cc1Swenshuai.xi             if(ctrl_type == Audio_DTS_Ctrl_DTSHDBypass_ON)
4149*53ee8cc1Swenshuai.xi             {
4150*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DTS_HD_HDMI_BYPASS,  ADEC1, Audio_DTS_Ctrl_DTSHDBypass_ON, 0);
4151*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DTS_HD_HDMI_BYPASS,  ADEC2, Audio_DTS_Ctrl_DTSHDBypass_ON, 0);
4152*53ee8cc1Swenshuai.xi             }
4153*53ee8cc1Swenshuai.xi             else
4154*53ee8cc1Swenshuai.xi             {
4155*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DTS_HD_HDMI_BYPASS,  ADEC1, Audio_DTS_Ctrl_DTSHDBypass_OFF, 0);
4156*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DTS_HD_HDMI_BYPASS,  ADEC2, Audio_DTS_Ctrl_DTSHDBypass_OFF, 0);
4157*53ee8cc1Swenshuai.xi             }
4158*53ee8cc1Swenshuai.xi             break;
4159*53ee8cc1Swenshuai.xi 
4160*53ee8cc1Swenshuai.xi         default:
4161*53ee8cc1Swenshuai.xi             break;
4162*53ee8cc1Swenshuai.xi     }
4163*53ee8cc1Swenshuai.xi 
4164*53ee8cc1Swenshuai.xi     return TRUE;
4165*53ee8cc1Swenshuai.xi }
4166*53ee8cc1Swenshuai.xi 
4167*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4168*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetDTSInfo()
4169*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine return info type of DTS decoder
4170*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_DTS_infoType    : DTS parameter type
4171*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
4172*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U32  :    DTS paramter info
4173*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
4174*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetDTSInfo(Audio_DTS_infoType infoType)4175*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetDTSInfo( Audio_DTS_infoType infoType )
4176*53ee8cc1Swenshuai.xi {
4177*53ee8cc1Swenshuai.xi     MS_U32 result = 0;
4178*53ee8cc1Swenshuai.xi 
4179*53ee8cc1Swenshuai.xi     switch(infoType)
4180*53ee8cc1Swenshuai.xi     {
4181*53ee8cc1Swenshuai.xi         case Audio_DTS_infoType_DecStatus:
4182*53ee8cc1Swenshuai.xi             if (((HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_TYPE) & adec_type_regmask) == adec_type_dts) && (HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, ADEC1)&0x0001))
4183*53ee8cc1Swenshuai.xi                 result = 1;
4184*53ee8cc1Swenshuai.xi             else
4185*53ee8cc1Swenshuai.xi                 result = 0;
4186*53ee8cc1Swenshuai.xi             break;
4187*53ee8cc1Swenshuai.xi 
4188*53ee8cc1Swenshuai.xi         case Audio_DTS_infoType_KernelVersion:
4189*53ee8cc1Swenshuai.xi             //Currently, it is not used;
4190*53ee8cc1Swenshuai.xi             break;
4191*53ee8cc1Swenshuai.xi 
4192*53ee8cc1Swenshuai.xi         case Audio_DTS_infoType_SampleRate: // Original FS from Header
4193*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, ADEC1);
4194*53ee8cc1Swenshuai.xi             break;
4195*53ee8cc1Swenshuai.xi 
4196*53ee8cc1Swenshuai.xi         case Audio_DTS_infoType_BitRate:
4197*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_BIT_RATE, ADEC1);
4198*53ee8cc1Swenshuai.xi             break;
4199*53ee8cc1Swenshuai.xi 
4200*53ee8cc1Swenshuai.xi         case Audio_DTS_infoType_CD_MODE:
4201*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DTS_CD_MODE, ADEC1);
4202*53ee8cc1Swenshuai.xi             break;
4203*53ee8cc1Swenshuai.xi 
4204*53ee8cc1Swenshuai.xi         case Audio_DTS_infoType_Amode:
4205*53ee8cc1Swenshuai.xi         {
4206*53ee8cc1Swenshuai.xi             MS_U32 ac_mode = 0xFF;
4207*53ee8cc1Swenshuai.xi             MS_U32 channel_mapping = 0x0;
4208*53ee8cc1Swenshuai.xi             ac_mode = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MODE, ADEC1);
4209*53ee8cc1Swenshuai.xi             channel_mapping = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_CHANNEL_MAPPING, ADEC1);
4210*53ee8cc1Swenshuai.xi 
4211*53ee8cc1Swenshuai.xi             switch(ac_mode)
4212*53ee8cc1Swenshuai.xi             {
4213*53ee8cc1Swenshuai.xi                 case adec_ch_mono:
4214*53ee8cc1Swenshuai.xi                     result =  AUD_CH_MODE_MONO;
4215*53ee8cc1Swenshuai.xi                     break;
4216*53ee8cc1Swenshuai.xi 
4217*53ee8cc1Swenshuai.xi                 case adec_ch_joint_stereo:
4218*53ee8cc1Swenshuai.xi                     result =  AUD_CH_MODE_JOINT_STEREO;
4219*53ee8cc1Swenshuai.xi                     break;
4220*53ee8cc1Swenshuai.xi 
4221*53ee8cc1Swenshuai.xi                 case adec_ch_stereo:
4222*53ee8cc1Swenshuai.xi                     result =  AUD_CH_MODE_STEREO;
4223*53ee8cc1Swenshuai.xi                     break;
4224*53ee8cc1Swenshuai.xi 
4225*53ee8cc1Swenshuai.xi                 case adec_ch_dual_mono:
4226*53ee8cc1Swenshuai.xi                     result =  AUD_CH_MODE_DUAL_MONO;
4227*53ee8cc1Swenshuai.xi                     break;
4228*53ee8cc1Swenshuai.xi 
4229*53ee8cc1Swenshuai.xi                 case adec_ch_multi:
4230*53ee8cc1Swenshuai.xi                     {
4231*53ee8cc1Swenshuai.xi                         MS_U32 channel_mapping_mask_C_L_R, channel_mapping_mask_Ls_Rs =0x00;
4232*53ee8cc1Swenshuai.xi                         channel_mapping_mask_Ls_Rs = (channel_mapping&(ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS));
4233*53ee8cc1Swenshuai.xi                         channel_mapping_mask_C_L_R = (channel_mapping&(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L|ACMOD_CH_MASK_R));
4234*53ee8cc1Swenshuai.xi 
4235*53ee8cc1Swenshuai.xi                         if(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L|ACMOD_CH_MASK_R))
4236*53ee8cc1Swenshuai.xi                         {
4237*53ee8cc1Swenshuai.xi                             if(channel_mapping_mask_Ls_Rs == (ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS))
4238*53ee8cc1Swenshuai.xi                                result =  AUD_CH_MODE_3_2_MODE;
4239*53ee8cc1Swenshuai.xi                             else if(channel_mapping_mask_Ls_Rs == ACMOD_CH_MASK_NULL)
4240*53ee8cc1Swenshuai.xi                                result =  AUD_CH_MODE_3_0_MODE;
4241*53ee8cc1Swenshuai.xi                             else
4242*53ee8cc1Swenshuai.xi                                result =  AUD_CH_MODE_3_1_MODE;
4243*53ee8cc1Swenshuai.xi                         }
4244*53ee8cc1Swenshuai.xi                         else if((channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_L))||(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_L|ACMOD_CH_MASK_R))
4245*53ee8cc1Swenshuai.xi                                 ||(channel_mapping_mask_C_L_R==(ACMOD_CH_MASK_C|ACMOD_CH_MASK_R)))
4246*53ee8cc1Swenshuai.xi                         {
4247*53ee8cc1Swenshuai.xi                             if(channel_mapping_mask_Ls_Rs == (ACMOD_CH_MASK_LS|ACMOD_CH_MASK_RS))
4248*53ee8cc1Swenshuai.xi                                result =  AUD_CH_MODE_2_2_MODE;
4249*53ee8cc1Swenshuai.xi                             else
4250*53ee8cc1Swenshuai.xi                                result =  AUD_CH_MODE_2_1_MODE;
4251*53ee8cc1Swenshuai.xi                         }
4252*53ee8cc1Swenshuai.xi                         else //other multi-channel case, set it to AUD_CH_MODE_3_2_MODE
4253*53ee8cc1Swenshuai.xi                         {
4254*53ee8cc1Swenshuai.xi                             result =  AUD_CH_MODE_3_2_MODE;
4255*53ee8cc1Swenshuai.xi                         }
4256*53ee8cc1Swenshuai.xi                     }
4257*53ee8cc1Swenshuai.xi                     break;
4258*53ee8cc1Swenshuai.xi 
4259*53ee8cc1Swenshuai.xi                  default:
4260*53ee8cc1Swenshuai.xi                     result =  AUD_CH_MODE_NONE;
4261*53ee8cc1Swenshuai.xi                     break;
4262*53ee8cc1Swenshuai.xi             }
4263*53ee8cc1Swenshuai.xi         }
4264*53ee8cc1Swenshuai.xi             break;
4265*53ee8cc1Swenshuai.xi 
4266*53ee8cc1Swenshuai.xi         case Audio_DTS_infoType_HDMI_DSP_SEL:
4267*53ee8cc1Swenshuai.xi             result = 0x0;                   //0: in DEC DSP, 1: in SND DSP
4268*53ee8cc1Swenshuai.xi             break;
4269*53ee8cc1Swenshuai.xi 
4270*53ee8cc1Swenshuai.xi         default:
4271*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
4272*53ee8cc1Swenshuai.xi             break;
4273*53ee8cc1Swenshuai.xi     }
4274*53ee8cc1Swenshuai.xi 
4275*53ee8cc1Swenshuai.xi     return result;
4276*53ee8cc1Swenshuai.xi }
4277*53ee8cc1Swenshuai.xi 
4278*53ee8cc1Swenshuai.xi 
4279*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4280*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetAACInfo()
4281*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different paramter to aac decoder
4282*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_WMA_infoType    : aac audio parameter type
4283*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32    : common aac parameter 1
4284*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32    : common aac parameter 2
4285*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
4286*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_BOOL :    TRUE ( SUCCESS ) / FALSE (FAIL)
4287*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
4288*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetAACInfo(Audio_AAC_infoType infoType,MS_VIRT param1,MS_VIRT param2)4289*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetAACInfo( Audio_AAC_infoType infoType, MS_VIRT param1, MS_VIRT param2 )
4290*53ee8cc1Swenshuai.xi {
4291*53ee8cc1Swenshuai.xi     switch(infoType)
4292*53ee8cc1Swenshuai.xi     {
4293*53ee8cc1Swenshuai.xi         case Audio_AAC_infoType_DownmixMode:                //HAL_MAD_SetDolbyDownmixMode
4294*53ee8cc1Swenshuai.xi             if((DOLBY_DOWNMIX_MODE)param1 == DOLBY_DOWNMIX_MODE_LORO)
4295*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, ADEC1, 1, 0);
4296*53ee8cc1Swenshuai.xi             else
4297*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_DMX_MODE, ADEC1, 0, 0);
4298*53ee8cc1Swenshuai.xi             break;
4299*53ee8cc1Swenshuai.xi 
4300*53ee8cc1Swenshuai.xi         case Audio_AAC_infoType_DrcMode:                    //HAL_MAD_SetDolbyDrcMode
4301*53ee8cc1Swenshuai.xi             if((DOLBY_DRC_MODE)param1 == RF_MODE)
4302*53ee8cc1Swenshuai.xi             {
4303*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC1, 1, 0);
4304*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC2, 1, 0);
4305*53ee8cc1Swenshuai.xi             }
4306*53ee8cc1Swenshuai.xi             else
4307*53ee8cc1Swenshuai.xi             {
4308*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC1, 0, 0);
4309*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_RF_MODE, ADEC2, 0, 0);
4310*53ee8cc1Swenshuai.xi             }
4311*53ee8cc1Swenshuai.xi             break;
4312*53ee8cc1Swenshuai.xi 
4313*53ee8cc1Swenshuai.xi         case Audio_AAC_DTV_AVSYNC_OFFSET:
4314*53ee8cc1Swenshuai.xi             if ((param1<DELAY_LOWER_LIMIT)||(param1>DELAY_UPPER_LIMIT))                                                      //delay offset range from 30ms ~ 300ms
4315*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_AAC_AVOFFSET, ADEC1, AAC_AV_DEFAULT_DELAY, 0);
4316*53ee8cc1Swenshuai.xi             else
4317*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_AAC_AVOFFSET, ADEC1, param1, 0);
4318*53ee8cc1Swenshuai.xi             break;
4319*53ee8cc1Swenshuai.xi 
4320*53ee8cc1Swenshuai.xi         case Audio_AAC_mm_single_frame_mode:
4321*53ee8cc1Swenshuai.xi             if (param1 > 0)
4322*53ee8cc1Swenshuai.xi             {
4323*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_MUL_FRAME_HEADER, ADEC1, 1, 0);
4324*53ee8cc1Swenshuai.xi             }
4325*53ee8cc1Swenshuai.xi             else
4326*53ee8cc1Swenshuai.xi             {
4327*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_MUL_FRAME_HEADER, ADEC1, 0, 0);
4328*53ee8cc1Swenshuai.xi             }
4329*53ee8cc1Swenshuai.xi             break;
4330*53ee8cc1Swenshuai.xi 
4331*53ee8cc1Swenshuai.xi         case Audio_AAC_DTV_AVSYNC_DISABLE_SETTING:
4332*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_AAC_AVOFFSET, ADEC1, AAC_AV_DEFAULT_DELAY, 0);
4333*53ee8cc1Swenshuai.xi             break;
4334*53ee8cc1Swenshuai.xi 
4335*53ee8cc1Swenshuai.xi         case Audio_AAC_AD_Mixer_Balance:
4336*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_MIXER_BALANCE, ADEC1, param1, 0);
4337*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_MIXER_BALANCE, ADEC2, param1, 0);
4338*53ee8cc1Swenshuai.xi             break;
4339*53ee8cc1Swenshuai.xi 
4340*53ee8cc1Swenshuai.xi         default:
4341*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
4342*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x,%08lx,%08lx] not Supported\n",__FUNCTION__, infoType, param1, param2);
4343*53ee8cc1Swenshuai.xi #else
4344*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x,%08x,%08x] not Supported\n",__FUNCTION__, infoType, param1, param2);
4345*53ee8cc1Swenshuai.xi #endif
4346*53ee8cc1Swenshuai.xi             break;
4347*53ee8cc1Swenshuai.xi     }
4348*53ee8cc1Swenshuai.xi 
4349*53ee8cc1Swenshuai.xi     return TRUE;
4350*53ee8cc1Swenshuai.xi }
4351*53ee8cc1Swenshuai.xi 
4352*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4353*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetAACInfo()
4354*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine info of aac decoder
4355*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_AAC_infoType    : request info type of aac decoder
4356*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
4357*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U32  :  info type
4358*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
4359*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4360*53ee8cc1Swenshuai.xi #define DEC_UNSUPPORT_CNT   10
4361*53ee8cc1Swenshuai.xi #define AAC_UNSUPPORT_ADDR  0x3824
HAL_MAD_GetAACInfo(Audio_AAC_infoType infoType)4362*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetAACInfo( Audio_AAC_infoType infoType )
4363*53ee8cc1Swenshuai.xi {
4364*53ee8cc1Swenshuai.xi     MS_U32 result=0;
4365*53ee8cc1Swenshuai.xi     //MS_U32 result1=0, result2=0,
4366*53ee8cc1Swenshuai.xi 
4367*53ee8cc1Swenshuai.xi     if((HAL_MAD_Rpt_DTVES() & 0xF0) != 0x50)
4368*53ee8cc1Swenshuai.xi         return result;
4369*53ee8cc1Swenshuai.xi 
4370*53ee8cc1Swenshuai.xi     switch(infoType)
4371*53ee8cc1Swenshuai.xi     {
4372*53ee8cc1Swenshuai.xi         case Audio_AAC_error_count:
4373*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ERR_FRMCNT, ADEC1);
4374*53ee8cc1Swenshuai.xi             break;
4375*53ee8cc1Swenshuai.xi 
4376*53ee8cc1Swenshuai.xi         case Audio_AAC_dec_unsupported:
4377*53ee8cc1Swenshuai.xi             //decode unsupported, threshold 10
4378*53ee8cc1Swenshuai.xi             //Currently, it is not used;
4379*53ee8cc1Swenshuai.xi             break;
4380*53ee8cc1Swenshuai.xi 
4381*53ee8cc1Swenshuai.xi         case Audio_AAC_type:
4382*53ee8cc1Swenshuai.xi             result = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DOLBY_AAC_TYPE, ADEC1);
4383*53ee8cc1Swenshuai.xi             break;
4384*53ee8cc1Swenshuai.xi 
4385*53ee8cc1Swenshuai.xi         default:
4386*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
4387*53ee8cc1Swenshuai.xi             break;
4388*53ee8cc1Swenshuai.xi     }
4389*53ee8cc1Swenshuai.xi     return result;
4390*53ee8cc1Swenshuai.xi }
4391*53ee8cc1Swenshuai.xi 
4392*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4393*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetDtsInfo()
4394*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different paramter to aac decoder
4395*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_WMA_infoType    : aac audio parameter type
4396*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32    : common aac parameter 1
4397*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32    : common aac parameter 2
4398*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
4399*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_BOOL :    TRUE ( SUCCESS ) / FALSE (FAIL)
4400*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
4401*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetDtsInfo(Audio_DTS_infoType infoType,MS_U32 param1,MS_U32 param2)4402*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetDtsInfo( Audio_DTS_infoType infoType, MS_U32 param1, MS_U32 param2 )
4403*53ee8cc1Swenshuai.xi {
4404*53ee8cc1Swenshuai.xi     switch(infoType)
4405*53ee8cc1Swenshuai.xi     {
4406*53ee8cc1Swenshuai.xi         default:
4407*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x,%08x,%08x] not Supported\n",__FUNCTION__, infoType, param1, param2);
4408*53ee8cc1Swenshuai.xi             break;
4409*53ee8cc1Swenshuai.xi     }
4410*53ee8cc1Swenshuai.xi 
4411*53ee8cc1Swenshuai.xi     return TRUE;
4412*53ee8cc1Swenshuai.xi }
4413*53ee8cc1Swenshuai.xi 
4414*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4415*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetAACInfo()
4416*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine info of aac decoder
4417*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_AAC_infoType    : request info type of aac decoder
4418*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
4419*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U32  :  info type
4420*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
4421*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetDtsInfo(Audio_DTS_infoType infoType)4422*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetDtsInfo( Audio_DTS_infoType infoType )
4423*53ee8cc1Swenshuai.xi {
4424*53ee8cc1Swenshuai.xi     MS_U32 result = 0;
4425*53ee8cc1Swenshuai.xi 
4426*53ee8cc1Swenshuai.xi     switch(infoType)
4427*53ee8cc1Swenshuai.xi     {
4428*53ee8cc1Swenshuai.xi         default:
4429*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
4430*53ee8cc1Swenshuai.xi             break;
4431*53ee8cc1Swenshuai.xi     }
4432*53ee8cc1Swenshuai.xi 
4433*53ee8cc1Swenshuai.xi     return result;
4434*53ee8cc1Swenshuai.xi }
4435*53ee8cc1Swenshuai.xi 
4436*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4437*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_SetRA8LBRInfo()
4438*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine set different paramter to ra8 lbr decoder
4439*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_RA8LBR_infoType : ra8 lbr audio parameter type
4440*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32                : common ra8 lbr parameter 1
4441*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U32                : common ra8 lbr parameter 2
4442*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE                  :
4443*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_BOOL               :    TRUE ( SUCCESS ) / FALSE (FAIL)
4444*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE                  :
4445*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_SetRA8LBRInfo(Audio_RA8LBR_infoType infoType,MS_U32 param1,MS_U32 param2)4446*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetRA8LBRInfo( Audio_RA8LBR_infoType infoType, MS_U32 param1, MS_U32 param2 )
4447*53ee8cc1Swenshuai.xi {
4448*53ee8cc1Swenshuai.xi     switch ( infoType )
4449*53ee8cc1Swenshuai.xi     {
4450*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_NumCodes:
4451*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_NUMCODECS, ADEC1, param1, 0 );
4452*53ee8cc1Swenshuai.xi             break;
4453*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_Samples:
4454*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_SAMPLES, ADEC1, param1, 0 );
4455*53ee8cc1Swenshuai.xi             break;
4456*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_SampleRate:
4457*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_SAMPLERATES, ADEC1, param1, 0 );
4458*53ee8cc1Swenshuai.xi             break;
4459*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_Channels1:
4460*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, param1, 0 );
4461*53ee8cc1Swenshuai.xi             break;
4462*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_Regions1:
4463*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, param1, 0 );
4464*53ee8cc1Swenshuai.xi             break;
4465*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_cplStart1:
4466*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, param1, 0 );
4467*53ee8cc1Swenshuai.xi             break;
4468*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_cplQbits1:
4469*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, param1, 0 );
4470*53ee8cc1Swenshuai.xi             break;
4471*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_FrameSize1:
4472*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, param1, 0 );
4473*53ee8cc1Swenshuai.xi             break;
4474*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_Channels2:
4475*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, param1, 1 );
4476*53ee8cc1Swenshuai.xi             break;
4477*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_Regions2:
4478*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, param1, 1 );
4479*53ee8cc1Swenshuai.xi             break;
4480*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_cplStart2:
4481*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, param1, 1 );
4482*53ee8cc1Swenshuai.xi             break;
4483*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_cplQbits2:
4484*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, param1, 1 );
4485*53ee8cc1Swenshuai.xi             break;
4486*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_FrameSize2:
4487*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, param1, 1 );
4488*53ee8cc1Swenshuai.xi             break;
4489*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_Channels3:
4490*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, param1, 2 );
4491*53ee8cc1Swenshuai.xi             break;
4492*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_Regions3:
4493*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, param1, 2 );
4494*53ee8cc1Swenshuai.xi             break;
4495*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_cplStart3:
4496*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, param1, 2 );
4497*53ee8cc1Swenshuai.xi             break;
4498*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_cplQbits3:
4499*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, param1, 2 );
4500*53ee8cc1Swenshuai.xi             break;
4501*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_FrameSize3:
4502*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, param1, 2 );
4503*53ee8cc1Swenshuai.xi             break;
4504*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_Channels4:
4505*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, param1, 3 );
4506*53ee8cc1Swenshuai.xi             break;
4507*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_Regions4:
4508*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, param1, 3 );
4509*53ee8cc1Swenshuai.xi             break;
4510*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_cplStart4:
4511*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, param1, 3 );
4512*53ee8cc1Swenshuai.xi             break;
4513*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_cplQbits4:
4514*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, param1, 3 );
4515*53ee8cc1Swenshuai.xi             break;
4516*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_FrameSize4:
4517*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, param1, 3 );
4518*53ee8cc1Swenshuai.xi             break;
4519*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_Channels5:
4520*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, ADEC1, param1, 4 );
4521*53ee8cc1Swenshuai.xi             break;
4522*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_Regions5:
4523*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, ADEC1, param1, 4 );
4524*53ee8cc1Swenshuai.xi             break;
4525*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_cplStart5:
4526*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, ADEC1, param1, 4 );
4527*53ee8cc1Swenshuai.xi             break;
4528*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_cplQbits5:
4529*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, ADEC1, param1, 4 );
4530*53ee8cc1Swenshuai.xi             break;
4531*53ee8cc1Swenshuai.xi         case Audio_RA8LBR_FrameSize5:
4532*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, ADEC1, param1, 4 );
4533*53ee8cc1Swenshuai.xi             break;
4534*53ee8cc1Swenshuai.xi         default:
4535*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x,%08x,%08x] not Supported\n",__FUNCTION__, infoType, param1, param2);
4536*53ee8cc1Swenshuai.xi             break;
4537*53ee8cc1Swenshuai.xi     }
4538*53ee8cc1Swenshuai.xi 
4539*53ee8cc1Swenshuai.xi     return TRUE;
4540*53ee8cc1Swenshuai.xi }
4541*53ee8cc1Swenshuai.xi 
4542*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4543*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_GetRA8LBRInfo()
4544*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine info of ra8 lbr decoder
4545*53ee8cc1Swenshuai.xi /// @param <IN>        \b Audio_RA8LBR_infoType : request info type of ra8 lbr decoder
4546*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE                  :
4547*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U32                :  info type
4548*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE                  :
4549*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_GetRA8LBRInfo(Audio_RA8LBR_infoType infoType)4550*53ee8cc1Swenshuai.xi MS_U32 HAL_MAD_GetRA8LBRInfo( Audio_RA8LBR_infoType infoType )
4551*53ee8cc1Swenshuai.xi {
4552*53ee8cc1Swenshuai.xi     MS_U32 result = 0;
4553*53ee8cc1Swenshuai.xi 
4554*53ee8cc1Swenshuai.xi     switch ( infoType )
4555*53ee8cc1Swenshuai.xi     {
4556*53ee8cc1Swenshuai.xi         default:
4557*53ee8cc1Swenshuai.xi             printf("%s: infoType[%x] not Supported\n",__FUNCTION__, infoType);
4558*53ee8cc1Swenshuai.xi             break;
4559*53ee8cc1Swenshuai.xi     }
4560*53ee8cc1Swenshuai.xi 
4561*53ee8cc1Swenshuai.xi     return result;
4562*53ee8cc1Swenshuai.xi }
4563*53ee8cc1Swenshuai.xi 
4564*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4565*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_ReLoadCode()
4566*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to reload the DVB algorithm code
4567*53ee8cc1Swenshuai.xi /// @param u8Type1     \b type1    :  algorithm1 type
4568*53ee8cc1Swenshuai.xi /// @return MS_BOOL    \b TRUE --DSP reload code okay
4569*53ee8cc1Swenshuai.xi ///                       FALSE--DSP reload code fail
4570*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_ReLoadCode(AUDIO_DSP_CODE_TYPE u8Type1)4571*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_ReLoadCode(AUDIO_DSP_CODE_TYPE u8Type1)
4572*53ee8cc1Swenshuai.xi {
4573*53ee8cc1Swenshuai.xi     //AUDIO_ALG_INFO *pau_info, *pau_info2, tmp_info, tmp_info2;
4574*53ee8cc1Swenshuai.xi     MS_BOOL ret_status = FALSE;
4575*53ee8cc1Swenshuai.xi     AU_DVB_DECCMD   deccmd_status;
4576*53ee8cc1Swenshuai.xi     MS_U16 deccmd_status1;
4577*53ee8cc1Swenshuai.xi 
4578*53ee8cc1Swenshuai.xi     #if (SIF_DSP_TYPE == 1)
4579*53ee8cc1Swenshuai.xi         if(u8Type1 == AU_DVB_STANDARD_MPEG_EN)
4580*53ee8cc1Swenshuai.xi         {
4581*53ee8cc1Swenshuai.xi             return FALSE;
4582*53ee8cc1Swenshuai.xi         }
4583*53ee8cc1Swenshuai.xi     #endif
4584*53ee8cc1Swenshuai.xi 
4585*53ee8cc1Swenshuai.xi     if(((u8Type1 & 0xF0) == 0x00)||((u8Type1 & 0xF0) == 0x10)||((u8Type1 & 0xF0) == 0xb0) )
4586*53ee8cc1Swenshuai.xi     {
4587*53ee8cc1Swenshuai.xi         if(HAL_AUDIO_GetDspCodeType() == u8Type1)           // if type is the same, don't reload again
4588*53ee8cc1Swenshuai.xi         {
4589*53ee8cc1Swenshuai.xi             printf("Audio DSP1 code is same(0x%x), no need to reload\n", u8Type1);
4590*53ee8cc1Swenshuai.xi             return TRUE;
4591*53ee8cc1Swenshuai.xi         }
4592*53ee8cc1Swenshuai.xi 
4593*53ee8cc1Swenshuai.xi         deccmd_status = HAL_MAD_GetDecCmd(DVB_Audio_Decoder1);
4594*53ee8cc1Swenshuai.xi         HAL_MAD_SetDecCmd(AU_DVB_DECCMD_STOP);
4595*53ee8cc1Swenshuai.xi         MsOS_DisableInterrupt(E_INT_FIQ_SE_DSP2UP);
4596*53ee8cc1Swenshuai.xi 
4597*53ee8cc1Swenshuai.xi         // Reset MAD module
4598*53ee8cc1Swenshuai.xi         HAL_MAD_DisEn_MIUREQ();
4599*53ee8cc1Swenshuai.xi 
4600*53ee8cc1Swenshuai.xi         // enable DVB fix-sync mode
4601*53ee8cc1Swenshuai.xi         HAL_MAD_DvbFLockSynthesizer_En();
4602*53ee8cc1Swenshuai.xi         ret_status = HAL_AUDIO_AlgReloadCode(u8Type1);
4603*53ee8cc1Swenshuai.xi 
4604*53ee8cc1Swenshuai.xi         MsOS_EnableInterrupt(E_INT_FIQ_SE_DSP2UP);
4605*53ee8cc1Swenshuai.xi         if ( ret_status == TRUE )
4606*53ee8cc1Swenshuai.xi         {
4607*53ee8cc1Swenshuai.xi             if(u8Type1 != AU_DVB_STANDARD_MPEG_AD)
4608*53ee8cc1Swenshuai.xi             {
4609*53ee8cc1Swenshuai.xi                 HAL_AUDIO_SetDspCodeType(u8Type1, ret_status);
4610*53ee8cc1Swenshuai.xi             }
4611*53ee8cc1Swenshuai.xi         }
4612*53ee8cc1Swenshuai.xi         HAL_MAD_SetDecCmd((AU_DVB_DECCMD)deccmd_status);
4613*53ee8cc1Swenshuai.xi         return ret_status;
4614*53ee8cc1Swenshuai.xi     }
4615*53ee8cc1Swenshuai.xi     else if(((u8Type1 & 0xF0) == 0x30)||((u8Type1 & 0xF0) == 0x20)) // MPEG AD/MPEG EN/2nd decoder
4616*53ee8cc1Swenshuai.xi     {
4617*53ee8cc1Swenshuai.xi         deccmd_status1 = HAL_AUDIO_ReadReg(REG_R2_DECODE1_CMD);
4618*53ee8cc1Swenshuai.xi         HAL_MAD2_SetDecCmd(AU_DVB2_DECCMD_STOP);
4619*53ee8cc1Swenshuai.xi 
4620*53ee8cc1Swenshuai.xi         MsOS_DisableInterrupt(E_INT_FIQ_SE_DSP2UP);
4621*53ee8cc1Swenshuai.xi 
4622*53ee8cc1Swenshuai.xi         // Reset MAD module
4623*53ee8cc1Swenshuai.xi         //HAL_MAD_DisEn_MIUREQ();
4624*53ee8cc1Swenshuai.xi 
4625*53ee8cc1Swenshuai.xi         // enable DVB fix-sync mode
4626*53ee8cc1Swenshuai.xi         //HAL_MAD_DvbFLockSynthesizer_En();
4627*53ee8cc1Swenshuai.xi         ret_status = HAL_AUDIO_AlgReloadCode(u8Type1);
4628*53ee8cc1Swenshuai.xi 
4629*53ee8cc1Swenshuai.xi         MsOS_EnableInterrupt(E_INT_FIQ_SE_DSP2UP);
4630*53ee8cc1Swenshuai.xi         HAL_AUDIO_SetDsp2CodeType(u8Type1, ret_status);
4631*53ee8cc1Swenshuai.xi         HAL_MAD2_SetDecCmd((AU_DVB_DECCMD)deccmd_status1);
4632*53ee8cc1Swenshuai.xi         return ret_status;
4633*53ee8cc1Swenshuai.xi     }
4634*53ee8cc1Swenshuai.xi     else
4635*53ee8cc1Swenshuai.xi     {
4636*53ee8cc1Swenshuai.xi         return FALSE;
4637*53ee8cc1Swenshuai.xi     }
4638*53ee8cc1Swenshuai.xi }
4639*53ee8cc1Swenshuai.xi 
4640*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4641*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_LoadCode()
4642*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to load the DVB algorithm code
4643*53ee8cc1Swenshuai.xi /// @param u8Type      \b algorithm type
4644*53ee8cc1Swenshuai.xi /// @return MS_BOOL    \b TRUE --DSP load code okay
4645*53ee8cc1Swenshuai.xi ///                       FALSE--DSP load code fail
4646*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_LoadCode(AUDIO_DSP_CODE_TYPE u8Type)4647*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_LoadCode(AUDIO_DSP_CODE_TYPE u8Type)
4648*53ee8cc1Swenshuai.xi {
4649*53ee8cc1Swenshuai.xi     //AUDIO_ALG_INFO *pau_info, *pau_info2, tmp_info, tmp_info2;
4650*53ee8cc1Swenshuai.xi     MS_BOOL ret_status = FALSE;
4651*53ee8cc1Swenshuai.xi 
4652*53ee8cc1Swenshuai.xi     if(((u8Type & 0xF0) == 0x00)||((u8Type & 0xF0) == 0x10)||((u8Type & 0xF0) == 0xb0))  //mad load code
4653*53ee8cc1Swenshuai.xi     {
4654*53ee8cc1Swenshuai.xi         AUD_DBGMSG(printf("HAL_MAD_LoadCode(type=dvb (%x))\r\n", u8Type));
4655*53ee8cc1Swenshuai.xi 
4656*53ee8cc1Swenshuai.xi         //HAL_AUDIO_WriteMaskByte(REG_AUDIO_DECODER1_CFG,0x07, 0x00);  // decoder1 Input --> DVB
4657*53ee8cc1Swenshuai.xi 
4658*53ee8cc1Swenshuai.xi         ret_status = HAL_AUDSP_DspLoadCode(u8Type);
4659*53ee8cc1Swenshuai.xi         HAL_AUDIO_SetDspCodeType(u8Type, ret_status);
4660*53ee8cc1Swenshuai.xi         HAL_AUDIO_SetIsDtvFlag(TRUE);
4661*53ee8cc1Swenshuai.xi         return TRUE;
4662*53ee8cc1Swenshuai.xi     }
4663*53ee8cc1Swenshuai.xi     else
4664*53ee8cc1Swenshuai.xi     {
4665*53ee8cc1Swenshuai.xi         AUD_DBGMSG(printf("HAL_MAD_SIF_LoadCode: type(%x) is invalid\r\n",u8Type));
4666*53ee8cc1Swenshuai.xi         return FALSE;
4667*53ee8cc1Swenshuai.xi     }
4668*53ee8cc1Swenshuai.xi }
4669*53ee8cc1Swenshuai.xi 
4670*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
4671*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MAD_XPCM_setParam
4672*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MAD_XPCM_setParam(XPCM_TYPE audioType,MS_U8 channels,MS_U16 sampleRate,MS_U8 bitsPerSample,MS_U16 blockSize,MS_U16 samplePerBlock)4673*53ee8cc1Swenshuai.xi MS_U8 HAL_MAD_XPCM_setParam(XPCM_TYPE audioType, MS_U8  channels, MS_U16 sampleRate,
4674*53ee8cc1Swenshuai.xi                                                     MS_U8  bitsPerSample, MS_U16 blockSize, MS_U16 samplePerBlock)
4675*53ee8cc1Swenshuai.xi {
4676*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_TYPE, ADEC1, audioType, 0 );
4677*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_CHANNELS, ADEC1, channels, 0 );
4678*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_SAMPLERATES, ADEC1, sampleRate, 0 );
4679*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_BITS_PER_SAMPLE, ADEC1, bitsPerSample, 0 );
4680*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_BLOCK_SIZE, ADEC1, blockSize, 0 );
4681*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_SAMPLE_PER_BLOCK, ADEC1, samplePerBlock, 0 );
4682*53ee8cc1Swenshuai.xi 
4683*53ee8cc1Swenshuai.xi     return TRUE;
4684*53ee8cc1Swenshuai.xi }
4685*53ee8cc1Swenshuai.xi 
4686*53ee8cc1Swenshuai.xi //====== STAOS PIP START 2012/02/01 ========
4687*53ee8cc1Swenshuai.xi 
HAL_MAD_XPCM_setParam2(AUDIO_DEC_ID DecId,Audio_XPCM_Param * pParam)4688*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_XPCM_setParam2( AUDIO_DEC_ID DecId, Audio_XPCM_Param * pParam )
4689*53ee8cc1Swenshuai.xi {
4690*53ee8cc1Swenshuai.xi     Audio_XPCM_Param    * pParamXPCM = pParam;
4691*53ee8cc1Swenshuai.xi     Audio_id adec_id = HAL_AUDIO_Convert_DecId_to_ADECId(DecId);
4692*53ee8cc1Swenshuai.xi 
4693*53ee8cc1Swenshuai.xi     if ( adec_id < ADEC3 )
4694*53ee8cc1Swenshuai.xi     {
4695*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_TYPE, adec_id, (MS_U32) pParamXPCM->audioType, 0 );
4696*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_CHANNELS, adec_id, (MS_U32) pParamXPCM->channels, 0 );
4697*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_SAMPLERATES, adec_id, (MS_U32) pParamXPCM->sampleRate, 0 );
4698*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_BITS_PER_SAMPLE, adec_id, (MS_U32) pParamXPCM->bitsPerSample, 0 );
4699*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_BLOCK_SIZE, adec_id, (MS_U32) pParamXPCM->blockSize, 0 );
4700*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_XPCM_SAMPLE_PER_BLOCK, adec_id, (MS_U32) pParamXPCM->samplePerBlock, 0 );
4701*53ee8cc1Swenshuai.xi         return TRUE;
4702*53ee8cc1Swenshuai.xi     }
4703*53ee8cc1Swenshuai.xi     else
4704*53ee8cc1Swenshuai.xi     {
4705*53ee8cc1Swenshuai.xi         return FALSE;
4706*53ee8cc1Swenshuai.xi     }
4707*53ee8cc1Swenshuai.xi }
4708*53ee8cc1Swenshuai.xi 
HAL_MAD_COOK_setParam2(AUDIO_DEC_ID DecId,Audio_COOK_Param * pParam)4709*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_COOK_setParam2( AUDIO_DEC_ID DecId, Audio_COOK_Param * pParam )
4710*53ee8cc1Swenshuai.xi {
4711*53ee8cc1Swenshuai.xi     Audio_COOK_Param * pParamCOOK = pParam;
4712*53ee8cc1Swenshuai.xi     Audio_id adec_id = HAL_AUDIO_Convert_DecId_to_ADECId(DecId);
4713*53ee8cc1Swenshuai.xi 
4714*53ee8cc1Swenshuai.xi     if ( adec_id < ADEC3 )
4715*53ee8cc1Swenshuai.xi     {
4716*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_NUMCODECS, adec_id, pParamCOOK->mNumCodecs, 0 );
4717*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_SAMPLES, adec_id, pParamCOOK->mSamples, 0 );
4718*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_SAMPLERATES, adec_id, pParamCOOK->mSampleRate, 0 );
4719*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, adec_id, pParamCOOK->Channels[0], 0 );
4720*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, adec_id, pParamCOOK->Regions[0], 0 );
4721*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, adec_id, pParamCOOK->cplStart[0], 0 );
4722*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, adec_id, pParamCOOK->cplQbits[0], 0 );
4723*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, adec_id, pParamCOOK->FrameSize[0], 0 );
4724*53ee8cc1Swenshuai.xi 
4725*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, adec_id, pParamCOOK->Channels[1], 1 );
4726*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, adec_id, pParamCOOK->Regions[1], 1 );
4727*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, adec_id, pParamCOOK->cplStart[1], 1 );
4728*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, adec_id, pParamCOOK->cplQbits[1], 1 );
4729*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, adec_id, pParamCOOK->FrameSize[1], 1 );
4730*53ee8cc1Swenshuai.xi 
4731*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, adec_id, pParamCOOK->Channels[2], 2 );
4732*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, adec_id, pParamCOOK->Regions[2], 2 );
4733*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, adec_id, pParamCOOK->cplStart[2], 2 );
4734*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, adec_id, pParamCOOK->cplQbits[2], 2 );
4735*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, adec_id, pParamCOOK->FrameSize[2], 2 );
4736*53ee8cc1Swenshuai.xi 
4737*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, adec_id, pParamCOOK->Channels[3], 3 );
4738*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, adec_id, pParamCOOK->Regions[3], 3 );
4739*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, adec_id, pParamCOOK->cplStart[3], 3 );
4740*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, adec_id, pParamCOOK->cplQbits[3], 3 );
4741*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, adec_id, pParamCOOK->FrameSize[3], 3 );
4742*53ee8cc1Swenshuai.xi 
4743*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CHANNELS, adec_id, pParamCOOK->Channels[4], 4 );
4744*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_REGIONS, adec_id, pParamCOOK->Regions[4], 4 );
4745*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLSTART, adec_id, pParamCOOK->cplStart[4], 4 );
4746*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_CPLQBITS, adec_id, pParamCOOK->cplQbits[4], 4 );
4747*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_COOK_FRAMESIZE, adec_id, pParamCOOK->FrameSize[4], 4 );
4748*53ee8cc1Swenshuai.xi 
4749*53ee8cc1Swenshuai.xi         return TRUE;
4750*53ee8cc1Swenshuai.xi     }
4751*53ee8cc1Swenshuai.xi     else
4752*53ee8cc1Swenshuai.xi     {
4753*53ee8cc1Swenshuai.xi         return FALSE;
4754*53ee8cc1Swenshuai.xi     }
4755*53ee8cc1Swenshuai.xi }
4756*53ee8cc1Swenshuai.xi 
HAL_MAD_WMA_SetASFParm2(AUDIO_DEC_ID DecId,Audio_ASF_Param * pParam)4757*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_WMA_SetASFParm2( AUDIO_DEC_ID DecId, Audio_ASF_Param * pParam )
4758*53ee8cc1Swenshuai.xi {
4759*53ee8cc1Swenshuai.xi     Audio_id adec_id = HAL_AUDIO_Convert_DecId_to_ADECId(DecId);
4760*53ee8cc1Swenshuai.xi 
4761*53ee8cc1Swenshuai.xi     if ( adec_id < ADEC3 )
4762*53ee8cc1Swenshuai.xi     {
4763*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_VERSION, adec_id, pParam->u32Version, 0);
4764*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_CHANNELS, adec_id, pParam->u32Channels, 0);
4765*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_SAMPLERATE, adec_id, pParam->u32SampleRate, 0);
4766*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_BYTERATE, adec_id, pParam->u32ByteRate, 0);
4767*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_BLOCKALIGN, adec_id, pParam->u32BlockAlign, 0);
4768*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_ENCOPT, adec_id, pParam->u32Encopt, 0);
4769*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_PARSINGBYAPP, adec_id, pParam->u32ParsingByApp, 0);
4770*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_BITS_PER_SAMPLE, adec_id, pParam->u32BitsPerSample, 0);
4771*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_CHANNELMASK, adec_id, pParam->u32ChannelMask, 0);
4772*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_PARAM_EXIST, adec_id, pParam->u32DrcParamExist, 0);
4773*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_RMS_AMP_REF, adec_id, pParam->u32DrcRmsAmpRef, 0);
4774*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_RMS_AMP_TARGET, adec_id, pParam->u32DrcRmsAmpTarget, 0);
4775*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_PEAK_AMP_REF, adec_id, pParam->u32DrcPeakAmpRef, 0);
4776*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_DRC_PEAK_AMP_TARGET, adec_id, pParam->u32DrcPeakAmpTarget, 0);
4777*53ee8cc1Swenshuai.xi         HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ASF_MAX_PACKET_SIZE, adec_id, pParam->u32MaxPacketSize, 0);
4778*53ee8cc1Swenshuai.xi         return TRUE;
4779*53ee8cc1Swenshuai.xi     }
4780*53ee8cc1Swenshuai.xi     else
4781*53ee8cc1Swenshuai.xi     {
4782*53ee8cc1Swenshuai.xi         return FALSE;
4783*53ee8cc1Swenshuai.xi     }
4784*53ee8cc1Swenshuai.xi }
4785*53ee8cc1Swenshuai.xi 
HAL_MAD_SetAudioParam2(AUDIO_DEC_ID DecId,Audio_ParamType paramType,MS_VIRT Param)4786*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_SetAudioParam2( AUDIO_DEC_ID DecId, Audio_ParamType paramType, MS_VIRT Param )
4787*53ee8cc1Swenshuai.xi {
4788*53ee8cc1Swenshuai.xi     MS_BOOL  bRet = TRUE;
4789*53ee8cc1Swenshuai.xi     Audio_id adec_id = HAL_AUDIO_Convert_DecId_to_ADECId(DecId);
4790*53ee8cc1Swenshuai.xi 
4791*53ee8cc1Swenshuai.xi     HALMAD_CHECK_SHM_INIT;
4792*53ee8cc1Swenshuai.xi 
4793*53ee8cc1Swenshuai.xi     switch ( paramType )
4794*53ee8cc1Swenshuai.xi     {
4795*53ee8cc1Swenshuai.xi         case Audio_ParamType_setAudioDecoder:
4796*53ee8cc1Swenshuai.xi         {
4797*53ee8cc1Swenshuai.xi             En_DVB_decSystemType eAudioFormat;
4798*53ee8cc1Swenshuai.xi             switch ( (MMA_AudioType) Param )
4799*53ee8cc1Swenshuai.xi             {
4800*53ee8cc1Swenshuai.xi                 case Audio_DEC_PCM:
4801*53ee8cc1Swenshuai.xi                 case Audio_DEC_XPCM:        eAudioFormat = MSAPI_AUD_DVB_XPCM;        break;
4802*53ee8cc1Swenshuai.xi                 case Audio_DEC_MPEG:        eAudioFormat = MSAPI_AUD_DVB_MPEG;        break;
4803*53ee8cc1Swenshuai.xi                 case Audio_DEC_MP3:         eAudioFormat = MSAPI_AUD_DVB_MP3;         break;
4804*53ee8cc1Swenshuai.xi                 case Audio_DEC_AC3:         eAudioFormat = MSAPI_AUD_DVB_AC3;         break;
4805*53ee8cc1Swenshuai.xi                 case Audio_DEC_AC3P:        eAudioFormat = MSAPI_AUD_DVB_AC3P;        break;
4806*53ee8cc1Swenshuai.xi                 case Audio_DEC_AAC_LC:
4807*53ee8cc1Swenshuai.xi                 case Audio_DEC_HEAAC_V1:
4808*53ee8cc1Swenshuai.xi                 case Audio_DEC_HEAAC_V2:    eAudioFormat = MSAPI_AUD_DVB_AAC;         break;
4809*53ee8cc1Swenshuai.xi                 case Audio_DEC_DOLBYPULSE:  eAudioFormat = MSAPI_AUD_DVB_MS10_DDT;    break;
4810*53ee8cc1Swenshuai.xi                 case Audio_DEC_WMA:         eAudioFormat = MSAPI_AUD_DVB_WMA;         break;
4811*53ee8cc1Swenshuai.xi                 case Audio_DEC_WMAPRO:      eAudioFormat = MSAPI_AUD_DVB_WMA_PRO;     break;
4812*53ee8cc1Swenshuai.xi                 case Audio_DEC_RA8:         eAudioFormat = MSAPI_AUD_DVB_RA8LBR;      break;
4813*53ee8cc1Swenshuai.xi                 case Audio_DEC_DTS:         eAudioFormat = MSAPI_AUD_DVB_DTS;         break;
4814*53ee8cc1Swenshuai.xi                 case Audio_DEC_FLAC:        eAudioFormat = MSAPI_AUD_DVB_FLAC;        break;
4815*53ee8cc1Swenshuai.xi                 case Audio_DEC_VORBIS:      eAudioFormat = MSAPI_AUD_DVB_VORBIS;      break;
4816*53ee8cc1Swenshuai.xi                 case Audio_DEC_AMR_NB:      eAudioFormat = MSAPI_AUD_DVB_AMR_NB;      break;
4817*53ee8cc1Swenshuai.xi                 case Audio_DEC_AMR_WB:      eAudioFormat = MSAPI_AUD_DVB_AMR_WB;      break;
4818*53ee8cc1Swenshuai.xi                 case Audio_DEC_DRA:         eAudioFormat = MSAPI_AUD_DVB_DRA;         break;
4819*53ee8cc1Swenshuai.xi                 case Audio_DEC_DTSLBR:      eAudioFormat = MSAPI_AUD_DVB_DTSLBR;      break;
4820*53ee8cc1Swenshuai.xi                 case Audio_DEC_KTV:
4821*53ee8cc1Swenshuai.xi                 case Audio_DEC_KTV2:
4822*53ee8cc1Swenshuai.xi                 case Audio_DEC_Dolby_TrueHD_Bypass_R2:      eAudioFormat = MSAPI_AUD_DVB_DolbyTrueHDBypass;      break;
4823*53ee8cc1Swenshuai.xi                 case Audio_DEC_DTS_HD_ADO_R2:               eAudioFormat = MSAPI_AUD_DVB_DTSHDADO;               break;
4824*53ee8cc1Swenshuai.xi                 default:                    eAudioFormat = MSAPI_AUD_DVB_INVALID;     break;
4825*53ee8cc1Swenshuai.xi             }
4826*53ee8cc1Swenshuai.xi             bRet = HAL_AUDIO_SetSystem2(DecId, eAudioFormat);
4827*53ee8cc1Swenshuai.xi             if ( bRet == TRUE )
4828*53ee8cc1Swenshuai.xi             {
4829*53ee8cc1Swenshuai.xi                 g_AudioVars2->AudioDecStatus[DecId].bConnect= TRUE;
4830*53ee8cc1Swenshuai.xi                 g_AudioVars2->AudioDecStatus[DecId].eSourceType = E_AUDIO_INFO_MM_IN;
4831*53ee8cc1Swenshuai.xi                 g_AudioVars2->AudioDecStatus[DecId].eAudFormat = (En_DVB_decSystemType) eAudioFormat;
4832*53ee8cc1Swenshuai.xi             }
4833*53ee8cc1Swenshuai.xi             break;
4834*53ee8cc1Swenshuai.xi         }
4835*53ee8cc1Swenshuai.xi 
4836*53ee8cc1Swenshuai.xi         case Audio_ParamType_playControl:
4837*53ee8cc1Swenshuai.xi         {
4838*53ee8cc1Swenshuai.xi             if ( DecId == AU_DEC_ID3 )
4839*53ee8cc1Swenshuai.xi             {
4840*53ee8cc1Swenshuai.xi                 switch ( (MMA_AUDIO_CONTROL) Param )
4841*53ee8cc1Swenshuai.xi                 {
4842*53ee8cc1Swenshuai.xi                     case MMA_STOP:
4843*53ee8cc1Swenshuai.xi                         if ((g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_MM_IN) ||
4844*53ee8cc1Swenshuai.xi                             (g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_GAME_IN))
4845*53ee8cc1Swenshuai.xi                         {
4846*53ee8cc1Swenshuai.xi                             HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_STOP);
4847*53ee8cc1Swenshuai.xi                         }
4848*53ee8cc1Swenshuai.xi                         g_AudioVars2->u16DecodeFrmCnt[DecId] = 0;
4849*53ee8cc1Swenshuai.xi                         g_AudioVars2->g_bSePlayFileFlag = FALSE;
4850*53ee8cc1Swenshuai.xi                         break;
4851*53ee8cc1Swenshuai.xi 
4852*53ee8cc1Swenshuai.xi                     case MMA_PLAY:
4853*53ee8cc1Swenshuai.xi                         HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_PLAY);
4854*53ee8cc1Swenshuai.xi                         break;
4855*53ee8cc1Swenshuai.xi 
4856*53ee8cc1Swenshuai.xi                     case MMA_PLAY_FILETSP:
4857*53ee8cc1Swenshuai.xi                         HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_PLAYFILETSP);
4858*53ee8cc1Swenshuai.xi                         break;
4859*53ee8cc1Swenshuai.xi 
4860*53ee8cc1Swenshuai.xi                     case MMA_RESYNC:
4861*53ee8cc1Swenshuai.xi                         HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_RESYNC);
4862*53ee8cc1Swenshuai.xi                         break;
4863*53ee8cc1Swenshuai.xi 
4864*53ee8cc1Swenshuai.xi                     case MMA_PLAY_FILE:
4865*53ee8cc1Swenshuai.xi                         HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_PLAYFILE);
4866*53ee8cc1Swenshuai.xi                         break;
4867*53ee8cc1Swenshuai.xi 
4868*53ee8cc1Swenshuai.xi                     case MMA_BROWSE:
4869*53ee8cc1Swenshuai.xi                         HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_STARTBROWSE);
4870*53ee8cc1Swenshuai.xi                         break;
4871*53ee8cc1Swenshuai.xi 
4872*53ee8cc1Swenshuai.xi                     case MMA_PAUSE:
4873*53ee8cc1Swenshuai.xi                         HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_PAUSE);
4874*53ee8cc1Swenshuai.xi                         break;
4875*53ee8cc1Swenshuai.xi 
4876*53ee8cc1Swenshuai.xi                     case MMA_PLAY_FRAME:
4877*53ee8cc1Swenshuai.xi                         HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_PLAYFRAME);
4878*53ee8cc1Swenshuai.xi                         break;
4879*53ee8cc1Swenshuai.xi 
4880*53ee8cc1Swenshuai.xi                     case MMA_PLAY_FRAME_GS:
4881*53ee8cc1Swenshuai.xi                         if ((g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_MM_IN) ||
4882*53ee8cc1Swenshuai.xi                             (g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_GAME_IN))
4883*53ee8cc1Swenshuai.xi                         {
4884*53ee8cc1Swenshuai.xi                             HAL_MAD2_SetDecCmd2(AU_DVB_DECCMD_PLAYFRAME_GS);
4885*53ee8cc1Swenshuai.xi                         }
4886*53ee8cc1Swenshuai.xi                         break;
4887*53ee8cc1Swenshuai.xi 
4888*53ee8cc1Swenshuai.xi                     default:
4889*53ee8cc1Swenshuai.xi                         break;
4890*53ee8cc1Swenshuai.xi                 }
4891*53ee8cc1Swenshuai.xi             }
4892*53ee8cc1Swenshuai.xi             else
4893*53ee8cc1Swenshuai.xi             {
4894*53ee8cc1Swenshuai.xi                 switch ( (MMA_AUDIO_CONTROL) Param )
4895*53ee8cc1Swenshuai.xi                 {
4896*53ee8cc1Swenshuai.xi                     case MMA_STOP:
4897*53ee8cc1Swenshuai.xi                         if ((g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_MM_IN) ||
4898*53ee8cc1Swenshuai.xi                             (g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_GAME_IN))
4899*53ee8cc1Swenshuai.xi                         {
4900*53ee8cc1Swenshuai.xi                             HAL_MAD_SetDecCmd(AU_DVB_DECCMD_STOP);
4901*53ee8cc1Swenshuai.xi                         }
4902*53ee8cc1Swenshuai.xi                         else
4903*53ee8cc1Swenshuai.xi                         {
4904*53ee8cc1Swenshuai.xi                             HALMAD_ERROR ("%s: DecId %d NOT used by ANDROID MM, used by %d !!\r\n", __FUNCTION__, DecId, g_AudioVars2->AudioDecStatus[DecId].eSourceType );
4905*53ee8cc1Swenshuai.xi                         }
4906*53ee8cc1Swenshuai.xi                         g_AudioVars2->u16DecodeFrmCnt[DecId] = 0;
4907*53ee8cc1Swenshuai.xi                         g_AudioVars2->g_bDecPlayFileFlag = FALSE;
4908*53ee8cc1Swenshuai.xi                         break;
4909*53ee8cc1Swenshuai.xi 
4910*53ee8cc1Swenshuai.xi                     case MMA_PLAY:
4911*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAY);
4912*53ee8cc1Swenshuai.xi                         break;
4913*53ee8cc1Swenshuai.xi 
4914*53ee8cc1Swenshuai.xi                     case MMA_PLAY_FILETSP:
4915*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAYFILETSP);
4916*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDecCmd(AU_DVB_DECCMD_FREERUN);
4917*53ee8cc1Swenshuai.xi                         break;
4918*53ee8cc1Swenshuai.xi 
4919*53ee8cc1Swenshuai.xi                     case MMA_RESYNC:
4920*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDecCmd(AU_DVB_DECCMD_RESYNC);
4921*53ee8cc1Swenshuai.xi                         break;
4922*53ee8cc1Swenshuai.xi 
4923*53ee8cc1Swenshuai.xi                     case MMA_PLAY_FILE:
4924*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAYFILE);
4925*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDecCmd(AU_DVB_DECCMD_FREERUN);
4926*53ee8cc1Swenshuai.xi                         break;
4927*53ee8cc1Swenshuai.xi 
4928*53ee8cc1Swenshuai.xi                     case MMA_BROWSE:
4929*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDecCmd(AU_DVB_DECCMD_STARTBROWSE);
4930*53ee8cc1Swenshuai.xi                         break;
4931*53ee8cc1Swenshuai.xi 
4932*53ee8cc1Swenshuai.xi                     case MMA_PAUSE:
4933*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PAUSE);
4934*53ee8cc1Swenshuai.xi                         break;
4935*53ee8cc1Swenshuai.xi 
4936*53ee8cc1Swenshuai.xi                     case MMA_PLAY_FRAME:
4937*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAYFRAME);
4938*53ee8cc1Swenshuai.xi                         HAL_MAD_SetDecCmd(AU_DVB_DECCMD_FREERUN);
4939*53ee8cc1Swenshuai.xi                         break;
4940*53ee8cc1Swenshuai.xi 
4941*53ee8cc1Swenshuai.xi                     case MMA_PLAY_FRAME_GS:
4942*53ee8cc1Swenshuai.xi                         if ((g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_MM_IN) ||
4943*53ee8cc1Swenshuai.xi                             (g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_GAME_IN))
4944*53ee8cc1Swenshuai.xi                         {
4945*53ee8cc1Swenshuai.xi                             HAL_MAD_SetDecCmd(AU_DVB_DECCMD_PLAYFRAME_GS);
4946*53ee8cc1Swenshuai.xi                         }
4947*53ee8cc1Swenshuai.xi                         break;
4948*53ee8cc1Swenshuai.xi 
4949*53ee8cc1Swenshuai.xi                     default:
4950*53ee8cc1Swenshuai.xi                         break;
4951*53ee8cc1Swenshuai.xi                 }
4952*53ee8cc1Swenshuai.xi             }
4953*53ee8cc1Swenshuai.xi             break;
4954*53ee8cc1Swenshuai.xi         }
4955*53ee8cc1Swenshuai.xi 
4956*53ee8cc1Swenshuai.xi         case Audio_ParamType_SoundMode:                     //HAL_MAD_SetSoundMode
4957*53ee8cc1Swenshuai.xi         {
4958*53ee8cc1Swenshuai.xi             HAL_AUDIO_SeWriteMaskByte(REG_MB_MODE_SELECT, 0x03, (AU_DVB_MODE) Param);
4959*53ee8cc1Swenshuai.xi             break;
4960*53ee8cc1Swenshuai.xi         }
4961*53ee8cc1Swenshuai.xi 
4962*53ee8cc1Swenshuai.xi         case Audio_ParamType_PTS_info:
4963*53ee8cc1Swenshuai.xi         {
4964*53ee8cc1Swenshuai.xi             HAL_AUDIO_PTS_info(Param);
4965*53ee8cc1Swenshuai.xi             break;
4966*53ee8cc1Swenshuai.xi         }
4967*53ee8cc1Swenshuai.xi 
4968*53ee8cc1Swenshuai.xi         case Audio_ParamType_syncSTC:
4969*53ee8cc1Swenshuai.xi         {
4970*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_TS_SYNC_STC, adec_id, Param, 0);
4971*53ee8cc1Swenshuai.xi             break;
4972*53ee8cc1Swenshuai.xi         }
4973*53ee8cc1Swenshuai.xi 
4974*53ee8cc1Swenshuai.xi         case Audio_ParamType_acMode:
4975*53ee8cc1Swenshuai.xi         {
4976*53ee8cc1Swenshuai.xi             // DD, DDP, HEAAC
4977*53ee8cc1Swenshuai.xi             switch ( (AUD_Dolby_SOUNDMODE) Param )
4978*53ee8cc1Swenshuai.xi             {
4979*53ee8cc1Swenshuai.xi                 case AUD_Dolby_SOUNDMODE_LR:     Param = 0x0;  break;
4980*53ee8cc1Swenshuai.xi                 case AUD_Dolby_SOUNDMODE_LL:     Param = 0x1;  break;
4981*53ee8cc1Swenshuai.xi                 case AUD_Dolby_SOUNDMODE_RR:     Param = 0x2;  break;
4982*53ee8cc1Swenshuai.xi                 default:                         Param = 0x0;  break;
4983*53ee8cc1Swenshuai.xi             }
4984*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_SOUND_MODE, ADEC1, Param, 0);
4985*53ee8cc1Swenshuai.xi             break;
4986*53ee8cc1Swenshuai.xi         }
4987*53ee8cc1Swenshuai.xi 
4988*53ee8cc1Swenshuai.xi         case Audio_ParamType_reqDataSize:
4989*53ee8cc1Swenshuai.xi         {
4990*53ee8cc1Swenshuai.xi             if ( DecId == AU_DEC_ID3 )
4991*53ee8cc1Swenshuai.xi             {
4992*53ee8cc1Swenshuai.xi                 if ( (HAL_AUR2_ReadByte(REG_R2_DECODE2_CMD) & 0x7F) != 0 )
4993*53ee8cc1Swenshuai.xi                 {
4994*53ee8cc1Swenshuai.xi                     break;
4995*53ee8cc1Swenshuai.xi                 }
4996*53ee8cc1Swenshuai.xi             }
4997*53ee8cc1Swenshuai.xi             else
4998*53ee8cc1Swenshuai.xi             {
4999*53ee8cc1Swenshuai.xi                 if ( (HAL_AUR2_ReadByte(REG_R2_DECODE1_CMD) & 0x7F) != 0 )
5000*53ee8cc1Swenshuai.xi                 {
5001*53ee8cc1Swenshuai.xi                     break;
5002*53ee8cc1Swenshuai.xi                 }
5003*53ee8cc1Swenshuai.xi             }
5004*53ee8cc1Swenshuai.xi 
5005*53ee8cc1Swenshuai.xi             switch ( (FILE_SIZE) Param )
5006*53ee8cc1Swenshuai.xi             {
5007*53ee8cc1Swenshuai.xi                 case FILE_SIZE_64:      Param = 0x0004;        break;
5008*53ee8cc1Swenshuai.xi                 case FILE_SIZE_128:     Param = 0x0008;        break;
5009*53ee8cc1Swenshuai.xi                 case FILE_SIZE_256:     Param = 0x0010;        break;
5010*53ee8cc1Swenshuai.xi                 case FILE_SIZE_512:     Param = 0x0020;        break;
5011*53ee8cc1Swenshuai.xi                 case FILE_SIZE_1KB:     Param = 0x0040;        break;
5012*53ee8cc1Swenshuai.xi                 case FILE_SIZE_2KB:     Param = 0x0080;        break;
5013*53ee8cc1Swenshuai.xi                 case FILE_SIZE_4KB:     Param = 0x0100;        break;
5014*53ee8cc1Swenshuai.xi                 case FILE_SIZE_8KB:     Param = 0x0200;        break;
5015*53ee8cc1Swenshuai.xi                 case FILE_SIZE_16KB:    Param = 0x0400;        break;
5016*53ee8cc1Swenshuai.xi                 case FILE_SIZE_32KB:    Param = 0x0800;        break;
5017*53ee8cc1Swenshuai.xi                 case FILE_SIZE_64KB:    Param = 0x1000;        break;
5018*53ee8cc1Swenshuai.xi                 default:                Param = 0x0100;        break;  // default = 2KB
5019*53ee8cc1Swenshuai.xi             }
5020*53ee8cc1Swenshuai.xi 
5021*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FILE_REQ_SIZE, adec_id, Param, 0);
5022*53ee8cc1Swenshuai.xi             break;
5023*53ee8cc1Swenshuai.xi         }
5024*53ee8cc1Swenshuai.xi 
5025*53ee8cc1Swenshuai.xi         case Audio_ParamType_MM_FFx2:
5026*53ee8cc1Swenshuai.xi         {
5027*53ee8cc1Swenshuai.xi             if ( Param )
5028*53ee8cc1Swenshuai.xi             {
5029*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FF2X, adec_id, 1, 0);
5030*53ee8cc1Swenshuai.xi             }
5031*53ee8cc1Swenshuai.xi             else
5032*53ee8cc1Swenshuai.xi             {
5033*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MM_FF2X, adec_id, 0, 0);
5034*53ee8cc1Swenshuai.xi             }
5035*53ee8cc1Swenshuai.xi             break;
5036*53ee8cc1Swenshuai.xi         }
5037*53ee8cc1Swenshuai.xi 
5038*53ee8cc1Swenshuai.xi         case Audio_ParamType_mute:
5039*53ee8cc1Swenshuai.xi         {
5040*53ee8cc1Swenshuai.xi             if ( Param )
5041*53ee8cc1Swenshuai.xi             {
5042*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DECODE_MUTE, adec_id, 1, 0);
5043*53ee8cc1Swenshuai.xi             }
5044*53ee8cc1Swenshuai.xi             else
5045*53ee8cc1Swenshuai.xi             {
5046*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DECODE_MUTE, adec_id, 0, 0);
5047*53ee8cc1Swenshuai.xi             }
5048*53ee8cc1Swenshuai.xi             break;
5049*53ee8cc1Swenshuai.xi         }
5050*53ee8cc1Swenshuai.xi 
5051*53ee8cc1Swenshuai.xi         case Audio_ParamType_predecode:
5052*53ee8cc1Swenshuai.xi             //Currently, it is not used;
5053*53ee8cc1Swenshuai.xi             break;
5054*53ee8cc1Swenshuai.xi 
5055*53ee8cc1Swenshuai.xi 
5056*53ee8cc1Swenshuai.xi         case Audio_ParamType_esBuf_informDataRdy:
5057*53ee8cc1Swenshuai.xi             if (adec_id == ADEC1)
5058*53ee8cc1Swenshuai.xi             {
5059*53ee8cc1Swenshuai.xi                 MS_U32 es_wrPtr = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, 0);
5060*53ee8cc1Swenshuai.xi                 MS_U32 es_bufSz = ES1_DRAM_SIZE;
5061*53ee8cc1Swenshuai.xi                 MS_U32 es_reqsz = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, ADEC1);
5062*53ee8cc1Swenshuai.xi                 es_wrPtr += es_reqsz;
5063*53ee8cc1Swenshuai.xi 
5064*53ee8cc1Swenshuai.xi                 if ( es_wrPtr >= es_bufSz )
5065*53ee8cc1Swenshuai.xi                     es_wrPtr -= es_bufSz;
5066*53ee8cc1Swenshuai.xi 
5067*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, es_wrPtr, 0);
5068*53ee8cc1Swenshuai.xi             }
5069*53ee8cc1Swenshuai.xi             else if (adec_id == ADEC2)
5070*53ee8cc1Swenshuai.xi             {
5071*53ee8cc1Swenshuai.xi                 MS_U32 es_wrPtr, es_bufSz, es_reqsz;
5072*53ee8cc1Swenshuai.xi                 es_wrPtr = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, 0);
5073*53ee8cc1Swenshuai.xi                 es_bufSz = ES3_DRAM_SIZE;
5074*53ee8cc1Swenshuai.xi                 es_reqsz = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, ADEC2);;
5075*53ee8cc1Swenshuai.xi                 es_wrPtr += es_reqsz;
5076*53ee8cc1Swenshuai.xi 
5077*53ee8cc1Swenshuai.xi                 if ( es_wrPtr >= es_bufSz )
5078*53ee8cc1Swenshuai.xi                    es_wrPtr -= es_bufSz;
5079*53ee8cc1Swenshuai.xi                  HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, es_wrPtr, 0);
5080*53ee8cc1Swenshuai.xi             }
5081*53ee8cc1Swenshuai.xi             break;
5082*53ee8cc1Swenshuai.xi 
5083*53ee8cc1Swenshuai.xi         case Audio_ParamType_setWMADecParam:
5084*53ee8cc1Swenshuai.xi             bRet = HAL_MAD_WMA_SetASFParm2(DecId, (Audio_ASF_Param *) Param);
5085*53ee8cc1Swenshuai.xi             break;
5086*53ee8cc1Swenshuai.xi 
5087*53ee8cc1Swenshuai.xi         case Audio_ParamType_setCOOKDecParam:
5088*53ee8cc1Swenshuai.xi             bRet = HAL_MAD_COOK_setParam2(DecId, (Audio_COOK_Param *) Param);
5089*53ee8cc1Swenshuai.xi             break;
5090*53ee8cc1Swenshuai.xi 
5091*53ee8cc1Swenshuai.xi         case Audio_ParamType_setXPCMDecParam:
5092*53ee8cc1Swenshuai.xi             bRet = HAL_MAD_XPCM_setParam2(DecId, (Audio_XPCM_Param *) Param);
5093*53ee8cc1Swenshuai.xi             break;
5094*53ee8cc1Swenshuai.xi 
5095*53ee8cc1Swenshuai.xi         case Audio_ParamType_UNI_PCM3_Input_Addr:
5096*53ee8cc1Swenshuai.xi             //Currently, it is not used;
5097*53ee8cc1Swenshuai.xi             break;
5098*53ee8cc1Swenshuai.xi 
5099*53ee8cc1Swenshuai.xi         case Audio_ParamType_UNI_NEED_DECODE_FRMCNT:
5100*53ee8cc1Swenshuai.xi             HALMAD_PRINT("\r\n=====ID:%X   Audio_ParamType_UNI_NEED_DECODE_FRMCNT =0x%X==========\r\n", (unsigned int)adec_id,(unsigned int)Param);
5101*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_UNI_SETUP_DECODE_FRMCNT, adec_id, Param, 0);
5102*53ee8cc1Swenshuai.xi             break;
5103*53ee8cc1Swenshuai.xi 
5104*53ee8cc1Swenshuai.xi         case Audio_ParamType_UNI_ES_Wptr:  // OMX Wptr = offset to MAD start address
5105*53ee8cc1Swenshuai.xi             if(adec_id == ADEC2)  // ES For 2nd Decoder
5106*53ee8cc1Swenshuai.xi             {
5107*53ee8cc1Swenshuai.xi                 Param = Param - (MS_U32)(ADEC__R2_DDR_SIZE + ASND__R2_DDR_SIZE + OFFSET_ES3_DRAM_ADDR);
5108*53ee8cc1Swenshuai.xi             }
5109*53ee8cc1Swenshuai.xi             else  // ES For 1st Decoder
5110*53ee8cc1Swenshuai.xi             {
5111*53ee8cc1Swenshuai.xi                 Param = Param - (MS_U32)(ADEC__R2_DDR_SIZE + ASND__R2_DDR_SIZE + OFFSET_ES1_DRAM_ADDR);
5112*53ee8cc1Swenshuai.xi             }
5113*53ee8cc1Swenshuai.xi #if OMX_AUDIO_DEBUG
5114*53ee8cc1Swenshuai.xi             HALMAD_PRINT("\r\n=====ID:%X  Audio_ParamType_UNI_ES_Wptr =0x%X==========\r\n", (unsigned int)adec_id, (unsigned int)Param);
5115*53ee8cc1Swenshuai.xi #endif
5116*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, adec_id, Param, 0);
5117*53ee8cc1Swenshuai.xi             break;
5118*53ee8cc1Swenshuai.xi 
5119*53ee8cc1Swenshuai.xi         case Audio_ParamType_UNI_PCMOutCnt:
5120*53ee8cc1Swenshuai.xi         {
5121*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_UNI_PCM_SET_OUTPUT_CNT, adec_id, Param, 0);
5122*53ee8cc1Swenshuai.xi             break;
5123*53ee8cc1Swenshuai.xi         }
5124*53ee8cc1Swenshuai.xi 
5125*53ee8cc1Swenshuai.xi         case Audio_ParamType_AllocDecoder:
5126*53ee8cc1Swenshuai.xi         {
5127*53ee8cc1Swenshuai.xi             HALMAD_PRINT("\r\n=====DecID:%X  Audio_ParamType_AllocDecoder =0x%X==========\r\n", (unsigned int)DecId, (unsigned int)Param);
5128*53ee8cc1Swenshuai.xi             MMA_AudioType eAudioType = (MMA_AudioType) Param;
5129*53ee8cc1Swenshuai.xi             MMA_AudioType eAudioCaps;
5130*53ee8cc1Swenshuai.xi 
5131*53ee8cc1Swenshuai.xi             OS_OBTAIN_MUTEX(_s32MutexLoadCode, MSOS_WAIT_FOREVER);
5132*53ee8cc1Swenshuai.xi 
5133*53ee8cc1Swenshuai.xi             if ( g_AudioVars2->AudioDecStatus[DecId].bConnect == TRUE )
5134*53ee8cc1Swenshuai.xi             {
5135*53ee8cc1Swenshuai.xi                 HALMAD_ERROR ("%s: DecId %d in Used !!\r\n", __FUNCTION__, DecId);
5136*53ee8cc1Swenshuai.xi                 bRet = FALSE;
5137*53ee8cc1Swenshuai.xi 
5138*53ee8cc1Swenshuai.xi                 OS_RELEASE_MUTEX(_s32MutexLoadCode);
5139*53ee8cc1Swenshuai.xi 
5140*53ee8cc1Swenshuai.xi                 break;
5141*53ee8cc1Swenshuai.xi             }
5142*53ee8cc1Swenshuai.xi 
5143*53ee8cc1Swenshuai.xi             eAudioCaps = _GetAudioCaps(DecId);
5144*53ee8cc1Swenshuai.xi 
5145*53ee8cc1Swenshuai.xi             if ( (eAudioCaps & eAudioType) == eAudioType )
5146*53ee8cc1Swenshuai.xi             {
5147*53ee8cc1Swenshuai.xi                 En_DVB_decSystemType eAudioFormat;
5148*53ee8cc1Swenshuai.xi                 switch ( eAudioType )
5149*53ee8cc1Swenshuai.xi                 {
5150*53ee8cc1Swenshuai.xi                     case Audio_DEC_PCM:
5151*53ee8cc1Swenshuai.xi                     case Audio_DEC_XPCM:        eAudioFormat = MSAPI_AUD_DVB_XPCM;        break;
5152*53ee8cc1Swenshuai.xi                     case Audio_DEC_MPEG:        eAudioFormat = MSAPI_AUD_DVB_MPEG;        break;
5153*53ee8cc1Swenshuai.xi                     case Audio_DEC_MP3:         eAudioFormat = MSAPI_AUD_DVB_MP3;         break;
5154*53ee8cc1Swenshuai.xi                     case Audio_DEC_AC3:         eAudioFormat = MSAPI_AUD_DVB_AC3;         break;
5155*53ee8cc1Swenshuai.xi                     case Audio_DEC_AC3P:        eAudioFormat = MSAPI_AUD_DVB_AC3P;        break;
5156*53ee8cc1Swenshuai.xi                     case Audio_DEC_AAC_LC:
5157*53ee8cc1Swenshuai.xi                     case Audio_DEC_HEAAC_V1:
5158*53ee8cc1Swenshuai.xi                     case Audio_DEC_HEAAC_V2:    eAudioFormat = MSAPI_AUD_DVB_AAC;         break;
5159*53ee8cc1Swenshuai.xi                     case Audio_DEC_DOLBYPULSE:  eAudioFormat = MSAPI_AUD_DVB_MS10_DDT;    break;
5160*53ee8cc1Swenshuai.xi                     case Audio_DEC_WMA:         eAudioFormat = MSAPI_AUD_DVB_WMA;         break;
5161*53ee8cc1Swenshuai.xi                     case Audio_DEC_WMAPRO:      eAudioFormat = MSAPI_AUD_DVB_WMA_PRO;     break;
5162*53ee8cc1Swenshuai.xi                     case Audio_DEC_RA8:         eAudioFormat = MSAPI_AUD_DVB_RA8LBR;      break;
5163*53ee8cc1Swenshuai.xi                     case Audio_DEC_DTS:         eAudioFormat = MSAPI_AUD_DVB_DTS;         break;
5164*53ee8cc1Swenshuai.xi                     case Audio_DEC_FLAC:        eAudioFormat = MSAPI_AUD_DVB_FLAC;        break;
5165*53ee8cc1Swenshuai.xi                     case Audio_DEC_VORBIS:      eAudioFormat = MSAPI_AUD_DVB_VORBIS;      break;
5166*53ee8cc1Swenshuai.xi                     case Audio_DEC_AMR_NB:      eAudioFormat = MSAPI_AUD_DVB_AMR_NB;      break;
5167*53ee8cc1Swenshuai.xi                     case Audio_DEC_AMR_WB:      eAudioFormat = MSAPI_AUD_DVB_AMR_WB;      break;
5168*53ee8cc1Swenshuai.xi                     case Audio_DEC_DRA:         eAudioFormat = MSAPI_AUD_DVB_DRA;         break;
5169*53ee8cc1Swenshuai.xi                     case Audio_DEC_DTSLBR:      eAudioFormat = MSAPI_AUD_DVB_DTSLBR;      break;
5170*53ee8cc1Swenshuai.xi                     case Audio_DEC_KTV:
5171*53ee8cc1Swenshuai.xi                     case Audio_DEC_KTV2:
5172*53ee8cc1Swenshuai.xi                     case Audio_DEC_Dolby_TrueHD_Bypass_R2:      eAudioFormat = MSAPI_AUD_DVB_DolbyTrueHDBypass;   break;
5173*53ee8cc1Swenshuai.xi                     case Audio_DEC_DTS_HD_ADO_R2:               eAudioFormat = MSAPI_AUD_DVB_DTSHDADO;             break;
5174*53ee8cc1Swenshuai.xi                     default:                    eAudioFormat = MSAPI_AUD_DVB_INVALID;     break;
5175*53ee8cc1Swenshuai.xi                 }
5176*53ee8cc1Swenshuai.xi                 bRet = HAL_AUDIO_SetSystem2(DecId, eAudioFormat);
5177*53ee8cc1Swenshuai.xi                 if ( bRet == TRUE )
5178*53ee8cc1Swenshuai.xi                 {
5179*53ee8cc1Swenshuai.xi                     g_AudioVars2->AudioDecStatus[DecId].bConnect = TRUE;
5180*53ee8cc1Swenshuai.xi                     g_AudioVars2->AudioDecStatus[DecId].eSourceType = E_AUDIO_INFO_MM_IN;
5181*53ee8cc1Swenshuai.xi                     g_AudioVars2->AudioDecStatus[DecId].eAudFormat =(En_DVB_decSystemType) eAudioFormat;
5182*53ee8cc1Swenshuai.xi 
5183*53ee8cc1Swenshuai.xi                     /* expect used this path is OMX MM, so need to setup input source path to 0x82 */
5184*53ee8cc1Swenshuai.xi                     HAL_AUDIO_SetInputPath(AUDIO_DSP1_DVB_INPUT, AUDIO_PATH_4);
5185*53ee8cc1Swenshuai.xi                 }
5186*53ee8cc1Swenshuai.xi             }
5187*53ee8cc1Swenshuai.xi             else
5188*53ee8cc1Swenshuai.xi             {
5189*53ee8cc1Swenshuai.xi                 HALMAD_ERROR ("%s: DecId %d Audio Type (0x%08X) not Support !!\r\n", __FUNCTION__, DecId, g_AudioVars2->AudioDecStatus[DecId].eAudFormat );
5190*53ee8cc1Swenshuai.xi                 bRet = FALSE;
5191*53ee8cc1Swenshuai.xi             }
5192*53ee8cc1Swenshuai.xi 
5193*53ee8cc1Swenshuai.xi             OS_RELEASE_MUTEX(_s32MutexLoadCode);
5194*53ee8cc1Swenshuai.xi 
5195*53ee8cc1Swenshuai.xi             break;
5196*53ee8cc1Swenshuai.xi         }
5197*53ee8cc1Swenshuai.xi 
5198*53ee8cc1Swenshuai.xi         case Audio_ParamType_FreeDecoder:
5199*53ee8cc1Swenshuai.xi 
5200*53ee8cc1Swenshuai.xi             OS_OBTAIN_MUTEX(_s32MutexLoadCode, MSOS_WAIT_FOREVER);
5201*53ee8cc1Swenshuai.xi 
5202*53ee8cc1Swenshuai.xi             if ( g_AudioVars2->AudioDecStatus[DecId].bConnect == TRUE )
5203*53ee8cc1Swenshuai.xi             {
5204*53ee8cc1Swenshuai.xi                 if ((g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_MM_IN) ||
5205*53ee8cc1Swenshuai.xi                     (g_AudioVars2->AudioDecStatus[DecId].eSourceType == E_AUDIO_INFO_GAME_IN))
5206*53ee8cc1Swenshuai.xi             {
5207*53ee8cc1Swenshuai.xi                     memset(&g_AudioVars2->AudioDecStatus[DecId],  0, sizeof(AudioDecStatus_t));
5208*53ee8cc1Swenshuai.xi                     if ( DecId == AU_DEC_ID1 )
5209*53ee8cc1Swenshuai.xi                     {
5210*53ee8cc1Swenshuai.xi                         g_AudioVars2->g_DspCodeType = AU_DVB_NONE;
5211*53ee8cc1Swenshuai.xi                     }
5212*53ee8cc1Swenshuai.xi                     else if ( DecId == AU_DEC_ID3 )
5213*53ee8cc1Swenshuai.xi                     {
5214*53ee8cc1Swenshuai.xi                         g_AudioVars2->g_DspCodeType = AU_DVB_NONE;
5215*53ee8cc1Swenshuai.xi                     }
5216*53ee8cc1Swenshuai.xi                 }
5217*53ee8cc1Swenshuai.xi                 else
5218*53ee8cc1Swenshuai.xi                 {
5219*53ee8cc1Swenshuai.xi                     HALMAD_ERROR ("%s: DecId %d NOT used by ANDROID MM, used by %d !!\r\n", __FUNCTION__, DecId, g_AudioVars2->AudioDecStatus[DecId].eSourceType);
5220*53ee8cc1Swenshuai.xi                 }
5221*53ee8cc1Swenshuai.xi             }
5222*53ee8cc1Swenshuai.xi             else
5223*53ee8cc1Swenshuai.xi             {
5224*53ee8cc1Swenshuai.xi                 HALMAD_ERROR ("%s: DecId %d NOT in USED !!\r\n", __FUNCTION__, DecId);
5225*53ee8cc1Swenshuai.xi                 bRet = FALSE;
5226*53ee8cc1Swenshuai.xi             }
5227*53ee8cc1Swenshuai.xi 
5228*53ee8cc1Swenshuai.xi             OS_RELEASE_MUTEX(_s32MutexLoadCode);
5229*53ee8cc1Swenshuai.xi 
5230*53ee8cc1Swenshuai.xi             break;
5231*53ee8cc1Swenshuai.xi 
5232*53ee8cc1Swenshuai.xi         case Audio_ParamType_omx_spdif_mode:
5233*53ee8cc1Swenshuai.xi 
5234*53ee8cc1Swenshuai.xi             if ( adec_id < ADEC3 )
5235*53ee8cc1Swenshuai.xi             {
5236*53ee8cc1Swenshuai.xi                 MS_U32 u32SpdifParam;
5237*53ee8cc1Swenshuai.xi                 Audio_OMX_SPDIF_Param eMode;
5238*53ee8cc1Swenshuai.xi                 u32SpdifParam = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_OMX_SPDIF_CTRL, adec_id, 0);
5239*53ee8cc1Swenshuai.xi                 eMode = (Audio_OMX_SPDIF_Param) Param;
5240*53ee8cc1Swenshuai.xi                 if ( eMode == Audio_OMX_SPDIF_ON )
5241*53ee8cc1Swenshuai.xi                 {
5242*53ee8cc1Swenshuai.xi                     u32SpdifParam |= 0x00000001;
5243*53ee8cc1Swenshuai.xi                 }
5244*53ee8cc1Swenshuai.xi                 else
5245*53ee8cc1Swenshuai.xi                 {
5246*53ee8cc1Swenshuai.xi                     u32SpdifParam &= 0xFFFFFFFE;
5247*53ee8cc1Swenshuai.xi                 }
5248*53ee8cc1Swenshuai.xi                 //HALMAD_ERROR ("%s: DecId %d SpdifParam 0x%08X !!\r\n", __FUNCTION__, DecId, u32SpdifParam);
5249*53ee8cc1Swenshuai.xi                 if ( (bRet = HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_OMX_SPDIF_CTRL, adec_id, u32SpdifParam, 0)) != TRUE )
5250*53ee8cc1Swenshuai.xi                 {
5251*53ee8cc1Swenshuai.xi                     HALMAD_ERROR ("%s: DecId %d Fail to switch SPDIF mode to %s !!\r\n", __FUNCTION__, DecId, (eMode == Audio_OMX_SPDIF_ON ? "ON" : "OFF"));
5252*53ee8cc1Swenshuai.xi                 }
5253*53ee8cc1Swenshuai.xi             }
5254*53ee8cc1Swenshuai.xi             else
5255*53ee8cc1Swenshuai.xi             {
5256*53ee8cc1Swenshuai.xi                 HALMAD_ERROR ("%s: Param Type %d DecId %d Un-Support Now !!\r\n", __FUNCTION__, Audio_ParamType_omx_spdif_mode, DecId);
5257*53ee8cc1Swenshuai.xi                 bRet = FALSE;
5258*53ee8cc1Swenshuai.xi             }
5259*53ee8cc1Swenshuai.xi             break;
5260*53ee8cc1Swenshuai.xi 
5261*53ee8cc1Swenshuai.xi         case Audio_ParamType_omx_spdif_play:
5262*53ee8cc1Swenshuai.xi 
5263*53ee8cc1Swenshuai.xi             if ( adec_id < ADEC3 )
5264*53ee8cc1Swenshuai.xi             {
5265*53ee8cc1Swenshuai.xi                 MS_U32 u32SpdifParam;
5266*53ee8cc1Swenshuai.xi                 Audio_OMX_SPDIF_Param eMode;
5267*53ee8cc1Swenshuai.xi                 u32SpdifParam = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_OMX_SPDIF_CTRL, adec_id, 0);
5268*53ee8cc1Swenshuai.xi                 eMode = (Audio_OMX_SPDIF_Param) Param;
5269*53ee8cc1Swenshuai.xi                 if ( eMode == Audio_OMX_SPDIF_PLAY )
5270*53ee8cc1Swenshuai.xi                 {
5271*53ee8cc1Swenshuai.xi                     u32SpdifParam |= 0x00000002;
5272*53ee8cc1Swenshuai.xi                 }
5273*53ee8cc1Swenshuai.xi                 else
5274*53ee8cc1Swenshuai.xi                 {
5275*53ee8cc1Swenshuai.xi                     u32SpdifParam &= 0xFFFFFFFD;
5276*53ee8cc1Swenshuai.xi                 }
5277*53ee8cc1Swenshuai.xi                 //HALMAD_ERROR ("%s: DecId %d SpdifParam 0x%08X !!\r\n", __FUNCTION__, DecId, u32SpdifParam);
5278*53ee8cc1Swenshuai.xi                 if ( (bRet = HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_OMX_SPDIF_CTRL, adec_id, u32SpdifParam, 0)) != TRUE )
5279*53ee8cc1Swenshuai.xi                 {
5280*53ee8cc1Swenshuai.xi                     HALMAD_ERROR ("%s: DecId %d Fail to switch SPDIF mode to %s !!\r\n", __FUNCTION__, DecId, (eMode == Audio_OMX_SPDIF_ON ? "ON" : "OFF"));
5281*53ee8cc1Swenshuai.xi                 }
5282*53ee8cc1Swenshuai.xi             }
5283*53ee8cc1Swenshuai.xi             else
5284*53ee8cc1Swenshuai.xi             {
5285*53ee8cc1Swenshuai.xi                 HALMAD_ERROR ("%s: Param Type %d DecId %d Un-Support Now !!\r\n", __FUNCTION__, Audio_ParamType_omx_spdif_play, DecId);
5286*53ee8cc1Swenshuai.xi                 bRet = FALSE;
5287*53ee8cc1Swenshuai.xi             }
5288*53ee8cc1Swenshuai.xi             break;
5289*53ee8cc1Swenshuai.xi 
5290*53ee8cc1Swenshuai.xi         case Audio_ParamType_omx_spdif_pcmLevel:
5291*53ee8cc1Swenshuai.xi 
5292*53ee8cc1Swenshuai.xi             if ( adec_id < ADEC3 )
5293*53ee8cc1Swenshuai.xi             {
5294*53ee8cc1Swenshuai.xi                 if ( (bRet = HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_OMX_SPDIF_PCM_LEVEL, adec_id, Param, 0)) != TRUE )
5295*53ee8cc1Swenshuai.xi                 {
5296*53ee8cc1Swenshuai.xi                     HALMAD_ERROR ("%s: DecId %d Fail to setup PCM Level !!\r\n", __FUNCTION__, DecId);
5297*53ee8cc1Swenshuai.xi                 }
5298*53ee8cc1Swenshuai.xi             }
5299*53ee8cc1Swenshuai.xi             else
5300*53ee8cc1Swenshuai.xi             {
5301*53ee8cc1Swenshuai.xi                 HALMAD_ERROR ("%s: Param Type %d DecId %d Un-Support Now !!\r\n", __FUNCTION__, Audio_ParamType_omx_spdif_pcmLevel, DecId);
5302*53ee8cc1Swenshuai.xi                 bRet = FALSE;
5303*53ee8cc1Swenshuai.xi             }
5304*53ee8cc1Swenshuai.xi             break;
5305*53ee8cc1Swenshuai.xi 
5306*53ee8cc1Swenshuai.xi         case Audio_ParamType_trueHD_bypass_enable:
5307*53ee8cc1Swenshuai.xi             if(Param)
5308*53ee8cc1Swenshuai.xi                 g_AudioVars2->g_hbr_bypass_enable = true;
5309*53ee8cc1Swenshuai.xi             else
5310*53ee8cc1Swenshuai.xi                 g_AudioVars2->g_hbr_bypass_enable = false;
5311*53ee8cc1Swenshuai.xi             break;
5312*53ee8cc1Swenshuai.xi 
5313*53ee8cc1Swenshuai.xi         /* TVOS2.0 DTV */
5314*53ee8cc1Swenshuai.xi         case Audio_ParamType_tvos2_PCM_rdPtr:
5315*53ee8cc1Swenshuai.xi             Param = Param - (HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + ASND_DSP_DDR_SIZE + OFFSET_PCM1_DRAM_ADDR);
5316*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_TVOS2_PCM_RDPTR, adec_id, Param, 0);
5317*53ee8cc1Swenshuai.xi             break;
5318*53ee8cc1Swenshuai.xi 
5319*53ee8cc1Swenshuai.xi         case Audio_ParamType_tvos2_DTV_SyncType:
5320*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_TVOS2_DTV_SYNCTYPE, adec_id, Param, 0);
5321*53ee8cc1Swenshuai.xi             break;
5322*53ee8cc1Swenshuai.xi 
5323*53ee8cc1Swenshuai.xi         case Audio_ParamType_Audio_AAC_mm_single_frame_mode:
5324*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_DOLBY_MUL_FRAME_HEADER, adec_id, Param, 0);
5325*53ee8cc1Swenshuai.xi             break;
5326*53ee8cc1Swenshuai.xi 
5327*53ee8cc1Swenshuai.xi         case Audio_ParamType_Multi_Channel:
5328*53ee8cc1Swenshuai.xi         {
5329*53ee8cc1Swenshuai.xi             if ((Param == TRUE) || (Param == FALSE))
5330*53ee8cc1Swenshuai.xi             {
5331*53ee8cc1Swenshuai.xi                 HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_MULTI_CHANNEL, adec_id, Param, 0);
5332*53ee8cc1Swenshuai.xi 
5333*53ee8cc1Swenshuai.xi                 HALMAD_ERROR ("%s: DecId(%d) %s Multi-Channel\n", __FUNCTION__, adec_id, Param?"Enable":"disable");
5334*53ee8cc1Swenshuai.xi             }
5335*53ee8cc1Swenshuai.xi             else
5336*53ee8cc1Swenshuai.xi             {
5337*53ee8cc1Swenshuai.xi                 HALMAD_ERROR ("%s: Error! Invalid value(%u) to enable/disable Multi-Channel\n", __FUNCTION__, Param);
5338*53ee8cc1Swenshuai.xi             }
5339*53ee8cc1Swenshuai.xi 
5340*53ee8cc1Swenshuai.xi             break;
5341*53ee8cc1Swenshuai.xi         }
5342*53ee8cc1Swenshuai.xi 
5343*53ee8cc1Swenshuai.xi         case Audio_ParamType_CommonCmd:
5344*53ee8cc1Swenshuai.xi             HAL_MAD_CommonCmd((AUDIO_COMMON_CMD_t *)Param);
5345*53ee8cc1Swenshuai.xi             break;
5346*53ee8cc1Swenshuai.xi 
5347*53ee8cc1Swenshuai.xi         case Audio_ParamType_SetEDIDOutputInterface:
5348*53ee8cc1Swenshuai.xi         {
5349*53ee8cc1Swenshuai.xi             DIGITAL_OUTPUT_TYPE eEdidOutputInterfaceType = (DIGITAL_OUTPUT_TYPE)Param;
5350*53ee8cc1Swenshuai.xi             MS_BOOL bHdmiMuteStatus = (((HAL_AUDIO_ReadByte(M2S_MBOX_HDMI_SETTING+1) & 0x80) > 0) ? TRUE : FALSE);
5351*53ee8cc1Swenshuai.xi 
5352*53ee8cc1Swenshuai.xi             if (g_AudioVars2->g_EdidOutputInterfaceType == eEdidOutputInterfaceType)
5353*53ee8cc1Swenshuai.xi             {
5354*53ee8cc1Swenshuai.xi                 //HALMAD_ERROR ("%s: same EDID Output Interface Type %u, so do nothing here\n", __FUNCTION__, eEdidOutputInterfaceType);
5355*53ee8cc1Swenshuai.xi                 break;
5356*53ee8cc1Swenshuai.xi             }
5357*53ee8cc1Swenshuai.xi 
5358*53ee8cc1Swenshuai.xi             g_AudioVars2->g_EdidOutputInterfaceType = eEdidOutputInterfaceType;
5359*53ee8cc1Swenshuai.xi 
5360*53ee8cc1Swenshuai.xi             /* mute related output */
5361*53ee8cc1Swenshuai.xi             HAL_SOUND_SetMute(AUDIO_T3_PATH_SPDIF, TRUE);
5362*53ee8cc1Swenshuai.xi             HAL_SOUND_SetMute(AUDIO_T3_PATH_HDMI, TRUE);
5363*53ee8cc1Swenshuai.xi 
5364*53ee8cc1Swenshuai.xi             /* apply settings */
5365*53ee8cc1Swenshuai.xi             bRet = HAL_AUDIO_SetEDIDOutputInterface(eEdidOutputInterfaceType);
5366*53ee8cc1Swenshuai.xi 
5367*53ee8cc1Swenshuai.xi             /*
5368*53ee8cc1Swenshuai.xi              * Per STB's requirement :
5369*53ee8cc1Swenshuai.xi              * 1. if HDMI output is configured as ARC, then SPDIF goes with ... ????
5370*53ee8cc1Swenshuai.xi              * 2. if HDMI output is configure as regular TX, then SPDIF goes with ... ????
5371*53ee8cc1Swenshuai.xi              */
5372*53ee8cc1Swenshuai.xi             if (bRet == TRUE)
5373*53ee8cc1Swenshuai.xi             {
5374*53ee8cc1Swenshuai.xi                 MS_BOOL bEdidOutViaArc = g_AudioVars2->g_EdidOutViaArc;
5375*53ee8cc1Swenshuai.xi 
5376*53ee8cc1Swenshuai.xi                 if (eEdidOutputInterfaceType == DIGITAL_HDMI_ARC_OUTPUT)
5377*53ee8cc1Swenshuai.xi                 {
5378*53ee8cc1Swenshuai.xi                     bEdidOutViaArc = TRUE;
5379*53ee8cc1Swenshuai.xi                 }
5380*53ee8cc1Swenshuai.xi                 else if (eEdidOutputInterfaceType == DIGITAL_HDMI_OUTPUT)
5381*53ee8cc1Swenshuai.xi                 {
5382*53ee8cc1Swenshuai.xi                     bEdidOutViaArc = FALSE;
5383*53ee8cc1Swenshuai.xi                 }
5384*53ee8cc1Swenshuai.xi 
5385*53ee8cc1Swenshuai.xi                 /* apply current settings if neccessary */
5386*53ee8cc1Swenshuai.xi                 if (g_AudioVars2->g_EdidOutViaArc != bEdidOutViaArc)
5387*53ee8cc1Swenshuai.xi                 {
5388*53ee8cc1Swenshuai.xi                     g_AudioVars2->g_EdidOutViaArc = bEdidOutViaArc;
5389*53ee8cc1Swenshuai.xi                     HAL_MAD_Monitor_DDPlus_SPDIF_Rate();
5390*53ee8cc1Swenshuai.xi                 }
5391*53ee8cc1Swenshuai.xi             }
5392*53ee8cc1Swenshuai.xi 
5393*53ee8cc1Swenshuai.xi             /* unmute related output */
5394*53ee8cc1Swenshuai.xi             HAL_SOUND_SetMute(AUDIO_T3_PATH_SPDIF, g_AudioVars2->g_SPDIF_MuteStatus);
5395*53ee8cc1Swenshuai.xi             HAL_SOUND_SetMute(AUDIO_T3_PATH_HDMI, bHdmiMuteStatus);
5396*53ee8cc1Swenshuai.xi 
5397*53ee8cc1Swenshuai.xi             break;
5398*53ee8cc1Swenshuai.xi         }
5399*53ee8cc1Swenshuai.xi 
5400*53ee8cc1Swenshuai.xi         /* not supported cmd */
5401*53ee8cc1Swenshuai.xi         default:
5402*53ee8cc1Swenshuai.xi             HALMAD_ERROR ("%s: infoType[%x] not Supported\n", __FUNCTION__, paramType);
5403*53ee8cc1Swenshuai.xi             bRet = FALSE;
5404*53ee8cc1Swenshuai.xi             break;
5405*53ee8cc1Swenshuai.xi     }
5406*53ee8cc1Swenshuai.xi 
5407*53ee8cc1Swenshuai.xi     return bRet;
5408*53ee8cc1Swenshuai.xi }
5409*53ee8cc1Swenshuai.xi 
HAL_MAD_GetAudioInfo2(AUDIO_DEC_ID DecId,Audio_InfoType infoType,void * pInfo)5410*53ee8cc1Swenshuai.xi MS_BOOL HAL_MAD_GetAudioInfo2( AUDIO_DEC_ID DecId, Audio_InfoType infoType, void * pInfo )
5411*53ee8cc1Swenshuai.xi {
5412*53ee8cc1Swenshuai.xi     MS_BOOL result = TRUE;
5413*53ee8cc1Swenshuai.xi     Audio_id adec_id = HAL_AUDIO_Convert_DecId_to_ADECId(DecId);
5414*53ee8cc1Swenshuai.xi 
5415*53ee8cc1Swenshuai.xi     HALMAD_CHECK_SHM_INIT;
5416*53ee8cc1Swenshuai.xi 
5417*53ee8cc1Swenshuai.xi     switch ( infoType )
5418*53ee8cc1Swenshuai.xi     {
5419*53ee8cc1Swenshuai.xi         case Audio_infoType_capability:
5420*53ee8cc1Swenshuai.xi         {
5421*53ee8cc1Swenshuai.xi             MMA_AudioType * pA_Type = (MMA_AudioType *) pInfo;
5422*53ee8cc1Swenshuai.xi             *pA_Type = _GetAudioCaps(DecId);
5423*53ee8cc1Swenshuai.xi             break;
5424*53ee8cc1Swenshuai.xi         }
5425*53ee8cc1Swenshuai.xi 
5426*53ee8cc1Swenshuai.xi         case Audio_infoType_DecStatus:                     //no change
5427*53ee8cc1Swenshuai.xi         {
5428*53ee8cc1Swenshuai.xi             MS_U8 * pResult = (MS_U8 *) pInfo;
5429*53ee8cc1Swenshuai.xi             if ( HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DEC_STAUS, adec_id) != 0 )
5430*53ee8cc1Swenshuai.xi                 {
5431*53ee8cc1Swenshuai.xi                     *pResult = 1;
5432*53ee8cc1Swenshuai.xi                 }
5433*53ee8cc1Swenshuai.xi                 else
5434*53ee8cc1Swenshuai.xi                 {
5435*53ee8cc1Swenshuai.xi                     *pResult = 0;
5436*53ee8cc1Swenshuai.xi                 }
5437*53ee8cc1Swenshuai.xi             break;
5438*53ee8cc1Swenshuai.xi         }
5439*53ee8cc1Swenshuai.xi 
5440*53ee8cc1Swenshuai.xi         case Audio_infoType_AudioSyncStatus:
5441*53ee8cc1Swenshuai.xi         {
5442*53ee8cc1Swenshuai.xi             MS_U8 * pResult = (MS_U8 *) pInfo;
5443*53ee8cc1Swenshuai.xi             if ( DecId == AU_DEC_ID3 )
5444*53ee8cc1Swenshuai.xi             {
5445*53ee8cc1Swenshuai.xi                 if(HAL_AUDIO_AbsReadByte(REG_R2_DECODE2_CMD)&0x80)
5446*53ee8cc1Swenshuai.xi                     *pResult = 0;  // Free-run
5447*53ee8cc1Swenshuai.xi                 else
5448*53ee8cc1Swenshuai.xi                     *pResult = 1;  // AV-sync
5449*53ee8cc1Swenshuai.xi             }
5450*53ee8cc1Swenshuai.xi             else
5451*53ee8cc1Swenshuai.xi             {
5452*53ee8cc1Swenshuai.xi                 if(HAL_AUDIO_AbsReadByte(REG_R2_DECODE1_CMD)&0x80)
5453*53ee8cc1Swenshuai.xi                     *pResult = 0;  // Free-run
5454*53ee8cc1Swenshuai.xi                 else
5455*53ee8cc1Swenshuai.xi                     *pResult = 1;  // AV-sync
5456*53ee8cc1Swenshuai.xi             }
5457*53ee8cc1Swenshuai.xi             break;
5458*53ee8cc1Swenshuai.xi         }
5459*53ee8cc1Swenshuai.xi 
5460*53ee8cc1Swenshuai.xi         case Audio_infoType_SampleRate:                    //HAL_MAD_GetMadSamplingRate
5461*53ee8cc1Swenshuai.xi         {
5462*53ee8cc1Swenshuai.xi             MS_U32 fs_type = 0xFFFFFFFF;
5463*53ee8cc1Swenshuai.xi             AUDIO_FS_TYPE * pFS_Type = (AUDIO_FS_TYPE *) pInfo;
5464*53ee8cc1Swenshuai.xi 
5465*53ee8cc1Swenshuai.xi             fs_type = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, adec_id);
5466*53ee8cc1Swenshuai.xi 
5467*53ee8cc1Swenshuai.xi             *pFS_Type = AUDIO_FS_NONE;
5468*53ee8cc1Swenshuai.xi 
5469*53ee8cc1Swenshuai.xi             switch ( fs_type )
5470*53ee8cc1Swenshuai.xi             {
5471*53ee8cc1Swenshuai.xi                 case 8000:   *pFS_Type = AUDIO_FS_8KHZ;   break;
5472*53ee8cc1Swenshuai.xi                 case 11025:  *pFS_Type = AUDIO_FS_11KHZ;  break;
5473*53ee8cc1Swenshuai.xi                 case 12000:  *pFS_Type = AUDIO_FS_12KHZ;  break;
5474*53ee8cc1Swenshuai.xi                 case 16000:  *pFS_Type = AUDIO_FS_16KHZ;  break;
5475*53ee8cc1Swenshuai.xi                 case 22050:  *pFS_Type = AUDIO_FS_22KHZ;  break;
5476*53ee8cc1Swenshuai.xi                 case 24000:  *pFS_Type = AUDIO_FS_24KHZ;  break;
5477*53ee8cc1Swenshuai.xi                 case 32000:  *pFS_Type = AUDIO_FS_32KHZ;  break;
5478*53ee8cc1Swenshuai.xi                 case 44100:  *pFS_Type = AUDIO_FS_44KHZ;  break;
5479*53ee8cc1Swenshuai.xi                 case 48000:  *pFS_Type = AUDIO_FS_48KHZ;  break;
5480*53ee8cc1Swenshuai.xi                 case 64000:  *pFS_Type = AUDIO_FS_64KHZ;  break;
5481*53ee8cc1Swenshuai.xi                 case 88200:  *pFS_Type = AUDIO_FS_88KHZ;  break;
5482*53ee8cc1Swenshuai.xi                 case 96000:  *pFS_Type = AUDIO_FS_96KHZ;  break;
5483*53ee8cc1Swenshuai.xi                 default:     *pFS_Type = AUDIO_FS_NONE;   break;
5484*53ee8cc1Swenshuai.xi             }
5485*53ee8cc1Swenshuai.xi             break;
5486*53ee8cc1Swenshuai.xi         }
5487*53ee8cc1Swenshuai.xi 
5488*53ee8cc1Swenshuai.xi         case Audio_infoType_SoundMode:
5489*53ee8cc1Swenshuai.xi         {
5490*53ee8cc1Swenshuai.xi             MS_U16 * pRet = (MS_U16 *) pInfo;
5491*53ee8cc1Swenshuai.xi             *pRet = HAL_AUDIO_ReadReg(REG_MB_MODE_SELECT) & 0x3;
5492*53ee8cc1Swenshuai.xi 
5493*53ee8cc1Swenshuai.xi             break;
5494*53ee8cc1Swenshuai.xi         }
5495*53ee8cc1Swenshuai.xi 
5496*53ee8cc1Swenshuai.xi         case Audio_infoType_okFrmCnt:
5497*53ee8cc1Swenshuai.xi         {
5498*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5499*53ee8cc1Swenshuai.xi             *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_OK_FRMCNT, adec_id);
5500*53ee8cc1Swenshuai.xi 
5501*53ee8cc1Swenshuai.xi             break;
5502*53ee8cc1Swenshuai.xi         }
5503*53ee8cc1Swenshuai.xi 
5504*53ee8cc1Swenshuai.xi         case Audio_infoType_errFrmCnt:
5505*53ee8cc1Swenshuai.xi         {
5506*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5507*53ee8cc1Swenshuai.xi             *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ERR_FRMCNT, adec_id);
5508*53ee8cc1Swenshuai.xi 
5509*53ee8cc1Swenshuai.xi             break;
5510*53ee8cc1Swenshuai.xi         }
5511*53ee8cc1Swenshuai.xi 
5512*53ee8cc1Swenshuai.xi         case Audio_infoType_1ms_timeStamp:
5513*53ee8cc1Swenshuai.xi         {
5514*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5515*53ee8cc1Swenshuai.xi 
5516*53ee8cc1Swenshuai.xi             MS_U32  pts;
5517*53ee8cc1Swenshuai.xi             pts = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_CURR_PTS, adec_id);
5518*53ee8cc1Swenshuai.xi             *pRet = pts/45;
5519*53ee8cc1Swenshuai.xi 
5520*53ee8cc1Swenshuai.xi             break;
5521*53ee8cc1Swenshuai.xi         }
5522*53ee8cc1Swenshuai.xi 
5523*53ee8cc1Swenshuai.xi         case Audio_infoType_33bit_PTS:
5524*53ee8cc1Swenshuai.xi         {
5525*53ee8cc1Swenshuai.xi             MS_U64 * pRet = (MS_U64 *) pInfo;
5526*53ee8cc1Swenshuai.xi 
5527*53ee8cc1Swenshuai.xi             if(adec_id >= MAX_ADEC)    // SHM only has 2 mem
5528*53ee8cc1Swenshuai.xi             {
5529*53ee8cc1Swenshuai.xi                 HALMAD_ERROR ("%s: DEC_ID  not Supported\n", __FUNCTION__ );
5530*53ee8cc1Swenshuai.xi                 return FALSE;
5531*53ee8cc1Swenshuai.xi             }
5532*53ee8cc1Swenshuai.xi 
5533*53ee8cc1Swenshuai.xi             *pRet = ((MS_U64)HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_CURR_PTS, adec_id))<<1;
5534*53ee8cc1Swenshuai.xi             break;
5535*53ee8cc1Swenshuai.xi         }
5536*53ee8cc1Swenshuai.xi         #if 0
5537*53ee8cc1Swenshuai.xi         case Audio_infoType_33bit_latestPTS:
5538*53ee8cc1Swenshuai.xi         {
5539*53ee8cc1Swenshuai.xi             MS_U64 * pRet = (MS_U64 *) pInfo;
5540*53ee8cc1Swenshuai.xi 
5541*53ee8cc1Swenshuai.xi             if(adec_id >= MAX_ADEC)    // SHM only has 2 mem
5542*53ee8cc1Swenshuai.xi             {
5543*53ee8cc1Swenshuai.xi                 HALMAD_ERROR ("%s: DEC_ID  not Supported\n", __FUNCTION__ );
5544*53ee8cc1Swenshuai.xi                 return FALSE;
5545*53ee8cc1Swenshuai.xi             }
5546*53ee8cc1Swenshuai.xi 
5547*53ee8cc1Swenshuai.xi             *pRet = ((MS_U64)HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PTS, adec_id))<<1;
5548*53ee8cc1Swenshuai.xi             break;
5549*53ee8cc1Swenshuai.xi         }
5550*53ee8cc1Swenshuai.xi         #endif
5551*53ee8cc1Swenshuai.xi         case Audio_infoType_BufferAddr:
5552*53ee8cc1Swenshuai.xi         {
5553*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5554*53ee8cc1Swenshuai.xi             if ( DecId == AU_DEC_ID3 )
5555*53ee8cc1Swenshuai.xi             {
5556*53ee8cc1Swenshuai.xi                 *pRet = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, 0) + OFFSET_ES3_DRAM_ADDR;
5557*53ee8cc1Swenshuai.xi             }
5558*53ee8cc1Swenshuai.xi             else
5559*53ee8cc1Swenshuai.xi             {
5560*53ee8cc1Swenshuai.xi                 *pRet = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, 0) + OFFSET_ES1_DRAM_ADDR;
5561*53ee8cc1Swenshuai.xi             }
5562*53ee8cc1Swenshuai.xi 
5563*53ee8cc1Swenshuai.xi             break;
5564*53ee8cc1Swenshuai.xi         }
5565*53ee8cc1Swenshuai.xi 
5566*53ee8cc1Swenshuai.xi         case Audio_infoType_BufferSize:
5567*53ee8cc1Swenshuai.xi         {
5568*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5569*53ee8cc1Swenshuai.xi             *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, adec_id);
5570*53ee8cc1Swenshuai.xi 
5571*53ee8cc1Swenshuai.xi             break;
5572*53ee8cc1Swenshuai.xi         }
5573*53ee8cc1Swenshuai.xi 
5574*53ee8cc1Swenshuai.xi         case Audio_infoType_esBuf_req:
5575*53ee8cc1Swenshuai.xi         {
5576*53ee8cc1Swenshuai.xi             MS_BOOL bFlag = FALSE;
5577*53ee8cc1Swenshuai.xi 
5578*53ee8cc1Swenshuai.xi             if ( DecId == AU_DEC_ID3 )
5579*53ee8cc1Swenshuai.xi             {
5580*53ee8cc1Swenshuai.xi                 bFlag = HAL_AUDIO_GetPlayFileFlag(DSP_SE);
5581*53ee8cc1Swenshuai.xi             }
5582*53ee8cc1Swenshuai.xi             else
5583*53ee8cc1Swenshuai.xi             {
5584*53ee8cc1Swenshuai.xi                 bFlag = HAL_AUDIO_GetPlayFileFlag(DSP_DEC);
5585*53ee8cc1Swenshuai.xi             }
5586*53ee8cc1Swenshuai.xi 
5587*53ee8cc1Swenshuai.xi             if ( bFlag )
5588*53ee8cc1Swenshuai.xi             {
5589*53ee8cc1Swenshuai.xi                 Audio_MM_Data_Request * pDataReq = (Audio_MM_Data_Request *) pInfo;
5590*53ee8cc1Swenshuai.xi 
5591*53ee8cc1Swenshuai.xi                 if ( DecId == AU_DEC_ID3 )
5592*53ee8cc1Swenshuai.xi                 {
5593*53ee8cc1Swenshuai.xi                     pDataReq->U32WrtBytes = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, ADEC2);
5594*53ee8cc1Swenshuai.xi                     pDataReq->U32WrtAddr  = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC2, 0) + OFFSET_ES3_DRAM_ADDR + HAL_AUDIO_GetDspMadBaseAddr(DSP_SE);
5595*53ee8cc1Swenshuai.xi                 }
5596*53ee8cc1Swenshuai.xi                 else
5597*53ee8cc1Swenshuai.xi                 {
5598*53ee8cc1Swenshuai.xi                     pDataReq->U32WrtBytes = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_MM_FILE_REQ_SIZE, ADEC1);
5599*53ee8cc1Swenshuai.xi                     pDataReq->U32WrtAddr  = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_ES_WR_PTR, ADEC1, 0) + OFFSET_ES1_DRAM_ADDR + HAL_AUDIO_GetDspMadBaseAddr(DSP_SE);
5600*53ee8cc1Swenshuai.xi                 }
5601*53ee8cc1Swenshuai.xi 
5602*53ee8cc1Swenshuai.xi                 result = TRUE;
5603*53ee8cc1Swenshuai.xi             }
5604*53ee8cc1Swenshuai.xi             else
5605*53ee8cc1Swenshuai.xi             {
5606*53ee8cc1Swenshuai.xi                 result = FALSE;
5607*53ee8cc1Swenshuai.xi             }
5608*53ee8cc1Swenshuai.xi 
5609*53ee8cc1Swenshuai.xi             break;
5610*53ee8cc1Swenshuai.xi         }
5611*53ee8cc1Swenshuai.xi 
5612*53ee8cc1Swenshuai.xi         case Audio_infoType_esBuf_currLevel:
5613*53ee8cc1Swenshuai.xi         {
5614*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5615*53ee8cc1Swenshuai.xi             *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, adec_id);
5616*53ee8cc1Swenshuai.xi 
5617*53ee8cc1Swenshuai.xi             break;
5618*53ee8cc1Swenshuai.xi         }
5619*53ee8cc1Swenshuai.xi 
5620*53ee8cc1Swenshuai.xi         case Audio_infoType_pcmBuf_currLevel:
5621*53ee8cc1Swenshuai.xi         {
5622*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5623*53ee8cc1Swenshuai.xi             *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_DMX_LEVEL, adec_id);
5624*53ee8cc1Swenshuai.xi 
5625*53ee8cc1Swenshuai.xi             break;
5626*53ee8cc1Swenshuai.xi         }
5627*53ee8cc1Swenshuai.xi 
5628*53ee8cc1Swenshuai.xi         case Audio_infoType_get_audio_filter:
5629*53ee8cc1Swenshuai.xi         {
5630*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5631*53ee8cc1Swenshuai.xi             if ( DecId == AU_DEC_ID3 )
5632*53ee8cc1Swenshuai.xi             {
5633*53ee8cc1Swenshuai.xi                 *pRet = (MS_U32) FILTER_TYPE_AUDIO_2;
5634*53ee8cc1Swenshuai.xi             }
5635*53ee8cc1Swenshuai.xi             else if ( DecId == AU_DEC_ID1 )
5636*53ee8cc1Swenshuai.xi             {
5637*53ee8cc1Swenshuai.xi                 *pRet = (MS_U32) FILTER_TYPE_AUDIO_1;
5638*53ee8cc1Swenshuai.xi             }
5639*53ee8cc1Swenshuai.xi             else
5640*53ee8cc1Swenshuai.xi             {
5641*53ee8cc1Swenshuai.xi                 *pRet = (MS_U32) FILTER_TYPE_AUDIO_INVALID;
5642*53ee8cc1Swenshuai.xi             }
5643*53ee8cc1Swenshuai.xi 
5644*53ee8cc1Swenshuai.xi             break;
5645*53ee8cc1Swenshuai.xi         }
5646*53ee8cc1Swenshuai.xi 
5647*53ee8cc1Swenshuai.xi         case Audio_infoType_audio_unsupported:
5648*53ee8cc1Swenshuai.xi             //Currently, it is not used;
5649*53ee8cc1Swenshuai.xi             break;
5650*53ee8cc1Swenshuai.xi 
5651*53ee8cc1Swenshuai.xi 
5652*53ee8cc1Swenshuai.xi         case Audio_infoType_UNI_PCM1_Info:
5653*53ee8cc1Swenshuai.xi         {
5654*53ee8cc1Swenshuai.xi            Audio_MM_PCM_Info * pPCMInfo = (Audio_MM_PCM_Info *) pInfo;
5655*53ee8cc1Swenshuai.xi 
5656*53ee8cc1Swenshuai.xi            if ( HAL_AUDIO_GetUniDecodeFrameCnt(DecId) != g_AudioVars2->u16DecodeFrmCnt[DecId] )
5657*53ee8cc1Swenshuai.xi            {
5658*53ee8cc1Swenshuai.xi                 g_AudioVars2->u16DecodeFrmCnt[DecId] = HAL_AUDIO_GetUniDecodeFrameCnt(DecId);
5659*53ee8cc1Swenshuai.xi 
5660*53ee8cc1Swenshuai.xi                 if ( DecId == AU_DEC_ID3 )
5661*53ee8cc1Swenshuai.xi                 {
5662*53ee8cc1Swenshuai.xi                     pPCMInfo->U32WrtAddr = HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + ASND_DSP_DDR_SIZE + OFFSET_PCM2_DRAM_ADDR+HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_UNI_DECODE_DONE_PCM_ADDR, adec_id);
5663*53ee8cc1Swenshuai.xi                 }
5664*53ee8cc1Swenshuai.xi                 else
5665*53ee8cc1Swenshuai.xi                 {
5666*53ee8cc1Swenshuai.xi                     pPCMInfo->U32WrtAddr = HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + ASND_DSP_DDR_SIZE + OFFSET_PCM1_DRAM_ADDR+ HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_UNI_DECODE_DONE_PCM_ADDR, adec_id);
5667*53ee8cc1Swenshuai.xi                 }
5668*53ee8cc1Swenshuai.xi                 pPCMInfo->U32WrtBytes = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_UNI_DECODE_DONE_PCM_SIZE, adec_id);
5669*53ee8cc1Swenshuai.xi #if OMX_AUDIO_DEBUG
5670*53ee8cc1Swenshuai.xi                 HALMAD_PRINT("\r\n===DecId:%d  Audio_infoType_UNI_PCM1_Info  addr :0x%X     size:0x%X      DecodeFrame=0x%X==========\r\n", (MS_U32)DecId,(MS_U32)pPCMInfo->U32WrtAddr, (MS_U32)pPCMInfo->U32WrtBytes,(MS_U32)g_AudioVars2->u16DecodeFrmCnt[DecId]);
5671*53ee8cc1Swenshuai.xi #endif
5672*53ee8cc1Swenshuai.xi             }
5673*53ee8cc1Swenshuai.xi 
5674*53ee8cc1Swenshuai.xi             pPCMInfo->U32DecodeFrame = g_AudioVars2->u16DecodeFrmCnt[DecId];
5675*53ee8cc1Swenshuai.xi         }
5676*53ee8cc1Swenshuai.xi             break;
5677*53ee8cc1Swenshuai.xi 
5678*53ee8cc1Swenshuai.xi         case Audio_infoType_UNI_PCM3_Level:
5679*53ee8cc1Swenshuai.xi         {
5680*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5681*53ee8cc1Swenshuai.xi             *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PCM_DMX_LEVEL, adec_id);
5682*53ee8cc1Swenshuai.xi             break;
5683*53ee8cc1Swenshuai.xi         }
5684*53ee8cc1Swenshuai.xi 
5685*53ee8cc1Swenshuai.xi         case Audio_infoType_UNI_ES_Level:
5686*53ee8cc1Swenshuai.xi         {
5687*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5688*53ee8cc1Swenshuai.xi             *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ES_LEVEL, adec_id);
5689*53ee8cc1Swenshuai.xi #if OMX_AUDIO_DEBUG
5690*53ee8cc1Swenshuai.xi             HALMAD_PRINT("\r\n=====ID:%X  Audio_infoType_UNI_ES_Level =0x%X==========\r\n", (MS_U32)adec_id, (MS_U32)*pRet);
5691*53ee8cc1Swenshuai.xi #endif
5692*53ee8cc1Swenshuai.xi             break;
5693*53ee8cc1Swenshuai.xi         }
5694*53ee8cc1Swenshuai.xi 
5695*53ee8cc1Swenshuai.xi         case Audio_infoType_UNI_ES_Base:
5696*53ee8cc1Swenshuai.xi         {
5697*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5698*53ee8cc1Swenshuai.xi 
5699*53ee8cc1Swenshuai.xi             if ( DecId == AU_DEC_ID3 )
5700*53ee8cc1Swenshuai.xi             {
5701*53ee8cc1Swenshuai.xi                 *pRet = (MS_U32) (HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + OFFSET_ES3_DRAM_ADDR);
5702*53ee8cc1Swenshuai.xi             }
5703*53ee8cc1Swenshuai.xi             else
5704*53ee8cc1Swenshuai.xi             {
5705*53ee8cc1Swenshuai.xi                 *pRet = (MS_U32) (HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + OFFSET_ES1_DRAM_ADDR);
5706*53ee8cc1Swenshuai.xi             }
5707*53ee8cc1Swenshuai.xi             break;
5708*53ee8cc1Swenshuai.xi         }
5709*53ee8cc1Swenshuai.xi 
5710*53ee8cc1Swenshuai.xi         case Audio_infoType_UNI_ES_Size:
5711*53ee8cc1Swenshuai.xi         {
5712*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5713*53ee8cc1Swenshuai.xi             if ( DecId == AU_DEC_ID3 )
5714*53ee8cc1Swenshuai.xi             {
5715*53ee8cc1Swenshuai.xi                 *pRet = ES3_DRAM_SIZE;
5716*53ee8cc1Swenshuai.xi             }
5717*53ee8cc1Swenshuai.xi             else
5718*53ee8cc1Swenshuai.xi             {
5719*53ee8cc1Swenshuai.xi                 *pRet = ES1_DRAM_SIZE;
5720*53ee8cc1Swenshuai.xi             }
5721*53ee8cc1Swenshuai.xi             break;
5722*53ee8cc1Swenshuai.xi         }
5723*53ee8cc1Swenshuai.xi 
5724*53ee8cc1Swenshuai.xi         case Audio_infoType_UNI_PCM_Base:
5725*53ee8cc1Swenshuai.xi         {
5726*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5727*53ee8cc1Swenshuai.xi             if ( DecId == AU_DEC_ID3 )
5728*53ee8cc1Swenshuai.xi             {
5729*53ee8cc1Swenshuai.xi                 *pRet = (MS_U32) (HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + ASND_DSP_DDR_SIZE + OFFSET_PCM2_DRAM_ADDR);
5730*53ee8cc1Swenshuai.xi             }
5731*53ee8cc1Swenshuai.xi             else
5732*53ee8cc1Swenshuai.xi             {
5733*53ee8cc1Swenshuai.xi                 *pRet = (MS_U32) (HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + ASND_DSP_DDR_SIZE + OFFSET_PCM1_DRAM_ADDR);
5734*53ee8cc1Swenshuai.xi             }
5735*53ee8cc1Swenshuai.xi             break;
5736*53ee8cc1Swenshuai.xi         }
5737*53ee8cc1Swenshuai.xi 
5738*53ee8cc1Swenshuai.xi         case Audio_infoType_UNI_PCM_Size:
5739*53ee8cc1Swenshuai.xi         {
5740*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5741*53ee8cc1Swenshuai.xi             if ( DecId == AU_DEC_ID3 )
5742*53ee8cc1Swenshuai.xi             {
5743*53ee8cc1Swenshuai.xi                 *pRet = PCM2_DRAM_SIZE;
5744*53ee8cc1Swenshuai.xi             }
5745*53ee8cc1Swenshuai.xi             else
5746*53ee8cc1Swenshuai.xi             {
5747*53ee8cc1Swenshuai.xi                 *pRet = PCM1_DRAM_SIZE;
5748*53ee8cc1Swenshuai.xi             }
5749*53ee8cc1Swenshuai.xi             break;
5750*53ee8cc1Swenshuai.xi         }
5751*53ee8cc1Swenshuai.xi 
5752*53ee8cc1Swenshuai.xi         case Audio_infoType_MadBaseAddr:
5753*53ee8cc1Swenshuai.xi         {
5754*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5755*53ee8cc1Swenshuai.xi             if ( DecId == AU_DEC_ID3 )
5756*53ee8cc1Swenshuai.xi             {
5757*53ee8cc1Swenshuai.xi                 *pRet = HAL_AUDIO_GetDspMadBaseAddr(DSP_ADV);
5758*53ee8cc1Swenshuai.xi             }
5759*53ee8cc1Swenshuai.xi             else
5760*53ee8cc1Swenshuai.xi             {
5761*53ee8cc1Swenshuai.xi                 *pRet = HAL_AUDIO_GetDspMadBaseAddr(DSP_ADV);
5762*53ee8cc1Swenshuai.xi             }
5763*53ee8cc1Swenshuai.xi             break;
5764*53ee8cc1Swenshuai.xi         }
5765*53ee8cc1Swenshuai.xi 
5766*53ee8cc1Swenshuai.xi         case Audio_infoType_hashkey:
5767*53ee8cc1Swenshuai.xi         {
5768*53ee8cc1Swenshuai.xi             Audio_Hashkey_Info * pHashkeyInfo = (Audio_Hashkey_Info *) pInfo;
5769*53ee8cc1Swenshuai.xi             MS_U32 audio_ipauth = HAL_MAD2_Read_DSP_sram(REG_DEC2_AUDIO_IPAUTH, DSP_MEM_TYPE_PM);
5770*53ee8cc1Swenshuai.xi 
5771*53ee8cc1Swenshuai.xi             pHashkeyInfo->U32IsHashkeySupported = TRUE;
5772*53ee8cc1Swenshuai.xi 
5773*53ee8cc1Swenshuai.xi             switch ( pHashkeyInfo->U32Name )
5774*53ee8cc1Swenshuai.xi             {
5775*53ee8cc1Swenshuai.xi                 case Audio_DEC_AC3:
5776*53ee8cc1Swenshuai.xi                 {
5777*53ee8cc1Swenshuai.xi                     if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_AC3)
5778*53ee8cc1Swenshuai.xi                         && (audio_ipauth & AUDIO_HASHKEY_DISABLE_DOLBY_MS11)
5779*53ee8cc1Swenshuai.xi                         && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_LC_PROFILE)
5780*53ee8cc1Swenshuai.xi                         && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_C_PROFILE)
5781*53ee8cc1Swenshuai.xi                         && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_B_PROFILE))
5782*53ee8cc1Swenshuai.xi                     {
5783*53ee8cc1Swenshuai.xi                         pHashkeyInfo->U32IsHashkeySupported = FALSE;
5784*53ee8cc1Swenshuai.xi                     }
5785*53ee8cc1Swenshuai.xi                     break;
5786*53ee8cc1Swenshuai.xi                 }
5787*53ee8cc1Swenshuai.xi 
5788*53ee8cc1Swenshuai.xi                 case Audio_DEC_AC3P:
5789*53ee8cc1Swenshuai.xi                 {
5790*53ee8cc1Swenshuai.xi                     if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_AC3P)
5791*53ee8cc1Swenshuai.xi                         && (audio_ipauth & AUDIO_HASHKEY_DISABLE_DOLBY_MS11)
5792*53ee8cc1Swenshuai.xi                         && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_LC_PROFILE)
5793*53ee8cc1Swenshuai.xi                         && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_C_PROFILE)
5794*53ee8cc1Swenshuai.xi                         && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_B_PROFILE))
5795*53ee8cc1Swenshuai.xi                     {
5796*53ee8cc1Swenshuai.xi                         pHashkeyInfo->U32IsHashkeySupported = FALSE;
5797*53ee8cc1Swenshuai.xi                     }
5798*53ee8cc1Swenshuai.xi                     break;
5799*53ee8cc1Swenshuai.xi                 }
5800*53ee8cc1Swenshuai.xi 
5801*53ee8cc1Swenshuai.xi                 case Audio_DEC_AAC_LC:
5802*53ee8cc1Swenshuai.xi                 case Audio_DEC_HEAAC_V1:
5803*53ee8cc1Swenshuai.xi                 case Audio_DEC_HEAAC_V2:
5804*53ee8cc1Swenshuai.xi                 case Audio_DEC_DOLBYPULSE:
5805*53ee8cc1Swenshuai.xi                 {
5806*53ee8cc1Swenshuai.xi                     if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_DOLBY_MS10)
5807*53ee8cc1Swenshuai.xi                         && (audio_ipauth & AUDIO_HASHKEY_DISABLE_GAAC)
5808*53ee8cc1Swenshuai.xi                         && (audio_ipauth & AUDIO_HASHKEY_DISABLE_DOLBY_MS11)
5809*53ee8cc1Swenshuai.xi                         && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_C_PROFILE)
5810*53ee8cc1Swenshuai.xi                         && (audio_ipauth & AUDIO_HASHKEY_DISABLE_MS12_B_PROFILE))
5811*53ee8cc1Swenshuai.xi                     {
5812*53ee8cc1Swenshuai.xi                         pHashkeyInfo->U32IsHashkeySupported = FALSE;
5813*53ee8cc1Swenshuai.xi                     }
5814*53ee8cc1Swenshuai.xi                     break;
5815*53ee8cc1Swenshuai.xi                 }
5816*53ee8cc1Swenshuai.xi 
5817*53ee8cc1Swenshuai.xi                 case Audio_DEC_WMA:
5818*53ee8cc1Swenshuai.xi                 case Audio_DEC_WMAPRO:
5819*53ee8cc1Swenshuai.xi                 {
5820*53ee8cc1Swenshuai.xi                     if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_WMA))
5821*53ee8cc1Swenshuai.xi                     {
5822*53ee8cc1Swenshuai.xi                         pHashkeyInfo->U32IsHashkeySupported = FALSE;
5823*53ee8cc1Swenshuai.xi                     }
5824*53ee8cc1Swenshuai.xi                     break;
5825*53ee8cc1Swenshuai.xi                 }
5826*53ee8cc1Swenshuai.xi 
5827*53ee8cc1Swenshuai.xi                 case Audio_DEC_DTS:
5828*53ee8cc1Swenshuai.xi                 {
5829*53ee8cc1Swenshuai.xi                     if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_DTS)
5830*53ee8cc1Swenshuai.xi                         && (audio_ipauth & AUDIO_HASHKEY_DISABLE_DTS_XLL))
5831*53ee8cc1Swenshuai.xi                     {
5832*53ee8cc1Swenshuai.xi                         pHashkeyInfo->U32IsHashkeySupported = FALSE;
5833*53ee8cc1Swenshuai.xi                     }
5834*53ee8cc1Swenshuai.xi                     break;
5835*53ee8cc1Swenshuai.xi                 }
5836*53ee8cc1Swenshuai.xi 
5837*53ee8cc1Swenshuai.xi                 case Audio_DEC_DTSLBR:
5838*53ee8cc1Swenshuai.xi                 {
5839*53ee8cc1Swenshuai.xi                 	if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_DTSLBR)
5840*53ee8cc1Swenshuai.xi                         && (audio_ipauth & AUDIO_HASHKEY_DISABLE_DTS_XLL))
5841*53ee8cc1Swenshuai.xi                     {
5842*53ee8cc1Swenshuai.xi                         pHashkeyInfo->U32IsHashkeySupported = FALSE;
5843*53ee8cc1Swenshuai.xi                     }
5844*53ee8cc1Swenshuai.xi                     break;
5845*53ee8cc1Swenshuai.xi                 }
5846*53ee8cc1Swenshuai.xi 
5847*53ee8cc1Swenshuai.xi                 case Audio_DEC_DRA:
5848*53ee8cc1Swenshuai.xi                 {
5849*53ee8cc1Swenshuai.xi                     if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_DRA))
5850*53ee8cc1Swenshuai.xi                     {
5851*53ee8cc1Swenshuai.xi                         pHashkeyInfo->U32IsHashkeySupported = FALSE;
5852*53ee8cc1Swenshuai.xi                     }
5853*53ee8cc1Swenshuai.xi                     break;
5854*53ee8cc1Swenshuai.xi                 }
5855*53ee8cc1Swenshuai.xi 
5856*53ee8cc1Swenshuai.xi                 case Audio_DEC_RA8:
5857*53ee8cc1Swenshuai.xi                 {
5858*53ee8cc1Swenshuai.xi                     if ((audio_ipauth & AUDIO_HASHKEY_DISABLE_COOK))
5859*53ee8cc1Swenshuai.xi                     {
5860*53ee8cc1Swenshuai.xi                         pHashkeyInfo->U32IsHashkeySupported = FALSE;
5861*53ee8cc1Swenshuai.xi                     }
5862*53ee8cc1Swenshuai.xi                     break;
5863*53ee8cc1Swenshuai.xi                 }
5864*53ee8cc1Swenshuai.xi 
5865*53ee8cc1Swenshuai.xi                 default:
5866*53ee8cc1Swenshuai.xi                     break;
5867*53ee8cc1Swenshuai.xi             }
5868*53ee8cc1Swenshuai.xi 
5869*53ee8cc1Swenshuai.xi             break;
5870*53ee8cc1Swenshuai.xi         }
5871*53ee8cc1Swenshuai.xi 
5872*53ee8cc1Swenshuai.xi         case Audio_infoType_AccumEsCnt:
5873*53ee8cc1Swenshuai.xi         {
5874*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5875*53ee8cc1Swenshuai.xi             *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_ACCUM_ES_BYTECNT, adec_id);
5876*53ee8cc1Swenshuai.xi             break;
5877*53ee8cc1Swenshuai.xi         }
5878*53ee8cc1Swenshuai.xi 
5879*53ee8cc1Swenshuai.xi 
5880*53ee8cc1Swenshuai.xi         case Audio_infoType_get_trueHD_bypass_enable:
5881*53ee8cc1Swenshuai.xi         {
5882*53ee8cc1Swenshuai.xi             MS_U8 * pRet = (MS_U8 *) pInfo;
5883*53ee8cc1Swenshuai.xi             MS_U8 true_hd_support;
5884*53ee8cc1Swenshuai.xi             true_hd_support = g_AudioVars2->stDigitalOutCodecCapability[1][CODEC_TRUEHD].support_codec;
5885*53ee8cc1Swenshuai.xi 
5886*53ee8cc1Swenshuai.xi             if ((g_AudioVars2->g_hbr_bypass_enable) && (true_hd_support != 2))
5887*53ee8cc1Swenshuai.xi             {
5888*53ee8cc1Swenshuai.xi                 *pRet = true;
5889*53ee8cc1Swenshuai.xi             }
5890*53ee8cc1Swenshuai.xi             else
5891*53ee8cc1Swenshuai.xi             {
5892*53ee8cc1Swenshuai.xi                 *pRet = false;
5893*53ee8cc1Swenshuai.xi             }
5894*53ee8cc1Swenshuai.xi             break;
5895*53ee8cc1Swenshuai.xi         }
5896*53ee8cc1Swenshuai.xi 
5897*53ee8cc1Swenshuai.xi         case Audio_infoType_Decoder_Type:
5898*53ee8cc1Swenshuai.xi         {
5899*53ee8cc1Swenshuai.xi             AUDIO_DSP_CODE_TYPE eDecoder = AU_DVB_STANDARD_INVALID;
5900*53ee8cc1Swenshuai.xi             MS_U32 u32DecoderType = 0;
5901*53ee8cc1Swenshuai.xi             MS_U32 *pRet = (MS_U32 *)pInfo;
5902*53ee8cc1Swenshuai.xi 
5903*53ee8cc1Swenshuai.xi             switch (adec_id)
5904*53ee8cc1Swenshuai.xi             {
5905*53ee8cc1Swenshuai.xi                 case ADEC1:
5906*53ee8cc1Swenshuai.xi                 {
5907*53ee8cc1Swenshuai.xi                     eDecoder = g_AudioVars2->g_DspCodeType;
5908*53ee8cc1Swenshuai.xi                     break;
5909*53ee8cc1Swenshuai.xi                 }
5910*53ee8cc1Swenshuai.xi 
5911*53ee8cc1Swenshuai.xi                 case ADEC2:
5912*53ee8cc1Swenshuai.xi                 {
5913*53ee8cc1Swenshuai.xi                     eDecoder = g_AudioVars2->g_Dsp2CodeType;
5914*53ee8cc1Swenshuai.xi                     break;
5915*53ee8cc1Swenshuai.xi                 }
5916*53ee8cc1Swenshuai.xi 
5917*53ee8cc1Swenshuai.xi                 default:
5918*53ee8cc1Swenshuai.xi                 {
5919*53ee8cc1Swenshuai.xi                     HALMAD_ERROR ("%s: invalid ID (%d, %d)\n", __FUNCTION__, DecId, adec_id);
5920*53ee8cc1Swenshuai.xi                     result = FALSE;
5921*53ee8cc1Swenshuai.xi                     break;
5922*53ee8cc1Swenshuai.xi                 }
5923*53ee8cc1Swenshuai.xi             }
5924*53ee8cc1Swenshuai.xi 
5925*53ee8cc1Swenshuai.xi             if (result == TRUE)
5926*53ee8cc1Swenshuai.xi             {
5927*53ee8cc1Swenshuai.xi                 switch (eDecoder)
5928*53ee8cc1Swenshuai.xi                 {
5929*53ee8cc1Swenshuai.xi                     case AU_DVB_STANDARD_DTS:
5930*53ee8cc1Swenshuai.xi                     case AU_DVB_STANDARD_DTSLBR:
5931*53ee8cc1Swenshuai.xi                     {
5932*53ee8cc1Swenshuai.xi                         u32DecoderType = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_DTS_ES_TYPE, adec_id) & 0x00FFFFFF;
5933*53ee8cc1Swenshuai.xi 
5934*53ee8cc1Swenshuai.xi                         switch (u32DecoderType)
5935*53ee8cc1Swenshuai.xi                         {
5936*53ee8cc1Swenshuai.xi                             case DTS_TYPE_CORE:
5937*53ee8cc1Swenshuai.xi                             case DTS_TYPE_CORE_XLL:
5938*53ee8cc1Swenshuai.xi                             {
5939*53ee8cc1Swenshuai.xi                                 *pRet = AUDIO_DTS_TYPE_CORE;
5940*53ee8cc1Swenshuai.xi                                 break;
5941*53ee8cc1Swenshuai.xi                             }
5942*53ee8cc1Swenshuai.xi 
5943*53ee8cc1Swenshuai.xi                             case DTS_TYPE_LBR:
5944*53ee8cc1Swenshuai.xi                             {
5945*53ee8cc1Swenshuai.xi                                 *pRet = AUDIO_DTS_TYPE_LBR;
5946*53ee8cc1Swenshuai.xi                                 break;
5947*53ee8cc1Swenshuai.xi                             }
5948*53ee8cc1Swenshuai.xi 
5949*53ee8cc1Swenshuai.xi                             case DTS_TYPE_XLL:
5950*53ee8cc1Swenshuai.xi                             {
5951*53ee8cc1Swenshuai.xi                                 *pRet = AUDIO_DTS_TYPE_HD;
5952*53ee8cc1Swenshuai.xi                                 break;
5953*53ee8cc1Swenshuai.xi                             }
5954*53ee8cc1Swenshuai.xi 
5955*53ee8cc1Swenshuai.xi                             default:
5956*53ee8cc1Swenshuai.xi                             {
5957*53ee8cc1Swenshuai.xi                                 result = FALSE;
5958*53ee8cc1Swenshuai.xi                                 break;
5959*53ee8cc1Swenshuai.xi                             }
5960*53ee8cc1Swenshuai.xi                         }
5961*53ee8cc1Swenshuai.xi                         break;
5962*53ee8cc1Swenshuai.xi                     }
5963*53ee8cc1Swenshuai.xi 
5964*53ee8cc1Swenshuai.xi                     default:
5965*53ee8cc1Swenshuai.xi                     {
5966*53ee8cc1Swenshuai.xi                         HALMAD_ERROR ("%s: invalid ID (%d, %d)\n", __FUNCTION__, DecId, adec_id);
5967*53ee8cc1Swenshuai.xi                         result = FALSE;
5968*53ee8cc1Swenshuai.xi                         break;
5969*53ee8cc1Swenshuai.xi                     }
5970*53ee8cc1Swenshuai.xi                 }
5971*53ee8cc1Swenshuai.xi             }
5972*53ee8cc1Swenshuai.xi 
5973*53ee8cc1Swenshuai.xi             break;
5974*53ee8cc1Swenshuai.xi         }
5975*53ee8cc1Swenshuai.xi 
5976*53ee8cc1Swenshuai.xi         case Audio_infoType_syncSTC_in_mmTs:
5977*53ee8cc1Swenshuai.xi         {
5978*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
5979*53ee8cc1Swenshuai.xi             *pRet = HAL_DEC_R2_Get_SHM_PARAM(R2_SHM_PARAM_MM_TS_SYNC_STC, adec_id, 0);
5980*53ee8cc1Swenshuai.xi             break;
5981*53ee8cc1Swenshuai.xi         }
5982*53ee8cc1Swenshuai.xi 
5983*53ee8cc1Swenshuai.xi #if 0
5984*53ee8cc1Swenshuai.xi         /* TVOS2.0 DTV */
5985*53ee8cc1Swenshuai.xi         case Audio_infoType_tvos2_PCM1_Info:
5986*53ee8cc1Swenshuai.xi         {
5987*53ee8cc1Swenshuai.xi             Audio_MM_PCM_Info * pPCMInfo = (Audio_MM_PCM_Info *) pInfo;
5988*53ee8cc1Swenshuai.xi             MS_U64 u64cpts=0;
5989*53ee8cc1Swenshuai.xi 
5990*53ee8cc1Swenshuai.xi             pPCMInfo->U32WriteAddr  = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_TVOS2_PCM_WRPT, adec_id) +  HAL_AUDIO_GetDspMadBaseAddr(DSP_SE) + ASND_DSP_DDR_SIZE + OFFSET_PCM1_DRAM_ADDR;
5991*53ee8cc1Swenshuai.xi                            u64cpts  = ((MS_U64)HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_TVOS2_CPTS, adec_id))<<1;
5992*53ee8cc1Swenshuai.xi                            u64cpts  =  STC_TICK_TO_NS(u64cpts);
5993*53ee8cc1Swenshuai.xi             pPCMInfo->S64CPTS       = (MS_S64)u64cpts;
5994*53ee8cc1Swenshuai.xi             pPCMInfo->U32FrameSize  = (MS_U32)HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_TVOS2_PCM_FRAMESIZE, adec_id);
5995*53ee8cc1Swenshuai.xi             pPCMInfo->U32Channels   = (MS_U32)HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_TVOS2_PCM_CH, adec_id);
5996*53ee8cc1Swenshuai.xi             pPCMInfo->U32Bps        = 2;
5997*53ee8cc1Swenshuai.xi             pPCMInfo->U32SampleRate = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_SMP_RATE, adec_id);
5998*53ee8cc1Swenshuai.xi             break;
5999*53ee8cc1Swenshuai.xi         }
6000*53ee8cc1Swenshuai.xi #endif
6001*53ee8cc1Swenshuai.xi 
6002*53ee8cc1Swenshuai.xi         case Audio_infoType_get_parser_info:
6003*53ee8cc1Swenshuai.xi         {
6004*53ee8cc1Swenshuai.xi             MS_U32 * pRet = (MS_U32 *) pInfo;
6005*53ee8cc1Swenshuai.xi             *pRet = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_PARSER_INFO, adec_id);
6006*53ee8cc1Swenshuai.xi             break;
6007*53ee8cc1Swenshuai.xi         }
6008*53ee8cc1Swenshuai.xi 
6009*53ee8cc1Swenshuai.xi         case Audio_infoType_Is_Audio_Sync:
6010*53ee8cc1Swenshuai.xi         {
6011*53ee8cc1Swenshuai.xi             if ( DecId == AU_DEC_ID3 )
6012*53ee8cc1Swenshuai.xi             {
6013*53ee8cc1Swenshuai.xi                 long long tmp = 0;
6014*53ee8cc1Swenshuai.xi                 MS_U32 i, no_sync_cnt = 0;
6015*53ee8cc1Swenshuai.xi 
6016*53ee8cc1Swenshuai.xi                 tmp = HAL_MAD_GetCommInfo(Audio_Comm_infoType_ADEC2_1ms_timeStamp);
6017*53ee8cc1Swenshuai.xi                 if (tmp == 0)
6018*53ee8cc1Swenshuai.xi                 {
6019*53ee8cc1Swenshuai.xi                     result = FALSE;
6020*53ee8cc1Swenshuai.xi                     break;
6021*53ee8cc1Swenshuai.xi                 }
6022*53ee8cc1Swenshuai.xi 
6023*53ee8cc1Swenshuai.xi                 tmp = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_AVSYNC_STATE, ADEC2)&0x0F;
6024*53ee8cc1Swenshuai.xi                 if (tmp != 2)
6025*53ee8cc1Swenshuai.xi                 {
6026*53ee8cc1Swenshuai.xi                     result = FALSE;
6027*53ee8cc1Swenshuai.xi                     break;
6028*53ee8cc1Swenshuai.xi                 }
6029*53ee8cc1Swenshuai.xi 
6030*53ee8cc1Swenshuai.xi                 for (i = 0;i<3;i++)
6031*53ee8cc1Swenshuai.xi                 {
6032*53ee8cc1Swenshuai.xi                     tmp = HAL_MAD_GetCommInfo (Audio_Comm_infoType_ADEC2_33bit_STCPTS_DIFF);
6033*53ee8cc1Swenshuai.xi                     if ((tmp >= (100*90))||(tmp <= (-100*90))) //100ms
6034*53ee8cc1Swenshuai.xi                     {
6035*53ee8cc1Swenshuai.xi                         no_sync_cnt ++;
6036*53ee8cc1Swenshuai.xi                     }
6037*53ee8cc1Swenshuai.xi                 }
6038*53ee8cc1Swenshuai.xi 
6039*53ee8cc1Swenshuai.xi                 if (no_sync_cnt == 0)
6040*53ee8cc1Swenshuai.xi                 {
6041*53ee8cc1Swenshuai.xi                     result = TRUE;
6042*53ee8cc1Swenshuai.xi                 }
6043*53ee8cc1Swenshuai.xi             }
6044*53ee8cc1Swenshuai.xi             else
6045*53ee8cc1Swenshuai.xi             {
6046*53ee8cc1Swenshuai.xi                 long long tmp = 0;
6047*53ee8cc1Swenshuai.xi                 MS_U32 i, no_sync_cnt = 0;
6048*53ee8cc1Swenshuai.xi 
6049*53ee8cc1Swenshuai.xi                 tmp = HAL_MAD_GetCommInfo(Audio_Comm_infoType_ADEC1_1ms_timeStamp);
6050*53ee8cc1Swenshuai.xi                 if (tmp == 0)
6051*53ee8cc1Swenshuai.xi                 {
6052*53ee8cc1Swenshuai.xi                     result = FALSE;
6053*53ee8cc1Swenshuai.xi                     break;
6054*53ee8cc1Swenshuai.xi                 }
6055*53ee8cc1Swenshuai.xi 
6056*53ee8cc1Swenshuai.xi                 tmp = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_AVSYNC_STATE, ADEC1)&0x0F;
6057*53ee8cc1Swenshuai.xi                 if (tmp != 2)
6058*53ee8cc1Swenshuai.xi                 {
6059*53ee8cc1Swenshuai.xi                     result = FALSE;
6060*53ee8cc1Swenshuai.xi                     break;
6061*53ee8cc1Swenshuai.xi                 }
6062*53ee8cc1Swenshuai.xi 
6063*53ee8cc1Swenshuai.xi                 for (i = 0;i<3;i++)
6064*53ee8cc1Swenshuai.xi                 {
6065*53ee8cc1Swenshuai.xi                     tmp = HAL_MAD_GetCommInfo (Audio_Comm_infoType_ADEC1_33bit_STCPTS_DIFF);
6066*53ee8cc1Swenshuai.xi                     if ((tmp >= (100*90))||(tmp <= (-100*90))) //100ms
6067*53ee8cc1Swenshuai.xi                     {
6068*53ee8cc1Swenshuai.xi                         no_sync_cnt ++;
6069*53ee8cc1Swenshuai.xi                     }
6070*53ee8cc1Swenshuai.xi                 }
6071*53ee8cc1Swenshuai.xi 
6072*53ee8cc1Swenshuai.xi                 if (no_sync_cnt == 0)
6073*53ee8cc1Swenshuai.xi                 {
6074*53ee8cc1Swenshuai.xi                     result = TRUE;
6075*53ee8cc1Swenshuai.xi                 }
6076*53ee8cc1Swenshuai.xi             }
6077*53ee8cc1Swenshuai.xi             break;
6078*53ee8cc1Swenshuai.xi         }
6079*53ee8cc1Swenshuai.xi 
6080*53ee8cc1Swenshuai.xi         /* not support cmd */
6081*53ee8cc1Swenshuai.xi         default:
6082*53ee8cc1Swenshuai.xi             HALMAD_ERROR ("%s: cmd not Supported\n", __FUNCTION__ );
6083*53ee8cc1Swenshuai.xi             result = FALSE;
6084*53ee8cc1Swenshuai.xi             break;
6085*53ee8cc1Swenshuai.xi     }
6086*53ee8cc1Swenshuai.xi 
6087*53ee8cc1Swenshuai.xi     return result;
6088*53ee8cc1Swenshuai.xi }
6089*53ee8cc1Swenshuai.xi 
6090*53ee8cc1Swenshuai.xi //====== STAOS PIP END 2012/02/01 ========
6091*53ee8cc1Swenshuai.xi 
HAL_MAD_CommonCmd_TrasferData(void * pSrc,MS_U32 u32SrcSize,void * pDst,MS_U32 u32DstSzie)6092*53ee8cc1Swenshuai.xi MS_S32 HAL_MAD_CommonCmd_TrasferData(void *pSrc, MS_U32 u32SrcSize, void *pDst, MS_U32 u32DstSzie)
6093*53ee8cc1Swenshuai.xi {
6094*53ee8cc1Swenshuai.xi     MS_S32 s32Ret = 0;
6095*53ee8cc1Swenshuai.xi     MS_U32 u32TransferSize = 0;
6096*53ee8cc1Swenshuai.xi 
6097*53ee8cc1Swenshuai.xi     if (pSrc == NULL)
6098*53ee8cc1Swenshuai.xi     {
6099*53ee8cc1Swenshuai.xi         AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! pSrc should not be NULL!\n", __FUNCTION__);
6100*53ee8cc1Swenshuai.xi         return -A_EFAULT;
6101*53ee8cc1Swenshuai.xi     }
6102*53ee8cc1Swenshuai.xi 
6103*53ee8cc1Swenshuai.xi     if (u32SrcSize == 0)
6104*53ee8cc1Swenshuai.xi     {
6105*53ee8cc1Swenshuai.xi         AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! u32SrcSize should not be zero!\n", __FUNCTION__);
6106*53ee8cc1Swenshuai.xi         return -A_EINVAL;
6107*53ee8cc1Swenshuai.xi     }
6108*53ee8cc1Swenshuai.xi 
6109*53ee8cc1Swenshuai.xi     if (pDst == NULL)
6110*53ee8cc1Swenshuai.xi     {
6111*53ee8cc1Swenshuai.xi         AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! pDst should not be NULL!\n", __FUNCTION__);
6112*53ee8cc1Swenshuai.xi         return -A_EFAULT;
6113*53ee8cc1Swenshuai.xi     }
6114*53ee8cc1Swenshuai.xi 
6115*53ee8cc1Swenshuai.xi     if (u32DstSzie == 0)
6116*53ee8cc1Swenshuai.xi     {
6117*53ee8cc1Swenshuai.xi         AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! u32DstSzie should not be zero!\n", __FUNCTION__);
6118*53ee8cc1Swenshuai.xi         return -A_EINVAL;
6119*53ee8cc1Swenshuai.xi     }
6120*53ee8cc1Swenshuai.xi 
6121*53ee8cc1Swenshuai.xi     u32TransferSize = (u32SrcSize < u32DstSzie) ? u32SrcSize : u32DstSzie;
6122*53ee8cc1Swenshuai.xi     memcpy(((MS_U8 *)pDst + 8), ((MS_U8 *)pSrc + 8),(u32TransferSize - 8));
6123*53ee8cc1Swenshuai.xi     if(u32SrcSize < u32DstSzie)
6124*53ee8cc1Swenshuai.xi     {
6125*53ee8cc1Swenshuai.xi         memset(((MS_U8 *)pDst + u32TransferSize), 0x00, (u32DstSzie - u32SrcSize));
6126*53ee8cc1Swenshuai.xi     }
6127*53ee8cc1Swenshuai.xi 
6128*53ee8cc1Swenshuai.xi     return s32Ret;
6129*53ee8cc1Swenshuai.xi }
6130*53ee8cc1Swenshuai.xi 
HAL_MAD_SetAudioOutputDeviceSelection(AUDIO_OUTPUT_DEVICE_SELECTION_t * pAudioOutputDeviceSelection)6131*53ee8cc1Swenshuai.xi MS_S32 HAL_MAD_SetAudioOutputDeviceSelection(AUDIO_OUTPUT_DEVICE_SELECTION_t * pAudioOutputDeviceSelection)
6132*53ee8cc1Swenshuai.xi {
6133*53ee8cc1Swenshuai.xi     MS_S32 s32Ret  = 0;
6134*53ee8cc1Swenshuai.xi     MS_U32 u32UserStrucVer = 0;
6135*53ee8cc1Swenshuai.xi     MS_U32 u32UserStrucSize = 0;
6136*53ee8cc1Swenshuai.xi     MS_U32 u32DriverStrucVer = 0;
6137*53ee8cc1Swenshuai.xi     MS_U32 u32DriverStrucSize = 0;
6138*53ee8cc1Swenshuai.xi 
6139*53ee8cc1Swenshuai.xi     HALMAD_CHECK_SHM_INIT;
6140*53ee8cc1Swenshuai.xi 
6141*53ee8cc1Swenshuai.xi     if (pAudioOutputDeviceSelection == NULL)
6142*53ee8cc1Swenshuai.xi     {
6143*53ee8cc1Swenshuai.xi         AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! pAudioOutputDeviceSelection should not be NULL!\n", __FUNCTION__);
6144*53ee8cc1Swenshuai.xi         return -A_EFAULT;
6145*53ee8cc1Swenshuai.xi     }
6146*53ee8cc1Swenshuai.xi 
6147*53ee8cc1Swenshuai.xi     u32UserStrucVer = pAudioOutputDeviceSelection->u32StructVersion;
6148*53ee8cc1Swenshuai.xi     u32DriverStrucVer = g_AudioVars2->g_AudioOutputDeviceSelection.u32StructVersion;
6149*53ee8cc1Swenshuai.xi 
6150*53ee8cc1Swenshuai.xi     if ((u32UserStrucVer & AUDIO_MAJOR_VERSION_MASK) != (u32DriverStrucVer & AUDIO_MAJOR_VERSION_MASK))
6151*53ee8cc1Swenshuai.xi     {
6152*53ee8cc1Swenshuai.xi         AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s(): structure version is mismatch, user is 0x%08X, driver is 0x%08X!\n", __FUNCTION__,u32UserStrucVer,u32DriverStrucVer);
6153*53ee8cc1Swenshuai.xi         return -A_EPERM;
6154*53ee8cc1Swenshuai.xi     }
6155*53ee8cc1Swenshuai.xi 
6156*53ee8cc1Swenshuai.xi     u32UserStrucSize = pAudioOutputDeviceSelection->u32StructSize;
6157*53ee8cc1Swenshuai.xi     u32DriverStrucSize = g_AudioVars2->g_AudioOutputDeviceSelection.u32StructSize;
6158*53ee8cc1Swenshuai.xi 
6159*53ee8cc1Swenshuai.xi     s32Ret = HAL_MAD_CommonCmd_TrasferData(pAudioOutputDeviceSelection, u32UserStrucSize, &g_AudioVars2->g_AudioOutputDeviceSelection, u32DriverStrucSize);
6160*53ee8cc1Swenshuai.xi     if (s32Ret < 0)
6161*53ee8cc1Swenshuai.xi     {
6162*53ee8cc1Swenshuai.xi         return s32Ret;
6163*53ee8cc1Swenshuai.xi     }
6164*53ee8cc1Swenshuai.xi 
6165*53ee8cc1Swenshuai.xi     if ((g_AudioVars2->g_AudioOutputDeviceSelection.u32OutputDeviceSelection & AUDIO_OUTPUT_DEVICE_SPEAKER) == 0)
6166*53ee8cc1Swenshuai.xi     {
6167*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_SPEAKER_EN, ADEC1, DISABLE, 0);
6168*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_SPEAKER_EN, ADEC2, DISABLE, 0);
6169*53ee8cc1Swenshuai.xi 
6170*53ee8cc1Swenshuai.xi             HAL_ADVSOUND_SubProcessEnable(DOLBY_DAP_EN, FALSE);
6171*53ee8cc1Swenshuai.xi     }
6172*53ee8cc1Swenshuai.xi     else
6173*53ee8cc1Swenshuai.xi     {
6174*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_SPEAKER_EN, ADEC1, ENABLE, 0);
6175*53ee8cc1Swenshuai.xi             HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_SPEAKER_EN, ADEC2, ENABLE, 0);
6176*53ee8cc1Swenshuai.xi 
6177*53ee8cc1Swenshuai.xi             HAL_ADVSOUND_SubProcessEnable(DOLBY_DAP_EN, g_AudioVars2->g_DolbyDAPEnable);
6178*53ee8cc1Swenshuai.xi     }
6179*53ee8cc1Swenshuai.xi 
6180*53ee8cc1Swenshuai.xi     return s32Ret;
6181*53ee8cc1Swenshuai.xi }
6182*53ee8cc1Swenshuai.xi 
HAL_MAD_SpecifyDigitalOutputCodec(AUDIO_SPECIFIED_DIGITAL_OUTPUT_t * pAudioSpecifiedDigitalOutput,DIGITAL_OUTPUT_TYPE u32DigitalOutputType)6183*53ee8cc1Swenshuai.xi MS_S32 HAL_MAD_SpecifyDigitalOutputCodec(AUDIO_SPECIFIED_DIGITAL_OUTPUT_t * pAudioSpecifiedDigitalOutput, DIGITAL_OUTPUT_TYPE u32DigitalOutputType)
6184*53ee8cc1Swenshuai.xi {
6185*53ee8cc1Swenshuai.xi     MS_S32 s32Ret  = 0;
6186*53ee8cc1Swenshuai.xi     MS_U32 u32UserStrucVer = 0;
6187*53ee8cc1Swenshuai.xi     MS_U32 u32UserStrucSize = 0;
6188*53ee8cc1Swenshuai.xi     MS_U32 u32DriverStrucVer = 0;
6189*53ee8cc1Swenshuai.xi     MS_U32 u32DriverStrucSize = 0;
6190*53ee8cc1Swenshuai.xi     AUDIO_SPECIFIED_DIGITAL_OUTPUT_t tSpecifiedDigitalOutput;
6191*53ee8cc1Swenshuai.xi 
6192*53ee8cc1Swenshuai.xi     HALMAD_CHECK_SHM_INIT;
6193*53ee8cc1Swenshuai.xi 
6194*53ee8cc1Swenshuai.xi     if (pAudioSpecifiedDigitalOutput == NULL)
6195*53ee8cc1Swenshuai.xi     {
6196*53ee8cc1Swenshuai.xi         AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! pAudioSpecifiedDigitalOutput should not be NULL!\n", __FUNCTION__);
6197*53ee8cc1Swenshuai.xi         return -A_EFAULT;
6198*53ee8cc1Swenshuai.xi     }
6199*53ee8cc1Swenshuai.xi 
6200*53ee8cc1Swenshuai.xi     u32UserStrucVer = pAudioSpecifiedDigitalOutput->u32StructVersion;
6201*53ee8cc1Swenshuai.xi     u32DriverStrucVer = g_AudioVars2->g_AudioSpecifiedDigitalOutput.u32StructVersion;
6202*53ee8cc1Swenshuai.xi 
6203*53ee8cc1Swenshuai.xi     if ((u32UserStrucVer & AUDIO_MAJOR_VERSION_MASK) != (u32DriverStrucVer & AUDIO_MAJOR_VERSION_MASK))
6204*53ee8cc1Swenshuai.xi     {
6205*53ee8cc1Swenshuai.xi         AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s(): structure version is mismatch, user is 0x%08X, driver is 0x%08X!\n", __FUNCTION__,u32UserStrucVer,u32DriverStrucVer);
6206*53ee8cc1Swenshuai.xi         return -A_EPERM;
6207*53ee8cc1Swenshuai.xi     }
6208*53ee8cc1Swenshuai.xi 
6209*53ee8cc1Swenshuai.xi     u32UserStrucSize = pAudioSpecifiedDigitalOutput->u32StructSize;
6210*53ee8cc1Swenshuai.xi     u32DriverStrucSize = g_AudioVars2->g_AudioSpecifiedDigitalOutput.u32StructSize;
6211*53ee8cc1Swenshuai.xi 
6212*53ee8cc1Swenshuai.xi     memset((void *)&tSpecifiedDigitalOutput, 0x00, sizeof(AUDIO_SPECIFIED_DIGITAL_OUTPUT_t));
6213*53ee8cc1Swenshuai.xi     tSpecifiedDigitalOutput.u32StructVersion = AUDIO_SPECIFIED_DIGITAL_OUTPUT_VERSION;
6214*53ee8cc1Swenshuai.xi     tSpecifiedDigitalOutput.u32StructSize = sizeof(AUDIO_SPECIFIED_DIGITAL_OUTPUT_t);
6215*53ee8cc1Swenshuai.xi 
6216*53ee8cc1Swenshuai.xi     s32Ret = HAL_MAD_CommonCmd_TrasferData(pAudioSpecifiedDigitalOutput, u32UserStrucSize, &tSpecifiedDigitalOutput, u32DriverStrucSize);
6217*53ee8cc1Swenshuai.xi     if (s32Ret < 0)
6218*53ee8cc1Swenshuai.xi     {
6219*53ee8cc1Swenshuai.xi         return s32Ret;
6220*53ee8cc1Swenshuai.xi     }
6221*53ee8cc1Swenshuai.xi 
6222*53ee8cc1Swenshuai.xi     switch (u32DigitalOutputType)
6223*53ee8cc1Swenshuai.xi     {
6224*53ee8cc1Swenshuai.xi         case DIGITAL_SPDIF_OUTPUT:
6225*53ee8cc1Swenshuai.xi         {
6226*53ee8cc1Swenshuai.xi             g_AudioVars2->g_AudioSpecifiedDigitalOutput.u32SpdifOutputCodec = tSpecifiedDigitalOutput.u32SpdifOutputCodec;
6227*53ee8cc1Swenshuai.xi             break;
6228*53ee8cc1Swenshuai.xi         }
6229*53ee8cc1Swenshuai.xi 
6230*53ee8cc1Swenshuai.xi         case DIGITAL_HDMI_ARC_OUTPUT:
6231*53ee8cc1Swenshuai.xi         {
6232*53ee8cc1Swenshuai.xi             g_AudioVars2->g_AudioSpecifiedDigitalOutput.u32HdmiArcOutputCodec = tSpecifiedDigitalOutput.u32HdmiArcOutputCodec;
6233*53ee8cc1Swenshuai.xi             break;
6234*53ee8cc1Swenshuai.xi         }
6235*53ee8cc1Swenshuai.xi 
6236*53ee8cc1Swenshuai.xi         case DIGITAL_HDMI_OUTPUT:
6237*53ee8cc1Swenshuai.xi         {
6238*53ee8cc1Swenshuai.xi             g_AudioVars2->g_AudioSpecifiedDigitalOutput.u32HdmiTxOutputCodec = tSpecifiedDigitalOutput.u32HdmiTxOutputCodec;
6239*53ee8cc1Swenshuai.xi             break;
6240*53ee8cc1Swenshuai.xi         }
6241*53ee8cc1Swenshuai.xi 
6242*53ee8cc1Swenshuai.xi         default:
6243*53ee8cc1Swenshuai.xi         {
6244*53ee8cc1Swenshuai.xi             memcpy((void *)&g_AudioVars2->g_AudioSpecifiedDigitalOutput, (void *)&tSpecifiedDigitalOutput, sizeof(AUDIO_SPECIFIED_DIGITAL_OUTPUT_t));
6245*53ee8cc1Swenshuai.xi             break;
6246*53ee8cc1Swenshuai.xi         }
6247*53ee8cc1Swenshuai.xi     }
6248*53ee8cc1Swenshuai.xi 
6249*53ee8cc1Swenshuai.xi     return s32Ret;
6250*53ee8cc1Swenshuai.xi }
6251*53ee8cc1Swenshuai.xi 
HAL_MAD_DAP_Control(AUDIO_DAP_CONTROL_t * pDapControl)6252*53ee8cc1Swenshuai.xi MS_S32 HAL_MAD_DAP_Control(AUDIO_DAP_CONTROL_t * pDapControl)
6253*53ee8cc1Swenshuai.xi {
6254*53ee8cc1Swenshuai.xi     MS_S32 s32Ret  = 0;
6255*53ee8cc1Swenshuai.xi     MS_U32 u32UserStrucVer = 0;
6256*53ee8cc1Swenshuai.xi 
6257*53ee8cc1Swenshuai.xi     HALMAD_CHECK_SHM_INIT;
6258*53ee8cc1Swenshuai.xi 
6259*53ee8cc1Swenshuai.xi     if (pDapControl == NULL)
6260*53ee8cc1Swenshuai.xi     {
6261*53ee8cc1Swenshuai.xi         AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! pDapControl should not be NULL!\n", __FUNCTION__);
6262*53ee8cc1Swenshuai.xi         return -A_EFAULT;
6263*53ee8cc1Swenshuai.xi     }
6264*53ee8cc1Swenshuai.xi 
6265*53ee8cc1Swenshuai.xi     u32UserStrucVer = pDapControl->u32StructVersion;
6266*53ee8cc1Swenshuai.xi 
6267*53ee8cc1Swenshuai.xi     if ((u32UserStrucVer & AUDIO_MAJOR_VERSION_MASK) != (AUDIO_DAP_CONTROL_VERSION & AUDIO_MAJOR_VERSION_MASK))
6268*53ee8cc1Swenshuai.xi     {
6269*53ee8cc1Swenshuai.xi         AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s(): structure version is mismatch, user is 0x%08X, driver is 0x%08X!\n", __FUNCTION__, u32UserStrucVer, AUDIO_DAP_CONTROL_VERSION);
6270*53ee8cc1Swenshuai.xi         return -A_EPERM;
6271*53ee8cc1Swenshuai.xi     }
6272*53ee8cc1Swenshuai.xi 
6273*53ee8cc1Swenshuai.xi     if (pDapControl->u32McuCtrlEnable)
6274*53ee8cc1Swenshuai.xi     {
6275*53ee8cc1Swenshuai.xi         HAL_AUR2_WriteMaskByte(REG_SNDR2_MBOX_BYTE_DAP_SEL, 0x02, 0x02);
6276*53ee8cc1Swenshuai.xi     }
6277*53ee8cc1Swenshuai.xi     else
6278*53ee8cc1Swenshuai.xi     {
6279*53ee8cc1Swenshuai.xi         HAL_AUR2_WriteMaskByte(REG_SNDR2_MBOX_BYTE_DAP_SEL, 0x02, 0x00);
6280*53ee8cc1Swenshuai.xi     }
6281*53ee8cc1Swenshuai.xi 
6282*53ee8cc1Swenshuai.xi     if (pDapControl->u32MultiChannelEnable)
6283*53ee8cc1Swenshuai.xi     {
6284*53ee8cc1Swenshuai.xi         HAL_AUR2_WriteMaskByte(REG_SNDR2_MBOX_BYTE_DAP_SEL, 0x04, 0x04);
6285*53ee8cc1Swenshuai.xi     }
6286*53ee8cc1Swenshuai.xi     else
6287*53ee8cc1Swenshuai.xi     {
6288*53ee8cc1Swenshuai.xi         HAL_AUR2_WriteMaskByte(REG_SNDR2_MBOX_BYTE_DAP_SEL, 0x04, 0x00);
6289*53ee8cc1Swenshuai.xi     }
6290*53ee8cc1Swenshuai.xi 
6291*53ee8cc1Swenshuai.xi     return s32Ret;
6292*53ee8cc1Swenshuai.xi }
6293*53ee8cc1Swenshuai.xi 
HAL_MAD_GetDecoderInfo(AUDIO_DECODER_INFO_t * pDecoderInfo)6294*53ee8cc1Swenshuai.xi MS_S32 HAL_MAD_GetDecoderInfo(AUDIO_DECODER_INFO_t * pDecoderInfo)
6295*53ee8cc1Swenshuai.xi {
6296*53ee8cc1Swenshuai.xi     MS_S32 s32Ret  = 0;
6297*53ee8cc1Swenshuai.xi     MS_U32 u32UserStrucVer = 0;
6298*53ee8cc1Swenshuai.xi     MS_U32 u32UserStrucSize = 0;
6299*53ee8cc1Swenshuai.xi     MS_U32 u32DriverStrucVer = 0;
6300*53ee8cc1Swenshuai.xi     MS_U32 u32DriverStrucSize = 0;
6301*53ee8cc1Swenshuai.xi     Audio_id adec_id = 0;
6302*53ee8cc1Swenshuai.xi     AUDIO_DECODER_INFO_t tDecoderInfo;
6303*53ee8cc1Swenshuai.xi 
6304*53ee8cc1Swenshuai.xi     if (pDecoderInfo == NULL)
6305*53ee8cc1Swenshuai.xi     {
6306*53ee8cc1Swenshuai.xi         AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! pChannelInfo should not be NULL!\n", __FUNCTION__);
6307*53ee8cc1Swenshuai.xi         return -A_EFAULT;
6308*53ee8cc1Swenshuai.xi     }
6309*53ee8cc1Swenshuai.xi 
6310*53ee8cc1Swenshuai.xi     u32UserStrucVer = pDecoderInfo->u32StructVersion;
6311*53ee8cc1Swenshuai.xi     u32DriverStrucVer = AUDIO_DECODER_INFO_VERSION;
6312*53ee8cc1Swenshuai.xi 
6313*53ee8cc1Swenshuai.xi     if ((u32UserStrucVer & AUDIO_MAJOR_VERSION_MASK) != (u32DriverStrucVer & AUDIO_MAJOR_VERSION_MASK))
6314*53ee8cc1Swenshuai.xi     {
6315*53ee8cc1Swenshuai.xi         AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s(): structure version is mismatch, user is 0x%08X, driver is 0x%08X!\n", __FUNCTION__, u32UserStrucVer, AUDIO_DECODER_INFO_VERSION);
6316*53ee8cc1Swenshuai.xi         return -A_EPERM;
6317*53ee8cc1Swenshuai.xi     }
6318*53ee8cc1Swenshuai.xi 
6319*53ee8cc1Swenshuai.xi     u32UserStrucSize = pDecoderInfo->u32StructSize;
6320*53ee8cc1Swenshuai.xi     u32DriverStrucSize = sizeof(AUDIO_DECODER_INFO_t);
6321*53ee8cc1Swenshuai.xi     adec_id = HAL_AUDIO_Convert_DecId_to_ADECId(pDecoderInfo->u8DecId);
6322*53ee8cc1Swenshuai.xi 
6323*53ee8cc1Swenshuai.xi     memset((void *)&tDecoderInfo, 0x00, sizeof(AUDIO_DECODER_INFO_t));
6324*53ee8cc1Swenshuai.xi     tDecoderInfo.u32StructVersion = AUDIO_DECODER_INFO_VERSION;
6325*53ee8cc1Swenshuai.xi     tDecoderInfo.u32StructSize = sizeof(AUDIO_DECODER_INFO_t);
6326*53ee8cc1Swenshuai.xi     tDecoderInfo.u8DecId = pDecoderInfo->u8DecId;
6327*53ee8cc1Swenshuai.xi     tDecoderInfo.bForceMchOutput = TRUE;
6328*53ee8cc1Swenshuai.xi     tDecoderInfo.u32PcmOutputType = HAL_DEC_R2_Get_SHM_INFO(R2_SHM_INFO_OMX_MCH_VALID, adec_id);
6329*53ee8cc1Swenshuai.xi 
6330*53ee8cc1Swenshuai.xi     s32Ret = HAL_MAD_CommonCmd_TrasferData(&tDecoderInfo, u32DriverStrucSize, pDecoderInfo, u32UserStrucSize);
6331*53ee8cc1Swenshuai.xi 
6332*53ee8cc1Swenshuai.xi     return s32Ret;
6333*53ee8cc1Swenshuai.xi }
6334*53ee8cc1Swenshuai.xi 
HAL_MAD_CommonCmd(AUDIO_COMMON_CMD_t * cmd)6335*53ee8cc1Swenshuai.xi MS_S32 HAL_MAD_CommonCmd(AUDIO_COMMON_CMD_t * cmd)
6336*53ee8cc1Swenshuai.xi {
6337*53ee8cc1Swenshuai.xi     char *name = (char *)cmd->u8StrCmd;
6338*53ee8cc1Swenshuai.xi     MS_S32 s32Ret = 0;
6339*53ee8cc1Swenshuai.xi 
6340*53ee8cc1Swenshuai.xi     if (cmd == NULL)
6341*53ee8cc1Swenshuai.xi     {
6342*53ee8cc1Swenshuai.xi         AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s: Error! cmd should not be NULL!\n", __FUNCTION__);
6343*53ee8cc1Swenshuai.xi         return -A_EFAULT;
6344*53ee8cc1Swenshuai.xi     }
6345*53ee8cc1Swenshuai.xi 
6346*53ee8cc1Swenshuai.xi     if (!(strcmp(name, "SetAudioOutputDeviceSelection")))
6347*53ee8cc1Swenshuai.xi     {
6348*53ee8cc1Swenshuai.xi         s32Ret = HAL_MAD_SetAudioOutputDeviceSelection((AUDIO_OUTPUT_DEVICE_SELECTION_t *)cmd->pData);
6349*53ee8cc1Swenshuai.xi     }
6350*53ee8cc1Swenshuai.xi     else if (!(strcmp(name, "SpecifyDigitalOutputCodec")))
6351*53ee8cc1Swenshuai.xi     {
6352*53ee8cc1Swenshuai.xi         s32Ret = HAL_MAD_SpecifyDigitalOutputCodec((AUDIO_SPECIFIED_DIGITAL_OUTPUT_t *)cmd->pData, DIGITAL_MAX_OUTPUT);
6353*53ee8cc1Swenshuai.xi     }
6354*53ee8cc1Swenshuai.xi     else if (!(strcmp(name, "SpecifyDigitalOutputCodec_Spdif")))
6355*53ee8cc1Swenshuai.xi     {
6356*53ee8cc1Swenshuai.xi         s32Ret = HAL_MAD_SpecifyDigitalOutputCodec((AUDIO_SPECIFIED_DIGITAL_OUTPUT_t *)cmd->pData, DIGITAL_SPDIF_OUTPUT);
6357*53ee8cc1Swenshuai.xi     }
6358*53ee8cc1Swenshuai.xi     else if (!(strcmp(name, "SpecifyDigitalOutputCodec_HdmiArc")))
6359*53ee8cc1Swenshuai.xi     {
6360*53ee8cc1Swenshuai.xi         s32Ret = HAL_MAD_SpecifyDigitalOutputCodec((AUDIO_SPECIFIED_DIGITAL_OUTPUT_t *)cmd->pData, DIGITAL_HDMI_ARC_OUTPUT);
6361*53ee8cc1Swenshuai.xi     }
6362*53ee8cc1Swenshuai.xi     else if (!(strcmp(name, "SpecifyDigitalOutputCodec_HdmiTx")))
6363*53ee8cc1Swenshuai.xi     {
6364*53ee8cc1Swenshuai.xi         s32Ret = HAL_MAD_SpecifyDigitalOutputCodec((AUDIO_SPECIFIED_DIGITAL_OUTPUT_t *)cmd->pData, DIGITAL_HDMI_OUTPUT);
6365*53ee8cc1Swenshuai.xi     }
6366*53ee8cc1Swenshuai.xi     else if (!(strcmp(name, "DAP_Control")))
6367*53ee8cc1Swenshuai.xi     {
6368*53ee8cc1Swenshuai.xi         s32Ret = HAL_MAD_DAP_Control((AUDIO_DAP_CONTROL_t *) cmd->pData);
6369*53ee8cc1Swenshuai.xi     }
6370*53ee8cc1Swenshuai.xi     else if (!(strcmp(name, "GetDecoderInfo")))
6371*53ee8cc1Swenshuai.xi     {
6372*53ee8cc1Swenshuai.xi         s32Ret = HAL_MAD_GetDecoderInfo((AUDIO_DECODER_INFO_t *) cmd->pData);
6373*53ee8cc1Swenshuai.xi     }
6374*53ee8cc1Swenshuai.xi     else
6375*53ee8cc1Swenshuai.xi     {
6376*53ee8cc1Swenshuai.xi         AUDIO_PRINT(AUDIO_DEBUG_LEVEL_ERROR, "%s(): Error! Unsupportted Common Cmd (%s)!!\n", __FUNCTION__, cmd->u8StrCmd);
6377*53ee8cc1Swenshuai.xi         s32Ret = -A_EINVAL;
6378*53ee8cc1Swenshuai.xi     }
6379*53ee8cc1Swenshuai.xi 
6380*53ee8cc1Swenshuai.xi     return s32Ret;
6381*53ee8cc1Swenshuai.xi }