xref: /utopia/UTPA2-700.0.x/modules/hdmi/drv/mhl/mdrv_mhl_st.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 /// @file   Mapi_mhl.h
81 /// @author MStar Semiconductor Inc.
82 /// @brief  MHL driver Function
83 ///////////////////////////////////////////////////////////////////////////////////////////////////
84 
85 /*
86     1. Check whether MHL cable is plugged or not in Rx side
87     2. Disable R-term and output Vbus
88     3. Check whether Cbus is connected(discovery pulse completed)
89     4. Sink -> Source: "SET_HPD"
90     5. Sink -> Source: Write_Stat - "DCAP_RDY" and Write_INT - "DCAP_CHG"
91     6. Sink -> Source: Write_Stat - "PATH_EN"
92 */
93 
94 #ifndef _MDRV_MHL_ST_H_
95 #define _MDRV_MHL_ST_H_
96 
97 #include "MsTypes.h"
98 #include "MsCommon.h"
99 
100 #ifdef __cplusplus
101 extern "C"
102 {
103 #endif
104 
105 //-------------------------------------------------------------------------------------------------
106 //  Define
107 //-------------------------------------------------------------------------------------------------
108 #define MODIFY_FOR_LG_LAYOUT                0
109 #define DMHL_INT_ENABLE                     0 // MHL interrupt enable
110 
111 #define DMHL_CTS                            1 // MHL setting for CTS
112 #define DMHL_TIMER_POLLING_COUNTER          0
113 #define DMHL_TIMER_POLLING_INTERVAL         (!DMHL_TIMER_POLLING_COUNTER)
114 
115 #define DEM_POLLING_DELAY                   10U     // Main Loop Polling interval (ms)
116 #define CBUS_COMMAND_TIMEOUT_SECS           2U      // No response for 1 second means we hold off and move
117 #define CBUS_ABORT_PADING_SECS              2U      // Allow bus to quieten down when ABORTs are received.
118 #define CBUS_TIMER_CONTROL_MASK             32768U
119 #define CBUS_TIMER_SECOND_COUNT             1010U
120 #define CBUS_MSC_WAIT_TIME_MS               150U
121 #define CBUS_SWITCH_MUX_TIME_MS             3500U
122 #define CBUS_POLLING_TIMER_INTERVAL         10U // Unit ms
123 #define CBUS_WAIT_MSC_RESPONSE_INTERVAL     101U // 10ms one unit
124 #define CBUS_MSG_RCP_RELEASE_INTERVAL       15U // 10ms one unit
125 #define CBUS_CHECK_CONTENT_ON_INTERVAL      101U // 10ms one unit
126 
127 #define MHL_CBUS_0_SECOND_TIME              0U // ms
128 #define MHL_CBUS_1_SECOND_TIME              1000U // ms
129 #define MHL_CBUS_2_SECOND_TIME              2000U // ms
130 #define MHL_CBUS_3_SECOND_TIME              3000U // ms
131 #define MHL_CBUS_4_SECOND_TIME              4000U // ms
132 #define MHL_CBUS_IDEL_FREE_TIME             0U // ms
133 #define MHL_CBUS_CONNECT_SILENCE_TIME       50U // ms
134 #define MHL_CBUS_CONNECT_HOLD_TIME          150U // ms
135 #define MHL_CBUS_SEND_SILENCE_TIME          MHL_CBUS_2_SECOND_TIME // ms
136 #define MHL_CBUS_ABORT_HOLD_TIME            2040U // ms
137 #define MHL_MSG_WAIT_RESPONSE_TIME          MHL_CBUS_1_SECOND_TIME // ms
138 #define MHL_CBUS_RCP_RELEASE_TIME           150 // ms
139 #define MHL_WAIT_WRITE_GRANT_TIME           500U // ms
140 #define MHL_CHECK_RECEIVE_LOSE_TIME         20U // ms
141 #define MHL_MSG_SEND_RESPONSE_TIME          250U // ms
142 #define MHL_CHECK_CONTENT_ON_TIME           MHL_CBUS_1_SECOND_TIME // ms
143 #define MHL_AUTO_SWITCH_STOP_TIME           MHL_CBUS_2_SECOND_TIME // ms
144 #define MHL_WAIT_ECBUS_LOCK_TIME            MHL_CBUS_3_SECOND_TIME // ms
145 #define MHL_AUTO_EQ_PROCESS_TIME            10U // ms
146 #define MHL_WAIT_PATCH_ON_TIME              80U // ms
147 #define MHL_WAIT_PATCH_OFF_TIME             50U // ms
148 
149 #define DMHL_ADOPTER_ID                     0x02CBU // Mstar: 715
150 #define DMHL_DEVICE_ID                      0x0000U // Chip ID?
151 #define DMHL_VENDOR_ID                      0x00U // ?
152 
153 #define MHL_EDID_TABLE_SIZE                 256U
154 #define MHL_DEVICE_CAPABILITY_SIZE          16U
155 #define MHL_XDEVICE_CAPABILITY_SIZE         4U
156 #define MHL_MSC_SCRATCHPAD_SIZE             16U
157 #define MHL_CBUS_DATA_SIZE                  (MHL_MSC_SCRATCHPAD_SIZE +2) // offset + maxi 16 packets
158 #define DMHL_CBUS_TX_FIFO                   (MHL_MSC_SCRATCHPAD_SIZE +3) // Write_Burst(0x6C) + offset(0x40 ~ 0x7F) + maxi 16 packets + EOF(0x32)
159 #define MHL_CBUS_TX_QUEUE_NUM               3U
160 #define MHL_CBUS_TOTAL_QUEUE_NUM            ((MHL_CBUS_TX_QUEUE_NUM > 0)?(MHL_CBUS_TX_QUEUE_NUM +1):2)
161 #define MHL_CBUS_RX_QUEUE_INDEX             (MHL_CBUS_TOTAL_QUEUE_NUM -1)
162 #define MHL_EMSC_DATA_SIZE                  256U
163 #define MHL_EMSC_DATA_SIZE_THRESHOLD        150U
164 
165 #define DMHL_CTS_HDCP_PATCH                 DISABLE// for CTS HDCP 2C-04
166 #define DMHL_LG_PRADA_PATCH                 ENABLE// for LG PRADA patch
167 #define DMHL_IGNORE_USB_PULSE_PATCH         ENABLE // for ignore USB pulse patch
168 #define DMHL_DE_UNSTABLE_PATCH              ENABLE
169 #define DMHL_WAKE_UP_PULSE_INT              ENABLE
170 #define DMHL_CTS_SEND_MSC                   ENABLE
171 #define DMHL_TEST_HDCP_SOFTWARE_PATCH       ENABLE
172 #define DMHL_AUTO_SENT_RAP_POLLING          DISABLE
173 
174 #define DMHL_TEST_SIGNAL_SUPPORT            DISABLE
175 
176 #define MHL_INPUT_PORT(a)                   (a +65)
177 
178 #define MASKSET(a, b, c)                    ((a &~c) | (b &c))
179 #define ABS_MINUS(a, b)                     ((a > b)? (a -b): (b -a))
180 #define GET_BIT(a)                          (((a) > 0)? 1: 0)
181 
182 #define MHL_EDID_BLOCK_LENGTH               128U
183 #define MHL_EDID_DTD_LENGTH                 18U
184 #define MHL_EDID_FIRST_DTD_START            0x36U
185 #define MHL_EDID_SECOND_DTD_START           0x48U
186 #define MHL_EDID_EXTENSION_FLAG             0x7EU
187 #define MHL_EDID_RESERVED_DATA_BLOCK        0x82U
188 
189 #define MHL_3D_SEQUENCE_LENGTH              5U
190 #define MHL_3D_ITEM_LENGTH                  2U
191 #define MHL_3D_DTD_INFORMATION_LENGTH       8U
192 #define MHL_3D_VIC_INFORMATION_LENGTH       16U
193 
194 #define MHL_VC_SEQUENCE_LENGTH              3U
195 #define MHL_VC_ITEM_LENGTH                  3U
196 #define MHL_VIRTUAL_CHANNEL_LENGTH          7U
197 #define MHL_CBUS1_TIME_SLOT_DEFAULT         1U
198 #define MHL_EMSC_TIME_SLOT_DEFAULT          4U
199 #define MHL_ECBUS_S_TIME_SLOT_TOTAL         25U
200 #define MHL_CBUS_SLOT_NOT_ALLOCATE          0xFFU
201 
202 #define MHL_HEV_VIC_SEQUENCE_LENGTH         5U
203 #define MHL_HEV_VIC_ITEM_LENGTH             2U
204 #define MHL_HEV_VIC_TOTAL_ENTRY             3U
205 #define MHL_HEV_VIC_INFORMATION_LENGTH      6U
206 #define MHL_HEV_VIC_INDEX0                  0x5DU
207 #define MHL_HEV_VIC_INDEX1                  0x5EU
208 #define MHL_HEV_VIC_INDEX2                  0x5FU
209 #define MHL_HEV_VIC_INDEX3                  0x62U
210 #define MHL_HEV_VIC_INDEX4                  0x63U
211 #define MHL_HEV_VIC_INDEX5                  0x64U
212 
213 #define MHL_HEV_DTD_SEQUENCE_LENGTH         1U
214 #define MHL_HEV_DTD_TOTAL_ENTRY             1U
215 
216 #define MHL_AUDIO_TUNNEL_SEQUENCE_LENGTH    3U
217 #define MHL_AUDIO_TUNNEL_ITEM_LENGTH        3U
218 #define MHL_AUDIO_TUNNEL_SAD_RNTRY          1U // Short audio descriptors
219 #define MHL_AUDIO_TUNNEL_SADB_RNTRY         0U // Speaker allocation data block
220 #define MHL_AUDIO_TUNNEL_TOTAL_ENTRY        (MHL_AUDIO_TUNNEL_SAD_RNTRY +MHL_AUDIO_TUNNEL_SADB_RNTRY)
221 #define MHL_AUDIO_TUNNEL_INFORMATION_LENGTH 6U
222 #define MHL_AUDIO_TUNNEL_INDEX0             0UL
223 #define MHL_AUDIO_TUNNEL_INDEX1             0UL
224 #define MHL_AUDIO_TUNNEL_INDEX2             0UL
225 #define MHL_AUDIO_TUNNEL_INDEX3             0UL
226 #define MHL_AUDIO_TUNNEL_INDEX4             0UL
227 #define MHL_AUDIO_TUNNEL_INDEX5             0UL
228 
229 #define MHL_EMSC_SUPPORT_SEQUENCE_LENGTH    5U
230 #define MHL_EMSC_SUPPORT_ITEM_LENGTH        2U
231 #define MHL_EMSC_SUPPORT_TOTAL_ENTRY        1U
232 #define MHL_EMSC_SUPPORT_INFORMATION_LENGTH 6U
233 #define MHL_EMSC_SUPPORT_BURST_ID0          0x0062U // MHL_BURST_ID_HID_PAYLOAD
234 #define MHL_EMSC_SUPPORT_BURST_ID1          0U
235 #define MHL_EMSC_SUPPORT_BURST_ID2          0U
236 #define MHL_EMSC_SUPPORT_BURST_ID3          0U
237 #define MHL_EMSC_SUPPORT_BURST_ID4          0U
238 #define MHL_EMSC_SUPPORT_BURST_ID5          0U
239 
240 #define MHL_ADOPTER_ID_ROKU                 0x0411U
241 #define MHL_ADOPTER_ID_HTC                  0x016FU
242 
243 #define MHL_DEVICE_ID_HTC                   0x0000U
244 
245 #define MHL_ADOPTER_ID_SONY                 0x03A7U
246 
247 #define MHL_POLLING_STACK_SIZE              1U
248 #define MHL_POLLING_INTERVAL_NORMAL         20U
249 #define MHL_POLLING_INTERVAL_BUSY           4U
250 
251 //-------------------------------------------------------------------------------------------------
252 //  Type and Structure
253 //-------------------------------------------------------------------------------------------------
254 enum MHL_QUEUE_STATE_TYPE
255 {
256     MHL_QUEUE_STATE_IDLE = 0,
257     MHL_QUEUE_STATE_SEND,
258     MHL_QUEUE_STATE_PENDING,
259     MHL_QUEUE_STATE_RETRY,
260 };
261 
262 enum MHL_CLEAR_CBUS_FLAG_TYPE
263 {
264     MHL_CLEAR_INITIAL_FLAG = 0,
265     MHL_CLEAR_CABLE_LOSS_FLAG,
266     MHL_CLEAR_CONNECT_LOSS_FLAG,
267     MHL_CLEAR_CBUS_TIME_OUT_FLAG,
268     MHL_CLEAR_MSG_RESPONSE_FLAG,
269 };
270 
271 enum CBUS_HEADER_TYPE
272 {
273     DDC_HEADER = 0,
274     VENDER_HEADER,
275     MSC_HEADER,
276 };
277 
278 enum CBUS_CONTROL_TYPE
279 {
280     CBUS_DATA = 0,
281     CBUS_CONTROL,
282 };
283 
284 enum CBUS_RECEIVE_STATE_TYPE
285 {
286     CBUS_RECEIVE_NORMAL = 0,
287     CBUS_RECEIVE_TIMEOUT,
288 };
289 
290 enum MHL_PHY_CLOCK_MODE_TYPE
291 {
292     MHL_PHY_CLOCK_RESERVED = 0,
293     MHL_PHY_CLOCK_PACKET_PIXEL = 2,
294     MHL_PHY_CLOCK_NORMAL_24BIT,
295 };
296 
297 enum MHL_VIEW_PIXEL_FORMATE_TYPE
298 {
299     MHL_VIEW_PIXEL_FORMATE_24BPP = 0,
300     MHL_VIEW_PIXEL_FORMATE_16BPP,
301 };
302 
303 enum VBUS_CONTROL_TYPE
304 {
305     VBUS_SW_UNCHARGE = 0,
306     VBUS_HW_DETECT,
307     VBUS_SW_CHARGE,
308 };
309 
310 enum MHL_3D_SUPPORT_TYPE
311 {
312     MHL_3D_FS_SUPPORT = BIT(0),
313     MHL_3D_TB_SUPPORT = BIT(1),
314     MHL_3D_LR_SUPPORT = BIT(2),
315 };
316 
317 enum MHL_3D_DTD_NUMBER_TYPE
318 {
319     MHL_3D_FIRST_DTD = 0,
320     MHL_3D_SECOND_DTD,
321     MHL_3D_THIRD_DTD,
322 };
323 
324 enum MHL_3D_DTD_STEREO_TYPE
325 {
326     MHL_3D_DTD_STEREO_NORMAL_DISPLAY = 0,
327     MHL_3D_DTD_STEREO_FIELD_SEQUENTIAL_RIGHT = 2,
328     MHL_3D_DTD_STEREO_FIELD_SEQUENTIAL_LEFT = 4,
329     MHL_3D_DTD_STEREO_2WAY_INTERLEAVED_RIGHT = 3,
330     MHL_3D_DTD_STEREO_2WAY_INTERLEAVED_LEFT = 5,
331     MHL_3D_DTD_STEREO_4WAY_INTERLEAVED = 6,
332     MHL_3D_DTD_STEREO_SIDE_BY_SIDE_INTERLEAVED = 7,
333 };
334 
335 enum MHL_EDID_DATA_BLOCK_CODE_TYPE
336 {
337     MHL_EDID_AUDIO_DATA_BLOCK_CODE = 1,
338     MHL_EDID_VIDEO_DATA_BLOCK_CODE = 2,
339     MHL_EDID_VENDER_SPECIFIC_DATA_BLOCK_CODE = 3,
340     MHL_EDID_SPEAKER_ALLOCATION_DATA_BLOCK_CODE = 4,
341     MHL_EDID_VESA_DTC_DATA_BLOCK_CODE = 5,
342     MHL_EDID_USE_EXTENDED_TAG_BLOCK_CODE = 7,
343 };
344 
345 enum MHL_VIC_PARSING_STATE_TYPE
346 {
347     MHL_VIC_PARSING_START = 0,
348     MHL_VIC_PARSING_CHECK_HDMI_VIDEO_PRESENT,
349     MHL_VIC_PARSING_CHECK_3D_PRESENT,
350     MHL_VIC_PARSING_CHECK_HDMI_VIC,
351     MHL_VIC_PARSING_3D_MULTI_PRESENT_00,
352     MHL_VIC_PARSING_3D_MULTI_PRESENT_01,
353     MHL_VIC_PARSING_3D_MULTI_PRESENT_10,
354     MHL_VIC_PARSING_CHECK_3D_STRUCTURE,
355     MHL_VIC_PARSING_CHECK_3D_PRESENT_TIMING,
356     MHL_VIC_PARSING_FINISH,
357 };
358 
359 enum MHL_3D_PRESENT_TIMING_VIC_TYPE
360 {
361     MHL_3D_PRESENT_VIC_1920x1080p24Hz = 32,
362     MHL_3D_PRESENT_VIC_1280x720p60Hz = 4,
363     MHL_3D_PRESENT_VIC_1920x1080i60Hz = 5,
364     MHL_3D_PRESENT_VIC_1280x720p50Hz = 19,
365     MHL_3D_PRESENT_VIC_1920x1080i50Hz = 20,
366 };
367 
368 typedef enum
369 {
370     RX_HDMI_RTERM = 0,    // HDMI mode
371     RX_MHL_RTERM,    // MHL mode
372     RX_RTERM_OFF,    // R-term off
373 } RXRtermControl_T;
374 
375 enum MHL_CBUS_WRITE_BURST_STATE_TYPE
376 {
377     MHL_CBUS_WRITE_BURST_NONE = 0,
378     MHL_CBUS_WRITE_BURST_START,
379     MHL_CBUS_WRITE_BURST_SEND_REQUEST,
380     MHL_CBUS_WRITE_BURST_REVEIVE_GRANT,
381     MHL_CBUS_WRITE_BURST_SEND_DATA,
382     MHL_CBUS_WRITE_BURST_REVEIVE_REQUEST,
383     MHL_CBUS_WRITE_BURST_SEND_GRANT,
384     MHL_CBUS_WRITE_BURST_RECEIVE_DATA,
385     MHL_CBUS_WRITE_BURST_END,
386 };
387 
388 enum MHL_CBUS_SEND_WRITE_BURST_TYPE
389 {
390     MHL_CBUS_SEND_WRITE_BURST_NONE = 0,
391     MHL_CBUS_SEND_WRITE_BURST_USER_DATA,
392     MHL_CBUS_SEND_WRITE_BURST_3D_INFORMATION,
393     MHL_CBUS_SEND_WRITE_BURST_VIRTUAL_CHANNEL,
394     MHL_CBUS_SEND_WRITE_BURST_HIGH_END_VIDEO,
395     MHL_CBUS_SEND_WRITE_BURST_AUDIO_DATA_TUNNEL,
396     MHL_CBUS_SEND_WRITE_BURST_EMSC_DATA_TUNNEL,
397     MHL_CBUS_SEND_WRITE_BURST_BIST_RETURN_STATUS,
398 };
399 
400 enum MHL_CBUS_RUSB_PROCESS_STATE_TYPE
401 {
402     MHL_CBUS_RUSB_NONE = 0,
403     MHL_CBUS_RUSB_START,
404     MHL_CBUS_RUSB_SOURCE_HOST,
405     MHL_CBUS_RUSB_REQUEST_HOST,
406     MHL_CBUS_RUSB_SINK_HOST,
407     MHL_CBUS_RUSB_RELINQUISH,
408     MHL_CBUS_RUSB_END,
409 };
410 
411 enum MHL_CBUS_RHID_PROCESS_STATE_TYPE
412 {
413     MHL_CBUS_RHID_NONE = 0,
414     MHL_CBUS_RHID_START,
415     MHL_CBUS_RHID_SOURCE_HOST,
416     MHL_CBUS_RHID_REQUEST_HOST,
417     MHL_CBUS_RHID_SINK_HOST,
418     MHL_CBUS_RHID_RELINQUISH,
419     MHL_CBUS_RHID_END,
420 };
421 
422 enum MHL_CBUS_BIST_PROCESS_STATE_TYPE
423 {
424     MHL_CBUS_BIST_NONE = 0,
425     MHL_CBUS_BIST_RECEIVE_SETUP,
426     MHL_CBUS_BIST_WAIT_TRIGGER,
427     MHL_CBUS_BIST_RECEIVE_TRIGGER,
428     MHL_CBUS_BIST_ECBUS_SWITCH,
429     MHL_CBUS_BIST_EVENT_FINISH,
430     MHL_CBUS_BIST_REQUEST_STATUS,
431     MHL_CBUS_BIST_RETURN_STATUS,
432     MHL_CBUS_BIST_END,
433 };
434 
435 enum MHL_CBUS_FEATURE_REQUEST_STATE_TYPE
436 {
437     MHL_CBUS_FEATURE_NONE = 0,
438     MHL_CBUS_FEATURE_START,
439     MHL_CBUS_FEATURE_SEND_3D_INFORMATION,
440     MHL_CBUS_FEATURE_SEND_HIGH_END_VIDEO,
441     MHL_CBUS_FEATURE_SEND_AUDIO_DATA_TUNNEL,
442     MHL_CBUS_FEATURE_SEND_EMSC_DATA_TUNNEL,
443     MHL_CBUS_FEATURE_SEND_FEATURE_COMPLETE,
444     MHL_CBUS_FEATURE_SEND_FEATURE_REQUEST,
445     MHL_CBUS_FEATURE_END,
446 };
447 
448 enum MHL_ECBUS_STATE_TYPE
449 {
450     MHL_ECBUS_STATE_NONE = 0,
451     MHL_ECBUS_STATE_RECEIVE_MODE_UP,
452     MHL_ECBUS_STATE_TRIGGER_MODE_UP,
453     MHL_ECBUS_STATE_PROCESS_MODE_UP,
454     MHL_ECBUS_STATE_MODE_UP_CLOCK_LOCK,
455     MHL_ECBUS_STATE_RECEIVE_MODE_DOWN,
456     MHL_ECBUS_STATE_TRIGGER_MODE_DOWN,
457     MHL_ECBUS_STATE_PROCESS_MODE_DOWN,
458     MHL_ECBUS_STATE_STABLE_POLLING,
459     MHL_ECBUS_STATE_UNLOCK_RESET,
460     MHL_ECBUS_STATE_BIST_MODE_UP,
461     MHL_ECBUS_STATE_BIST_MODE_DOWN,
462     MHL_ECBUS_STATE_END,
463 };
464 
465 enum MHL_ECBUS_EVENT_TYPE
466 {
467     MHL_ECBUS_EVENT_NONE = 0,
468     MHL_ECBUS_EVENT_PREPARE_MODE_UP,
469     MHL_ECBUS_EVENT_MODE_UP_PROCESS,
470     MHL_ECBUS_EVENT_PREPARE_MODE_DOWN,
471     MHL_ECBUS_EVENT_MODE_DOWN_PROCESS,
472     MHL_ECBUS_EVENT_UNLOCK_RESET,
473     MHL_ECBUS_EVENT_STUCK_TO_LOW,
474     MHL_ECBUS_EVENT_ECBUS_COMMAND_PARSING,
475     MHL_ECBUS_EVENT_BIST_TRIGGER,
476     MHL_ECBUS_EVENT_POWER_ON_PATCH_ON,
477     MHL_ECBUS_EVENT_POWER_ON_PATCH_OFF,
478 };
479 
480 enum MHL_ECBUS_STATUS_FLAG_TYPE
481 {
482     MHL_ECBUS_STATUS_TRAINING_PASS = BIT(0),
483     MHL_ECBUS_STATUS_CLOCK_LOCK = BIT(1),
484     MHL_ECBUS_STATUS_SLOT_SYNC_DONE = BIT(2),
485     MHL_ECBUS_STATUS_EMSC_SYNC_DONE = BIT(3),
486     MHL_ECBUS_STATUS_RETRY_TIMEOUT = BIT(4),
487 };
488 
489 enum MHL_EMSC_SEND_STATUS_TYPE
490 {
491     MHL_EMSC_SEND_NONE = 0,
492     MHL_EMSC_SEND_DATA,
493     MHL_EMSC_SEND_CHECK,
494     MHL_EMSC_SEND_PASS,
495     MHL_EMSC_SEND_FAIL,
496 };
497 
498 enum MHL_ECBUS_TRAINING_STATE_TYPE
499 {
500     MHL_ECBUS_STATE_DISABLE = 0,
501     MHL_ECBUS_STATE_WAIT_CLOCK_LOCK,
502     MHL_ECBUS_STATE_WAIT_SEND_CLOCK,
503     MHL_ECBUS_STATE_SEND_CLOCK,
504     MHL_ECBUS_STATE_SEND_COMMA1,
505     MHL_ECBUS_STATE_RECEIVE_COMMA2,
506     MHL_ECBUS_STATE_SEND_COMMA2,
507     MHL_ECBUS_STATE_SOURCE_ACTIVE,
508     MHL_ECBUS_STATE_ACTIVE,
509     MHL_ECBUS_STATE_FAIL = 10,
510     MHL_ECBUS_STATE_TRAINING_NONE,
511 };
512 
513 enum MHL_ECBUS_TRAIN_STATE_TYPE
514 {
515     MHL_ECBUS_TRAIN_IDLE = 0,
516     MHL_ECBUS_TRAIN_WAIT_CLOCK_LOCK,
517     MHL_ECBUS_TRAIN_ADJUST_TXLOC,
518     MHL_ECBUS_TRAIN_ADJUST_TXLOC_OK,
519     MHL_ECBUS_TRAIN_DELAY_REVERIFY,
520     MHL_ECBUS_TRAIN_WAIT_RRCEIVE_COMMA2,
521     MHL_ECBUS_TRAIN_ADJUST_CAP,
522     MHL_ECBUS_TRAIN_DONE,
523     MHL_ECBUS_TRAIN_FAIL,
524 };
525 
526 enum
527 {
528     MSC_NONE = 0x00,
529     MSC_ACK = 0x33,                     // Command/Data byte acknowledged
530     MSC_NACK = 0x34,                    // Command or Data byte not acknowledge
531     MSC_ABORT = 0x35,                   // Transaction abort
532     MSC_WRITE_STAT_OR_SET_INT = 0x60,   // Write one status or interrupt register
533     MSC_READ_DEVCAP = 0x61,             // Read one register
534     MSC_GET_STATE = 0x62,               // Read CBUS revision level from follower
535     MSC_GET_VENDOR_ID = 0x63,           // Read vendor ID value from follower.
536     MSC_SET_HPD = 0x64,                 // Set Hot Plug Detect in follower
537     MSC_CLR_HPD = 0x65,                 // Clear Hot Plug Detect in follower
538     MSC_MSC_MSG = 0x68,                 // VS command to send RCP sub-commands
539     MSC_GET_SC1_ERRORCODE = 0x69,       // Get Vendor-Specific command error code.
540     MSC_GET_DDC_ERRORCODE = 0x6A,       // Get DDC channel command error code.
541     MSC_GET_MSC_ERRORCODE = 0x6B,       // Get MSC command error code.
542     MSC_WRITE_BURST = 0x6C,             // Write 1-16 bytes to responder�s scratchpad.
543     MSC_GET_SC3_ERRORCODE = 0x6D,       // Get channel 3 command error code.
544     MSC_WRITE_XSTAT = 0x70,             // Extend write one status
545     MSC_READ_XDEVCAP = 0x71,            // Extend read device capability
546     MSC_EOF = 0x32,                     // End of Frame
547     MSC_RESERVED = 0xFF,
548 }; //MscCtrlPkt_T;
549 
550 enum
551 {
552     MSC_MSG_MSGE = 0x02,                // MSG Error sub-command
553     MSC_MSG_RCP = 0x10,                 // RCP sub-command
554     MSC_MSG_RCPK = 0x11,                // RCP Acknowledge sub-command
555     MSC_MSG_RCPE = 0x12,                // RCP Error sub-command
556     MSC_MSG_RAP = 0x20,                 // Mode Change Warning sub-command
557     MSC_MSG_RAPK = 0x21,                // MCW Acknowledge sub-command
558     MSC_MSG_RBP = 0x22,                 // Remote Button Protocol sub- command
559     MSC_MSG_RBPK = 0x23,                // RBP Acknowledge sub-command
560     MSC_MSG_RBPE = 0x24,                // RBP Error sub-command
561     MSC_MSG_UCP = 0x30,                 // UCP sub-command
562     MSC_MSG_UCPK = 0x31,                // UCP Acknowledge sub-command
563     MSC_MSG_UCPE = 0x32,                // UCP Error sub-command
564     MSC_MSG_RUSB = 0x40,                // Request USB host role
565     MSC_MSG_RUSBK = 0x41,               // Acknowledge request for USB host role
566     MSC_MSG_RHID = 0x42,                // Request HID host role
567     MSC_MSG_RHIDK = 0x43,               // Acknowledge request for HID host role
568     MSC_MSG_ATT = 0x50,                 // Request Attention sub-command
569     MSC_MSG_ATTK = 0x51,                // ATT Acknowledge sub-command
570     MSC_MSG_BIST_TRIGGRT = 0x60,        // BIST Trigger sub-command
571     MSC_MSG_BIST_REQUEST_STAT = 0x61,   // BIST Request Status sub-command
572     MSC_MSG_BIST_READY = 0x62,          // BIST Ready sub-command
573     MSC_MSG_BIST_STOP = 0x63,           // BIST Stop sub-command
574     MSC_MSG_SI_UNKNOWN = 0xF0,          // SI used unknow sub-command
575     MSC_MSG_SI_UNKNOWNK = 0xF1,         // SI used unknow acknowledge sub-command
576 }; //MscMsgSubCmd_T;
577 
578 enum
579 {
580     MSC_ERRORCODE_NO_ERROR = 0x00,    // Normal response, no error
581     MSC_ERRORCODE_RETRY_EXCEEDED = 0x01,    // Re-try threshold exceeded
582     MSC_ERRORCODE_PROTOCOL_ERROR = 0x02,    // Protocol error
583     MSC_ERRORCODE_PEER_TIMEOUT = 0x04,    // Peer timed out
584     MSC_ERRORCODE_INVALID_OPCODE = 0x08,    // Invalid op code
585     MSC_ERRORCODE_BAD_OFFSET = 0x10,    // Bad offset in command
586     MSC_ERRORCODE_PEER_BUSY = 0x20,    // Peer is busy, can't process new request
587 };
588 
589 enum MHL_MSGE_STATUS_CODE
590 {
591     MHL_MSGE_NO_ERROR = 0x00,     // MSGE No Error
592     MHL_MSGE_INVALID_SUB_COMMAND_CODE = 0x01,
593 };
594 
595 enum MHL_RCP_STATUS_CODE
596 {
597     MHL_RCP_NO_ERROR = 0x00,     // RCP No Error
598     MHL_RCP_INEFFECTIVE_KEY_CODE = 0x01,     // The key code in the RCP sub-command is not recognized
599     MHL_RCP_RESPONDER_BUSY = 0x02,     // RCP Response busy
600 };
601 
602 enum MHL_RAP_STATUS_CODE
603 {
604     MHL_RAP_NO_ERROR = 0x00,     // RAP No Error
605     MHL_RAP_UNRECOGNIZED_ACTION_CODE = 0x01,
606     MHL_RAP_UNSUPPORTED_ACTION_CODE = 0x02,
607     MHL_RAP_RESPONDER_BUSY = 0x03,
608 };
609 
610 enum MHL_UCP_STATUS_CODE
611 {
612     MHL_UCP_NO_ERROR = 0x00,     // UCP No Error
613     MHL_UCP_INEFFECTIVE_KEY_CODE = 0x01,     // The key code in the UCP sub-command is not recognized
614 };
615 
616 enum MHL_ATT_STATUS_CODE
617 {
618     MHL_ATT_NO_ERROR = 0x00,     // ATT No Error
619     MHL_ATT_UNRECOGNIZED_ACTION_CODE = 0x01,     // The key code in the ATT sub-command is not recognized
620     MHL_ATT_UNSUPPORTED_ACTION_CODE = 0x02,
621     MHL_ATT_RESPONDER_BUSY = 0x03,
622 };
623 
624 enum MHL_RBP_STATUS_CODE
625 {
626     MHL_RBP_NO_ERROR = 0x00,     // RBP No Error
627     MHL_RBP_INEFFECTIVE_BUTTON_CODE = 0x01,     // The key code in the RBP sub-command is not recognized
628     MHL_RBP_RESPONDER_BUSY = 0x02,     // RBP Response busy
629 };
630 
631 enum MHL_RUSB_STATUS_CODE
632 {
633     MHL_RUSB_NO_ERROR = 0x00,     // RUSB No Error
634     MHL_RUSB_INVALID_CODE = 0x01,
635     MHL_RUSB_DENY = 0x02,
636 };
637 
638 enum MHL_RHID_STATUS_CODE
639 {
640     MHL_RHID_NO_ERROR = 0x00,     // RHID No Error
641     MHL_RHID_INVALID_CODE = 0x01,
642     MHL_RHID_DENY = 0x02,
643 };
644 
645 enum MHL_BIST_REQ_KEY_TYPE
646 {
647     MHL_BIST_REQ_NOTHING = 0x00,
648     MHL_BIST_REQ_RETURN_STATUS = 0x01,
649 };
650 
651 enum MHL_VC_FEATURE_ID_TYPE
652 {
653     MHL_VC_FEATURE_ID_EMSC = 0x00,
654     MHL_VC_FEATURE_ID_USB = 0x01,
655     MHL_VC_FEATURE_ID_AUDIO = 0x02,
656     MHL_VC_FEATURE_ID_IP_PACKET = 0x03,
657     MHL_VC_FEATURE_ID_COMPRESSED_VIDEO = 0x04,
658     MHL_VC_FEATURE_ID_HID = 0x05,
659     MHL_VC_FEATURE_ID_END,
660 };
661 
662 enum MHL_VC_RESPONSE_CODE_TYPE
663 {
664     MHL_VC_RESPONSE_ACCEPT = 0x00,
665     MHL_VC_RESPONSE_REJECT_NUMBER = 0x01,
666     MHL_VC_RESPONSE_REJECT_FEATURE_ID = 0x02,
667     MHL_VC_RESPONSE_REJECT_CHANNEL_SIZE = 0x03,
668 };
669 
670 enum CBUS_DEVCAP_TYPE
671 {
672     MHL_CBUS_DEV_STATE = 0,
673     MHL_CBUS_VERSION,
674     MHL_CBUS_DEV_CAT,
675     MHL_CBUS_ADOPTER_ID_H,
676     MHL_CBUS_ADOPTER_ID_L,
677     MHL_CBUS_VID_LINK_MODE,
678     MHL_CBUS_AUD_LINK_MODE,
679     MHL_CBUS_VIDEO_TYPE,
680     MHL_CBUS_LOG_DEV_MAP,
681     MHL_CBUS_BANDWIDTH,
682     MHL_CBUS_FEATURE_FLAG,
683     MHL_CBUS_DEVICE_ID_H,
684     MHL_CBUS_DEVICE_ID_L,
685     MHL_CBUS_SCRATCHPAD_SIZE,
686     MHL_CBUS_INT_STAT,
687     MHL_CBUS_RESERVED,
688     MHL_CBUS_ECBUS_SPEEDS,
689     MHL_CBUS_TMDS_SPEEDS,
690     MHL_CBUS_ECBUS_DEV_ROLES,
691     MHL_CBUS_LOG_DEV_MAPX,
692 };
693 
694 enum MHL_DEVICE_TYPE
695 {
696     MHL_DEVICE_SINK = 1,
697     MHL_DEVICE_SOURCE = 2,
698     MHL_DEVICE_DONGLE = 3,
699     MHL_DEVICE_DIRECT_ATTACH_SINK = 5,
700     MHL_DEVICE_DIRECT_ATTACH_SOURCE = 6,
701 };
702 
703 enum MHL_AV_LINK_RATE_TYPE
704 {
705     MHL_AV_LINK_150 = 0,
706     MHL_AV_LINK_300,
707     MHL_AV_LINK_600,
708     MHL_AV_LINK_NONE,
709 };
710 
711 enum MHL_BIST_AV_LINK_RATE_TYPE
712 {
713     MHL_BIST_AV_LINK_RESERVED = 0,
714     MHL_BIST_AV_LINK_150 = 1,
715     MHL_BIST_AV_LINK_300 = 2,
716     MHL_BIST_AV_LINK_600 = 3,
717 };
718 
719 enum MHL_BIST_ECBUS_PATTERN_TYPE
720 {
721     MHL_BIST_ECBUS_PATTERN_RESERVED = 0,
722     MHL_BIST_ECBUS_PATTERN_PRBS = 1,
723     MHL_BIST_ECBUS_PATTERN_FIXED8 = 2,
724     MHL_BIST_ECBUS_PATTERN_FIXED10 = 3,
725 };
726 
727 enum MHL_BIST_LINK_PATTERN_TYPE
728 {
729     MHL_BIST_LINK_PATTERN_RESERVED = 0,
730     MHL_BIST_LINK_PATTERN_PRBS = 1,
731     MHL_BIST_LINK_PATTERN_FIXED8 = 2,
732     MHL_BIST_LINK_PATTERN_FIXED10 = 3,
733 };
734 
735 enum MHL_BIST_IMPEDANCE_MODE_TYPE
736 {
737     MHL_BIST_IMPEDANCE_AV_LINK_TX_LOW = 0,
738     MHL_BIST_IMPEDANCE_AV_LINK_TX_HIGH = 1,
739     MHL_BIST_IMPEDANCE_AV_LINK_RX = 2,
740     MHL_BIST_IMPEDANCE_ECBUS_D_TX_LOW = 4,
741     MHL_BIST_IMPEDANCE_ECBUS_D_TX_HIGH = 5,
742     MHL_BIST_IMPEDANCE_ECBUS_D_RX = 6,
743     MHL_BIST_IMPEDANCE_ECBUS_S_TX_LOW = 8,
744     MHL_BIST_IMPEDANCE_ECBUS_S_TX_HIGH = 9,
745     MHL_BIST_IMPEDANCE_ECBUS_S_RX = 10,
746 };
747 
748 enum MHL_RAP_KEY_TYPE
749 {
750     MHL_RAP_KEY_POLL = 0x00,
751     MHL_RAP_KEY_CONTENT_ON = 0x10,
752     MHL_RAP_KEY_CONTENT_OFF = 0x11,
753     MHL_RAP_KEY_CBUS_MODE_DOWN = 0x20,
754     MHL_RAP_KEY_CBUS_MODE_UP = 0x21,
755 };
756 
757 enum MHL_BURST_ID_TYPE
758 {
759     MHL_BURST_ID_3D_VIC = 0x0010,
760     MHL_BURST_ID_3D_DTD = 0x0011,
761     MHL_BURST_ID_HEV_VIC = 0x0020,
762     MHL_BURST_ID_HEV_DTDA = 0x0021,
763     MHL_BURST_ID_HEV_DTDB = 0x0022,
764     MHL_BURST_ID_VC_ASSIGN = 0x0038,
765     MHL_BURST_ID_VC_CONFIRM = 0x0039,
766     MHL_BURST_ID_AUD_DELAY = 0x0040,
767     MHL_BURST_ID_ADT_BURSTID = 0x0041,
768     MHL_BURST_ID_BIST_SETUP = 0x0051,
769     MHL_BURST_ID_BIST_RETURN_STAT = 0x0052,
770     MHL_BURST_ID_BIST_DISCARD = 0x0053,
771     MHL_BURST_ID_BIST_ECHO_REQUEST = 0x0054,
772     MHL_BURST_ID_BIST_ECHO_RESPONSE = 0x0055,
773     MHL_BURST_ID_EMSC_SUPPORT = 0x0061,
774     MHL_BURST_ID_HID_PAYLOAD = 0x0062,
775     MHL_BURST_ID_BLK_RCV_BUFFER_INFO = 0x0063,
776     MHL_BURST_ID_BITS_PER_PIXEL_FMT = 0x0064,
777 };
778 
779 enum MHL_VIC_INDEX_TYPE
780 {
781     MHL_VIC_INDEX1 = 1,     // 640x480p@60
782     MHL_VIC_INDEX2,         // 720x480p@60
783     MHL_VIC_INDEX3,         // 720x480p@60
784     MHL_VIC_INDEX4,         // 1280x720p@60
785     MHL_VIC_INDEX5,         // 1920x1080i@60
786     MHL_VIC_INDEX6,         // 720x480i@60
787     MHL_VIC_INDEX7,         // 720x480i@60
788     MHL_VIC_INDEX16 = 16,   // 1920x1080p@60
789     MHL_VIC_INDEX17,        // 720x576p@50
790     MHL_VIC_INDEX18,        // 720x576p@50
791     MHL_VIC_INDEX19,        // 1280x720p@50
792     MHL_VIC_INDEX20,        // 1920x1080i@50
793     MHL_VIC_INDEX21,        // 720x576i@50
794     MHL_VIC_INDEX22,        // 720x576i@50
795     MHL_VIC_INDEX31 = 31,   // 1920x1080p@50
796     MHL_VIC_INDEX34 = 34,   // 1920x1080p@30
797     MHL_VIC_INDEX63 = 63,   // 1920x1080p@120
798     MHL_VIC_INDEX64,        // 1920x1080p@100
799     MHL_VIC_INDEX93 = 93,   // 3840x2160p@24
800     MHL_VIC_INDEX94,        // 3840x2160p@25
801     MHL_VIC_INDEX95,        // 3840x2160p@30
802     MHL_VIC_INDEX98 = 98,   // 4096x2160p@24
803     MHL_VIC_INDEX99,        // 4096x2160p@25
804     MHL_VIC_INDEX100,       // 4096x2160p@30
805 };
806 
807 enum MHL_TIMER_EVENT_TYPE
808 {
809     MHL_TIMER_EVENT_CBUS_SILENCE = 0,
810     MHL_TIMER_EVENT_DISPLAY_COMMAND,
811     MHL_TIMER_EVENT_WAIT_MSG_RESPONSE,
812     MHL_TIMER_EVENT_RCP_AUTO_RELEASE,
813     MHL_TIMER_EVENT_WAIT_WRITE_GRANT,
814     MHL_TIMER_EVENT_CHECK_RECEIVE_LOSE,
815     MHL_TIMER_EVENT_SEND_MSG_RESPONSE,
816     MHL_TIMER_EVENT_CHECK_CONTENT_ON,
817     MHL_TIMER_EVENT_AUTO_SWITCH_STOP,
818     MHL_TIMER_EVENT_WAIT_ECBUS_LOCK,
819     MHL_TIMER_EVENT_AUTO_EQ_PROCESS,
820     MHL_TIMER_EVENT_BIST_PROCESS,
821     MHL_TIMER_EVENT_TX_QUQUE_FREEZE,
822     MHL_TIMER_EVENT_POWER_ON_PATCH,
823     MHL_TIMER_EVENT_MASK,
824 };
825 
826 enum MHL_POWER_ON_PATCH_STATE_TYPE
827 {
828     MHL_POWER_ON_PATCH_STATE_NONE = 0,
829     MHL_POWER_ON_PATCH_STATE_START,
830     MHL_POWER_ON_PATCH_STATE_WAIT_PATCH_ON,
831     MHL_POWER_ON_PATCH_STATE_PATCH_ON,
832     MHL_POWER_ON_PATCH_STATE_WAIT_PATCH_OFF,
833     MHL_POWER_ON_PATCH_STATE_PATCH_OFF,
834     MHL_POWER_ON_PATCH_STATE_DONE,
835 };
836 
837 typedef struct
838 {
839     MS_BOOL bEnableFlag;
840     MS_U16 usTimerTick;
841 } stMHL_TIMER_EVENT_INFO;
842 
843 typedef struct
844 {
845     MS_U8 ucQueueState;
846     MS_U8 ucData[MHL_CBUS_DATA_SIZE +1];    // Cbus message data
847     MS_U8 ucCommand;    // MSC command
848     MS_U8 ucLength;    // message length
849 } stMHL_QUEUE_INFO;
850 
851 typedef struct
852 {
853     MS_U8 lens;
854     MS_U16 databuf[DMHL_CBUS_TX_FIFO];
855 } mhalCbusFifo_S;
856 
857 typedef struct
858 {
859     MS_BOOL bVCConfirm;
860     MS_U8 ucVCNumber;
861     MS_U8 ucVCSlotSize;
862     MS_U8 ucVCResponseCode;
863     MS_U8 ucVCFeatureID;
864 } stMHL_VIRTUAL_CHANNEL_INFO;
865 
866 typedef struct
867 {
868     MS_BOOL bBISTeCbusTxFlag;
869     MS_BOOL bBISTeCbusRxFlag;
870     MS_U8 ucBISTReadyIndex;
871     MS_U8 ucBISTeCbusPattern;
872     MS_U8 ucBISTAVLinkPattern;
873     MS_U8 ucBISTAVLinkRate;
874     MS_U8 ucBISTAVLinkMode;
875     MS_U8 ucBISTAVLinkRateRandomizer;
876     MS_U8 ucBISTImpedanceMode;
877     MS_U16 usBISTeCbusPatternFixed;
878     MS_U16 usBISTeCbusDuration;
879     MS_U16 usBISTeCbusErrorCount;
880     MS_U16 usBISTAVLinkFixed;
881     MS_U16 usBISTAVLinkDuration;
882     MS_U16 usBISTAVLinkErrorCount;
883 } stMHL_BIST_MODE_INFO;
884 
885 typedef struct
886 {
887     MS_BOOL bAutoEnableFlag;
888     MS_BOOL bECbusEnableFlag;
889     MS_BOOL bBISTEnableFlag;
890     MS_BOOL bClockStableFlag;
891     MS_BOOL bSignalStableFlag;
892     MS_U8 ucMainLinkRate;
893     MS_U8 ucAutoEQState;
894     MS_U8 ucStableCount;
895     MS_U8 ucECbusTrainState;
896     MS_U8 ucImpedanceValue;
897     MS_U8 ucImpedanceOffset;
898     MS_U8 ucIControlValue;
899 } stMHL_SIGNAL_STATUS_INFO;
900 
901 //-------------------------------------------------------------------------------------------------
902 //  Type and Structure
903 //-------------------------------------------------------------------------------------------------
904 enum MHL_SYSTEM_FLAG_TYPE
905 {
906     MHL_SYSTEM_CABLE_PLUG_FLAG = BIT(0),
907     MHL_SYSTEM_CBUS_CONNECT_FLAG = BIT(1),
908     MHL_SYSTEM_SOURCE_CHANGE_FLAG = BIT(2),
909     MHL_SYSTEM_CBUS_ENHANCE_FLAG = BIT(3),
910     MHL_SYSTEM_CBUS_NORMAL_FLAG = BIT(4),
911     MHL_SYSTEM_RECEIVE_LOSE_FLAG = BIT(5),
912     MHL_SYSTEM_CBUS_ISR_ATTACH_FLAG = BIT(6),
913     MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG = BIT(7),
914     MHL_SYSTEM_DISPLAY_COMMAND_ENABLE_FLAG = BIT(8),
915     MHL_SYSTEM_FORCE_SEND_COMMAND_FLAG = BIT(9),
916     MHL_SYSTEM_AUTO_SWITCH_SETTING_FLAG = BIT(11),
917     MHL_SYSTEM_CHECK_CONTENT_ENABLE_FLAG = BIT(12),
918     MHL_SYSTEM_GET_BASE_SUCCESS_FLAG = BIT(13),
919     MHL_SYSTEM_SELF_CREATE_TASK_FLAG = BIT(14),
920     MHL_SYSTEM_TASK_PROCESS_FLAG = BIT(15),
921     MHL_SYSTEM_PREVENT_REINITIAL_FLAG = BIT(16),
922 };
923 
924 enum MHL_CHIP_CAPABILITY_TYPE
925 {
926     MHL_CHIP_FORCE_SEND_COMMAND_FLAG = BIT(0),
927     MHL_CHIP_INTERRUPT_USE_PM_IRQ_FLAG = BIT(1),
928     MHL_CHIP_ECBUS_ENGINE_SUPPORT_FLAG = BIT(2),
929     MHL_CHIP_SELF_CREATE_TASK_FLAG = BIT(3),
930 };
931 
932 enum MHL_TIMER_FLAG_TYPE
933 {
934     MHL_TIMER_CBUS_SILENCE_FLAG = BIT(0),
935     MHL_TIMER_DISPLAY_COMMAND_FLAG = BIT(1),
936     MHL_TIMER_WAIT_MSG_RESPONSE_FLAG = BIT(2),
937     MHL_TIMER_RCP_AUTO_RELEASE_FLAG = BIT(3),
938     MHL_TIMER_WAIT_WRITE_GRANT_FLAG = BIT(4),
939     MHL_TIMER_CHECK_RECEIVE_LOSE_FLAG = BIT(5),
940     MHL_TIMER_SEND_MSG_RESPONSE_FLAG = BIT(6),
941     MHL_TIMER_CHECK_CONTENT_ON_FLAG = BIT(7),
942     MHL_TIMER_AUTO_SWITCH_STOP_FLAG = BIT(8),
943     MHL_TIMER_WAIT_ECBUS_LOCK_FLAG = BIT(9),
944     MHL_TIMER_AUTO_EQ_PROCESS_FLAG = BIT(10),
945     MHL_TIMER_BIST_PROCESS_FLAG = BIT(11),
946     MHL_TIMER_TX_QUEUE_FREEZE_FLAG = BIT(12),
947     MHL_TIMER_POWER_ON_PATCH_FLAG = BIT(13),
948 };
949 
950 enum MHL_CBUS_DISPLAY_FLAG_TYPE
951 {
952     MHL_CBUS_HPD_SET_FLAG = BIT(0),
953     MHL_CBUS_PATH_EN_FLAG = BIT(1),
954     MHL_CBUS_VERSION_CODE_FLAG = BIT(2),
955     MHL_CBUS_DEVCAP_READY_FLAG = BIT(3),
956     MHL_CBUS_DEVCAP_CHANGE_FLAG = BIT(4),
957     MHL_CBUS_LINK_STATUS_NORMAL_FLAG = BIT(5),
958 };
959 
960 enum MHL_PROC_DONE_FLAG_TYPE
961 {
962     MHL_GET_VENDER_ID_DONE_FLAG = BIT(0),
963     MHL_READ_DEVCAP_DONE_FLAG = BIT(1),
964     MHL_READ_XDEVCAP_DONE_FLAG = BIT(2),
965     MHL_AUTO_SWITCH_DONE_FLAG = BIT(3),
966 };
967 
968 enum MHL_ENABLE_FLAG_TYPE
969 {
970     MHL_ENABLE_CBUS_SEND_FLAG = BIT(0),
971     MHL_ENABLE_READ_DEVCAP_FLAG = BIT(1),
972     MHL_ENABLE_READ_XDEVCAP_FLAG = BIT(2),
973     MHL_ENABLE_GET_VENDER_ID_FLAG = BIT(3),
974     MHL_ENABLE_RCP_FUNCTION_FLAG = BIT(4),
975     MHL_ENABLE_RAP_FUNCTION_FLAG = BIT(5),
976     MHL_ENABLE_UCP_FUNCTION_FLAG = BIT(6),
977     MHL_ENABLE_RBP_FUNCTION_FLAG = BIT(7),
978     MHL_ENABLE_ECBUS_FUNCTION_FLAG = BIT(8),
979     MHL_ENABLE_AUTO_SWITCH_FLAG = BIT(9),
980     MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG = BIT(10),
981     MHL_ENABLE_CHECK_CONTENT_ON_FLAG = BIT(11),
982     MHL_ENABLE_AUTO_SWITCH_STOP_FLAG = BIT(12),
983     MHL_ENABLE_CALLBACK_FUNCTION_FLAG = BIT(13),
984     MHL_ENABLE_AUTO_EQ_FUNCTION_FLAG = BIT(14),
985     MHL_ENABLE_COMMUNICATE_BUSY_FLAG = BIT(15),
986     MHL_ENABLE_CBUS1_FUNCTION_FLAG = BIT(16),
987     MHL_ENABLE_EMSC_FUNCTION_FLAG = BIT(17),
988 };
989 
990 enum MHL_RECEIVE_FLAG_TYPE
991 {
992     MHL_CBUS_RECEIVE_MSC_FLAG = BIT(0),
993     MHL_CBUS_RECEIVE_ACK_FLAG = BIT(1),
994     MHL_CBUS_RECEIVE_ABORT_FLAG = BIT(2),
995     MHL_CBUS_RECEIVE_MSG_FLAG = BIT(3),
996     MHL_CBUS_RECEIVE_WAKE_FLAG = BIT(4),
997     MHL_CBUS_RECEIVE_ERROR_FLAG = BIT(5),
998     MHL_CBUS_RECEIVE_DEVCAP_FLAG = BIT(6),
999     MHL_CBUS_RECEIVE_XDEVCAP_SUPPORT_FLAG = BIT(7),
1000     MHL_CBUS_RECEIVE_PATH_EN_FLAG = BIT(8),
1001     MHL_CBUS_RECEIVE_MUTED_FLAG = BIT(9),
1002     MHL_CBUS_RECEIVE_MHL3_VERSION_FLAG = BIT(10),
1003     MHL_CBUS_RECEIVE_3D_REQ_FLAG = BIT(11),
1004     MHL_CBUS_RECEIVE_VC_ASSIGN_FLAG = BIT(12),
1005     MHL_CBUS_RECEIVE_FEATURE_REQUEST_FLAG = BIT(13),
1006     MHL_CBUS_RECEIVE_FEATURE_COMPLETE_FLAG = BIT(14),
1007     MHL_CBUS_RECEIVE_LINK_RATE_FLAG = BIT(15),
1008     MHL_CBUS_RECEIVE_24BIT_MODE_FLAG = BIT(16),
1009     MHL_CBUS_RECEIVE_PP_MODE_FLAG = BIT(17),
1010     MHL_CBUS_RECEIVE_DSCR_CHANGE_FLAG = BIT(18),
1011     MHL_CBUS_RECEIVE_WRITE_REQUEST_FLAG = BIT(19),
1012     MHL_CBUS_RECEIVE_WRITE_GRANT_FLAG = BIT(20),
1013     MHL_CBUS_RECEIVE_WRITE_BURST_FLAG = BIT(21),
1014     MHL_CBUS_RECEIVE_ECBUS_MODE_FLAG = BIT(22),
1015 };
1016 
1017 enum MHL_SEND_FLAG_TYPE
1018 {
1019     MHL_CBUS_SEND_ASK_DATA_FLAG = BIT(0),
1020     MHL_CBUS_SEND_ASK_FINISH_FLAG = BIT(1),
1021     MHL_CBUS_SEND_RCP_ENABLE_FLAG = BIT(2),
1022     MHL_CBUS_SEND_RAP_ENABLE_FLAG = BIT(3),
1023     MHL_CBUS_SEND_MSG_FINISH_FLAG = BIT(4),
1024     MHL_CBUS_SEND_MSG_COMMAND_FLAG = BIT(5),
1025     MHL_CBUS_SEND_RCP_RELEASE_ENABLE_FLAG = BIT(6),
1026     MHL_CBUS_SEND_CHECK_CONTENT_ON_FLAG = BIT(7),
1027     MHL_CBUS_SEND_READ_DEVCAP_FLAG = BIT(8),
1028     MHL_CBUS_SEND_GET_VENDER_ID_FLAG = BIT(9),
1029     MHL_CBUS_SEND_3D_INFORMATION_FLAG = BIT(10),
1030     MHL_CBUS_SEND_3D_DTD_FLAG = BIT(11),
1031     MHL_CBUS_SEND_3D_VIC_FLAG = BIT(12),
1032     MHL_CBUS_SEND_VC_INFORMATION_FLAG = BIT(13),
1033     MHL_CBUS_SEND_VC_CONFIRM_FLAG = BIT(14),
1034     MHL_CBUS_SEND_HIGH_END_VIDEO_FLAG = BIT(15),
1035     MHL_CBUS_SEND_AUDIO_DATA_TUNNEL_FLAG = BIT(16),
1036     MHL_CBUS_SEND_EMSC_DATA_TUNNEL_FLAG = BIT(17),
1037     MHL_CBUS_SEND_USER_WRITE_BURST_FLAG = BIT(18),
1038     MHL_CBUS_SEND_HEV_VIC_FLAG = BIT(19),
1039     MHL_CBUS_SEND_HEV_DTDA_FLAG = BIT(20),
1040     MHL_CBUS_SEND_HEV_DTDB_FLAG = BIT(21),
1041     MHL_CBUS_SEND_BIST_RETURN_STATUS_FLAG = BIT(22),
1042     MHL_CBUS_SEND_LINK_STATUS_NORMAL_FLAG = BIT(23),
1043 };
1044 
1045 enum MHL_DEVICE_FLAG_TYPE
1046 {
1047     MHL_DEVICE_ROKU_DONGLE_FLAG = BIT(0),
1048     MHL_DEVICE_PHONE_HTC_FLAG = BIT(1),
1049     MHL_DEVICE_PHONE_SONY_FLAG = BIT(2),
1050 };
1051 
1052 enum MHL_CALLBACK_FLAG_TYPE
1053 {
1054     MHL_CALLBACK_RCP_FUNCTION_FLAG = BIT(0),
1055     MHL_CALLBACK_RAP_FUNCTION_FLAG = BIT(1),
1056     MHL_CALLBACK_UCP_FUNCTION_FLAG = BIT(2),
1057     MHL_CALLBACK_ATT_FUNCTION_FLAG = BIT(3),
1058     MHL_CALLBACK_RBP_FUNCTION_FLAG = BIT(4),
1059 };
1060 
1061 #define MHL_CBUS_DISPLAY_MASK               (MHL_CBUS_HPD_SET_FLAG |MHL_CBUS_PATH_EN_FLAG |MHL_CBUS_DEVCAP_READY_FLAG)
1062 #define MHL_ECBUS_DISPLAY_MASK              (MHL_CBUS_VERSION_CODE_FLAG| MHL_CBUS_DEVCAP_CHANGE_FLAG| MHL_CBUS_LINK_STATUS_NORMAL_FLAG)
1063 #define MHL_CBUS_DISPLAY_MASK_SHIFT         8U
1064 #define MHL_CBUS_DISPLAY_CHECK_MASK         (MHL_CBUS_DISPLAY_MASK << MHL_CBUS_DISPLAY_MASK_SHIFT)
1065 #define MHL_3D_SUPPORT_MASK                 (MHL_3D_FS_SUPPORT |MHL_3D_TB_SUPPORT |MHL_3D_LR_SUPPORT)
1066 
1067 //-------------------------------------------------------------------------------------------------
1068 //  Global Variables
1069 //-------------------------------------------------------------------------------------------------
1070 
1071 //-------------------------------------------------------------------------------------------------
1072 //  Macro define
1073 //-------------------------------------------------------------------------------------------------
1074 #define GET_MHL_SYSTEM_FLAG(a, b)           (MS_BOOL)((a &b) ?TRUE :FALSE)
1075 #define SET_MHL_SYSTEM_FLAG(a, b)           (a |= b)
1076 #define CLR_MHL_SYSTEM_FLAG(a, b)           (a &= ~b)
1077 
1078 #define GET_MHL_CHIP_FLAG(a, b)             (MS_BOOL)((a &b) ?TRUE :FALSE)
1079 #define SET_MHL_CHIP_FLAG(a, b)             (a |= b)
1080 #define CLR_MHL_CHIP_FLAG(a, b)             (a &= ~b)
1081 
1082 #define GET_MHL_TIMER_FLAG(a, b)            (MS_BOOL)((a &b) ?TRUE :FALSE)
1083 #define SET_MHL_TIMER_FLAG(a, b)            (a |= b)
1084 #define CLR_MHL_TIMER_FLAG(a, b)            (a &= ~b)
1085 
1086 #define GET_MHL_DISPLAY_FLAG(a, b)          (MS_BOOL)((a &b) ?TRUE :FALSE)
1087 #define SET_MHL_DISPLAY_FLAG(a, b)          (a |= b)
1088 #define CLR_MHL_DISPLAY_FLAG(a, b)          (a &= ~b)
1089 
1090 #define GET_MHL_RECEIVE_FLAG(a, b)          (MS_BOOL)((a &b) ?TRUE :FALSE)
1091 #define SET_MHL_RECEIVE_FLAG(a, b)          (a |= b)
1092 #define CLR_MHL_RECEIVE_FLAG(a, b)          (a &= ~b)
1093 
1094 #define GET_MHL_SEND_FLAG(a, b)             (MS_BOOL)((a &b) ?TRUE :FALSE)
1095 #define SET_MHL_SEND_FLAG(a, b)             (a |= b)
1096 #define CLR_MHL_SEND_FLAG(a, b)             (a &= ~b)
1097 
1098 #define GET_MHL_DONE_FLAG(a, b)             (MS_BOOL)((a &b) ?TRUE :FALSE)
1099 #define SET_MHL_DONE_FLAG(a, b)             (a |= b)
1100 #define CLR_MHL_DONE_FLAG(a, b)             (a &= ~b)
1101 
1102 #define GET_MHL_ENABLE_FLAG(a, b)           (MS_BOOL)((a &b) ?TRUE :FALSE)
1103 #define SET_MHL_ENABLE_FLAG(a, b)           (a |= b)
1104 #define CLR_MHL_ENABLE_FLAG(a, b)           (a &= ~b)
1105 
1106 #define GET_MHL_DEVICE_FLAG(a, b)           (MS_BOOL)((a &b) ?TRUE :FALSE)
1107 #define SET_MHL_DEVICE_FLAG(a, b)           (a |= b)
1108 #define CLR_MHL_DEVICE_FLAG(a, b)           (a &= ~b)
1109 
1110 #define GET_MHL_CALLBACK_FLAG(a, b)         (MS_BOOL)((a &b) ?TRUE :FALSE)
1111 #define SET_MHL_CALLBACK_FLAG(a, b)         (a |= b)
1112 #define CLR_MHL_CALLBACK_FLAG(a, b)         (a &= ~b)
1113 
1114 #define GET_MHL_SUPPORT_FLAG(a, b)          (MS_BOOL)((a &b) ?TRUE :FALSE)
1115 #define SET_MHL_SUPPORT_FLAG(a, b)          (a |= b)
1116 #define CLR_MHL_SUPPORT_FLAG(a, b)          (a &= ~b)
1117 
1118 #ifdef __cplusplus
1119 }
1120 #endif
1121 
1122 #endif //_MDRV_MHL_ST_H_