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 #ifndef _DEV_AUDIO_H_ 96*53ee8cc1Swenshuai.xi #define _DEV_AUDIO_H_ 97*53ee8cc1Swenshuai.xi #include "MsCommon.h" 98*53ee8cc1Swenshuai.xi #include "halAUR2.h" 99*53ee8cc1Swenshuai.xi 100*53ee8cc1Swenshuai.xi 101*53ee8cc1Swenshuai.xi #include "MsTypes.h" 102*53ee8cc1Swenshuai.xi #include "drvAUDIO_if.h" 103*53ee8cc1Swenshuai.xi #include "drvAUDIO_internal.h" 104*53ee8cc1Swenshuai.xi #include "apiMBX_St.h" 105*53ee8cc1Swenshuai.xi #include "apiMBX.h" 106*53ee8cc1Swenshuai.xi 107*53ee8cc1Swenshuai.xi 108*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 109*53ee8cc1Swenshuai.xi // Macro and Define 110*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 111*53ee8cc1Swenshuai.xi 112*53ee8cc1Swenshuai.xi #define AUDIO_SHM_NAME "Linux AUDIO driver" 113*53ee8cc1Swenshuai.xi #define AUDIO_TEE_INFO_SHM_NAME "AUDIO TEE INFO SHM" 114*53ee8cc1Swenshuai.xi 115*53ee8cc1Swenshuai.xi #define AUD_CHK_DSP_READ_RDY 0x08 116*53ee8cc1Swenshuai.xi #define AUD_CHK_DSP_WRITE_RDY 0x10 117*53ee8cc1Swenshuai.xi #define AUD_R2_DMA_BURST_BYTES 0x4C 118*53ee8cc1Swenshuai.xi 119*53ee8cc1Swenshuai.xi #define AUMASK_BIT0 0x0001 120*53ee8cc1Swenshuai.xi #define AUMASK_BIT1 0x0002 121*53ee8cc1Swenshuai.xi #define AUMASK_BIT2 0x0004 122*53ee8cc1Swenshuai.xi #define AUMASK_BIT3 0x0008 123*53ee8cc1Swenshuai.xi #define AUMASK_BIT4 0x0010 124*53ee8cc1Swenshuai.xi #define AUMASK_BIT5 0x0020 125*53ee8cc1Swenshuai.xi #define AUMASK_BIT6 0x0040 126*53ee8cc1Swenshuai.xi #define AUMASK_BIT7 0x0080 127*53ee8cc1Swenshuai.xi 128*53ee8cc1Swenshuai.xi #define au_bit0_(val) ((MS_U8)(val & AUMASK_BIT0)) 129*53ee8cc1Swenshuai.xi #define au_bit1_(val) ((MS_U8)(val & AUMASK_BIT1)) 130*53ee8cc1Swenshuai.xi #define au_bit2_(val) ((MS_U8)(val & AUMASK_BIT2)) 131*53ee8cc1Swenshuai.xi #define au_bit3_(val) ((MS_U8)(val & AUMASK_BIT3)) 132*53ee8cc1Swenshuai.xi #define au_bit4_(val) ((MS_U8)(val & AUMASK_BIT4)) 133*53ee8cc1Swenshuai.xi #define au_bit5_(val) ((MS_U8)(val & AUMASK_BIT5)) 134*53ee8cc1Swenshuai.xi #define au_bit6_(val) ((MS_U8)(val & AUMASK_BIT6)) 135*53ee8cc1Swenshuai.xi #define au_bit7_(val) ((MS_U8)(val & AUMASK_BIT7)) 136*53ee8cc1Swenshuai.xi 137*53ee8cc1Swenshuai.xi #define R1BYTE(u32Addr, u8mask) \ 138*53ee8cc1Swenshuai.xi (READ_BYTE ((MS_VIRT)_gMIO_MapBase + ((u32Addr) << 1) - ((u32Addr) & 1)) & (u8mask)) 139*53ee8cc1Swenshuai.xi 140*53ee8cc1Swenshuai.xi #define W1BYTE(u32Addr, u8Val, u8mask) \ 141*53ee8cc1Swenshuai.xi (WRITE_BYTE((MS_VIRT)_gMIO_MapBase + ((u32Addr) << 1) - ((u32Addr) & 1), (R1BYTE(u32Addr, 0xFF) & ~(u8mask)) | ((u8Val) & (u8mask)))) 142*53ee8cc1Swenshuai.xi 143*53ee8cc1Swenshuai.xi // u32Addr must be 16bit aligned 144*53ee8cc1Swenshuai.xi #define R2BYTE(u32Addr, u16mask) \ 145*53ee8cc1Swenshuai.xi (READ_WORD ((MS_VIRT)_gMIO_MapBase + ((u32Addr) << 1)) & (u16mask)) 146*53ee8cc1Swenshuai.xi 147*53ee8cc1Swenshuai.xi // u32Addr must be 16bit aligned 148*53ee8cc1Swenshuai.xi #define W2BYTE(u32Addr, u16Val, u16mask) \ 149*53ee8cc1Swenshuai.xi (WRITE_WORD((MS_VIRT)_gMIO_MapBase + ((u32Addr) << 1), (R2BYTE(u32Addr, 15:0) & ~(u16mask)) | ((u16Val) & (u16mask)))) 150*53ee8cc1Swenshuai.xi 151*53ee8cc1Swenshuai.xi /////////////////////////////////////////////////////////////// 152*53ee8cc1Swenshuai.xi #define _AU_AbsWriteByte( u32Reg, u8Val ) \ 153*53ee8cc1Swenshuai.xi do { \ 154*53ee8cc1Swenshuai.xi (WRITE_BYTE((MS_VIRT)_gMIO_MapBase + ((u32Reg) << 1) - ((u32Reg) & 1), u8Val)); \ 155*53ee8cc1Swenshuai.xi }while(0) 156*53ee8cc1Swenshuai.xi 157*53ee8cc1Swenshuai.xi #define _AU_AbsWrite2Byte( u32Reg, u16Val ) \ 158*53ee8cc1Swenshuai.xi do { \ 159*53ee8cc1Swenshuai.xi (WRITE_WORD((MS_VIRT)_gMIO_MapBase + ((u32Reg) << 1), u16Val)); \ 160*53ee8cc1Swenshuai.xi }while(0) 161*53ee8cc1Swenshuai.xi 162*53ee8cc1Swenshuai.xi #define _AU_AbsWriteMaskByte( u32Reg, u8Mask, u8Val ) \ 163*53ee8cc1Swenshuai.xi do { \ 164*53ee8cc1Swenshuai.xi (WRITE_BYTE((MS_VIRT)_gMIO_MapBase + ((u32Reg) << 1) - ((u32Reg) & 1), (R1BYTE((u32Reg), 0xFF) & ~(u8Mask)) | ((u8Val) & (u8Mask)))); \ 165*53ee8cc1Swenshuai.xi }while(0) 166*53ee8cc1Swenshuai.xi 167*53ee8cc1Swenshuai.xi #define _AU_AbsReadByte( u32Reg) (READ_BYTE ((MS_VIRT)_gMIO_MapBase + ((u32Reg) << 1) - ((u32Reg) & 1))) 168*53ee8cc1Swenshuai.xi #define _AU_AbsRead2Byte( u32Reg) (READ_WORD ((MS_VIRT)_gMIO_MapBase + ((u32Reg) << 1)) ) 169*53ee8cc1Swenshuai.xi 170*53ee8cc1Swenshuai.xi #define HAL_AUDIO_DecReadReg HAL_AUDIO_ReadReg 171*53ee8cc1Swenshuai.xi #define HAL_AUDIO_SeReadReg HAL_AUDIO_ReadReg 172*53ee8cc1Swenshuai.xi #define HAL_AUDIO_DecReadByte HAL_AUDIO_ReadByte 173*53ee8cc1Swenshuai.xi #define HAL_AUDIO_SeReadByte HAL_AUDIO_ReadByte 174*53ee8cc1Swenshuai.xi #define HAL_AUDIO_DecWriteByte HAL_AUDIO_WriteByte 175*53ee8cc1Swenshuai.xi #define HAL_AUDIO_SeWriteByte HAL_AUDIO_WriteByte 176*53ee8cc1Swenshuai.xi #define HAL_AUDIO_DecWriteMaskByte HAL_AUDIO_WriteMaskByte 177*53ee8cc1Swenshuai.xi #define HAL_AUDIO_SeWriteMaskByte HAL_AUDIO_WriteMaskByte 178*53ee8cc1Swenshuai.xi #define HAL_AUDIO_DecWriteReg HAL_AUDIO_WriteReg 179*53ee8cc1Swenshuai.xi #define HAL_AUDIO_SeWriteReg HAL_AUDIO_WriteReg 180*53ee8cc1Swenshuai.xi #define HAL_AUDIO_DecWriteMaskReg HAL_AUDIO_WriteMaskReg 181*53ee8cc1Swenshuai.xi #define HAL_AUDIO_SeWriteMaskReg HAL_AUDIO_WriteMaskReg 182*53ee8cc1Swenshuai.xi 183*53ee8cc1Swenshuai.xi //Enable MS10 DDT Dual decode 184*53ee8cc1Swenshuai.xi #define MS10_DDT_DUAL 185*53ee8cc1Swenshuai.xi 186*53ee8cc1Swenshuai.xi #if (defined(CONFIG_MBOOT)) 187*53ee8cc1Swenshuai.xi #define AUDIO_DELAY1US(x) {int xxxx, jjjj, iiii=0; for(xxxx=0; xxxx<x; xxxx++) for(jjjj=0; jjjj<10; jjjj++) iiii++; } 188*53ee8cc1Swenshuai.xi #define AUDIO_DELAY1MS(x) {int xxxx, jjjj, iiii=0; for(xxxx=0; xxxx<x; xxxx++) for(jjjj=0; jjjj<10000; jjjj++) iiii++; } 189*53ee8cc1Swenshuai.xi #elif (defined(MCU_AEON)) 190*53ee8cc1Swenshuai.xi #define AUDIO_DELAY1US(x) MsOS_DelayTaskUs(x) 191*53ee8cc1Swenshuai.xi #define AUDIO_DELAY1MS(x) AUDIO_DELAY1US(x*1000) 192*53ee8cc1Swenshuai.xi #else 193*53ee8cc1Swenshuai.xi #define AUDIO_DELAY1US(x) MsOS_DelayTaskUs(x) 194*53ee8cc1Swenshuai.xi #define AUDIO_DELAY1MS(x) MsOS_DelayTask(x) 195*53ee8cc1Swenshuai.xi #endif 196*53ee8cc1Swenshuai.xi 197*53ee8cc1Swenshuai.xi #define AUDIO_HW_DMA_READER1_SUPPORT 1 198*53ee8cc1Swenshuai.xi #define AUDIO_HW_DMA_READER2_SUPPORT 1 199*53ee8cc1Swenshuai.xi #define AUDIO_SW_DMA_READER1_SUPPORT 0 200*53ee8cc1Swenshuai.xi #define AUDIO_R2_DMA_READER1_SUPPORT 0 201*53ee8cc1Swenshuai.xi #define AUDIO_R2_DMA_READER2_SUPPORT 0 202*53ee8cc1Swenshuai.xi #define AUDIO_PCM_CAPTURE1_SUPPORT 1 203*53ee8cc1Swenshuai.xi #define AUDIO_PCM_CAPTURE2_SUPPORT 1 204*53ee8cc1Swenshuai.xi #define AUDIO_HW_DMA_WRITER1_SUPPORT 0 205*53ee8cc1Swenshuai.xi 206*53ee8cc1Swenshuai.xi #define ASND_R2_SUPPORT 0 207*53ee8cc1Swenshuai.xi 208*53ee8cc1Swenshuai.xi #define AUDIO_AD_SUPPORT 1 209*53ee8cc1Swenshuai.xi 210*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 211*53ee8cc1Swenshuai.xi // Type and Structure 212*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 213*53ee8cc1Swenshuai.xi typedef struct 214*53ee8cc1Swenshuai.xi { 215*53ee8cc1Swenshuai.xi MS_S64 curPTS; 216*53ee8cc1Swenshuai.xi MS_U32 os_Time; 217*53ee8cc1Swenshuai.xi MS_BOOL set2Clr; 218*53ee8cc1Swenshuai.xi } AUDIO_PTS_INFO; 219*53ee8cc1Swenshuai.xi 220*53ee8cc1Swenshuai.xi typedef struct 221*53ee8cc1Swenshuai.xi { 222*53ee8cc1Swenshuai.xi MS_U32 Mem_addr; 223*53ee8cc1Swenshuai.xi MS_U32 Mem_size; 224*53ee8cc1Swenshuai.xi } AUDIO_RTSP_INFO; 225*53ee8cc1Swenshuai.xi 226*53ee8cc1Swenshuai.xi /// Audio register structure 227*53ee8cc1Swenshuai.xi typedef struct 228*53ee8cc1Swenshuai.xi { 229*53ee8cc1Swenshuai.xi MS_U32 u32Addr; ///< Reg address 230*53ee8cc1Swenshuai.xi MS_U8 u8Mask; ///<Reg Mask 231*53ee8cc1Swenshuai.xi MS_U8 u8Value; ///<Reg Value 232*53ee8cc1Swenshuai.xi }AUDIO_REG_TYPE, *PAUDIO_REG_TYPE; 233*53ee8cc1Swenshuai.xi 234*53ee8cc1Swenshuai.xi /// Audio register structure2 235*53ee8cc1Swenshuai.xi typedef struct 236*53ee8cc1Swenshuai.xi { 237*53ee8cc1Swenshuai.xi MS_U32 u32Addr; ///< Reg address2 238*53ee8cc1Swenshuai.xi MS_U16 u16Mask; ///<Reg Mask2 239*53ee8cc1Swenshuai.xi MS_U16 u16Value; ///<Reg Value2 240*53ee8cc1Swenshuai.xi }AUDIO_REG_TYPE2, *PAUDIO_REG_TYPE2; 241*53ee8cc1Swenshuai.xi 242*53ee8cc1Swenshuai.xi //================================================================ 243*53ee8cc1Swenshuai.xi // Structure 244*53ee8cc1Swenshuai.xi //================================================================ 245*53ee8cc1Swenshuai.xi 246*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 247*53ee8cc1Swenshuai.xi // Function and Variable 248*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------------------------- 249*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_InitialVars(void); 250*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_DeInitialVars(void); 251*53ee8cc1Swenshuai.xi void HAL_AUDIO_SET_INIT_FLAG(MS_BOOL bSet); 252*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_GET_INIT_FLAG(void); 253*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_Mutex_Init(void); 254*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_Mutex_DeInit(void); 255*53ee8cc1Swenshuai.xi void HAL_AUDIO_Set_MMIO_BASE(MS_VIRT _MMIO_MapBase); 256*53ee8cc1Swenshuai.xi AU_CHIP_TYPE HAL_AUDIO_GetChipType(void); 257*53ee8cc1Swenshuai.xi void HAL_AUDIO_SET_IPAUTH(MS_U32 ip_auth); 258*53ee8cc1Swenshuai.xi void HAL_AUDIO_DSPPowerSaving(HDMI_TX_OUTPUT_TYPE outType_tmp); 259*53ee8cc1Swenshuai.xi 260*53ee8cc1Swenshuai.xi //================================================================ 261*53ee8cc1Swenshuai.xi // Basic Register read/write function 262*53ee8cc1Swenshuai.xi //================================================================ 263*53ee8cc1Swenshuai.xi MS_U8 HAL_AUDIO_AbsReadByte(MS_U32 u32RegAddr); 264*53ee8cc1Swenshuai.xi MS_U8 HAL_AUDIO_ReadByte(MS_U32 u32RegAddr); 265*53ee8cc1Swenshuai.xi MS_U16 HAL_AUDIO_AbsReadReg(MS_U32 u32RegAddr); 266*53ee8cc1Swenshuai.xi MS_U16 HAL_AUDIO_ReadReg(MS_U32 u32RegAddr); 267*53ee8cc1Swenshuai.xi void HAL_AUDIO_AbsWriteByte(MS_U32 u32RegAddr, MS_U8 u8Val); 268*53ee8cc1Swenshuai.xi void HAL_AUDIO_WriteByte(MS_U32 u32RegAddr, MS_U8 u8Val); 269*53ee8cc1Swenshuai.xi void HAL_AUDIO_AbsWriteReg(MS_U32 u32RegAddr, MS_U16 u16Val); 270*53ee8cc1Swenshuai.xi void HAL_AUDIO_WriteReg(MS_U32 u32RegAddr, MS_U16 u16Val); 271*53ee8cc1Swenshuai.xi void HAL_AUDIO_AbsWriteMaskReg(MS_U32 u32RegAddr, MS_U16 u16Mask, MS_U16 u16Val); 272*53ee8cc1Swenshuai.xi void HAL_AUDIO_WriteMaskReg(MS_U32 u32RegAddr, MS_U16 u16Mask, MS_U16 u16Val); 273*53ee8cc1Swenshuai.xi void HAL_AUDIO_AbsWriteMaskByte(MS_U32 u32RegAddr, MS_U8 u8Mask, MS_U8 u8Val); 274*53ee8cc1Swenshuai.xi void HAL_AUDIO_WriteMaskByte(MS_U32 u32RegAddr, MS_U8 u8Mask, MS_U8 u8Val); 275*53ee8cc1Swenshuai.xi 276*53ee8cc1Swenshuai.xi void _HAL_AUDIO_Write4Byte(MS_U32 u32RegAddr, MS_U32 u32Val); 277*53ee8cc1Swenshuai.xi 278*53ee8cc1Swenshuai.xi void HAL_AUDIO_WriteMailBox(MS_BOOL bDspType, MS_U8 u8ParamNum, MS_U16 u16Data); 279*53ee8cc1Swenshuai.xi MS_U16 HAL_AUDIO_ReadMailBox(MS_BOOL bDspType, MS_U8 u8ParamNum); 280*53ee8cc1Swenshuai.xi void HAL_AUDIO_DmaReader_AllInput_Init(void); 281*53ee8cc1Swenshuai.xi 282*53ee8cc1Swenshuai.xi //================================================================ 283*53ee8cc1Swenshuai.xi // For Audio initialize 284*53ee8cc1Swenshuai.xi //================================================================ 285*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_Init(MS_BOOL Initype); 286*53ee8cc1Swenshuai.xi void HAL_AUDIO_WriteInitTable(void); 287*53ee8cc1Swenshuai.xi void HAL_AUDIO_WritePreInitTable(void); //Refine power on sequence for earphone & DAC pop noise issue 288*53ee8cc1Swenshuai.xi void HAL_AUDIO_WriteStopDecTable(void); //Set stop command to R2/DSP 289*53ee8cc1Swenshuai.xi void HAL_AUDIO_DAC_Clock_OnOff(MS_BOOL b_enable); 290*53ee8cc1Swenshuai.xi void HAL_AUDIO_EnaEarphone_LowPower_Stage(void); //Refine power on sequence for earphone & DAC pop noise issue 291*53ee8cc1Swenshuai.xi void HAL_AUDIO_EnaEarphone_HighDriving_Stage(void); //Refine power on sequence for earphone & DAC pop noise issue 292*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetPowerOn(MS_BOOL bPower_on); 293*53ee8cc1Swenshuai.xi void HAL_AUDIO_ADCInit(void); 294*53ee8cc1Swenshuai.xi void HAL_AUDIO_SwResetMAD(void); 295*53ee8cc1Swenshuai.xi void HAL_AUDIO_ResetDSP(void); 296*53ee8cc1Swenshuai.xi void HAL_AUDIO_TriggerSifPLL(void); 297*53ee8cc1Swenshuai.xi 298*53ee8cc1Swenshuai.xi void HAL_AUDIO_DecDspISR(void); 299*53ee8cc1Swenshuai.xi void HAL_AUDIO_SeDspISR(void); 300*53ee8cc1Swenshuai.xi 301*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetPlayFileFlag(MS_BOOL bDspType, MS_BOOL bSet); 302*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_GetPlayFileFlag(MS_BOOL bDspType); 303*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetEncodeDoneFlag(MS_BOOL bSet); 304*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_GetEncodeDoneFlag(void); 305*53ee8cc1Swenshuai.xi void HAL_AUDIO_DmaWriter_Init(void); 306*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_CheckBootOnInitState(void); 307*53ee8cc1Swenshuai.xi 308*53ee8cc1Swenshuai.xi //================================================================ 309*53ee8cc1Swenshuai.xi // Audio I/O Config. function 310*53ee8cc1Swenshuai.xi //================================================================ 311*53ee8cc1Swenshuai.xi AUDIO_PATH_GROUP_TYPE HAL_AUDIO_GetPathGroup(void); 312*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetNormalPath(AUDIO_PATH_TYPE path, AUDIO_INPUT_TYPE input, AUDIO_OUTPUT_TYPE output); 313*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetInputPath(AUDIO_INPUT_TYPE u8Input, AUDIO_PATH_TYPE u8Path); 314*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetOutputPath(AUDIO_PATH_TYPE u8Path, AUDIO_OUTPUT_TYPE u8Output); 315*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetInternalPath(AUDIO_INTERNAL_PATH_TYPE u8Path, AUDIO_OUTPUT_TYPE u8Output); 316*53ee8cc1Swenshuai.xi void HAL_AUDIO_FwTriggerDSP(MS_U16 u16Cmd); 317*53ee8cc1Swenshuai.xi void HAL_AUDIO_DspBootOnDDR(MS_BOOL bEnable); 318*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_GetIsDtvFlag(void); 319*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetIsDtvFlag(MS_BOOL); 320*53ee8cc1Swenshuai.xi 321*53ee8cc1Swenshuai.xi MS_U8 HAL_AUDIO_ReadDspCodeType(void); 322*53ee8cc1Swenshuai.xi MS_U8 HAL_AUDIO_Dec_Status(void); 323*53ee8cc1Swenshuai.xi MS_U8 HAL_AUDIO_Se_Status(void); 324*53ee8cc1Swenshuai.xi void HAL_AUDIO_Set_Fading(MS_U32 u32VolFading); 325*53ee8cc1Swenshuai.xi 326*53ee8cc1Swenshuai.xi void HAL_AUDIO_BT_SetUploadRate(MS_BOOL bEnable,MS_U8 u8Samprate); 327*53ee8cc1Swenshuai.xi void HAL_AUDIO_BT_SetBufferCounter(MS_U32 u32Counter); 328*53ee8cc1Swenshuai.xi void HAL_AUDIO_USBPCM_Enable(MS_BOOL bEnable); 329*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_USBPCM_GetFlag(void); 330*53ee8cc1Swenshuai.xi void HAL_AUDIO_USBPCM_SetFlag(MS_BOOL bEnable); 331*53ee8cc1Swenshuai.xi void HAL_AUDIO_USBPCM_GetMemInfo(AUDIO_UPLOAD_INFO *uploadInfo); 332*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_SetDataCaptureSource(AUDIO_DEVICE_TYPE eID, AUDIO_CAPTURE_SOURCE_TYPE eSource); 333*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_PCMCapture_Init(const AUDIO_DEVICE_TYPE eID, const AUDIO_CAPTURE_SOURCE_TYPE eSource); 334*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_PCMCapture_Start(const AUDIO_DEVICE_TYPE eID); 335*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_PCMCapture_Stop(const AUDIO_DEVICE_TYPE eID); 336*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_PCMCapture_Read(const AUDIO_DEVICE_TYPE eID, void* buffer, const MS_U32 bytes); 337*53ee8cc1Swenshuai.xi 338*53ee8cc1Swenshuai.xi void _HAL_AUDIO_I2S_SetMode(MS_U8 u8Mode, MS_U8 u8Val); 339*53ee8cc1Swenshuai.xi 340*53ee8cc1Swenshuai.xi //===================================================== 341*53ee8cc1Swenshuai.xi // AUDIO SPDIF Relational Hal Function 342*53ee8cc1Swenshuai.xi //===================================================== 343*53ee8cc1Swenshuai.xi void _HAL_AUDIO_SPDIF_HWEN(MS_BOOL bEnable); 344*53ee8cc1Swenshuai.xi void _HAL_AUDIO_SPDIF_SetMute(MS_BOOL bEnMute); 345*53ee8cc1Swenshuai.xi void HAL_AUDIO_SPDIF_SetMode(MS_U8 u8Spdif_mode, MS_U8 u8Input_src); 346*53ee8cc1Swenshuai.xi MS_U8 _HAL_AUDIO_SPDIF_GetMode(void); 347*53ee8cc1Swenshuai.xi void _HAL_AUDIO_SPDIF_ByPassChannel(MS_BOOL bEnable); 348*53ee8cc1Swenshuai.xi void HAL_AUDIO_SPDIF_SetSCMS(MS_U8 C_bit_en, MS_U8 L_bit_en); 349*53ee8cc1Swenshuai.xi MS_U8 HAL_AUDIO_SPDIF_GetSCMS(void); 350*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetChannelStatus(SPDIF_CS_MODE_TYPE eType, SPDIF_CS_MODE_VALUE eValue); 351*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_SPDIF_ChannelStatus_CTRL(AUDIO_SPDIF_CS_TYPE cs_mode, AUDIO_SPDIF_CS_TYPE_STATUS status); 352*53ee8cc1Swenshuai.xi void HAL_AUDIO_SPDIF_Monitor_SamplingRate(void); 353*53ee8cc1Swenshuai.xi void HAL_AUDIO_SPDIF_SetOutputType(AUDIO_SOURCE_INFO_TYPE eSource, AUDIO_SPDIF_OUTPUT_TYPE eType); 354*53ee8cc1Swenshuai.xi 355*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetDigitalOut(DIGITAL_OUTPUT_TYPE ePath, AUDIO_DIGITAL_OUTPUT_TYPE eDigitalMode); 356*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_DigitalOut_SetChannelStatus(DIGITAL_OUTPUT_TYPE ePath, Digital_Out_Channel_Status_t *stChannelStatus); 357*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_DigitalOut_GetChannelStatus(DIGITAL_OUTPUT_TYPE ePath, Digital_Out_Channel_Status_t *stChannelStatus); 358*53ee8cc1Swenshuai.xi void HAL_AUDIO_Set_DecimationMode(AUDIO_OUTPUT_TYPE Output_Type, Audio_id ID); 359*53ee8cc1Swenshuai.xi 360*53ee8cc1Swenshuai.xi //===================================================== 361*53ee8cc1Swenshuai.xi // AUDIO HDMI Relational Hal Function 362*53ee8cc1Swenshuai.xi //===================================================== 363*53ee8cc1Swenshuai.xi void _HAL_AUDIO_HDMI_Tx_SetMute(MS_BOOL bEnMute); 364*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_HDMI_NonpcmMonitor(void); 365*53ee8cc1Swenshuai.xi MS_U8 HAL_AUDIO_HDMI_NonpcmMonitor2(void); 366*53ee8cc1Swenshuai.xi MS_U8 HAL_AUDIO_HDMI_DolbyMonitor(void); 367*53ee8cc1Swenshuai.xi void HAL_AUDIO_HDMI_SetNonpcm(MS_U8 u8NonPCM_en); 368*53ee8cc1Swenshuai.xi void HAL_AUDIO_HDMI_AC3_PathCFG(MS_U8 u8Ctrl); 369*53ee8cc1Swenshuai.xi MS_U16 HAL_AUDIO_HDMI_Get_SYNTH_FREQ(void); 370*53ee8cc1Swenshuai.xi void HAL_AUDIO_HDMI_Set_DwonSample(MS_U8 ratio); 371*53ee8cc1Swenshuai.xi void HAL_AUDIO_HDMIAutoMute(MS_U8 ch, MS_U8 value); 372*53ee8cc1Swenshuai.xi void HAL_AUDIO_HDMI_Tx_GetStatus(MS_BOOL *onOff, AUDIO_FS_TYPE *hdmi_SmpFreq, HDMI_TX_OUTPUT_TYPE *outType ); 373*53ee8cc1Swenshuai.xi void HAL_AUDIO_HDMI_TX_SetMode(HDMI_TX_OUTPUT_TYPE outType, AUDIO_SOURCE_INFO_TYPE eSource); 374*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_HDMI_RX_GetHdmiInAudioStatus( ST_HDMI_AUDIO_STATUS *p_hdmiAudioSts); 375*53ee8cc1Swenshuai.xi //================================================================ 376*53ee8cc1Swenshuai.xi // for audio driver internal use function 377*53ee8cc1Swenshuai.xi //================================================================ 378*53ee8cc1Swenshuai.xi void _HAL_AUDIO_InitStep1(void); 379*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetDspBaseAddr(MS_U8 u8Index, MS_PHY phyBin_Base_Address, MS_PHY phyMad_Base_Buffer_Adr); 380*53ee8cc1Swenshuai.xi MS_PHY HAL_AUDIO_GetDspMadBaseAddr(MS_U8 u8Index); 381*53ee8cc1Swenshuai.xi MS_PHY HAL_AUDIO_GetDspBinBaseAddr(MS_U8 u8Index); 382*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetDspCodeType(AUDIO_DSP_CODE_TYPE dspCodeType, MS_BOOL bFlag); 383*53ee8cc1Swenshuai.xi AUDIO_DSP_CODE_TYPE HAL_AUDIO_GetDspCodeType(void); 384*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetDsp2CodeType(AUDIO_DSP_CODE_TYPE dspCodeType, MS_BOOL bFlag); 385*53ee8cc1Swenshuai.xi AUDIO_DSP_CODE_TYPE HAL_AUDIO_GetDsp2CodeType(void); 386*53ee8cc1Swenshuai.xi MS_U8 HAL_AUDIO_GetDSPalive(void); 387*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetDSPalive(MS_U8 alive); 388*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetAdvSndEffDspCodeType(AUDIO_DSP_CODE_TYPE dspCodeType, MS_BOOL bFlag); 389*53ee8cc1Swenshuai.xi AUDIO_DSP_CODE_TYPE HAL_AUDIO_GetAdvSndEffDspCodeType(void); 390*53ee8cc1Swenshuai.xi void HAL_AUDIO_BackupMailbox(void); 391*53ee8cc1Swenshuai.xi void HAL_AUDIO_RestoreMailbox(void); 392*53ee8cc1Swenshuai.xi MS_U8 HAL_AUDIO_Enc_Status(void); 393*53ee8cc1Swenshuai.xi void HAL_AUDIO_DmaReader_Init(SAMPLE_RATE sampleRate); 394*53ee8cc1Swenshuai.xi void HAL_AUDIO_DmaReader_AllInput_Init(void); 395*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_DmaReader_WritePCM(void* buffer, MS_U32 bytes); 396*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetEntertainmentMode(AUDIO_ENTERTAINMENT_MODE eMode); 397*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_AlgReloadCode(AUDIO_DSP_CODE_TYPE dspCodeType); 398*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_Alg2ReloadCode(AUDIO_DSP_CODE_TYPE dspCodeType); 399*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_SetSystem(En_DVB_decSystemType enDecSystem); 400*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_GetDecSysSupportStatus(En_DVB_decSystemType enDecSystem); 401*53ee8cc1Swenshuai.xi 402*53ee8cc1Swenshuai.xi MS_U16 HAL_AUDIO_GetUniDecodeDoneTag(void); 403*53ee8cc1Swenshuai.xi MS_U16 HAL_AUDIO_GetUniDecodeFrameCnt(AUDIO_DEC_ID eDSPId); 404*53ee8cc1Swenshuai.xi void HAL_AUDIO_PTS_info( MS_VIRT ); 405*53ee8cc1Swenshuai.xi 406*53ee8cc1Swenshuai.xi void HAL_AUDIO_RebootDecDSP(void); 407*53ee8cc1Swenshuai.xi MS_U8 HAL_AUDIO_ReadDspCounter(AUDIO_DSP_COUNTER_TYPE CounterType); 408*53ee8cc1Swenshuai.xi void HAL_AUDIO_DspReboot(MS_U8 alive); 409*53ee8cc1Swenshuai.xi void HAL_AUDIO_SetPowerDownWait(MS_BOOL bEnable); 410*53ee8cc1Swenshuai.xi void HAL_AUDIO_SendIntrupt(MS_BOOL bDspType,MS_U16 u8Cmd); 411*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_SeSystemLoadCode(void); 412*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_DecoderLoadCode(void); 413*53ee8cc1Swenshuai.xi 414*53ee8cc1Swenshuai.xi extern MS_BOOL HAL_AUDSP_DspLoadCode(AUDIO_DSP_CODE_TYPE dspCodeType); 415*53ee8cc1Swenshuai.xi void HAL_AUDIO_update_DspUsage(AUDIO_SOURCE_INFO_TYPE eSourceType); 416*53ee8cc1Swenshuai.xi Audio_id HAL_AUDIO_Convert_DecId_to_ADECId(AUDIO_DEC_ID dec_id); 417*53ee8cc1Swenshuai.xi 418*53ee8cc1Swenshuai.xi MS_U32 HAL_AUDIO_GetCaps(AUDIO_DEC_ID DecId, MS_U32 *pCaps); 419*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_CheckPlayDone(void); 420*53ee8cc1Swenshuai.xi 421*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_InputSwitch(AUDIO_SWITCH_GROUP enGroup); 422*53ee8cc1Swenshuai.xi 423*53ee8cc1Swenshuai.xi //================================================================ 424*53ee8cc1Swenshuai.xi // Audio ALSA Interface Relational Function 425*53ee8cc1Swenshuai.xi //================================================================ 426*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_ALSA_Check(void); 427*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_ALSA_Enable(MS_BOOL bEnable); 428*53ee8cc1Swenshuai.xi 429*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_ReloadCode(AUDIO_DSP_ID id, AUDIO_DSP_CODE_TYPE code_type); 430*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_AlgReloadCode2(AUDIO_DSP_ID id, void * pau_info); 431*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_SetSystem2(AUDIO_DEC_ID DecId, En_DVB_decSystemType Param); 432*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_SetDecodeSystem(AUDIO_DEC_ID DecId, AudioDecStatus_t *p_AudioDecStatus); 433*53ee8cc1Swenshuai.xi //================================================================ 434*53ee8cc1Swenshuai.xi // Audio dump debug message 435*53ee8cc1Swenshuai.xi //================================================================ 436*53ee8cc1Swenshuai.xi void HAL_AUDIO_DumpDspInfo(void); 437*53ee8cc1Swenshuai.xi AUDIO_DEC_ID HAL_AUDIO_OpenDecodeSystem(AudioDecStatus_t * p_AudioDecStatus); 438*53ee8cc1Swenshuai.xi MS_PHY HAL_AUDIO_GetDDRInfo(AUDIO_DEC_ID DecId, EN_AUDIO_DDRINFO DDRInfo); 439*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_CheckVersionInfo(void); 440*53ee8cc1Swenshuai.xi 441*53ee8cc1Swenshuai.xi //================================================================ 442*53ee8cc1Swenshuai.xi // Audio Common PCM Interface 443*53ee8cc1Swenshuai.xi //================================================================ 444*53ee8cc1Swenshuai.xi #if AUDIO_HW_DMA_READER1_SUPPORT 445*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Reader1_Open(void *pData); 446*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Reader1_Close(void); 447*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Reader1_Start(void); 448*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Reader1_Stop(void); 449*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Reader1_Set(MS_U32 u32Cmd, const void *pData); 450*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Reader1_Get(MS_U32 u32Cmd, void *pData); 451*53ee8cc1Swenshuai.xi MS_U32 HAL_AUDIO_PCM_HwDma_Reader1_Write(const void *pBuf, MS_U32 u32Size); 452*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Reader1_Flush(void); 453*53ee8cc1Swenshuai.xi #endif 454*53ee8cc1Swenshuai.xi 455*53ee8cc1Swenshuai.xi #if AUDIO_HW_DMA_READER2_SUPPORT 456*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Reader2_Open(void *pData); 457*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Reader2_Close(void); 458*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Reader2_Start(void); 459*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Reader2_Stop(void); 460*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Reader2_Set(MS_U32 u32Cmd, const void *pData); 461*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Reader2_Get(MS_U32 u32Cmd, void *pData); 462*53ee8cc1Swenshuai.xi MS_U32 HAL_AUDIO_PCM_HwDma_Reader2_Write(const void *pBuf, MS_U32 u32Size); 463*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Reader2_Flush(void); 464*53ee8cc1Swenshuai.xi #endif 465*53ee8cc1Swenshuai.xi 466*53ee8cc1Swenshuai.xi #if AUDIO_SW_DMA_READER1_SUPPORT 467*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_SwDma_Reader1_Open(void *pData); 468*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_SwDma_Reader1_Close(void); 469*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_SwDma_Reader1_Start(void); 470*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_SwDma_Reader1_Stop(void); 471*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_SwDma_Reader1_Set(MS_U32 u32Cmd, const void *pData); 472*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_SwDma_Reader1_Get(MS_U32 u32Cmd, void *pData); 473*53ee8cc1Swenshuai.xi MS_U32 HAL_AUDIO_PCM_SwDma_Reader1_Write(const void *pBuf, MS_U32 u32Size); 474*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_SwDma_Reader1_Flush(void); 475*53ee8cc1Swenshuai.xi #endif 476*53ee8cc1Swenshuai.xi 477*53ee8cc1Swenshuai.xi #if AUDIO_R2_DMA_READER1_SUPPORT 478*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_R2Dma_Reader1_Open(void *pData); 479*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_R2Dma_Reader1_Close(void); 480*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_R2Dma_Reader1_Start(void); 481*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_R2Dma_Reader1_Stop(void); 482*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_R2Dma_Reader1_Set(MS_U32 u32Cmd, const void *pData); 483*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_R2Dma_Reader1_Get(MS_U32 u32Cmd, void *pData); 484*53ee8cc1Swenshuai.xi MS_U32 HAL_AUDIO_PCM_R2Dma_Reader1_Write(const void *pBuf, MS_U32 u32Size); 485*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_R2Dma_Reader1_Flush(void); 486*53ee8cc1Swenshuai.xi #endif 487*53ee8cc1Swenshuai.xi 488*53ee8cc1Swenshuai.xi #if AUDIO_R2_DMA_READER2_SUPPORT 489*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_R2Dma_Reader2_Open(void *pData); 490*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_R2Dma_Reader2_Close(void); 491*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_R2Dma_Reader2_Start(void); 492*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_R2Dma_Reader2_Stop(void); 493*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_R2Dma_Reader2_Set(MS_U32 u32Cmd, const void *pData); 494*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_R2Dma_Reader2_Get(MS_U32 u32Cmd, void *pData); 495*53ee8cc1Swenshuai.xi MS_U32 HAL_AUDIO_PCM_R2Dma_Reader2_Write(const void *pBuf, MS_U32 u32Size); 496*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_R2Dma_Reader2_Flush(void); 497*53ee8cc1Swenshuai.xi #endif 498*53ee8cc1Swenshuai.xi 499*53ee8cc1Swenshuai.xi #if AUDIO_PCM_CAPTURE1_SUPPORT 500*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_Capture1_Open(void *pData); 501*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_Capture1_Close(void); 502*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_Capture1_Start(void); 503*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_Capture1_Stop(void); 504*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_Capture1_Set(MS_U32 u32Cmd, const void *pData); 505*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_Capture1_Get(MS_U32 u32Cmd, void *pData); 506*53ee8cc1Swenshuai.xi MS_U32 HAL_AUDIO_PCM_Capture1_Read(void *pBuf, MS_U32 u32Size); 507*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_Capture1_Flush(void); 508*53ee8cc1Swenshuai.xi #endif 509*53ee8cc1Swenshuai.xi 510*53ee8cc1Swenshuai.xi #if AUDIO_PCM_CAPTURE2_SUPPORT 511*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_Capture2_Open(void *pData); 512*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_Capture2_Close(void); 513*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_Capture2_Start(void); 514*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_Capture2_Stop(void); 515*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_Capture2_Set(MS_U32 u32Cmd, const void *pData); 516*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_Capture2_Get(MS_U32 u32Cmd, void *pData); 517*53ee8cc1Swenshuai.xi MS_U32 HAL_AUDIO_PCM_Capture2_Read(void *pBuf, MS_U32 u32Size); 518*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_Capture2_Flush(void); 519*53ee8cc1Swenshuai.xi #endif 520*53ee8cc1Swenshuai.xi 521*53ee8cc1Swenshuai.xi #if AUDIO_HW_DMA_WRITER1_SUPPORT 522*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Writer1_Open(void *pData); 523*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Writer1_Close(void); 524*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Writer1_Start(void); 525*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Writer1_Stop(void); 526*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Writer1_Set(MS_U32 u32Cmd, const void *pData); 527*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Writer1_Get(MS_U32 u32Cmd, void *pData); 528*53ee8cc1Swenshuai.xi MS_U32 HAL_AUDIO_PCM_HwDma_Writer1_Read(void *pBuf, MS_U32 u32Size); 529*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_PCM_HwDma_Writer1_Flush(void); 530*53ee8cc1Swenshuai.xi #endif 531*53ee8cc1Swenshuai.xi 532*53ee8cc1Swenshuai.xi AUDIO_SOURCE_INFO_TYPE HAL_AUDIO_ConvertInputType2SourceInfo(AUDIO_INPUT_TYPE eInputType); 533*53ee8cc1Swenshuai.xi 534*53ee8cc1Swenshuai.xi //================================================================ 535*53ee8cc1Swenshuai.xi // Specific Definitions for Audio TEE 536*53ee8cc1Swenshuai.xi //================================================================ 537*53ee8cc1Swenshuai.xi #define ree_to_tee_mbx_msg pAudioTeeInfoShm->ReeToTeeMbxMsg 538*53ee8cc1Swenshuai.xi #define tee_to_ree_mbx_msg pAudioTeeInfoShm->TeeToReeMbxMsg 539*53ee8cc1Swenshuai.xi #define tee_mbx_msg_class pAudioTeeInfoShm->u8MbxMsgClass 540*53ee8cc1Swenshuai.xi #define audio_tee_enabled pAudioTeeInfoShm->g_bAudioTeeEnabled 541*53ee8cc1Swenshuai.xi #define audio_tee_mbx_initialized pAudioTeeInfoShm->g_bAudioTeeMbxInitialized 542*53ee8cc1Swenshuai.xi #define dec_dsp_secure_tee_accessed pAudioTeeInfoShm->g_bDecDspSecureTeeAccessed 543*53ee8cc1Swenshuai.xi #define snd_dsp_secure_tee_accessed pAudioTeeInfoShm->g_bSndDspSecureTeeAccessed 544*53ee8cc1Swenshuai.xi #define mbx_msg_ack_status pAudioTeeInfoShm->ack_status 545*53ee8cc1Swenshuai.xi 546*53ee8cc1Swenshuai.xi #define HALAUDIO_CHECK_TEE_INFO_SHM_INIT \ 547*53ee8cc1Swenshuai.xi do { \ 548*53ee8cc1Swenshuai.xi if (pAudioTeeInfoShm == NULL) \ 549*53ee8cc1Swenshuai.xi { \ 550*53ee8cc1Swenshuai.xi if (HAL_AUDIO_AllocateTeeInfoShm() == NULL) \ 551*53ee8cc1Swenshuai.xi { \ 552*53ee8cc1Swenshuai.xi MS_ASSERT(0); \ 553*53ee8cc1Swenshuai.xi } \ 554*53ee8cc1Swenshuai.xi } \ 555*53ee8cc1Swenshuai.xi } while(0) 556*53ee8cc1Swenshuai.xi 557*53ee8cc1Swenshuai.xi #define AUDIO_TEE_INFO_SHM_CHECK_NULL \ 558*53ee8cc1Swenshuai.xi do { \ 559*53ee8cc1Swenshuai.xi MS_ASSERT(pAudioTeeInfoShm != NULL); \ 560*53ee8cc1Swenshuai.xi } while(0) 561*53ee8cc1Swenshuai.xi 562*53ee8cc1Swenshuai.xi #define REE_TO_TEE_MBX_MSG_SET_PARAM_COUNT(count) \ 563*53ee8cc1Swenshuai.xi do { \ 564*53ee8cc1Swenshuai.xi ree_to_tee_mbx_msg.u8ParameterCount = count; \ 565*53ee8cc1Swenshuai.xi } while(0) 566*53ee8cc1Swenshuai.xi 567*53ee8cc1Swenshuai.xi #define REE_TO_TEE_MBX_MSG_SET_PARAM(index, parameter) \ 568*53ee8cc1Swenshuai.xi do { \ 569*53ee8cc1Swenshuai.xi ree_to_tee_mbx_msg.u8Parameters[index] = parameter; \ 570*53ee8cc1Swenshuai.xi } while(0) 571*53ee8cc1Swenshuai.xi 572*53ee8cc1Swenshuai.xi #define REE_TO_TEE_MBX_MSG_INIT \ 573*53ee8cc1Swenshuai.xi do{ \ 574*53ee8cc1Swenshuai.xi ree_to_tee_mbx_msg.eRoleID=E_MBX_CPU_MIPS_VPE1; \ 575*53ee8cc1Swenshuai.xi ree_to_tee_mbx_msg.u8Ctrl=0; \ 576*53ee8cc1Swenshuai.xi ree_to_tee_mbx_msg.eMsgType=E_MBX_MSG_TYPE_INSTANT; \ 577*53ee8cc1Swenshuai.xi }while(0) 578*53ee8cc1Swenshuai.xi 579*53ee8cc1Swenshuai.xi #define TEE_TO_REE_MBX_MSG_INIT(msg) \ 580*53ee8cc1Swenshuai.xi do{ \ 581*53ee8cc1Swenshuai.xi msg.eRoleID=E_MBX_CPU_MIPS; \ 582*53ee8cc1Swenshuai.xi msg.u8Ctrl=0; \ 583*53ee8cc1Swenshuai.xi msg.eMsgType=E_MBX_MSG_TYPE_INSTANT; \ 584*53ee8cc1Swenshuai.xi }while(0) 585*53ee8cc1Swenshuai.xi 586*53ee8cc1Swenshuai.xi #define MBX_MSG_SET_CLASSID(msg,classID)\ 587*53ee8cc1Swenshuai.xi do{ \ 588*53ee8cc1Swenshuai.xi msg.u8MsgClass = classID; \ 589*53ee8cc1Swenshuai.xi }while(0) 590*53ee8cc1Swenshuai.xi 591*53ee8cc1Swenshuai.xi #define MBX_MSG_SET_CMD(msg,cmd)\ 592*53ee8cc1Swenshuai.xi do{ \ 593*53ee8cc1Swenshuai.xi msg.u8Index = cmd; \ 594*53ee8cc1Swenshuai.xi }while(0) 595*53ee8cc1Swenshuai.xi 596*53ee8cc1Swenshuai.xi #define TEE_MBX_MSG_CLASS_SET(class) \ 597*53ee8cc1Swenshuai.xi do{ \ 598*53ee8cc1Swenshuai.xi tee_mbx_msg_class = class; \ 599*53ee8cc1Swenshuai.xi }while(0) 600*53ee8cc1Swenshuai.xi 601*53ee8cc1Swenshuai.xi //================================================================ 602*53ee8cc1Swenshuai.xi // Audio TEE MBX Message Enum Definitions (REE side to TEE siede) 603*53ee8cc1Swenshuai.xi //================================================================ 604*53ee8cc1Swenshuai.xi typedef enum 605*53ee8cc1Swenshuai.xi { 606*53ee8cc1Swenshuai.xi REE_TO_TEE_MBX_MSG_NULL = 0x0000, 607*53ee8cc1Swenshuai.xi 608*53ee8cc1Swenshuai.xi REE_TO_TEE_MBX_MSG_TYPE_GENERAL = 0x20, 609*53ee8cc1Swenshuai.xi REE_TO_TEE_MBX_MSG_TYPE_DEC = 0x40, 610*53ee8cc1Swenshuai.xi REE_TO_TEE_MBX_MSG_TYPE_SE = 0x80, 611*53ee8cc1Swenshuai.xi // NonDSP Specific General MBX Command 612*53ee8cc1Swenshuai.xi REE_TO_TEE_MBX_MSG_HAL_AUDIO_SetDspBaseAddr = 0x01, 613*53ee8cc1Swenshuai.xi // DSP Specific MBX Command 614*53ee8cc1Swenshuai.xi REE_TO_TEE_MBX_MSG_HAL_AUDSP_DspLoadCode = 0x11 615*53ee8cc1Swenshuai.xi } REE_TO_TEE_MBX_MSG_TYPE; 616*53ee8cc1Swenshuai.xi 617*53ee8cc1Swenshuai.xi //================================================================ 618*53ee8cc1Swenshuai.xi // Audio TEE MBX Message Enum Definitions (TEE side to REE siede) 619*53ee8cc1Swenshuai.xi //================================================================ 620*53ee8cc1Swenshuai.xi typedef enum 621*53ee8cc1Swenshuai.xi { 622*53ee8cc1Swenshuai.xi TEE_TO_REE_MBX_MSG_NULL = 0x00, 623*53ee8cc1Swenshuai.xi TEE_TO_REE_MBX_ACK_MSG_INVALID = 0x80, 624*53ee8cc1Swenshuai.xi TEE_TO_REE_MBX_ACK_MSG_NO_TEE = 0x81, 625*53ee8cc1Swenshuai.xi TEE_TO_REE_MBX_ACK_MSG_ACTION_SUCCESS = 0x90, 626*53ee8cc1Swenshuai.xi TEE_TO_REE_MBX_ACK_MSG_ACTION_FAIL = 0x91 627*53ee8cc1Swenshuai.xi } TEE_TO_REE_MBX_ACK_MSG_TYPE; 628*53ee8cc1Swenshuai.xi 629*53ee8cc1Swenshuai.xi typedef struct 630*53ee8cc1Swenshuai.xi { 631*53ee8cc1Swenshuai.xi MS_U32 g_ShmID; 632*53ee8cc1Swenshuai.xi MS_BOOL g_bAudioTeeEnabled; 633*53ee8cc1Swenshuai.xi MS_BOOL g_bAudioTeeMbxInitialized; 634*53ee8cc1Swenshuai.xi 635*53ee8cc1Swenshuai.xi MS_BOOL g_bDecDspSecureTeeAccessed; 636*53ee8cc1Swenshuai.xi MS_BOOL g_bSndDspSecureTeeAccessed; 637*53ee8cc1Swenshuai.xi 638*53ee8cc1Swenshuai.xi MBX_Msg ReeToTeeMbxMsg; 639*53ee8cc1Swenshuai.xi MBX_Msg TeeToReeMbxMsg; 640*53ee8cc1Swenshuai.xi MS_U8 u8MbxMsgClass; 641*53ee8cc1Swenshuai.xi MS_U32 g_u32ClientCounter; 642*53ee8cc1Swenshuai.xi TEE_TO_REE_MBX_ACK_MSG_TYPE ack_status; 643*53ee8cc1Swenshuai.xi } AUDIO_TEE_INFO_SHARE_MEM; 644*53ee8cc1Swenshuai.xi 645*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_NUTTX 646*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_ResetTeeInfoShmToDefault(void); 647*53ee8cc1Swenshuai.xi AUDIO_TEE_INFO_SHARE_MEM *HAL_AUDIO_AllocateTeeInfoShm(void); 648*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_DeAllocateTeeInfoShm(void); 649*53ee8cc1Swenshuai.xi 650*53ee8cc1Swenshuai.xi //================================================================ 651*53ee8cc1Swenshuai.xi // Audio Mailbox Relational Function 652*53ee8cc1Swenshuai.xi //================================================================ 653*53ee8cc1Swenshuai.xi MS_BOOL HAL_AUDIO_RegisterMBX(void); 654*53ee8cc1Swenshuai.xi TEE_TO_REE_MBX_ACK_MSG_TYPE HAL_AUDIO_SendMBXMsg(REE_TO_TEE_MBX_MSG_TYPE msg_type); 655*53ee8cc1Swenshuai.xi #endif 656*53ee8cc1Swenshuai.xi 657*53ee8cc1Swenshuai.xi AUDIO_DSP_CODE_TYPE HAL_AUDIO_Convert_EnDVBdecSystemType_to_AudioDspCodeType(En_DVB_decSystemType enDecSystem); 658*53ee8cc1Swenshuai.xi void HAL_AUDIO_ResetDspCodeType(void); 659*53ee8cc1Swenshuai.xi MS_S32 HAL_AUDIO_CheckHashkeyDone(MS_U32 ip_auth); 660*53ee8cc1Swenshuai.xi 661*53ee8cc1Swenshuai.xi #endif // _DEV_AUDIO_H_ 662