xref: /utopia/UTPA2-700.0.x/projects/tmplib/include/drvXC_HDMI_if_EX.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 //    Software and any modification/derivatives thereof.
18 //    No right, ownership, or interest to MStar Software and any
19 //    modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 //    supplied together with third party`s software and the use of MStar
23 //    Software may require additional licenses from third parties.
24 //    Therefore, you hereby agree it is your sole responsibility to separately
25 //    obtain any and all third party right and license necessary for your use of
26 //    such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 //    MStar`s confidential information and you agree to keep MStar`s
30 //    confidential information in strictest confidence and not disclose to any
31 //    third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35 //    without limitation, any warranties of merchantability, non-infringement of
36 //    intellectual property rights, fitness for a particular purpose, error free
37 //    and in conformity with any international standard.  You agree to waive any
38 //    claim against MStar for any loss, damage, cost or expense that you may
39 //    incur related to your use of MStar Software.
40 //    In no event shall MStar be liable for any direct, indirect, incidental or
41 //    consequential damages, including without limitation, lost of profit or
42 //    revenues, lost or damage of data, and unauthorized system use.
43 //    You agree that this Section 4 shall still apply without being affected
44 //    even if MStar Software has been modified by MStar in accordance with your
45 //    request or instruction for your use, except otherwise agreed by both
46 //    parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 //    services in relation with MStar Software to you for your use of
50 //    MStar Software in conjunction with your or your customer`s product
51 //    ("Services").
52 //    You understand and agree that, except otherwise agreed by both parties in
53 //    writing, Services are provided on an "AS IS" basis and the warranty
54 //    disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 //    or otherwise:
58 //    (a) conferring any license or right to use MStar name, trademark, service
59 //        mark, symbol or any other identification;
60 //    (b) obligating MStar or any of its affiliates to furnish any person,
61 //        including without limitation, you and your customers, any assistance
62 //        of any kind whatsoever, or any information; or
63 //    (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 //    of Taiwan, R.O.C., excluding its conflict of law rules.
67 //    Any and all dispute arising out hereof or related hereto shall be finally
68 //    settled by arbitration referred to the Chinese Arbitration Association,
69 //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 //    Rules of the Association by three (3) arbitrators appointed in accordance
71 //    with the said Rules.
72 //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73 //    be English.
74 //    The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 ////////////////////////////////////////////////////////////////////////////////
79 //
80 // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81 // All rights reserved.
82 //
83 // Unless otherwise stipulated in writing, any and all information contained
84 // herein regardless in any format shall remain the sole proprietary of
85 // MStar Semiconductor Inc. and be kept in strict confidence
86 // (!��MStar Confidential Information!�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