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!�L) 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 /////////////////////////////////////////////////////////////////////////////////////////////////// 96 /// 97 /// @file drvXC_HDMI_if_EX.h 98 /// @brief HDMI Interface 99 /// @author MStar Semiconductor Inc. 100 /////////////////////////////////////////////////////////////////////////////////////////////////// 101 102 #ifndef DRVXC_HDMI_IF_EX_H 103 #define DRVXC_HDMI_IF_EX_H 104 105 #include "MsCommon.h" 106 107 // Driver 108 #include "drvXC_IOPort_EX.h" 109 110 // Api 111 #include "apiXC_EX.h" 112 113 #ifdef __cplusplus 114 extern "C" 115 { 116 #endif 117 118 //------------------------------------------------------------------------------------------------- 119 // Driver Capability 120 //------------------------------------------------------------------------------------------------- 121 122 #ifdef MDRV_HDMI_EX_C 123 #define INTERFACE 124 #else 125 #define INTERFACE extern 126 #endif 127 128 //------------------------------------------------------------------------------------------------- 129 // Macro and Define 130 //------------------------------------------------------------------------------------------------- 131 #define _HDMI_EX_BYTE_0 0x00 132 #define _HDMI_EX_BYTE_1 0x01 133 #define _HDMI_EX_BYTE_2 0x02 134 #define _HDMI_EX_BYTE_3 0x03 135 #define _HDMI_EX_BYTE_4 0x04 136 #define _HDMI_EX_BYTE_5 0x05 137 #define _HDMI_EX_BYTE_6 0x06 138 #define _HDMI_EX_BYTE_7 0x07 139 #define _HDMI_EX_BYTE_8 0x08 140 #define _HDMI_EX_BYTE_9 0x09 141 #define _HDMI_EX_BYTE_10 0x0A 142 #define _HDMI_EX_BYTE_11 0x0B 143 #define _HDMI_EX_BYTE_12 0x0C 144 #define _HDMI_EX_BYTE_13 0x0D 145 // library information 146 #define MSIF_HDMI_EX_LIB_CODE {'H','D','M','I'} 147 #define MSIF_HDMI_EX_LIBVER {'0','1'} 148 #define MSIF_HDMI_EX_BUILDNUM {'0','7'} 149 #define MSIF_HDMI_EX_CHANGELIST {'0','0','3','5','1','6','6','3'} 150 #define HDMI_EX_DRV_VERSION /* Character String for DRV/API version */ \ 151 MSIF_TAG, /* 'MSIF' */ \ 152 MSIF_CLASS, /* '00' */ \ 153 MSIF_CUS, /* 0x0000 */ \ 154 MSIF_MOD, /* 0x0000 */ \ 155 MSIF_CHIP, \ 156 MSIF_CPU, \ 157 MSIF_HDMI_EX_LIB_CODE , /* IP__ */ \ 158 MSIF_HDMI_EX_LIBVER , /* 0.0 ~ Z.Z */ \ 159 MSIF_HDMI_EX_BUILDNUM , /* 00 ~ 99 */ \ 160 MSIF_HDMI_EX_CHANGELIST, /* CL# */ \ 161 MSIF_OS 162 163 //------------------------------------------------------------------------------------------------- 164 // Type and Structure 165 //------------------------------------------------------------------------------------------------- 166 167 /// HDMI reset type 168 typedef enum 169 { 170 E_HDMI_EX_REST_AVMUTE = _XC_EX_BIT(8), ///<HDMI Reset bit[8] 171 E_HDMI_EX_REST_Y_COLOR = _XC_EX_BIT(9), ///<HDMI Reset bit[9] 172 E_HDMI_EX_REST_PIXEL_REPETITION = _XC_EX_BIT(10), ///<HDMI Reset bit[10] 173 E_HDMI_EX_REST_FRAME_REPETITION = _XC_EX_BIT(11), ///<HDMI Reset bit[11] 174 E_HDMI_EX_REST_GCP_PKT = _XC_EX_BIT(12), ///<HDMI Reset bit[12] 175 E_HDMI_EX_REST_DEEP_COLOR_FIFO = _XC_EX_BIT(13), ///<HDMI Reset bit[13] 176 E_HDMI_EX_REST_RESERVE = _XC_EX_BIT(14), ///<HDMI Reset bit[14] 177 E_HDMI_EX_REST_HDMI_STATUS = _XC_EX_BIT(15), ///<HDMI Reset bit[15] 178 } HDMI_EX_REST; 179 180 /*! 181 HDMI Aspect Ratio TYPE 182 */ 183 typedef enum 184 { 185 // Active Format Aspect Ratio - AFAR 186 // HDMI_EX_AF_AR_Not_Present = -1, ///< IF0[11..8] AFD not present, or AFD not yet found 187 E_HDMI_EX_AF_AR_Reserve_0 = 0x00, ///< IF0[11..8] 0000, Reserved 188 E_HDMI_EX_AF_AR_Reserve_1 = 0x01, ///< IF0[11..8] 0001, Reserved 189 E_HDMI_EX_AF_AR_16x9_Top = 0x02, ///< IF0[11..8] 0010, box 16:9 (top). 190 E_HDMI_EX_AF_AR_14x9_Top = 0x03, ///< IF0[11..8] 0011, box 14:9 (top). 191 E_HDMI_EX_AF_AR_GT_16x9 = 0x04, ///< IF0[11..8] 0100, box >16:9 (centre) 192 E_HDMI_EX_AF_AR_Reserve_5 = 0x05, ///< IF0[11..8] 0101, Reserved 193 E_HDMI_EX_AF_AR_Reserve_6 = 0x06, ///< IF0[11..8] 0110, Reserved 194 E_HDMI_EX_AF_AR_Reserve_7 = 0x07, ///< IF0[11..8] 0111, Reserved 195 E_HDMI_EX_AF_AR_SAME = 0x08, ///< IF0[11..8] 1000, same as picture 196 E_HDMI_EX_AF_AR_4x3_C = 0x09, ///< IF0[11..8] 1001, 4:3 Center 197 E_HDMI_EX_AF_AR_16x9_C = 0x0A, ///< IF0[11..8] 1010, 16:9 Center 198 E_HDMI_EX_AF_AR_14x9_C = 0x0B, ///< IF0[11..8] 1011, 14:9 Center 199 E_HDMI_EX_AF_AR_Reserve_12 = 0x0C, ///< IF0[11..8] 1100, Reserved. 200 E_HDMI_EX_AF_AR_4x3_with_14x9_C = 0x0D, ///< IF0[11..8] 1101, 4:3 with shoot and protect 14:9 centre. 201 E_HDMI_EX_AF_AR_16x9_with_14x9_C = 0x0E, ///< IF0[11..8] 1110, 16:9 with shoot and protect 14:9 centre. 202 E_HDMI_EX_AF_AR_16x9_with_4x3_C = 0x0F, ///< IF0[11..8] 1111, 16:9 with shoot and protect 4:3 centre. 203 204 // Picture Aspect Ratio - PAR 205 E_HDMI_EX_Pic_AR_NODATA = 0x00, ///< IF0[13..12] 00 206 E_HDMI_EX_Pic_AR_4x3 = 0x10, ///< IF0[13..12] 01, 4:3 207 E_HDMI_EX_Pic_AR_16x9 = 0x20, ///< IF0[13..12] 10, 16:9 208 E_HDMI_EX_Pic_AR_RSV = 0x30, ///< IF0[13..12] 11, reserved 209 } HDMI_EX_AR_TYPE; 210 211 //------------------------------------------------------------------------------------------------- 212 /// AVI infomation frame version 213 //------------------------------------------------------------------------------------------------- 214 typedef enum 215 { 216 E_HDMI_EX_AVI_INFOFRAME_VERSION_NON, //invalid version 217 E_HDMI_EX_AVI_INFOFRAME_VERSION1, //AVI infomation frame version 1 218 E_HDMI_EX_AVI_INFOFRAME_VERSION2 //AVI infomation frame version 2 219 } HDMI_EX_AVI_INFOFRAME_VERSION; 220 221 #define HDMI_EX_AR_INIT_VALUE (E_HDMI_EX_Pic_AR_RSV) 222 #define HDMI_EX_AR_REG_MASK (0x3F) 223 #define HDMI_EX_AFAR_MASK (0x0F) // mask to get the AFAR 224 #define HDMI_EX_AR_MASK (0x30) // mask to get the PAR 225 226 /// HDMI GControl package type. 227 typedef enum 228 { 229 E_HDMI_EX_GCTRL_AVMUTE = 0, ///< bit[0]: AVMUTE 230 E_HDMI_EX_GCTRL_DEFAULT_PHASE, ///< bit[1]: Default_Phase 231 E_HDMI_EX_GCTRL_LAST_PP, ///< bit[4:2]: LAST_PP[2:0] 232 E_HDMI_EX_GCTRL_PRE_LPP, ///< bit[7:5]: PRE_LPP[2:0] 233 E_HDMI_EX_GCTRL_CD_VAL, ///< bit[11:8]: CD_VAL[3:0] 234 E_HDMI_EX_GCTRL_PP_VAL, ///< bit[15:12]: PP_VAL[3:0] 235 E_HDMI_EX_GCTRL_ALL 236 } HDMI_EX_GControl_INFO; 237 238 /// HDMI PLL control type 239 typedef enum 240 { 241 E_HDMI_EX_PLL_CTRL_L=0, ///< HDMI_PLL_CTRL1_L 7:0 242 E_HDMI_EX_PLL_CTRL_MANUAL_DIV, ///< MANUAL_PLL_DIV 7 243 E_HDMI_EX_PLL_CTRL_PORST, ///< PLL_PORST 6 244 E_HDMI_EX_PLL_CTRL_RESET_TP, ///< RESET_TP 5 245 E_HDMI_EX_PLL_CTRL_RESET_TF, ///< RESET_TF 4 246 E_HDMI_EX_PLL_CTRL_RESET_TI, ///< RESET_TI 3 247 E_HDMI_EX_PLL_CTRL_VCO_OFFSET, ///< VCO_OFFSET 2 248 E_HDMI_EX_PLL_CTRL_RESET, ///< PLL_RESET 1 249 E_HDMI_EX_PLL_CTRL_PWRDOWN, ///< PWRDOWN 0 250 251 E_HDMI_EX_PLL_CTRL_H, ///< HDMI_PLL_CTRL1_H 7:0 252 E_HDMI_EX_PLL_CTRL_KN, ///< KN[1:0] 7:6 253 E_HDMI_EX_PLL_CTRL_RCTRL, ///< RCTRL 5:3 254 E_HDMI_EX_PLL_CTRL_ICTRL, ///< ICTRL 2:0 255 } HDMI_EX_PLL_CTRL; 256 257 /// HDMI PLL control type 258 typedef enum 259 { 260 E_HDMI_EX_PLL_CTRL2_L, ///< HDMI_PLL_CTRL2_L 7:0 261 E_HDMI_EX_PLL_CTRL2_KP, ///< KP[3:0] 7:4 262 E_HDMI_EX_PLL_CTRL2_KM, ///< KM[3:0] 3:0 263 264 E_HDMI_EX_PLL_CTRL2_H, ///< HDMI_PLL_CTRL2_H 7:0 265 E_HDMI_EX_PLL_CTRL2_DDIV, ///< DDIV[3:0] 7:4 266 E_HDMI_EX_PLL_CTRL2_FBDIV, ///< FBDIV[3:0] 3:0 267 } HDMI_EX_PLL_CTRL2; 268 269 #ifndef DRVXC_HDMI_IF_H 270 ////===========================>>HDMI 271 typedef struct 272 { 273 MS_BOOL bIsHDMIMode; 274 MS_BOOL bMuteHDMIVideo; 275 276 MS_BOOL bMuteHDMIAudio; 277 MS_BOOL bEnableNonPCM; 278 MS_U8 u8AudioStbCnt; // If stable more than HDMI_AUDIO_STABLE_CNT, enable audio 279 // In 199M case, audio on->off->on->off->on, so, we wait 4 * HDMI_AUDIO_STABLE_CNT, if unstable, 280 // enable audio still to prevent mute audio always because of un-stable 281 MS_U8 u8AudioForceEnableCnt; 282 283 MS_U8 u8ColorFormat; 284 MS_U8 u8LostHDMICounter; 285 MS_BOOL bColorFMTChange; 286 MS_U8 u8PreClolrFormat; 287 MS_U8 u8AspectRatio; 288 } HDMI_POLLING_STATUS_t; 289 #endif 290 291 typedef enum 292 { 293 E_HDMI_EX_DVI_CHANNEL_R, 294 E_HDMI_EX_DVI_CHANNEL_G, 295 E_HDMI_EX_DVI_CHANNEL_B, 296 } HDMI_EX_DVI_CHANNEL_TYPE; 297 298 /// HDMI COLOR FORMAT 299 typedef enum 300 { 301 E_HDMI_EX_COLOR_RGB, ///< HDMI RGB 444 Color Format 302 E_HDMI_EX_COLOR_YUV_422, ///< HDMI YUV 422 Color Format 303 E_HDMI_EX_COLOR_YUV_444, ///< HDMI YUV 444 Color Format 304 E_HDMI_EX_COLOR_RESERVED, ///< Reserve 305 E_HDMI_EX_COLOR_DEFAULT = E_HDMI_EX_COLOR_RGB, ///< Default setting 306 E_HDMI_EX_COLOR_UNKNOWN = 7, ///< Unknow Color Format 307 } HDMI_EX_COLOR_FORMAT; 308 309 ///HDMI COLOR RANGE 310 typedef enum 311 { 312 E_HDMI_EX_COLOR_RANGE_DEFAULT, // 313 E_HDMI_EX_COLOR_RANGE_LIMIT, //HDMI RGB Limited Range (16-235) 314 E_HDMI_EX_COLOR_RANGE_FULL, //HDMI Full Range (0-255) 315 E_HDMI_EX_COLOR_RANGE_RESERVED 316 } HDMI_EX_COLOR_RANGE; 317 318 /// HDMI Content Type 319 typedef enum 320 { 321 E_HDMI_EX_CONTENT_NoData = 0, // No Data. 322 E_HDMI_EX_CONTENT_Graphics, // Graphics(text). 323 E_HDMI_EX_CONTENT_Photo, // Photo type. 324 E_HDMI_EX_CONTENT_Cinema, // Cinema type. 325 E_HDMI_EX_CONTENT_Game, // Game type. 326 } HDMI_EX_CONTENT_TYPE; 327 328 /// HDMI Extended COLORIMETRY 329 typedef enum 330 { 331 E_HDMI_EX_EXT_COLOR_XVYCC601, ///< xvycc 601 332 E_HDMI_EX_EXT_COLOR_XVYCC709, ///< xvycc 709 333 E_HDMI_EX_EXT_COLOR_SYCC601, ///< sYCC 601 334 E_HDMI_EX_EXT_COLOR_ADOBEYCC601, ///< Adobe YCC 601 335 E_HDMI_EX_EXT_COLOR_ADOBERGB, ///< Adobe RGB 336 E_HDMI_EX_EXT_COLOR_DEFAULT = E_HDMI_EX_EXT_COLOR_XVYCC601, ///< Default setting 337 E_HDMI_EX_EXT_COLOR_UNKNOWN = 7, ///< Unknow 338 } HDMI_EX_EXT_COLORIMETRY_FORMAT; 339 340 /// HDMI Equalize Level 341 typedef enum 342 { 343 E_HDMI_EX_EQ_2M, ///< HDMI EQ 2M 344 E_HDMI_EX_EQ_10M, ///< HDMI EQ 10M 345 E_HDMI_EX_EQ_15M, ///< HDMI EQ 15M 346 E_HDMI_EX_EQ_MAX, ///< HDMI EQ MAX 347 E_HDMI_EX_EQ_USER_DEFINE, ///< HDMI EQ User define 348 } HDMI_EX_EQ; 349 350 /// HDMI Packet nauber 351 typedef enum 352 { 353 E_HDMI_EX_PKT_MPEG = _XC_EX_BIT(0), ///< Pactet[0] 354 E_HDMI_EX_PKT_AUI = _XC_EX_BIT(1), ///< Pactet[1] 355 E_HDMI_EX_PKT_SPD = _XC_EX_BIT(2), ///< Pactet[2] 356 E_HDMI_EX_PKT_AVI = _XC_EX_BIT(3), ///< Pactet[3] 357 E_HDMI_EX_PKT_GC = _XC_EX_BIT(4), ///< Pactet[4] 358 E_HDMI_EX_PKT_ASAMPLE = _XC_EX_BIT(5), ///< Pactet[5] 359 E_HDMI_EX_PKT_ACR = _XC_EX_BIT(6), ///< Pactet[6] 360 E_HDMI_EX_PKT_VS = _XC_EX_BIT(7), ///< Pactet[7] 361 E_HDMI_EX_PKT_NULL = _XC_EX_BIT(8), ///< Pactet[8] 362 E_HDMI_EX_PKT_ISRC2 = _XC_EX_BIT(9), ///< Pactet[9] 363 E_HDMI_EX_PKT_ISRC1 = _XC_EX_BIT(10), ///< Pactet[10] 364 E_HDMI_EX_PKT_ACP = _XC_EX_BIT(11), ///< Pactet[11] 365 E_HDMI_EX_PKT_ONEBIT_AUD = _XC_EX_BIT(12), ///< Pactet[12] 366 } HDMI_EX_PACKET_STATE; 367 368 typedef enum 369 { 370 E_HDMI_EX_CAPS_DVI_ADJ_70M = _XC_EX_BIT(0), 371 E_HDMI_EX_CAPS_VSYNC_END_EN = _XC_EX_BIT(1), 372 } HDMI_EX_FUNC_CAPS; 373 374 /// HDMI PACKET VALUE structure 375 typedef struct 376 { 377 MS_U16 PKT_MPEG_VALUE; ///< MPEG packet content 378 MS_U16 PKT_AUI_VALUE; ///< AUI packet content 379 MS_U16 PKT_SPD_VALUE; ///< SPD packet content 380 MS_U16 PKT_AVI_VALUE; ///< AVI packet content 381 MS_U16 PKT_GC_VALUE; ///< GC packet content 382 MS_U16 PKT_ASAMPLE_VALUE; ///< ASAMPLE packet content 383 MS_U16 PKT_ACR_VALUE; ///< ACR packet content 384 MS_U16 PKT_VS_VALUE; ///< VS packet content 385 MS_U16 PKT_NULL_VALUE; ///< NULL packet content 386 MS_U16 PKT_ISRC2_VALUE; ///< ISRC2 packet content 387 MS_U16 PKT_ISRC1_VALUE; ///< ISRC1 packet content 388 MS_U16 PKT_ACP_VALUE; ///< ACP packet content 389 MS_U16 PKT_ONEBIT_AUD_VALUE; ///< ONE bit AUD packet content 390 } HDMI_EX_PACKET_VALUE; 391 392 typedef struct 393 { 394 MS_U8 AVMuteStatus; 395 MS_U8 AudioNotPCM; 396 MS_U8 PreAudiostatus; 397 MS_U8 ChecksumErrOrBCHParityErr; 398 MS_U8 PacketColorFormat; 399 MS_U8 AspectRatio; 400 MS_U8 AudioPacketErr; 401 MS_U8 ACPType; 402 } HDMI_EX_PACKET_STATUS; 403 404 405 typedef struct 406 { 407 HDMI_EX_PACKET_VALUE enPKT_Value; 408 HDMI_EX_PACKET_STATUS enPKT_Status; 409 } HDMI_EX_PACKET_INFO, *P_HDMI_EX_PACKET_INFO; 410 411 /// HDCP STATUS INFO structure 412 typedef struct 413 { 414 MS_BOOL b_St_HDMI_Mode; ///> HDCP_STATUS[0] & BIT0 415 MS_BOOL b_St_Reserve_1; ///> (HDCP_STATUS[0] & BIT1)>>1 416 MS_BOOL b_St_HDCP_Ver; ///> (HDCP_STATUS[0] & BIT2)>>2 417 MS_BOOL b_St_AVMute; ///> (HDCP_STATUS[0] & BIT3)>>3 418 MS_BOOL b_St_ENC_En; ///> (HDCP_STATUS[0] & BIT4)>>4 419 MS_BOOL b_St_AKsv_Rcv; ///> (HDCP_STATUS[0] & BIT5)>>5 420 MS_BOOL b_St_ENC_Dis; ///> (HDCP_STATUS[0] & BIT6)>>6 421 MS_BOOL b_St_Reserve_7; ///> (HDCP_STATUS[0] & BIT7)>>7 422 } HDCP_EX_STATUS_INFO; 423 424 /// HDMI Black Level 425 typedef enum 426 { 427 E_HDMI_EX_BLACK_LEVEL_LOW = 0, ///> HDMI black level low 428 E_HDMI_EX_BLACK_LEVEL_HIGH, ///> HDMI black level high 429 } HDMI_EX_BLACK_LEVEL; 430 431 /// VGA/DVI/HDMI EDID 432 typedef enum 433 { 434 E_XC_EX_PROG_DVI0_EDID = 0x00, 435 E_XC_EX_PROG_DVI1_EDID = 0x01, 436 E_XC_EX_PROG_DVI2_EDID = 0x02, 437 E_XC_EX_PROG_DVI3_EDID = 0x03, 438 E_XC_EX_PROG_VGA_EDID = 0x10, 439 } XC_EX_DDCRAM_PROG_TYPE; 440 441 typedef struct 442 { 443 MS_U8 *EDID; ///< customer EDID 444 MS_U16 u16EDIDSize; ///< 128 for VGA/DVI , 256 for HDMI 445 XC_EX_DDCRAM_PROG_TYPE eDDCProgType; ///< what kind of DDCRam to program 446 447 MS_U16 u16CECPhyAddr; ///< if only 1 Digital DDCRam (get this information from MApi_XC_GetInfo()), you need to specify CEC physical address here 448 MS_U8 u8CECPhyAddrIdxL; ///< start point of CEC physical address (low byte) in EDID 449 MS_U8 u8CECPhyAddrIdxH; ///< start point of CEC physical address (high byte) in EDID 450 } XC_EX_DDCRAM_PROG_INFO; 451 452 ////===========================>>HDCP 453 454 #ifndef DRVXC_HDMI_IF_H 455 ///HDCP polling status 456 typedef struct 457 { 458 MS_BOOL bHPD_OK; ///< HPD OK 459 MS_U16 u16HPD_Counter; ///< HPD times counter 460 MS_U16 u16HDCP_KeyCounter; /// > HDCP key number 461 MS_U16 u16HDCP_KeyChkSum; ///> HDCP key check sum 462 MS_BOOL bIsPullHighHPD; ///> HPD is high or not 463 MS_U8 u8BKSV[5]; ///> BKSV 464 465 } HDCP_POLLING_STATUS_t; 466 #endif 467 468 /** 469 * The return value for HDMI fuction. 470 */ 471 typedef enum 472 { 473 /// fail 474 E_HDMI_EX_RET_FAIL = 0, 475 /// success 476 E_HDMI_EX_RET_OK, 477 } HDMI_EX_RET_VALUE; 478 479 480 // HDMI v1.4 new feature - T8 and T9 481 typedef enum 482 { 483 E_HDMI_EX_NO_ADDITIONAL_FORMAT, // 000 484 E_HDMI_EX_4Kx2K_FORMAT, // 001 485 E_HDMI_EX_3D_FORMAT, // 010 486 E_HDMI_EX_RESERVED, // 011 ~ 111 487 E_HDMI_EX_NA // Not available 488 } HDMI_EX_ADDITIONAL_VIDEO_FORMAT; 489 490 typedef enum 491 { 492 E_HDMI_EX_VIC_4Kx2K_30Hz = 0x01, // 1920(x2)x1080(x2) @ 29.97/30Hz 493 E_HDMI_EX_VIC_4Kx2K_25Hz = 0x02, // 1920(x2)x1080(x2) @ 25Hz 494 E_HDMI_EX_VIC_4Kx2K_24Hz = 0x03, // 1920(x2)x1080(x2) @ 23.976/24Hz 495 E_HDMI_EX_VIC_4Kx2K_24Hz_SMPTE = 0x04, // 2048(x2)x1080(x2) @ 24Hz 496 E_HDMI_EX_VIC_RESERVED, // 0x00, 0x05 ~ 0xFF 497 E_HDMI_EX_VIC_NA // Not available 498 } HDMI_EX_VIC_4Kx2K_CODE; 499 500 typedef enum 501 { 502 E_HDMI_EX_3D_EXT_DATA_HOR_SUB_SAMPL_0, //0000 503 E_HDMI_EX_3D_EXT_DATA_HOR_SUB_SAMPL_1, //0001 504 E_HDMI_EX_3D_EXT_DATA_HOR_SUB_SAMPL_2, //0010 505 E_HDMI_EX_3D_EXT_DATA_HOR_SUB_SAMPL_3, //0011 506 E_HDMI_EX_3D_EXT_DATA_QUINCUNX_MATRIX_0, //0100 507 E_HDMI_EX_3D_EXT_DATA_QUINCUNX_MATRIX_1, //0101 508 E_HDMI_EX_3D_EXT_DATA_QUINCUNX_MATRIX_2, //0110 509 E_HDMI_EX_3D_EXT_DATA_QUINCUNX_MATRIX_3, //0111 510 E_HDMI_EX_3D_EXT_DATA_RESERVE, //1000 ~ 1111 511 E_HDMI_EX_3D_EXT_DATA_MODE_MAX, 512 } HDMI_EX_3D_EXT_DATA; 513 514 typedef enum 515 { 516 E_HDMI_EX_3D_META_DATA_PARALLAX_ISO23002_3, //0000 517 E_HDMI_EX_3D_META_DATA_RESERVE, //001 ~ 1111 518 E_HDMI_EX_3D_META_DATA_MAX, 519 } HDMI_EX_3D_META_DATA_TYPE; 520 521 typedef struct 522 { 523 MS_BOOL b3D_Meta_Present; 524 HDMI_EX_3D_META_DATA_TYPE t3D_Metadata_Type; 525 MS_U8 u83D_Metadata_Length; 526 MS_U8 u83D_Metadata[23]; // Maximum length of VS is 31 - 8 = 23 527 } HDMI_EX_3D_META_FIELD; 528 529 // Debug 530 /** 531 * HDMI Info 532 */ 533 typedef struct 534 { 535 MS_U8 u8SupportPorts; 536 } HDMI_EX_INFO; 537 538 /** 539 * HDMI Status 540 */ 541 typedef struct 542 { 543 MS_BOOL bIsInitialized; 544 MS_BOOL bIsRunning; 545 } HDMI_EX_Status; 546 547 548 //------------------------------------------------------------------------------------------------- 549 // Function and Variable 550 //------------------------------------------------------------------------------------------------- 551 552 //HDMI/DVI 553 DLL_PUBLIC extern HDMI_POLLING_STATUS_t g_HdmiPollingStatus; 554 555 //HDCP 556 DLL_PUBLIC extern HDCP_POLLING_STATUS_t g_HdcpPollingStatus; 557 558 DLL_PUBLIC extern MS_U16 g_AVMUTEMissingCounter; 559 DLL_PUBLIC extern MS_U16 g_AVIMissingCounter; 560 DLL_PUBLIC extern MS_U16 g_ACPMissingCounter; 561 562 #ifdef DVI_NEW_Patch 563 // 20081226 - DVI+HDCP snow noise patch - start ... 564 DLL_PUBLIC extern MS_U16 g_DVI70MhzPollingCounter; 565 DLL_PUBLIC extern MS_U8 g_DVI70MhzUnstableCounter; 566 DLL_PUBLIC extern MS_BOOL g_bDVILess70MHz; 567 // 20081226 - DVI+HDCP snow noise patch - end ... 568 #endif 569 570 571 //HDMI 572 DLL_PUBLIC INTERFACE HDMI_EX_RET_VALUE MDrv_HDMI_EX_GetLibVer(const MSIF_Version **ppVersion); ///< Get version (without Mutex protect) 573 DLL_PUBLIC INTERFACE HDMI_EX_RET_VALUE MDrv_HDMI_EX_GetInfo(HDMI_EX_INFO *pInfo); 574 DLL_PUBLIC INTERFACE HDMI_EX_RET_VALUE MDrv_HDMI_EX_GetStatus(HDMI_EX_Status *pStatus); 575 DLL_PUBLIC INTERFACE MS_BOOL MDrv_HDMI_EX_Get_AVIInfoActiveInfoPresent(void); 576 577 DLL_PUBLIC INTERFACE MS_U16 MDrv_HDMI_EX_Func_Caps(void); 578 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_init( XC_DEVICE_ID *pDeviceId ); 579 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_Exit( XC_DEVICE_ID *pDeviceId ); 580 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_pkt_reset( XC_DEVICE_ID *pDeviceId, HDMI_EX_REST breset ); 581 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_pullhpd( MS_BOOL bHighLow, E_MUX_INPUTPORT enInputPortType, MS_BOOL bInverse); 582 DLL_PUBLIC INTERFACE MS_U16 MDrv_HDMI_EX_GC_Info(HDMI_EX_GControl_INFO gcontrol); 583 DLL_PUBLIC INTERFACE HDMI_EX_PACKET_VALUE MDrv_HDMI_EX_Packet_Received(MS_BOOL bEnable); 584 DLL_PUBLIC INTERFACE HDMI_EX_COLOR_FORMAT MDrv_HDMI_EX_Get_ColorFormat(void); 585 DLL_PUBLIC INTERFACE HDMI_EX_COLOR_RANGE MDrv_HDMI_EX_Get_ColorRange(void); 586 DLL_PUBLIC INTERFACE HDMI_EX_CONTENT_TYPE MDrv_HDMI_EX_Get_Content_Type(void); 587 DLL_PUBLIC INTERFACE HDMI_EX_EXT_COLORIMETRY_FORMAT MDrv_HDMI_EX_Get_ExtColorimetry(void); 588 589 590 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_Set_EQ(XC_DEVICE_ID *pDeviceId, HDMI_EX_EQ enEq, MS_U8 u8EQValue); 591 DLL_PUBLIC INTERFACE MS_BOOL MDrv_HDMI_EX_Set_EQ_To_Port(XC_DEVICE_ID *pDeviceId, HDMI_EX_EQ enEq, MS_U8 u8EQValue, E_MUX_INPUTPORT enInputPortType); 592 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_Audio_MUTE_Enable(MS_U16 u16MuteEvent, MS_U16 u16MuteMask); 593 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_Audio_Status_Clear(void); 594 595 DLL_PUBLIC INTERFACE HDMI_EX_AR_TYPE MDrv_HDMI_EX_Get_AspectRatio(MS_BOOL bEn_PAR, MS_BOOL bEn_AFAR); 596 DLL_PUBLIC INTERFACE HDMI_EX_AR_TYPE MDrv_HDMI_EX_Get_ActiveFormat_AspectRatio(MS_BOOL bEn_AFAR); 597 DLL_PUBLIC INTERFACE HDMI_EX_AVI_INFOFRAME_VERSION MDrv_HDMI_EX_Get_AVIInfoFrameVer(void); 598 599 DLL_PUBLIC INTERFACE MS_U8 MDrv_HDMI_EX_err_status_update(MS_U8 u8value, MS_BOOL bread); 600 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_Get_PollingStatus(HDMI_POLLING_STATUS_t **pStatus); 601 DLL_PUBLIC INTERFACE MS_BOOL MDrv_HDMI_EX_IsHDMI_Mode(void); 602 603 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_Get_MID_info(MS_U8 * pu8ManufactorData); 604 DLL_PUBLIC INTERFACE MS_BOOL MDrv_HDMI_EX_get_packet_value(HDMI_EX_PACKET_STATE u8state, MS_U8 u8byte_idx, MS_U8 *pValue); 605 606 //DVI 607 DLL_PUBLIC INTERFACE MS_U16 MDrv_DVI_EX_ChannelPhaseStatus( HDMI_EX_DVI_CHANNEL_TYPE u8Channel); 608 DLL_PUBLIC INTERFACE void MDrv_DVI_EX_SoftwareReset( MS_U16 u16Reset ); 609 DLL_PUBLIC INTERFACE void mdrv_dvi_ex_reset(XC_DEVICE_ID *pDeviceId); 610 DLL_PUBLIC INTERFACE void MDrv_DVI_EX_ClkPullLow(MS_BOOL bPullLow, E_MUX_INPUTPORT enInputPortType); 611 DLL_PUBLIC INTERFACE void MDrv_DVI_EX_SwitchSrc(E_MUX_INPUTPORT enInputPortType); 612 DLL_PUBLIC INTERFACE MS_BOOL MDrv_HDMI_EX_SetForClockLessThan70Mhz( E_MUX_INPUTPORT InputSourceType ); 613 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_dvi_adjust( MS_BOOL bClockLessThan70MHz); 614 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_SetUpdatePhaseLineCount(XC_DEVICE_ID *pDeviceId, XC_EX_INPUT_SOURCE_TYPE enInputSourceType); 615 //DLL_PUBLIC INTERFACE MS_U16 MDrv_HDMI_GetTMDSFreq(void); 616 617 //HDCP 618 DLL_PUBLIC INTERFACE void MDrv_HDCP_EX_Enable(XC_DEVICE_ID *pDeviceId, MS_BOOL bEnable); 619 DLL_PUBLIC INTERFACE MS_BOOL MDrv_HDMI_EX_SetHdcpEnable(E_MUX_INPUTPORT enInputPortType,MS_BOOL bEnable); 620 DLL_PUBLIC INTERFACE void MDrv_HDCP_EX_ClearStatus( XC_DEVICE_ID *pDeviceId ); 621 DLL_PUBLIC INTERFACE void MDrv_HDCP_EX_initproductionkey( MS_U8 * pu8HdcpKeyData ); 622 DLL_PUBLIC INTERFACE HDCP_EX_STATUS_INFO* MDrv_HDCP_EX_GetStatus(XC_DEVICE_ID *pDeviceId); 623 DLL_PUBLIC INTERFACE void MDrv_HDCP_EX_Vsync_end_en(MS_BOOL bStable); 624 625 //Audio 626 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_audio_output( MS_BOOL bEnable ); 627 DLL_PUBLIC INTERFACE MS_U8 MDrv_HDMI_EX_audio_cp_hdr_info(void); 628 DLL_PUBLIC INTERFACE MS_U8 MDrv_HDMI_EX_audio_channel_status(MS_U8 u8byte); 629 630 // DDC Ram 631 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_READ_DDCRAM(XC_EX_DDCRAM_PROG_INFO *pstDDCRam_Info, MS_U32 u32SizeOfInfo); 632 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_PROG_DDCRAM(XC_EX_DDCRAM_PROG_INFO *pstDDCRam_Info, MS_U32 u32SizeOfInfo); 633 DLL_PUBLIC INTERFACE MS_U8 MDrv_HDMI_EX_Get_Pixel_Repetition(void); 634 635 //#if defined(CHIP_T8) || defined(CHIP_J2) // HDMI 1.4 new feature 636 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_3D_4Kx2K_Process(void); 637 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_AVG_ScaleringDown(MS_BOOL btrue); 638 DLL_PUBLIC INTERFACE MS_BOOL MDrv_HDMI_EX_Check4K2K(void); 639 DLL_PUBLIC INTERFACE HDMI_EX_ADDITIONAL_VIDEO_FORMAT MDrv_HDMI_EX_Check_Additional_Format(void); 640 DLL_PUBLIC INTERFACE XC_EX_3D_INPUT_MODE MDrv_HDMI_EX_Get_3D_Structure(void); 641 DLL_PUBLIC INTERFACE HDMI_EX_3D_EXT_DATA MDrv_HDMI_EX_Get_3D_Ext_Data(void); 642 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_Get_3D_Meta_Field(HDMI_EX_3D_META_FIELD *pdata); 643 DLL_PUBLIC INTERFACE MS_U8 MDrv_HDMI_EX_Get_VIC_Code(void); 644 DLL_PUBLIC INTERFACE HDMI_EX_VIC_4Kx2K_CODE MDrv_HDMI_EX_Get_4Kx2K_VIC_Code(void); 645 // HDMI ARC pin control 646 DLL_PUBLIC INTERFACE void MDrv_HDMI_EX_ARC_PINControl(E_MUX_INPUTPORT enInputPortType, MS_BOOL bEnable, MS_BOOL bDrivingHigh); 647 //#endif 648 649 650 #if 0 651 INTERFACE MS_U8 u8PSDVIStableCount[4]; 652 void MDrv_HDMI_ImmeswitchPS_Handler(void); 653 void MDrv_DVI_ForceAllPortsEnterPS(void); 654 #endif 655 #undef INTERFACE 656 657 658 #ifdef __cplusplus 659 } 660 #endif 661 662 #endif /* DRVXC_HDMI_IF_EX_H */ 663 664