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