xref: /utopia/UTPA2-700.0.x/modules/hdmi/drv/mhl/drvMHL.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi ///
80*53ee8cc1Swenshuai.xi /// file    mdrv_mhl.c
81*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc.
82*53ee8cc1Swenshuai.xi /// @brief  MHL driver Function
83*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
84*53ee8cc1Swenshuai.xi 
85*53ee8cc1Swenshuai.xi #ifndef _DRV_MHL_C_
86*53ee8cc1Swenshuai.xi #define _DRV_MHL_C_
87*53ee8cc1Swenshuai.xi 
88*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
89*53ee8cc1Swenshuai.xi //  Include Files
90*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
91*53ee8cc1Swenshuai.xi // Common Definition
92*53ee8cc1Swenshuai.xi #include "MsCommon.h"
93*53ee8cc1Swenshuai.xi #include "MsVersion.h"
94*53ee8cc1Swenshuai.xi #include "MsIRQ.h"
95*53ee8cc1Swenshuai.xi #include "MsOS.h"
96*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
97*53ee8cc1Swenshuai.xi #include <linux/string.h>
98*53ee8cc1Swenshuai.xi #else
99*53ee8cc1Swenshuai.xi #include <string.h>
100*53ee8cc1Swenshuai.xi #endif
101*53ee8cc1Swenshuai.xi 
102*53ee8cc1Swenshuai.xi #include "utopia.h"
103*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
104*53ee8cc1Swenshuai.xi 
105*53ee8cc1Swenshuai.xi #include "mdrv_mhl_st.h"
106*53ee8cc1Swenshuai.xi #include "apiMHL_private.h"
107*53ee8cc1Swenshuai.xi #include "apiMHL.h"
108*53ee8cc1Swenshuai.xi #include "halMHL.h"
109*53ee8cc1Swenshuai.xi #include "drvMHL.h"
110*53ee8cc1Swenshuai.xi 
111*53ee8cc1Swenshuai.xi #include "drvSYS.h"
112*53ee8cc1Swenshuai.xi #include "drvMMIO.h"
113*53ee8cc1Swenshuai.xi 
114*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
115*53ee8cc1Swenshuai.xi //  Local Defines
116*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
117*53ee8cc1Swenshuai.xi #if(defined(CONFIG_MLOG))
118*53ee8cc1Swenshuai.xi #include "ULog.h"
119*53ee8cc1Swenshuai.xi 
120*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_INFO(format, args...)      ULOGI("MHL", format, ##args)
121*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_WARNING(format, args...)   ULOGW("MHL", format, ##args)
122*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_DEBUG(format, args...)     ULOGD("MHL", format, ##args)
123*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_ERROR(format, args...)     ULOGE("MHL", format, ##args)
124*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_FATAL(format, args...)     ULOGF("MHL", format, ##args)
125*53ee8cc1Swenshuai.xi 
126*53ee8cc1Swenshuai.xi #else
127*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_INFO(format, args...)      printf(format, ##args)
128*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_WARNING(format, args...)   printf(format, ##args)
129*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_DEBUG(format, args...)     printf(format, ##args)
130*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_ERROR(format, args...)     printf(format, ##args)
131*53ee8cc1Swenshuai.xi #define MDRV_MHL_MSG_FATAL(format, args...)     printf(format, ##args)
132*53ee8cc1Swenshuai.xi 
133*53ee8cc1Swenshuai.xi #endif
134*53ee8cc1Swenshuai.xi 
135*53ee8cc1Swenshuai.xi #define MHL_DEBUG_RECEIVE_MSC       0
136*53ee8cc1Swenshuai.xi #define MHL_DEBUG_TIMER_EVENT       0
137*53ee8cc1Swenshuai.xi #define MHL_DEBUG_SOURCE_INFO       0
138*53ee8cc1Swenshuai.xi #define MHL_DEBUG_BIST_MODE         0
139*53ee8cc1Swenshuai.xi #define MHL3_AUTO_EQ_ENABLE         1
140*53ee8cc1Swenshuai.xi 
141*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
142*53ee8cc1Swenshuai.xi //  Local Structures
143*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
144*53ee8cc1Swenshuai.xi 
145*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
146*53ee8cc1Swenshuai.xi //  Global Variables
147*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
148*53ee8cc1Swenshuai.xi 
149*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
150*53ee8cc1Swenshuai.xi //  Local Variables
151*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
152*53ee8cc1Swenshuai.xi #if(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_10)
153*53ee8cc1Swenshuai.xi MHL_RESOURCE_PRIVATE stMHLResourcePrivate;
154*53ee8cc1Swenshuai.xi 
155*53ee8cc1Swenshuai.xi #endif
156*53ee8cc1Swenshuai.xi 
157*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
158*53ee8cc1Swenshuai.xi //  Local Functions
159*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
160*53ee8cc1Swenshuai.xi 
161*53ee8cc1Swenshuai.xi //**************************************************************************
162*53ee8cc1Swenshuai.xi //  [Function Name]:
163*53ee8cc1Swenshuai.xi //                   _mdrv_mhl_InitRiuBase()
164*53ee8cc1Swenshuai.xi //  [Description]
165*53ee8cc1Swenshuai.xi //
166*53ee8cc1Swenshuai.xi //  [Arguments]:
167*53ee8cc1Swenshuai.xi //
168*53ee8cc1Swenshuai.xi //  [Return]:
169*53ee8cc1Swenshuai.xi //
170*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_InitRiuBase(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)171*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_InitRiuBase(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
172*53ee8cc1Swenshuai.xi {
173*53ee8cc1Swenshuai.xi     MS_BOOL bGetBaseFlag = FALSE;
174*53ee8cc1Swenshuai.xi     MS_VIRT ulRiuBaseAddress = 0;
175*53ee8cc1Swenshuai.xi     MS_VIRT ulPMRiuBaseAddress = 0;
176*53ee8cc1Swenshuai.xi     MS_PHY ulNonPMBankSize = 0;
177*53ee8cc1Swenshuai.xi     MS_PHY ulPMBankSize = 0;
178*53ee8cc1Swenshuai.xi 
179*53ee8cc1Swenshuai.xi     // get MMIO base
180*53ee8cc1Swenshuai.xi     if(!MDrv_MMIO_GetBASE(&ulRiuBaseAddress, &ulNonPMBankSize, MS_MODULE_XC))
181*53ee8cc1Swenshuai.xi     {
182*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("** MHL get XC base failed\n");
183*53ee8cc1Swenshuai.xi     }
184*53ee8cc1Swenshuai.xi     else if(!MDrv_MMIO_GetBASE(&ulPMRiuBaseAddress, &ulPMBankSize, MS_MODULE_PM))
185*53ee8cc1Swenshuai.xi     {
186*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("** MHL get PM base failed\n");
187*53ee8cc1Swenshuai.xi     }
188*53ee8cc1Swenshuai.xi     else
189*53ee8cc1Swenshuai.xi     {
190*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ulRiuBaseAddress = ulRiuBaseAddress;
191*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ulPMRiuBaseAddress = ulPMRiuBaseAddress;
192*53ee8cc1Swenshuai.xi 
193*53ee8cc1Swenshuai.xi         mhal_mhl_SetRegisterBaseAddress(pMHLResourcePrivate->ulRiuBaseAddress, pMHLResourcePrivate->ulPMRiuBaseAddress);
194*53ee8cc1Swenshuai.xi 
195*53ee8cc1Swenshuai.xi         bGetBaseFlag = TRUE;
196*53ee8cc1Swenshuai.xi     }
197*53ee8cc1Swenshuai.xi 
198*53ee8cc1Swenshuai.xi     return bGetBaseFlag;
199*53ee8cc1Swenshuai.xi }
200*53ee8cc1Swenshuai.xi 
201*53ee8cc1Swenshuai.xi //**************************************************************************
202*53ee8cc1Swenshuai.xi //  [Function Name]:
203*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_ClearCbusFlag
204*53ee8cc1Swenshuai.xi //  [Description]
205*53ee8cc1Swenshuai.xi //
206*53ee8cc1Swenshuai.xi //  [Arguments]:
207*53ee8cc1Swenshuai.xi //
208*53ee8cc1Swenshuai.xi //  [Return]:
209*53ee8cc1Swenshuai.xi //
210*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ClearCbusFlag(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucSelect)211*53ee8cc1Swenshuai.xi void _mdrv_mhl_ClearCbusFlag(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucSelect)
212*53ee8cc1Swenshuai.xi {
213*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
214*53ee8cc1Swenshuai.xi 
215*53ee8cc1Swenshuai.xi     switch(ucSelect)
216*53ee8cc1Swenshuai.xi     {
217*53ee8cc1Swenshuai.xi         case MHL_CLEAR_INITIAL_FLAG:
218*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ulSystemIndex = 0;
219*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ulCurrentTimerTick = (MsOS_GetSystemTime()) %CBUS_TIMER_CONTROL_MASK;
220*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->uc3DTotalEntryDTD = 0;
221*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->uc3DTotalEntryVIC = 0;
222*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_NONE;
223*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucCallBackFunctionIndex = 0;
224*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->slMHLPollingTaskID = -1;
225*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usPrePowerState = 0;
226*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucHighEndVICTotalEntry = 0;
227*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stSignalStatusInfo.ucImpedanceValue = MHL_IMPEDANCE_VALUE;
228*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stSignalStatusInfo.ucImpedanceOffset = MHL_IMPEDANCE_VALUE;
229*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stSignalStatusInfo.ucIControlValue = 0;
230*53ee8cc1Swenshuai.xi 
231*53ee8cc1Swenshuai.xi             for(uctemp = 0; uctemp <MHL_3D_VIC_INFORMATION_LENGTH; uctemp++)
232*53ee8cc1Swenshuai.xi             {
233*53ee8cc1Swenshuai.xi                 if(uctemp < MHL_3D_DTD_INFORMATION_LENGTH)
234*53ee8cc1Swenshuai.xi                 {
235*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->uc3DInformationDTD[uctemp] = 0;
236*53ee8cc1Swenshuai.xi                 }
237*53ee8cc1Swenshuai.xi 
238*53ee8cc1Swenshuai.xi                 if(uctemp < MHL_3D_VIC_INFORMATION_LENGTH)
239*53ee8cc1Swenshuai.xi                 {
240*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->uc3DInformationVIC[uctemp] = 0;
241*53ee8cc1Swenshuai.xi                 }
242*53ee8cc1Swenshuai.xi 
243*53ee8cc1Swenshuai.xi                 if(uctemp < MHL_HEV_VIC_INFORMATION_LENGTH)
244*53ee8cc1Swenshuai.xi                 {
245*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->usHighEndVICTable[uctemp] = 0;
246*53ee8cc1Swenshuai.xi                 }
247*53ee8cc1Swenshuai.xi 
248*53ee8cc1Swenshuai.xi                 if(uctemp < MHL_AUDIO_TUNNEL_INFORMATION_LENGTH)
249*53ee8cc1Swenshuai.xi                 {
250*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ulAudioTunnelTable[uctemp] = 0;
251*53ee8cc1Swenshuai.xi                 }
252*53ee8cc1Swenshuai.xi 
253*53ee8cc1Swenshuai.xi                 if(uctemp < MHL_EMSC_SUPPORT_INFORMATION_LENGTH)
254*53ee8cc1Swenshuai.xi                 {
255*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->usEMSCSupportTable[uctemp] = 0;
256*53ee8cc1Swenshuai.xi                 }
257*53ee8cc1Swenshuai.xi             }
258*53ee8cc1Swenshuai.xi 
259*53ee8cc1Swenshuai.xi             //pMHLResourcePrivate->usHighEndVICTable[0] = MHL_HEV_VIC_INDEX0;
260*53ee8cc1Swenshuai.xi             //pMHLResourcePrivate->usHighEndVICTable[1] = MHL_HEV_VIC_INDEX1;
261*53ee8cc1Swenshuai.xi             //pMHLResourcePrivate->usHighEndVICTable[2] = MHL_HEV_VIC_INDEX2;
262*53ee8cc1Swenshuai.xi             //pMHLResourcePrivate->usHighEndVICTable[3] = MHL_HEV_VIC_INDEX3;
263*53ee8cc1Swenshuai.xi             //pMHLResourcePrivate->usHighEndVICTable[4] = MHL_HEV_VIC_INDEX4;
264*53ee8cc1Swenshuai.xi             //pMHLResourcePrivate->usHighEndVICTable[5] = MHL_HEV_VIC_INDEX5;
265*53ee8cc1Swenshuai.xi 
266*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ulAudioTunnelTable[0] = MHL_AUDIO_TUNNEL_INDEX0;
267*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ulAudioTunnelTable[1] = MHL_AUDIO_TUNNEL_INDEX1;
268*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ulAudioTunnelTable[2] = MHL_AUDIO_TUNNEL_INDEX2;
269*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ulAudioTunnelTable[3] = MHL_AUDIO_TUNNEL_INDEX3;
270*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ulAudioTunnelTable[4] = MHL_AUDIO_TUNNEL_INDEX4;
271*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ulAudioTunnelTable[5] = MHL_AUDIO_TUNNEL_INDEX5;
272*53ee8cc1Swenshuai.xi 
273*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usEMSCSupportTable[0] = MHL_EMSC_SUPPORT_BURST_ID0;
274*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usEMSCSupportTable[1] = MHL_EMSC_SUPPORT_BURST_ID1;
275*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usEMSCSupportTable[2] = MHL_EMSC_SUPPORT_BURST_ID2;
276*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usEMSCSupportTable[3] = MHL_EMSC_SUPPORT_BURST_ID3;
277*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usEMSCSupportTable[4] = MHL_EMSC_SUPPORT_BURST_ID4;
278*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usEMSCSupportTable[5] = MHL_EMSC_SUPPORT_BURST_ID5;
279*53ee8cc1Swenshuai.xi 
280*53ee8cc1Swenshuai.xi             break;
281*53ee8cc1Swenshuai.xi 
282*53ee8cc1Swenshuai.xi         case MHL_CLEAR_CABLE_LOSS_FLAG:
283*53ee8cc1Swenshuai.xi         case MHL_CLEAR_CONNECT_LOSS_FLAG:
284*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucProcDoneIndex = 0;
285*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usDisplayIndex = 0;
286*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ulCbusReceiveIndex = 0;
287*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ulCbusSendIndex = 0;
288*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucPreRCPKeyCode = 0;
289*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ulEnableIndex = 0;
290*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_NONE;
291*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_NONE;
292*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_NONE;
293*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucECbusTrainState = MHL_ECBUS_STATE_DISABLE;
294*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucWriteBurstSequence = 0;
295*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usEMSCTxBufferSize = MHL_EMSC_DATA_SIZE;
296*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usEMSCRxBufferSize = MHL_EMSC_DATA_SIZE;
297*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucEMSCSendStatus = MHL_EMSC_SEND_NONE;
298*53ee8cc1Swenshuai.xi 
299*53ee8cc1Swenshuai.xi             for(uctemp = 0; uctemp <MHL_CBUS_TOTAL_QUEUE_NUM; uctemp++)
300*53ee8cc1Swenshuai.xi             {
301*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->stCbusQueueInfo[uctemp].ucQueueState = MHL_QUEUE_STATE_IDLE;
302*53ee8cc1Swenshuai.xi             }
303*53ee8cc1Swenshuai.xi 
304*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stSignalStatusInfo.bECbusEnableFlag = FALSE;
305*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stSignalStatusInfo.bBISTEnableFlag = FALSE;
306*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stSignalStatusInfo.bClockStableFlag = FALSE;
307*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stSignalStatusInfo.bAutoEnableFlag = FALSE;
308*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stSignalStatusInfo.bSignalStableFlag = FALSE;
309*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stSignalStatusInfo.ucAutoEQState = MHL_AUTO_EQ_START;
310*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stSignalStatusInfo.ucStableCount = 0;
311*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stSignalStatusInfo.ucECbusTrainState = MHL_EMSC_SEND_NONE;
312*53ee8cc1Swenshuai.xi 
313*53ee8cc1Swenshuai.xi             break;
314*53ee8cc1Swenshuai.xi 
315*53ee8cc1Swenshuai.xi         case MHL_CLEAR_CBUS_TIME_OUT_FLAG:
316*53ee8cc1Swenshuai.xi             break;
317*53ee8cc1Swenshuai.xi 
318*53ee8cc1Swenshuai.xi         case MHL_CLEAR_MSG_RESPONSE_FLAG:
319*53ee8cc1Swenshuai.xi             break;
320*53ee8cc1Swenshuai.xi 
321*53ee8cc1Swenshuai.xi         default:
322*53ee8cc1Swenshuai.xi 
323*53ee8cc1Swenshuai.xi             break;
324*53ee8cc1Swenshuai.xi     };
325*53ee8cc1Swenshuai.xi }
326*53ee8cc1Swenshuai.xi 
327*53ee8cc1Swenshuai.xi //**************************************************************************
328*53ee8cc1Swenshuai.xi //  [Function Name]:
329*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusGetLeastFlag()
330*53ee8cc1Swenshuai.xi //  [Description]:
331*53ee8cc1Swenshuai.xi //                  MHL Cbus get the least True flag in index
332*53ee8cc1Swenshuai.xi //  [Arguments]:
333*53ee8cc1Swenshuai.xi //
334*53ee8cc1Swenshuai.xi //  [Return]:
335*53ee8cc1Swenshuai.xi //
336*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusGetLeastFlag(MS_U8 unindex)337*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_CbusGetLeastFlag(MS_U8 unindex)
338*53ee8cc1Swenshuai.xi {
339*53ee8cc1Swenshuai.xi     MS_U8 uctemp = BIT(0);
340*53ee8cc1Swenshuai.xi 
341*53ee8cc1Swenshuai.xi     if(unindex == 0)
342*53ee8cc1Swenshuai.xi     {
343*53ee8cc1Swenshuai.xi         return unindex;
344*53ee8cc1Swenshuai.xi     }
345*53ee8cc1Swenshuai.xi 
346*53ee8cc1Swenshuai.xi     while(!(unindex &uctemp))
347*53ee8cc1Swenshuai.xi     {
348*53ee8cc1Swenshuai.xi         uctemp = uctemp <<1;
349*53ee8cc1Swenshuai.xi     }
350*53ee8cc1Swenshuai.xi 
351*53ee8cc1Swenshuai.xi     return uctemp;
352*53ee8cc1Swenshuai.xi }
353*53ee8cc1Swenshuai.xi 
354*53ee8cc1Swenshuai.xi //**************************************************************************
355*53ee8cc1Swenshuai.xi //  [Function Name]:
356*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_GetLeastBitNum()
357*53ee8cc1Swenshuai.xi //  [Description]:
358*53ee8cc1Swenshuai.xi //
359*53ee8cc1Swenshuai.xi //  [Arguments]:
360*53ee8cc1Swenshuai.xi //
361*53ee8cc1Swenshuai.xi //  [Return]:
362*53ee8cc1Swenshuai.xi //
363*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetLeastBitNum(MS_U16 usData)364*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_GetLeastBitNum(MS_U16 usData)
365*53ee8cc1Swenshuai.xi {
366*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
367*53ee8cc1Swenshuai.xi 
368*53ee8cc1Swenshuai.xi     while(!(usData &BIT(0)))
369*53ee8cc1Swenshuai.xi     {
370*53ee8cc1Swenshuai.xi         usData = usData >>1;
371*53ee8cc1Swenshuai.xi         uctemp++;
372*53ee8cc1Swenshuai.xi     }
373*53ee8cc1Swenshuai.xi 
374*53ee8cc1Swenshuai.xi     return uctemp;
375*53ee8cc1Swenshuai.xi }
376*53ee8cc1Swenshuai.xi 
377*53ee8cc1Swenshuai.xi //**************************************************************************
378*53ee8cc1Swenshuai.xi //  [Function Name]:
379*53ee8cc1Swenshuai.xi //                  mdrv_mhl_CbusSetPacket(BYTE ucHeader, Bool bControl, BYTE ucContent)
380*53ee8cc1Swenshuai.xi //  [Description]
381*53ee8cc1Swenshuai.xi //                  MHL Cbus Packet setting
382*53ee8cc1Swenshuai.xi //  [Arguments]:
383*53ee8cc1Swenshuai.xi //                  ucHeader: Packet header type
384*53ee8cc1Swenshuai.xi //                  bControl: Packet control bit type
385*53ee8cc1Swenshuai.xi //                  ucContent: Packet payload
386*53ee8cc1Swenshuai.xi //  [Return]:
387*53ee8cc1Swenshuai.xi //                  Packet word for register write
388*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSetPacket(MS_U8 ucHeader,MS_BOOL bControl,MS_U8 ucContent)389*53ee8cc1Swenshuai.xi MS_U16 _mdrv_mhl_CbusSetPacket(MS_U8 ucHeader, MS_BOOL bControl, MS_U8 ucContent)
390*53ee8cc1Swenshuai.xi {
391*53ee8cc1Swenshuai.xi     MS_BOOL bParity = 0;
392*53ee8cc1Swenshuai.xi     MS_U16 usPacket = (ucHeader <<9) |(bControl <<8) |ucContent;
393*53ee8cc1Swenshuai.xi 
394*53ee8cc1Swenshuai.xi     do
395*53ee8cc1Swenshuai.xi     {
396*53ee8cc1Swenshuai.xi         bParity ^= (usPacket & BIT(0));
397*53ee8cc1Swenshuai.xi         usPacket = usPacket >>1;
398*53ee8cc1Swenshuai.xi     }
399*53ee8cc1Swenshuai.xi     while(usPacket);
400*53ee8cc1Swenshuai.xi 
401*53ee8cc1Swenshuai.xi     usPacket = (bParity <<11) |(ucHeader <<9) |(bControl <<8) |ucContent;
402*53ee8cc1Swenshuai.xi 
403*53ee8cc1Swenshuai.xi     return (usPacket |BIT(15));
404*53ee8cc1Swenshuai.xi }
405*53ee8cc1Swenshuai.xi //**************************************************************************
406*53ee8cc1Swenshuai.xi //  [Function Name]:
407*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusTxWriteCommand()
408*53ee8cc1Swenshuai.xi //  [Description]:
409*53ee8cc1Swenshuai.xi //                  MHL Cbus send command
410*53ee8cc1Swenshuai.xi //  [Arguments]:
411*53ee8cc1Swenshuai.xi //
412*53ee8cc1Swenshuai.xi //  [Return]:
413*53ee8cc1Swenshuai.xi //                  TRUE: Cbus command send successfully
414*53ee8cc1Swenshuai.xi //                  FALSE: Cbus command send fail
415*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusTxWriteCommand(MS_BOOL bECbusEnableFlag,stMHL_QUEUE_INFO * stCbusQueueInfo)416*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CbusTxWriteCommand(MS_BOOL bECbusEnableFlag, stMHL_QUEUE_INFO *stCbusQueueInfo)
417*53ee8cc1Swenshuai.xi {
418*53ee8cc1Swenshuai.xi     MS_BOOL bIndex = TRUE;
419*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
420*53ee8cc1Swenshuai.xi     mhalCbusFifo_S pCbusFifo;
421*53ee8cc1Swenshuai.xi 
422*53ee8cc1Swenshuai.xi     pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, stCbusQueueInfo->ucCommand);
423*53ee8cc1Swenshuai.xi 
424*53ee8cc1Swenshuai.xi     switch(stCbusQueueInfo->ucCommand)
425*53ee8cc1Swenshuai.xi     {
426*53ee8cc1Swenshuai.xi         case MSC_ACK:
427*53ee8cc1Swenshuai.xi             pCbusFifo.lens = stCbusQueueInfo->ucLength;
428*53ee8cc1Swenshuai.xi             //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_ACK);
429*53ee8cc1Swenshuai.xi 
430*53ee8cc1Swenshuai.xi             if(stCbusQueueInfo->ucLength == 2)
431*53ee8cc1Swenshuai.xi             {
432*53ee8cc1Swenshuai.xi                 // payload 2
433*53ee8cc1Swenshuai.xi                 pCbusFifo.databuf[1] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_DATA, stCbusQueueInfo->ucData[0]);
434*53ee8cc1Swenshuai.xi             }
435*53ee8cc1Swenshuai.xi             break;
436*53ee8cc1Swenshuai.xi 
437*53ee8cc1Swenshuai.xi         case MSC_NACK:
438*53ee8cc1Swenshuai.xi             pCbusFifo.lens = 1;
439*53ee8cc1Swenshuai.xi             //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_NACK);
440*53ee8cc1Swenshuai.xi             break;
441*53ee8cc1Swenshuai.xi 
442*53ee8cc1Swenshuai.xi         case MSC_ABORT:
443*53ee8cc1Swenshuai.xi             pCbusFifo.lens = 1;
444*53ee8cc1Swenshuai.xi             //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_ABORT);
445*53ee8cc1Swenshuai.xi             break;
446*53ee8cc1Swenshuai.xi 
447*53ee8cc1Swenshuai.xi         case MSC_WRITE_STAT_OR_SET_INT: // 0x60
448*53ee8cc1Swenshuai.xi         case MSC_WRITE_XSTAT: // 0x70
449*53ee8cc1Swenshuai.xi             // payload 1
450*53ee8cc1Swenshuai.xi             //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_WRITE_STAT_OR_SET_INT);
451*53ee8cc1Swenshuai.xi             // payload 2
452*53ee8cc1Swenshuai.xi             pCbusFifo.databuf[1] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_DATA, stCbusQueueInfo->ucData[0]);
453*53ee8cc1Swenshuai.xi             // payload 3
454*53ee8cc1Swenshuai.xi             pCbusFifo.databuf[2] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_DATA, stCbusQueueInfo->ucData[1]);
455*53ee8cc1Swenshuai.xi             // message length
456*53ee8cc1Swenshuai.xi             pCbusFifo.lens = 3;
457*53ee8cc1Swenshuai.xi             break;
458*53ee8cc1Swenshuai.xi 
459*53ee8cc1Swenshuai.xi         case MSC_READ_DEVCAP: // 0x61
460*53ee8cc1Swenshuai.xi         case MSC_READ_XDEVCAP: // 0x71
461*53ee8cc1Swenshuai.xi             // payload 1
462*53ee8cc1Swenshuai.xi             //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_READ_DEVCAP);
463*53ee8cc1Swenshuai.xi             // payload 2
464*53ee8cc1Swenshuai.xi             pCbusFifo.databuf[1] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_DATA, stCbusQueueInfo->ucData[0]);
465*53ee8cc1Swenshuai.xi             // message length
466*53ee8cc1Swenshuai.xi             pCbusFifo.lens = 2;
467*53ee8cc1Swenshuai.xi             break;
468*53ee8cc1Swenshuai.xi 
469*53ee8cc1Swenshuai.xi         case MSC_GET_STATE: // 0x62
470*53ee8cc1Swenshuai.xi         case MSC_GET_VENDOR_ID: // 0x63
471*53ee8cc1Swenshuai.xi         case MSC_SET_HPD: // 0x64
472*53ee8cc1Swenshuai.xi         case MSC_CLR_HPD: // 0x65
473*53ee8cc1Swenshuai.xi         case MSC_GET_SC1_ERRORCODE: // 0x69 - Get channel 1 command error code
474*53ee8cc1Swenshuai.xi         case MSC_GET_DDC_ERRORCODE: // 0x6A - Get DDC channel command error code.
475*53ee8cc1Swenshuai.xi         case MSC_GET_MSC_ERRORCODE: // 0x6B - Get MSC command error code.
476*53ee8cc1Swenshuai.xi         case MSC_GET_SC3_ERRORCODE: // 0x6D - Get channel 3 command error code.
477*53ee8cc1Swenshuai.xi             // payload 1
478*53ee8cc1Swenshuai.xi             //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, pReq->cmd);
479*53ee8cc1Swenshuai.xi             // message length
480*53ee8cc1Swenshuai.xi             pCbusFifo.lens = 1;
481*53ee8cc1Swenshuai.xi             break;
482*53ee8cc1Swenshuai.xi 
483*53ee8cc1Swenshuai.xi         case MSC_MSC_MSG: // 0x68
484*53ee8cc1Swenshuai.xi             // payload 1
485*53ee8cc1Swenshuai.xi             //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_MSC_MSG);
486*53ee8cc1Swenshuai.xi             // payload 2
487*53ee8cc1Swenshuai.xi             pCbusFifo.databuf[1] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_DATA, stCbusQueueInfo->ucData[0]);
488*53ee8cc1Swenshuai.xi             // payload 3
489*53ee8cc1Swenshuai.xi             pCbusFifo.databuf[2] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_DATA, stCbusQueueInfo->ucData[1]);
490*53ee8cc1Swenshuai.xi             // message length
491*53ee8cc1Swenshuai.xi             pCbusFifo.lens = 3;
492*53ee8cc1Swenshuai.xi             break;
493*53ee8cc1Swenshuai.xi 
494*53ee8cc1Swenshuai.xi         case MSC_WRITE_BURST: // 0x6C
495*53ee8cc1Swenshuai.xi             // payload 1
496*53ee8cc1Swenshuai.xi             //pCbusFifo.databuf[0] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_WRITE_BURST);
497*53ee8cc1Swenshuai.xi             // payload 2 ~ 17
498*53ee8cc1Swenshuai.xi             for(uctemp =0; uctemp <stCbusQueueInfo->ucLength; uctemp++) // offset packet + the maxi 16 packets
499*53ee8cc1Swenshuai.xi             {
500*53ee8cc1Swenshuai.xi                 pCbusFifo.databuf[uctemp +1] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_DATA, stCbusQueueInfo->ucData[uctemp]);
501*53ee8cc1Swenshuai.xi             }
502*53ee8cc1Swenshuai.xi             // EOF
503*53ee8cc1Swenshuai.xi             pCbusFifo.databuf[stCbusQueueInfo->ucLength +1] = _mdrv_mhl_CbusSetPacket(MSC_HEADER, CBUS_CONTROL, MSC_EOF);
504*53ee8cc1Swenshuai.xi             // message length
505*53ee8cc1Swenshuai.xi             pCbusFifo.lens = stCbusQueueInfo->ucLength +2;
506*53ee8cc1Swenshuai.xi             break;
507*53ee8cc1Swenshuai.xi 
508*53ee8cc1Swenshuai.xi         default:
509*53ee8cc1Swenshuai.xi             bIndex = FALSE;
510*53ee8cc1Swenshuai.xi             break;
511*53ee8cc1Swenshuai.xi     }
512*53ee8cc1Swenshuai.xi 
513*53ee8cc1Swenshuai.xi     if(bIndex)
514*53ee8cc1Swenshuai.xi     {
515*53ee8cc1Swenshuai.xi         if(!mhal_mhl_CBusWrite(bECbusEnableFlag, &pCbusFifo))
516*53ee8cc1Swenshuai.xi         {
517*53ee8cc1Swenshuai.xi             return FALSE;
518*53ee8cc1Swenshuai.xi         }
519*53ee8cc1Swenshuai.xi     }
520*53ee8cc1Swenshuai.xi 
521*53ee8cc1Swenshuai.xi     return bIndex;
522*53ee8cc1Swenshuai.xi }
523*53ee8cc1Swenshuai.xi 
524*53ee8cc1Swenshuai.xi //**************************************************************************
525*53ee8cc1Swenshuai.xi //  [Function Name]:
526*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_GetFreeQueueIndex()
527*53ee8cc1Swenshuai.xi //  [Description]
528*53ee8cc1Swenshuai.xi //
529*53ee8cc1Swenshuai.xi //  [Arguments]:
530*53ee8cc1Swenshuai.xi //
531*53ee8cc1Swenshuai.xi //  [Return]:
532*53ee8cc1Swenshuai.xi //
533*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetFreeQueueIndex(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)534*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_GetFreeQueueIndex(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
535*53ee8cc1Swenshuai.xi {
536*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
537*53ee8cc1Swenshuai.xi     MS_U8 ucQueueIndex = 0;
538*53ee8cc1Swenshuai.xi 
539*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <(MHL_CBUS_TOTAL_QUEUE_NUM -1); uctemp++)
540*53ee8cc1Swenshuai.xi     {
541*53ee8cc1Swenshuai.xi         ucQueueIndex = (pMHLResourcePrivate->ucCurrentQueueIndex +uctemp +1) %(MHL_CBUS_TOTAL_QUEUE_NUM -1);
542*53ee8cc1Swenshuai.xi 
543*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState == MHL_QUEUE_STATE_IDLE)
544*53ee8cc1Swenshuai.xi         {
545*53ee8cc1Swenshuai.xi             break;
546*53ee8cc1Swenshuai.xi         }
547*53ee8cc1Swenshuai.xi         else
548*53ee8cc1Swenshuai.xi         {
549*53ee8cc1Swenshuai.xi             ucQueueIndex = MHL_CBUS_TOTAL_QUEUE_NUM;
550*53ee8cc1Swenshuai.xi         }
551*53ee8cc1Swenshuai.xi     }
552*53ee8cc1Swenshuai.xi 
553*53ee8cc1Swenshuai.xi     if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM) // Have free queue
554*53ee8cc1Swenshuai.xi     {
555*53ee8cc1Swenshuai.xi         uctemp = (ucQueueIndex +MHL_CBUS_TOTAL_QUEUE_NUM -2) %(MHL_CBUS_TOTAL_QUEUE_NUM -1);
556*53ee8cc1Swenshuai.xi 
557*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->stCbusQueueInfo[uctemp].ucQueueState == MHL_QUEUE_STATE_IDLE)
558*53ee8cc1Swenshuai.xi         {
559*53ee8cc1Swenshuai.xi             ucQueueIndex = uctemp;
560*53ee8cc1Swenshuai.xi         }
561*53ee8cc1Swenshuai.xi     }
562*53ee8cc1Swenshuai.xi 
563*53ee8cc1Swenshuai.xi     return ucQueueIndex;
564*53ee8cc1Swenshuai.xi }
565*53ee8cc1Swenshuai.xi 
566*53ee8cc1Swenshuai.xi //**************************************************************************
567*53ee8cc1Swenshuai.xi //  [Function Name]:
568*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_GetCbusQueueIndex()
569*53ee8cc1Swenshuai.xi //  [Description]:
570*53ee8cc1Swenshuai.xi //                  MHL Cbus get transmitting queue index
571*53ee8cc1Swenshuai.xi //  [Arguments]:
572*53ee8cc1Swenshuai.xi //
573*53ee8cc1Swenshuai.xi //  [Return]:
574*53ee8cc1Swenshuai.xi //
575*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetCbusQueueIndex(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)576*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_GetCbusQueueIndex(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
577*53ee8cc1Swenshuai.xi {
578*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
579*53ee8cc1Swenshuai.xi     MS_U8 ucQueueIndex = 0;
580*53ee8cc1Swenshuai.xi 
581*53ee8cc1Swenshuai.xi     // Check Rx queue have packet transmit success or not
582*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucQueueState != MHL_QUEUE_STATE_IDLE)
583*53ee8cc1Swenshuai.xi     {
584*53ee8cc1Swenshuai.xi         ucQueueIndex = MHL_CBUS_RX_QUEUE_INDEX;
585*53ee8cc1Swenshuai.xi     }
586*53ee8cc1Swenshuai.xi     else // Check Tx queue have packet transmit success or not, search start  from current index
587*53ee8cc1Swenshuai.xi     {
588*53ee8cc1Swenshuai.xi         for(uctemp = 0; uctemp <(MHL_CBUS_TOTAL_QUEUE_NUM -1); uctemp++)
589*53ee8cc1Swenshuai.xi         {
590*53ee8cc1Swenshuai.xi             ucQueueIndex = (pMHLResourcePrivate->ucCurrentQueueIndex +uctemp) %(MHL_CBUS_TOTAL_QUEUE_NUM -1);
591*53ee8cc1Swenshuai.xi 
592*53ee8cc1Swenshuai.xi             if(pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState != MHL_QUEUE_STATE_IDLE)
593*53ee8cc1Swenshuai.xi             {
594*53ee8cc1Swenshuai.xi                 break;
595*53ee8cc1Swenshuai.xi             }
596*53ee8cc1Swenshuai.xi             else
597*53ee8cc1Swenshuai.xi             {
598*53ee8cc1Swenshuai.xi                 ucQueueIndex = MHL_CBUS_TOTAL_QUEUE_NUM;
599*53ee8cc1Swenshuai.xi             }
600*53ee8cc1Swenshuai.xi         }
601*53ee8cc1Swenshuai.xi     }
602*53ee8cc1Swenshuai.xi 
603*53ee8cc1Swenshuai.xi     return ucQueueIndex;
604*53ee8cc1Swenshuai.xi }
605*53ee8cc1Swenshuai.xi 
606*53ee8cc1Swenshuai.xi //**************************************************************************
607*53ee8cc1Swenshuai.xi //  [Function Name]:
608*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_SetCbusTimerEvent()
609*53ee8cc1Swenshuai.xi //  [Description]:
610*53ee8cc1Swenshuai.xi //
611*53ee8cc1Swenshuai.xi //  [Arguments]:
612*53ee8cc1Swenshuai.xi //
613*53ee8cc1Swenshuai.xi //  [Return]:
614*53ee8cc1Swenshuai.xi //
615*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SetCbusTimerEvent(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucTimerEvent,MS_U16 usTimerTick)616*53ee8cc1Swenshuai.xi void _mdrv_mhl_SetCbusTimerEvent(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucTimerEvent, MS_U16 usTimerTick)
617*53ee8cc1Swenshuai.xi {
618*53ee8cc1Swenshuai.xi     if(usTimerTick > 0)
619*53ee8cc1Swenshuai.xi     {
620*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].bEnableFlag = TRUE;
621*53ee8cc1Swenshuai.xi 
622*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
623*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL set timer event %d tick %d\r\n", ucTimerEvent, usTimerTick);
624*53ee8cc1Swenshuai.xi #endif
625*53ee8cc1Swenshuai.xi     }
626*53ee8cc1Swenshuai.xi 
627*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].usTimerTick = usTimerTick;
628*53ee8cc1Swenshuai.xi }
629*53ee8cc1Swenshuai.xi 
630*53ee8cc1Swenshuai.xi //**************************************************************************
631*53ee8cc1Swenshuai.xi //  [Function Name]:
632*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusRxQueueInsertMSG(BYTE subCmd, BYTE databuf)
633*53ee8cc1Swenshuai.xi //  [Description]
634*53ee8cc1Swenshuai.xi //                  MHL Cbus Reply MSC RCP or RAP into Queue
635*53ee8cc1Swenshuai.xi //  [Arguments]:
636*53ee8cc1Swenshuai.xi //                  subCmd: MSC subcommands
637*53ee8cc1Swenshuai.xi //                  databuf: command code
638*53ee8cc1Swenshuai.xi //  [Return]:
639*53ee8cc1Swenshuai.xi //                  TRUE: success
640*53ee8cc1Swenshuai.xi //                  FALSE: fail
641*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusRxQueueInsertMSG(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucSubCommand,MS_U8 ucKeyCode)642*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusRxQueueInsertMSG(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucSubCommand, MS_U8 ucKeyCode)
643*53ee8cc1Swenshuai.xi {
644*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucQueueState = MHL_QUEUE_STATE_PENDING;
645*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucLength = 2;
646*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucCommand = MSC_MSC_MSG;
647*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucData[0] = ucSubCommand;
648*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucData[1] = ucKeyCode;
649*53ee8cc1Swenshuai.xi }
650*53ee8cc1Swenshuai.xi 
651*53ee8cc1Swenshuai.xi //**************************************************************************
652*53ee8cc1Swenshuai.xi //  [Function Name]:
653*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_WriteBurstCheckSum()
654*53ee8cc1Swenshuai.xi //  [Description]
655*53ee8cc1Swenshuai.xi //
656*53ee8cc1Swenshuai.xi //  [Arguments]:
657*53ee8cc1Swenshuai.xi //
658*53ee8cc1Swenshuai.xi //  [Return]:
659*53ee8cc1Swenshuai.xi //
660*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_WriteBurstCheckSum(MS_U8 * pData)661*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_WriteBurstCheckSum(MS_U8 *pData)
662*53ee8cc1Swenshuai.xi {
663*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
664*53ee8cc1Swenshuai.xi     MS_U8 ucCheckSum = 0;
665*53ee8cc1Swenshuai.xi 
666*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <MHL_MSC_SCRATCHPAD_SIZE; uctemp++)
667*53ee8cc1Swenshuai.xi     {
668*53ee8cc1Swenshuai.xi         ucCheckSum = ucCheckSum +pData[uctemp];
669*53ee8cc1Swenshuai.xi     }
670*53ee8cc1Swenshuai.xi 
671*53ee8cc1Swenshuai.xi     ucCheckSum = (ucCheckSum ^0xFF) +1;
672*53ee8cc1Swenshuai.xi 
673*53ee8cc1Swenshuai.xi     return ucCheckSum;
674*53ee8cc1Swenshuai.xi }
675*53ee8cc1Swenshuai.xi 
676*53ee8cc1Swenshuai.xi //**************************************************************************
677*53ee8cc1Swenshuai.xi //  [Function Name]:
678*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CheckSendCommand()
679*53ee8cc1Swenshuai.xi //  [Description]
680*53ee8cc1Swenshuai.xi //
681*53ee8cc1Swenshuai.xi //  [Arguments]:
682*53ee8cc1Swenshuai.xi //
683*53ee8cc1Swenshuai.xi //  [Return]:
684*53ee8cc1Swenshuai.xi //
685*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckSendCommand(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)686*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CheckSendCommand(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
687*53ee8cc1Swenshuai.xi {
688*53ee8cc1Swenshuai.xi     MS_BOOL bSendCommand = FALSE;
689*53ee8cc1Swenshuai.xi     MS_BOOL bMHLPort = mhal_mhl_CheckInputPort(pMHLResourcePrivate->ucMHLSupportPath);
690*53ee8cc1Swenshuai.xi 
691*53ee8cc1Swenshuai.xi     if(bMHLPort && mhal_mhl_CheckPIPWindow()) // MHL port and scaler mux on
692*53ee8cc1Swenshuai.xi     {
693*53ee8cc1Swenshuai.xi         bSendCommand = TRUE;
694*53ee8cc1Swenshuai.xi     }
695*53ee8cc1Swenshuai.xi     else if(GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_FORCE_SEND_COMMAND_FLAG) && GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_FORCE_SEND_COMMAND_FLAG))
696*53ee8cc1Swenshuai.xi     {
697*53ee8cc1Swenshuai.xi         bSendCommand = TRUE;
698*53ee8cc1Swenshuai.xi     }
699*53ee8cc1Swenshuai.xi 
700*53ee8cc1Swenshuai.xi     return bSendCommand;
701*53ee8cc1Swenshuai.xi }
702*53ee8cc1Swenshuai.xi 
703*53ee8cc1Swenshuai.xi //**************************************************************************
704*53ee8cc1Swenshuai.xi //  [Function Name]:
705*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_GetRAPEnableFlag()
706*53ee8cc1Swenshuai.xi //  [Description]
707*53ee8cc1Swenshuai.xi //
708*53ee8cc1Swenshuai.xi //  [Arguments]:
709*53ee8cc1Swenshuai.xi //
710*53ee8cc1Swenshuai.xi //  [Return]:
711*53ee8cc1Swenshuai.xi //
712*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetRAPEnableFlag(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)713*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetRAPEnableFlag(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
714*53ee8cc1Swenshuai.xi {
715*53ee8cc1Swenshuai.xi     MS_BOOL bRAPEnable = FALSE;
716*53ee8cc1Swenshuai.xi 
717*53ee8cc1Swenshuai.xi     if(!mhal_mhl_CheckInputPort(pMHLResourcePrivate->ucMHLSupportPath))
718*53ee8cc1Swenshuai.xi     {
719*53ee8cc1Swenshuai.xi         bRAPEnable = TRUE;
720*53ee8cc1Swenshuai.xi     }
721*53ee8cc1Swenshuai.xi     else if(!mhal_mhl_CheckPIPWindow())
722*53ee8cc1Swenshuai.xi     {
723*53ee8cc1Swenshuai.xi         bRAPEnable = TRUE;
724*53ee8cc1Swenshuai.xi     }
725*53ee8cc1Swenshuai.xi     else if(pMHLResourcePrivate->stSignalStatusInfo.bSignalStableFlag)
726*53ee8cc1Swenshuai.xi     {
727*53ee8cc1Swenshuai.xi         bRAPEnable = TRUE;
728*53ee8cc1Swenshuai.xi     }
729*53ee8cc1Swenshuai.xi 
730*53ee8cc1Swenshuai.xi     return bRAPEnable;
731*53ee8cc1Swenshuai.xi }
732*53ee8cc1Swenshuai.xi 
733*53ee8cc1Swenshuai.xi //**************************************************************************
734*53ee8cc1Swenshuai.xi //  [Function Name]:
735*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CheckCbusModeChange()
736*53ee8cc1Swenshuai.xi //  [Description]
737*53ee8cc1Swenshuai.xi //
738*53ee8cc1Swenshuai.xi //  [Arguments]:
739*53ee8cc1Swenshuai.xi //
740*53ee8cc1Swenshuai.xi //  [Return]:
741*53ee8cc1Swenshuai.xi //
742*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckCbusModeChange(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)743*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CheckCbusModeChange(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
744*53ee8cc1Swenshuai.xi {
745*53ee8cc1Swenshuai.xi     MS_BOOL bNotCbusChange = TRUE;
746*53ee8cc1Swenshuai.xi 
747*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->ucMSGData[1] == MHL_RAP_KEY_CBUS_MODE_UP)
748*53ee8cc1Swenshuai.xi     {
749*53ee8cc1Swenshuai.xi         bNotCbusChange = FALSE;
750*53ee8cc1Swenshuai.xi 
751*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_RECEIVE_MODE_UP;
752*53ee8cc1Swenshuai.xi     }
753*53ee8cc1Swenshuai.xi     else if(pMHLResourcePrivate->ucMSGData[1] == MHL_RAP_KEY_CBUS_MODE_DOWN)
754*53ee8cc1Swenshuai.xi     {
755*53ee8cc1Swenshuai.xi         bNotCbusChange = FALSE;
756*53ee8cc1Swenshuai.xi 
757*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_RECEIVE_MODE_DOWN;
758*53ee8cc1Swenshuai.xi     }
759*53ee8cc1Swenshuai.xi 
760*53ee8cc1Swenshuai.xi     return bNotCbusChange;
761*53ee8cc1Swenshuai.xi }
762*53ee8cc1Swenshuai.xi 
763*53ee8cc1Swenshuai.xi //**************************************************************************
764*53ee8cc1Swenshuai.xi //  [Function Name]:
765*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_DTDPresentinEDID()
766*53ee8cc1Swenshuai.xi //  [Description]
767*53ee8cc1Swenshuai.xi //
768*53ee8cc1Swenshuai.xi //  [Arguments]:
769*53ee8cc1Swenshuai.xi //
770*53ee8cc1Swenshuai.xi //  [Return]:
771*53ee8cc1Swenshuai.xi //
772*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_DTDPresentinEDID(MS_U8 * pData)773*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_DTDPresentinEDID(MS_U8 *pData)
774*53ee8cc1Swenshuai.xi {
775*53ee8cc1Swenshuai.xi     MS_BOOL bPresent = FALSE;
776*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
777*53ee8cc1Swenshuai.xi 
778*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < 3; uctemp++)
779*53ee8cc1Swenshuai.xi     {
780*53ee8cc1Swenshuai.xi         if(pData[uctemp] > 0)
781*53ee8cc1Swenshuai.xi         {
782*53ee8cc1Swenshuai.xi             bPresent = TRUE;
783*53ee8cc1Swenshuai.xi 
784*53ee8cc1Swenshuai.xi             break;
785*53ee8cc1Swenshuai.xi         }
786*53ee8cc1Swenshuai.xi     }
787*53ee8cc1Swenshuai.xi 
788*53ee8cc1Swenshuai.xi     return bPresent;
789*53ee8cc1Swenshuai.xi }
790*53ee8cc1Swenshuai.xi 
791*53ee8cc1Swenshuai.xi //**************************************************************************
792*53ee8cc1Swenshuai.xi //  [Function Name]:
793*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_GetDTD3DTimingInformation()
794*53ee8cc1Swenshuai.xi //  [Description]
795*53ee8cc1Swenshuai.xi //
796*53ee8cc1Swenshuai.xi //  [Arguments]:
797*53ee8cc1Swenshuai.xi //
798*53ee8cc1Swenshuai.xi //  [Return]:
799*53ee8cc1Swenshuai.xi //
800*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetDTD3DTimingInformation(MS_U8 * pData)801*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_GetDTD3DTimingInformation(MS_U8 *pData)
802*53ee8cc1Swenshuai.xi {
803*53ee8cc1Swenshuai.xi     MS_BOOL bInterlace = ((pData[17] &BIT(7)) ?TRUE :FALSE);
804*53ee8cc1Swenshuai.xi     MS_U8 ucIndex = 0;
805*53ee8cc1Swenshuai.xi     MS_U16 usHActive = ((pData[4] &BMASK(7:4)) <<4) |pData[2];
806*53ee8cc1Swenshuai.xi     MS_U16 usHBlank = ((pData[4] &BMASK(3:0)) <<8) |pData[3];
807*53ee8cc1Swenshuai.xi     MS_U16 usVActive = ((pData[7] &BMASK(7:4)) <<4) |pData[5];
808*53ee8cc1Swenshuai.xi     MS_U16 usVBlank = ((pData[7] &BMASK(3:0)) <<8) |pData[6];
809*53ee8cc1Swenshuai.xi     MS_U16 usHTotal = usHActive +usHBlank;
810*53ee8cc1Swenshuai.xi     MS_U16 usVTotal = usVActive +usVBlank;
811*53ee8cc1Swenshuai.xi     MS_U16 usPixelClk = (pData[1] <<8) |pData[0];
812*53ee8cc1Swenshuai.xi     MS_U32 ulFrequenct = 0;
813*53ee8cc1Swenshuai.xi 
814*53ee8cc1Swenshuai.xi     if((usHTotal > 0) && (usVTotal > 0))
815*53ee8cc1Swenshuai.xi     {
816*53ee8cc1Swenshuai.xi         ulFrequenct = (usPixelClk *100 /usHTotal) *1000 /usVTotal;
817*53ee8cc1Swenshuai.xi 
818*53ee8cc1Swenshuai.xi         if((usHActive == 1920) && (usVActive == 1080)) // 1920x1080p
819*53ee8cc1Swenshuai.xi         {
820*53ee8cc1Swenshuai.xi             if((ulFrequenct > 230) && (ulFrequenct < 245)) // 24Hz
821*53ee8cc1Swenshuai.xi             {
822*53ee8cc1Swenshuai.xi                 ucIndex = MHL_3D_PRESENT_VIC_1920x1080p24Hz;
823*53ee8cc1Swenshuai.xi             }
824*53ee8cc1Swenshuai.xi         }
825*53ee8cc1Swenshuai.xi         else if((usHActive == 1920) && (usVActive == 540) && bInterlace) // 1920x1080i
826*53ee8cc1Swenshuai.xi         {
827*53ee8cc1Swenshuai.xi             if((ulFrequenct > 590) && (ulFrequenct < 610)) // 60Hz
828*53ee8cc1Swenshuai.xi             {
829*53ee8cc1Swenshuai.xi                 ucIndex = MHL_3D_PRESENT_VIC_1920x1080i60Hz;
830*53ee8cc1Swenshuai.xi             }
831*53ee8cc1Swenshuai.xi             else if((ulFrequenct > 490) && (ulFrequenct < 510)) // 50Hz
832*53ee8cc1Swenshuai.xi             {
833*53ee8cc1Swenshuai.xi                 ucIndex = MHL_3D_PRESENT_VIC_1920x1080i50Hz;
834*53ee8cc1Swenshuai.xi             }
835*53ee8cc1Swenshuai.xi         }
836*53ee8cc1Swenshuai.xi         else if((usHActive == 1280) && (usVActive == 720)) // 1280x720p
837*53ee8cc1Swenshuai.xi         {
838*53ee8cc1Swenshuai.xi             if((ulFrequenct > 590) && (ulFrequenct < 610)) // 60Hz
839*53ee8cc1Swenshuai.xi             {
840*53ee8cc1Swenshuai.xi                 ucIndex = MHL_3D_PRESENT_VIC_1280x720p60Hz;
841*53ee8cc1Swenshuai.xi             }
842*53ee8cc1Swenshuai.xi             else if((ulFrequenct > 490) && (ulFrequenct < 510)) // 50Hz
843*53ee8cc1Swenshuai.xi             {
844*53ee8cc1Swenshuai.xi                 ucIndex = MHL_3D_PRESENT_VIC_1280x720p50Hz;
845*53ee8cc1Swenshuai.xi             }
846*53ee8cc1Swenshuai.xi         }
847*53ee8cc1Swenshuai.xi     }
848*53ee8cc1Swenshuai.xi 
849*53ee8cc1Swenshuai.xi     return ucIndex;
850*53ee8cc1Swenshuai.xi }
851*53ee8cc1Swenshuai.xi 
852*53ee8cc1Swenshuai.xi //**************************************************************************
853*53ee8cc1Swenshuai.xi //  [Function Name]:
854*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_InsertDTD3DInformation()
855*53ee8cc1Swenshuai.xi //  [Description]
856*53ee8cc1Swenshuai.xi //
857*53ee8cc1Swenshuai.xi //  [Arguments]:
858*53ee8cc1Swenshuai.xi //
859*53ee8cc1Swenshuai.xi //  [Return]:
860*53ee8cc1Swenshuai.xi //
861*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_InsertDTD3DInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucIndex,MS_U8 ucData)862*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_InsertDTD3DInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucIndex, MS_U8 ucData)
863*53ee8cc1Swenshuai.xi {
864*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
865*53ee8cc1Swenshuai.xi 
866*53ee8cc1Swenshuai.xi     ucData = ((ucData &BMASK(6:5)) >> 4) |(ucData &BIT(0));
867*53ee8cc1Swenshuai.xi 
868*53ee8cc1Swenshuai.xi     switch(ucData)
869*53ee8cc1Swenshuai.xi     {
870*53ee8cc1Swenshuai.xi         case MHL_3D_DTD_STEREO_FIELD_SEQUENTIAL_RIGHT:
871*53ee8cc1Swenshuai.xi             uctemp = MASKSET(uctemp, MHL_3D_FS_SUPPORT, MHL_3D_SUPPORT_MASK);
872*53ee8cc1Swenshuai.xi             break;
873*53ee8cc1Swenshuai.xi 
874*53ee8cc1Swenshuai.xi         case MHL_3D_DTD_STEREO_FIELD_SEQUENTIAL_LEFT:
875*53ee8cc1Swenshuai.xi             uctemp = MASKSET(uctemp, MHL_3D_FS_SUPPORT, MHL_3D_SUPPORT_MASK);
876*53ee8cc1Swenshuai.xi             break;
877*53ee8cc1Swenshuai.xi 
878*53ee8cc1Swenshuai.xi         case MHL_3D_DTD_STEREO_2WAY_INTERLEAVED_RIGHT:
879*53ee8cc1Swenshuai.xi             // No setting
880*53ee8cc1Swenshuai.xi             break;
881*53ee8cc1Swenshuai.xi 
882*53ee8cc1Swenshuai.xi         case MHL_3D_DTD_STEREO_2WAY_INTERLEAVED_LEFT:
883*53ee8cc1Swenshuai.xi             // No setting
884*53ee8cc1Swenshuai.xi             break;
885*53ee8cc1Swenshuai.xi 
886*53ee8cc1Swenshuai.xi         case MHL_3D_DTD_STEREO_4WAY_INTERLEAVED:
887*53ee8cc1Swenshuai.xi             // No setting
888*53ee8cc1Swenshuai.xi             break;
889*53ee8cc1Swenshuai.xi 
890*53ee8cc1Swenshuai.xi         case MHL_3D_DTD_STEREO_SIDE_BY_SIDE_INTERLEAVED:
891*53ee8cc1Swenshuai.xi             uctemp = MASKSET(uctemp, MHL_3D_LR_SUPPORT, MHL_3D_SUPPORT_MASK);
892*53ee8cc1Swenshuai.xi             break;
893*53ee8cc1Swenshuai.xi 
894*53ee8cc1Swenshuai.xi         default: // MHL_3D_DTD_STEREO_NORMAL_DISPLAY
895*53ee8cc1Swenshuai.xi 
896*53ee8cc1Swenshuai.xi             break;
897*53ee8cc1Swenshuai.xi     };
898*53ee8cc1Swenshuai.xi 
899*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->uc3DInformationDTD[ucIndex] = uctemp;
900*53ee8cc1Swenshuai.xi 
901*53ee8cc1Swenshuai.xi     for(uctemp = 0, ucData = 0; uctemp < (ucIndex +1); uctemp++)
902*53ee8cc1Swenshuai.xi     {
903*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->uc3DInformationDTD[uctemp] > 0)
904*53ee8cc1Swenshuai.xi         {
905*53ee8cc1Swenshuai.xi             ucData = uctemp +1;
906*53ee8cc1Swenshuai.xi         }
907*53ee8cc1Swenshuai.xi     }
908*53ee8cc1Swenshuai.xi 
909*53ee8cc1Swenshuai.xi     return ucData;
910*53ee8cc1Swenshuai.xi }
911*53ee8cc1Swenshuai.xi 
912*53ee8cc1Swenshuai.xi //**************************************************************************
913*53ee8cc1Swenshuai.xi //  [Function Name]:
914*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CheckVIC3DStructureAll()
915*53ee8cc1Swenshuai.xi //  [Description]
916*53ee8cc1Swenshuai.xi //
917*53ee8cc1Swenshuai.xi //  [Arguments]:
918*53ee8cc1Swenshuai.xi //
919*53ee8cc1Swenshuai.xi //  [Return]:
920*53ee8cc1Swenshuai.xi //
921*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckVIC3DStructureAll(MS_U16 usData)922*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_CheckVIC3DStructureAll(MS_U16 usData)
923*53ee8cc1Swenshuai.xi {
924*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
925*53ee8cc1Swenshuai.xi 
926*53ee8cc1Swenshuai.xi     if((usData &BIT(0)) == BIT(0)) // Support frame packing 3D formats
927*53ee8cc1Swenshuai.xi     {
928*53ee8cc1Swenshuai.xi         uctemp = MASKSET(uctemp, MHL_3D_FS_SUPPORT, MHL_3D_FS_SUPPORT);
929*53ee8cc1Swenshuai.xi     }
930*53ee8cc1Swenshuai.xi 
931*53ee8cc1Swenshuai.xi     if((usData &BIT(6)) == BIT(6)) // Support top and bottom 3D formats
932*53ee8cc1Swenshuai.xi     {
933*53ee8cc1Swenshuai.xi         uctemp = MASKSET(uctemp, MHL_3D_TB_SUPPORT, MHL_3D_TB_SUPPORT);
934*53ee8cc1Swenshuai.xi     }
935*53ee8cc1Swenshuai.xi 
936*53ee8cc1Swenshuai.xi     if((usData &BIT(8)) == BIT(8)) // Support side by side 3D formats
937*53ee8cc1Swenshuai.xi     {
938*53ee8cc1Swenshuai.xi         uctemp = MASKSET(uctemp, MHL_3D_LR_SUPPORT, MHL_3D_LR_SUPPORT);
939*53ee8cc1Swenshuai.xi     }
940*53ee8cc1Swenshuai.xi 
941*53ee8cc1Swenshuai.xi     return uctemp;
942*53ee8cc1Swenshuai.xi }
943*53ee8cc1Swenshuai.xi 
944*53ee8cc1Swenshuai.xi //**************************************************************************
945*53ee8cc1Swenshuai.xi //  [Function Name]:
946*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CheckVIC3DStructure()
947*53ee8cc1Swenshuai.xi //  [Description]
948*53ee8cc1Swenshuai.xi //
949*53ee8cc1Swenshuai.xi //  [Arguments]:
950*53ee8cc1Swenshuai.xi //
951*53ee8cc1Swenshuai.xi //  [Return]:
952*53ee8cc1Swenshuai.xi //
953*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckVIC3DStructure(MS_U8 ucData)954*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_CheckVIC3DStructure(MS_U8 ucData)
955*53ee8cc1Swenshuai.xi {
956*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
957*53ee8cc1Swenshuai.xi 
958*53ee8cc1Swenshuai.xi     if(ucData == 0) // Support frame packing
959*53ee8cc1Swenshuai.xi     {
960*53ee8cc1Swenshuai.xi         uctemp = MASKSET(uctemp, MHL_3D_FS_SUPPORT, MHL_3D_FS_SUPPORT);
961*53ee8cc1Swenshuai.xi     }
962*53ee8cc1Swenshuai.xi     else if(ucData == 6) // Support top and bottom
963*53ee8cc1Swenshuai.xi     {
964*53ee8cc1Swenshuai.xi         uctemp = MASKSET(uctemp, MHL_3D_TB_SUPPORT, MHL_3D_TB_SUPPORT);
965*53ee8cc1Swenshuai.xi     }
966*53ee8cc1Swenshuai.xi     else if(ucData == 8) // Support side by side
967*53ee8cc1Swenshuai.xi     {
968*53ee8cc1Swenshuai.xi         uctemp = MASKSET(uctemp, MHL_3D_LR_SUPPORT, MHL_3D_LR_SUPPORT);
969*53ee8cc1Swenshuai.xi     }
970*53ee8cc1Swenshuai.xi 
971*53ee8cc1Swenshuai.xi     return uctemp;
972*53ee8cc1Swenshuai.xi }
973*53ee8cc1Swenshuai.xi 
974*53ee8cc1Swenshuai.xi //**************************************************************************
975*53ee8cc1Swenshuai.xi //  [Function Name]:
976*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_InsertHighEndVICTable()
977*53ee8cc1Swenshuai.xi //  [Description]
978*53ee8cc1Swenshuai.xi //
979*53ee8cc1Swenshuai.xi //  [Arguments]:
980*53ee8cc1Swenshuai.xi //
981*53ee8cc1Swenshuai.xi //  [Return]:
982*53ee8cc1Swenshuai.xi //
983*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_InsertHighEndVICTable(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucVICCode)984*53ee8cc1Swenshuai.xi void _mdrv_mhl_InsertHighEndVICTable(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucVICCode)
985*53ee8cc1Swenshuai.xi {
986*53ee8cc1Swenshuai.xi     switch(ucVICCode)
987*53ee8cc1Swenshuai.xi     {
988*53ee8cc1Swenshuai.xi         case MHL_HEV_VIC_INDEX0:
989*53ee8cc1Swenshuai.xi         case MHL_HEV_VIC_INDEX1:
990*53ee8cc1Swenshuai.xi         case MHL_HEV_VIC_INDEX2:
991*53ee8cc1Swenshuai.xi         case MHL_HEV_VIC_INDEX3:
992*53ee8cc1Swenshuai.xi         case MHL_HEV_VIC_INDEX4:
993*53ee8cc1Swenshuai.xi         case MHL_HEV_VIC_INDEX5:
994*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usHighEndVICTable[pMHLResourcePrivate->ucHighEndVICTotalEntry] = ucVICCode;
995*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucHighEndVICTotalEntry++;
996*53ee8cc1Swenshuai.xi             break;
997*53ee8cc1Swenshuai.xi 
998*53ee8cc1Swenshuai.xi         default:
999*53ee8cc1Swenshuai.xi 
1000*53ee8cc1Swenshuai.xi             break;
1001*53ee8cc1Swenshuai.xi     };
1002*53ee8cc1Swenshuai.xi }
1003*53ee8cc1Swenshuai.xi 
1004*53ee8cc1Swenshuai.xi //**************************************************************************
1005*53ee8cc1Swenshuai.xi //  [Function Name]:
1006*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_ParsingVIC3DInformation()
1007*53ee8cc1Swenshuai.xi //  [Description]
1008*53ee8cc1Swenshuai.xi //
1009*53ee8cc1Swenshuai.xi //  [Arguments]:
1010*53ee8cc1Swenshuai.xi //
1011*53ee8cc1Swenshuai.xi //  [Return]:
1012*53ee8cc1Swenshuai.xi //
1013*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ParsingVIC3DInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucExtendLength,MS_U8 * pData)1014*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_ParsingVIC3DInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucExtendLength, MS_U8 *pData)
1015*53ee8cc1Swenshuai.xi {
1016*53ee8cc1Swenshuai.xi     MS_BOOL bVICParseFinish = TRUE;
1017*53ee8cc1Swenshuai.xi     MS_BOOL b3DPresent = FALSE;
1018*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
1019*53ee8cc1Swenshuai.xi     MS_U8 ucIndex = 0;
1020*53ee8cc1Swenshuai.xi     MS_U8 ucValue = 0;
1021*53ee8cc1Swenshuai.xi     MS_U8 ucLength = 0;
1022*53ee8cc1Swenshuai.xi     MS_U8 ucVSDBAddr = 0;
1023*53ee8cc1Swenshuai.xi     MS_U8 ucVSDBLength = 0;
1024*53ee8cc1Swenshuai.xi     MS_U8 uc3DMultiPresent = 0;
1025*53ee8cc1Swenshuai.xi     MS_U8 ucVICTimingNum = 0;
1026*53ee8cc1Swenshuai.xi     MS_U8 ucVICTiming[MHL_3D_VIC_INFORMATION_LENGTH] = {0};
1027*53ee8cc1Swenshuai.xi     MS_U16 usMaskValue = 0;
1028*53ee8cc1Swenshuai.xi 
1029*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < MHL_3D_VIC_INFORMATION_LENGTH; uctemp++)
1030*53ee8cc1Swenshuai.xi     {
1031*53ee8cc1Swenshuai.xi         ucVICTiming[uctemp] = 0;
1032*53ee8cc1Swenshuai.xi 
1033*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->uc3DInformationVIC[uctemp] = 0;
1034*53ee8cc1Swenshuai.xi     }
1035*53ee8cc1Swenshuai.xi 
1036*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < ucExtendLength; uctemp++)
1037*53ee8cc1Swenshuai.xi     {
1038*53ee8cc1Swenshuai.xi         ucValue = (pData[uctemp] &BMASK(7:5)) >>5;
1039*53ee8cc1Swenshuai.xi         ucLength = pData[uctemp] &BMASK(4:0);
1040*53ee8cc1Swenshuai.xi 
1041*53ee8cc1Swenshuai.xi         switch(ucValue)
1042*53ee8cc1Swenshuai.xi         {
1043*53ee8cc1Swenshuai.xi             case MHL_EDID_AUDIO_DATA_BLOCK_CODE:
1044*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL get audio data block length %d in port %c\r\n", ucLength, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1045*53ee8cc1Swenshuai.xi                 break;
1046*53ee8cc1Swenshuai.xi 
1047*53ee8cc1Swenshuai.xi             case MHL_EDID_VIDEO_DATA_BLOCK_CODE:
1048*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL get video data block length %d in port %c\r\n", ucLength, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1049*53ee8cc1Swenshuai.xi 
1050*53ee8cc1Swenshuai.xi                 if(ucLength > MHL_3D_VIC_INFORMATION_LENGTH)
1051*53ee8cc1Swenshuai.xi                 {
1052*53ee8cc1Swenshuai.xi                     ucVICTimingNum = MHL_3D_VIC_INFORMATION_LENGTH;
1053*53ee8cc1Swenshuai.xi                 }
1054*53ee8cc1Swenshuai.xi                 else
1055*53ee8cc1Swenshuai.xi                 {
1056*53ee8cc1Swenshuai.xi                     ucVICTimingNum = ucLength;
1057*53ee8cc1Swenshuai.xi                 }
1058*53ee8cc1Swenshuai.xi 
1059*53ee8cc1Swenshuai.xi                 for(ucIndex = 0; ucIndex <ucLength; ucIndex++)
1060*53ee8cc1Swenshuai.xi                 {
1061*53ee8cc1Swenshuai.xi                     if(ucIndex <ucVICTimingNum)
1062*53ee8cc1Swenshuai.xi                     {
1063*53ee8cc1Swenshuai.xi                         ucVICTiming[ucIndex] = pData[uctemp +ucIndex +1];
1064*53ee8cc1Swenshuai.xi                     }
1065*53ee8cc1Swenshuai.xi 
1066*53ee8cc1Swenshuai.xi                     _mdrv_mhl_InsertHighEndVICTable(pMHLResourcePrivate, pData[uctemp +ucIndex +1]);
1067*53ee8cc1Swenshuai.xi                 }
1068*53ee8cc1Swenshuai.xi 
1069*53ee8cc1Swenshuai.xi                 break;
1070*53ee8cc1Swenshuai.xi 
1071*53ee8cc1Swenshuai.xi             case MHL_EDID_VENDER_SPECIFIC_DATA_BLOCK_CODE:
1072*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL get vender specific data block length %d in port %c\r\n", ucLength, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1073*53ee8cc1Swenshuai.xi 
1074*53ee8cc1Swenshuai.xi                 ucVSDBAddr = uctemp;
1075*53ee8cc1Swenshuai.xi 
1076*53ee8cc1Swenshuai.xi                 bVICParseFinish = FALSE;
1077*53ee8cc1Swenshuai.xi 
1078*53ee8cc1Swenshuai.xi                 break;
1079*53ee8cc1Swenshuai.xi 
1080*53ee8cc1Swenshuai.xi             case MHL_EDID_SPEAKER_ALLOCATION_DATA_BLOCK_CODE:
1081*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL get speaker allocation data block length %d in port %c\r\n", ucLength, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1082*53ee8cc1Swenshuai.xi                 break;
1083*53ee8cc1Swenshuai.xi 
1084*53ee8cc1Swenshuai.xi             case MHL_EDID_VESA_DTC_DATA_BLOCK_CODE:
1085*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL get VESA DTC data block length %d in port %c\r\n", ucLength, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1086*53ee8cc1Swenshuai.xi                 break;
1087*53ee8cc1Swenshuai.xi 
1088*53ee8cc1Swenshuai.xi             case MHL_EDID_USE_EXTENDED_TAG_BLOCK_CODE:
1089*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL get use extended tag length %d in port %c\r\n", ucLength, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1090*53ee8cc1Swenshuai.xi                 break;
1091*53ee8cc1Swenshuai.xi 
1092*53ee8cc1Swenshuai.xi             default:
1093*53ee8cc1Swenshuai.xi 
1094*53ee8cc1Swenshuai.xi                 break;
1095*53ee8cc1Swenshuai.xi         };
1096*53ee8cc1Swenshuai.xi 
1097*53ee8cc1Swenshuai.xi         uctemp = uctemp +ucLength;
1098*53ee8cc1Swenshuai.xi     }
1099*53ee8cc1Swenshuai.xi 
1100*53ee8cc1Swenshuai.xi     ucIndex = MHL_VIC_PARSING_START;
1101*53ee8cc1Swenshuai.xi     ucVSDBLength = ucVSDBAddr +1;
1102*53ee8cc1Swenshuai.xi 
1103*53ee8cc1Swenshuai.xi     while(!bVICParseFinish)
1104*53ee8cc1Swenshuai.xi     {
1105*53ee8cc1Swenshuai.xi         ucValue = pData[ucVSDBAddr];
1106*53ee8cc1Swenshuai.xi 
1107*53ee8cc1Swenshuai.xi         if(ucVSDBAddr > ucVSDBLength) // Check total length
1108*53ee8cc1Swenshuai.xi         {
1109*53ee8cc1Swenshuai.xi             ucIndex = MHL_VIC_PARSING_FINISH;
1110*53ee8cc1Swenshuai.xi         }
1111*53ee8cc1Swenshuai.xi 
1112*53ee8cc1Swenshuai.xi         switch(ucIndex)
1113*53ee8cc1Swenshuai.xi         {
1114*53ee8cc1Swenshuai.xi             case MHL_VIC_PARSING_START:
1115*53ee8cc1Swenshuai.xi                 ucVSDBLength = pData[ucVSDBAddr] &BMASK(4:0);
1116*53ee8cc1Swenshuai.xi 
1117*53ee8cc1Swenshuai.xi                 if(ucVSDBLength < 8) // HDMI_Video_Present absent, no 3D information
1118*53ee8cc1Swenshuai.xi                 {
1119*53ee8cc1Swenshuai.xi                     ucIndex = MHL_VIC_PARSING_FINISH;
1120*53ee8cc1Swenshuai.xi                 }
1121*53ee8cc1Swenshuai.xi                 else
1122*53ee8cc1Swenshuai.xi                 {
1123*53ee8cc1Swenshuai.xi                     ucVSDBAddr = ucVSDBAddr +8;
1124*53ee8cc1Swenshuai.xi 
1125*53ee8cc1Swenshuai.xi                     ucIndex = MHL_VIC_PARSING_CHECK_HDMI_VIDEO_PRESENT;
1126*53ee8cc1Swenshuai.xi                 }
1127*53ee8cc1Swenshuai.xi 
1128*53ee8cc1Swenshuai.xi                 ucVSDBLength = ucVSDBAddr +ucVSDBLength;
1129*53ee8cc1Swenshuai.xi 
1130*53ee8cc1Swenshuai.xi                 break;
1131*53ee8cc1Swenshuai.xi 
1132*53ee8cc1Swenshuai.xi             case MHL_VIC_PARSING_CHECK_HDMI_VIDEO_PRESENT:
1133*53ee8cc1Swenshuai.xi                 if((ucValue &BIT(5)) != BIT(5)) // HDMI_Video_Present absent, no 3D information
1134*53ee8cc1Swenshuai.xi                 {
1135*53ee8cc1Swenshuai.xi                     ucIndex = MHL_VIC_PARSING_FINISH;
1136*53ee8cc1Swenshuai.xi                 }
1137*53ee8cc1Swenshuai.xi                 else
1138*53ee8cc1Swenshuai.xi                 {
1139*53ee8cc1Swenshuai.xi                     ucIndex = MHL_VIC_PARSING_CHECK_3D_PRESENT;
1140*53ee8cc1Swenshuai.xi 
1141*53ee8cc1Swenshuai.xi                     if((ucValue &BIT(7)) != BIT(7)) // Latency_Fields_Present absent, no video and audio latency and no interlaced video and audio latency
1142*53ee8cc1Swenshuai.xi                     {
1143*53ee8cc1Swenshuai.xi                         ucVSDBAddr++;
1144*53ee8cc1Swenshuai.xi                     }
1145*53ee8cc1Swenshuai.xi                     else
1146*53ee8cc1Swenshuai.xi                     {
1147*53ee8cc1Swenshuai.xi                         if((ucValue &BIT(6)) != BIT(6)) // I_Latency_Fields_Present absent, no video and audio latency
1148*53ee8cc1Swenshuai.xi                         {
1149*53ee8cc1Swenshuai.xi                             ucVSDBAddr = ucVSDBAddr +3;
1150*53ee8cc1Swenshuai.xi                         }
1151*53ee8cc1Swenshuai.xi                         else
1152*53ee8cc1Swenshuai.xi                         {
1153*53ee8cc1Swenshuai.xi                             ucVSDBAddr = ucVSDBAddr +5;
1154*53ee8cc1Swenshuai.xi                         }
1155*53ee8cc1Swenshuai.xi                     }
1156*53ee8cc1Swenshuai.xi                 }
1157*53ee8cc1Swenshuai.xi 
1158*53ee8cc1Swenshuai.xi                 break;
1159*53ee8cc1Swenshuai.xi 
1160*53ee8cc1Swenshuai.xi             case MHL_VIC_PARSING_CHECK_3D_PRESENT:
1161*53ee8cc1Swenshuai.xi                 if((ucValue &BIT(7)) != BIT(7)) // 3D_Present absent, no 3D information
1162*53ee8cc1Swenshuai.xi                 {
1163*53ee8cc1Swenshuai.xi                     ucIndex = MHL_VIC_PARSING_FINISH;
1164*53ee8cc1Swenshuai.xi                 }
1165*53ee8cc1Swenshuai.xi                 else
1166*53ee8cc1Swenshuai.xi                 {
1167*53ee8cc1Swenshuai.xi                     b3DPresent = TRUE;
1168*53ee8cc1Swenshuai.xi                     uc3DMultiPresent = (ucValue &BMASK(6:5)) >> 5;
1169*53ee8cc1Swenshuai.xi 
1170*53ee8cc1Swenshuai.xi                     if(uc3DMultiPresent == 0)
1171*53ee8cc1Swenshuai.xi                     {
1172*53ee8cc1Swenshuai.xi                         ucIndex = MHL_VIC_PARSING_3D_MULTI_PRESENT_00;
1173*53ee8cc1Swenshuai.xi                     }
1174*53ee8cc1Swenshuai.xi                     else if(uc3DMultiPresent == 3) // Reserved for future use
1175*53ee8cc1Swenshuai.xi                     {
1176*53ee8cc1Swenshuai.xi                         ucIndex = MHL_VIC_PARSING_FINISH;
1177*53ee8cc1Swenshuai.xi                     }
1178*53ee8cc1Swenshuai.xi                     else
1179*53ee8cc1Swenshuai.xi                     {
1180*53ee8cc1Swenshuai.xi                         ucIndex = MHL_VIC_PARSING_CHECK_HDMI_VIC;
1181*53ee8cc1Swenshuai.xi 
1182*53ee8cc1Swenshuai.xi                         ucVSDBAddr++;
1183*53ee8cc1Swenshuai.xi                     }
1184*53ee8cc1Swenshuai.xi                 }
1185*53ee8cc1Swenshuai.xi 
1186*53ee8cc1Swenshuai.xi                 break;
1187*53ee8cc1Swenshuai.xi 
1188*53ee8cc1Swenshuai.xi             case MHL_VIC_PARSING_CHECK_HDMI_VIC:
1189*53ee8cc1Swenshuai.xi                 ucLength = (ucValue &BMASK(7:5)) >> 5;
1190*53ee8cc1Swenshuai.xi 
1191*53ee8cc1Swenshuai.xi                 ucVSDBAddr = ucVSDBAddr +ucLength +1;
1192*53ee8cc1Swenshuai.xi 
1193*53ee8cc1Swenshuai.xi                 if(uc3DMultiPresent == 1)
1194*53ee8cc1Swenshuai.xi                 {
1195*53ee8cc1Swenshuai.xi                     ucIndex = MHL_VIC_PARSING_3D_MULTI_PRESENT_01;
1196*53ee8cc1Swenshuai.xi                 }
1197*53ee8cc1Swenshuai.xi                 else // uc3DMultiPresent = 2
1198*53ee8cc1Swenshuai.xi                 {
1199*53ee8cc1Swenshuai.xi                     ucIndex = MHL_VIC_PARSING_3D_MULTI_PRESENT_10;
1200*53ee8cc1Swenshuai.xi                 }
1201*53ee8cc1Swenshuai.xi 
1202*53ee8cc1Swenshuai.xi                 ucLength = ucVSDBAddr +(ucValue &BMASK(4:0)) -1; // HDMI_3D_LEN
1203*53ee8cc1Swenshuai.xi 
1204*53ee8cc1Swenshuai.xi                 break;
1205*53ee8cc1Swenshuai.xi 
1206*53ee8cc1Swenshuai.xi             case MHL_VIC_PARSING_3D_MULTI_PRESENT_00:
1207*53ee8cc1Swenshuai.xi                 ucIndex = MHL_VIC_PARSING_CHECK_3D_PRESENT_TIMING;
1208*53ee8cc1Swenshuai.xi 
1209*53ee8cc1Swenshuai.xi                 break;
1210*53ee8cc1Swenshuai.xi 
1211*53ee8cc1Swenshuai.xi             case MHL_VIC_PARSING_3D_MULTI_PRESENT_01:
1212*53ee8cc1Swenshuai.xi                 ucValue = _mdrv_mhl_CheckVIC3DStructureAll((pData[ucVSDBAddr +1] |(pData[ucVSDBAddr] << 8)));
1213*53ee8cc1Swenshuai.xi 
1214*53ee8cc1Swenshuai.xi                 for(uctemp = 0; uctemp <ucVICTimingNum; uctemp++)
1215*53ee8cc1Swenshuai.xi                 {
1216*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->uc3DInformationVIC[uctemp] = ucValue;
1217*53ee8cc1Swenshuai.xi                 }
1218*53ee8cc1Swenshuai.xi 
1219*53ee8cc1Swenshuai.xi                 ucIndex = MHL_VIC_PARSING_CHECK_3D_PRESENT_TIMING;
1220*53ee8cc1Swenshuai.xi 
1221*53ee8cc1Swenshuai.xi                 break;
1222*53ee8cc1Swenshuai.xi 
1223*53ee8cc1Swenshuai.xi             case MHL_VIC_PARSING_3D_MULTI_PRESENT_10:
1224*53ee8cc1Swenshuai.xi                 ucValue = _mdrv_mhl_CheckVIC3DStructureAll((pData[ucVSDBAddr +1] |(pData[ucVSDBAddr] << 8)));
1225*53ee8cc1Swenshuai.xi 
1226*53ee8cc1Swenshuai.xi                 usMaskValue = pData[ucVSDBAddr +3] |(pData[ucVSDBAddr +2] << 8);
1227*53ee8cc1Swenshuai.xi 
1228*53ee8cc1Swenshuai.xi                 for(uctemp = 0; uctemp <ucVICTimingNum; uctemp++)
1229*53ee8cc1Swenshuai.xi                 {
1230*53ee8cc1Swenshuai.xi                     if((usMaskValue &BIT(uctemp)) == BIT(uctemp))
1231*53ee8cc1Swenshuai.xi                     {
1232*53ee8cc1Swenshuai.xi                         pMHLResourcePrivate->uc3DInformationVIC[uctemp] = ucValue;
1233*53ee8cc1Swenshuai.xi                     }
1234*53ee8cc1Swenshuai.xi                 }
1235*53ee8cc1Swenshuai.xi 
1236*53ee8cc1Swenshuai.xi                 ucVSDBAddr = ucVSDBAddr +4;
1237*53ee8cc1Swenshuai.xi 
1238*53ee8cc1Swenshuai.xi                 ucIndex = MHL_VIC_PARSING_CHECK_3D_STRUCTURE;
1239*53ee8cc1Swenshuai.xi 
1240*53ee8cc1Swenshuai.xi                 break;
1241*53ee8cc1Swenshuai.xi 
1242*53ee8cc1Swenshuai.xi             case MHL_VIC_PARSING_CHECK_3D_STRUCTURE:
1243*53ee8cc1Swenshuai.xi                 if(ucVSDBAddr > ucLength) // No 3D sturcture
1244*53ee8cc1Swenshuai.xi                 {
1245*53ee8cc1Swenshuai.xi                     ucIndex = MHL_VIC_PARSING_CHECK_3D_PRESENT_TIMING;
1246*53ee8cc1Swenshuai.xi                 }
1247*53ee8cc1Swenshuai.xi                 else
1248*53ee8cc1Swenshuai.xi                 {
1249*53ee8cc1Swenshuai.xi                     uctemp = (ucValue &BMASK(7:4)) >> 4;
1250*53ee8cc1Swenshuai.xi                     ucValue = ucValue &BMASK(3:0);
1251*53ee8cc1Swenshuai.xi 
1252*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->uc3DInformationVIC[uctemp] = _mdrv_mhl_CheckVIC3DStructure(ucValue);
1253*53ee8cc1Swenshuai.xi 
1254*53ee8cc1Swenshuai.xi                     if(ucValue < 8) // Only 2D_VIC_Order and 3D_Structure, 1 byte
1255*53ee8cc1Swenshuai.xi                     {
1256*53ee8cc1Swenshuai.xi                         ucVSDBAddr++;
1257*53ee8cc1Swenshuai.xi                     }
1258*53ee8cc1Swenshuai.xi                     else // Add 3D_Detail, 2 byte
1259*53ee8cc1Swenshuai.xi                     {
1260*53ee8cc1Swenshuai.xi                         ucVSDBAddr = ucVSDBAddr +2;
1261*53ee8cc1Swenshuai.xi                     }
1262*53ee8cc1Swenshuai.xi                 }
1263*53ee8cc1Swenshuai.xi 
1264*53ee8cc1Swenshuai.xi                 break;
1265*53ee8cc1Swenshuai.xi 
1266*53ee8cc1Swenshuai.xi             case MHL_VIC_PARSING_CHECK_3D_PRESENT_TIMING:
1267*53ee8cc1Swenshuai.xi                 for(uctemp = 0; uctemp <ucVICTimingNum; uctemp++)
1268*53ee8cc1Swenshuai.xi                 {
1269*53ee8cc1Swenshuai.xi                     ucValue = pMHLResourcePrivate->uc3DInformationVIC[uctemp];
1270*53ee8cc1Swenshuai.xi 
1271*53ee8cc1Swenshuai.xi                     switch(ucVICTiming[uctemp])
1272*53ee8cc1Swenshuai.xi                     {
1273*53ee8cc1Swenshuai.xi                         case MHL_3D_PRESENT_VIC_1920x1080p24Hz: // Support frame packing with top and bottom
1274*53ee8cc1Swenshuai.xi                         case MHL_3D_PRESENT_VIC_1280x720p60Hz: // Support frame packing with top and bottom
1275*53ee8cc1Swenshuai.xi                         case MHL_3D_PRESENT_VIC_1280x720p50Hz: // Support frame packing with top and bottom
1276*53ee8cc1Swenshuai.xi                             ucValue = MASKSET(ucValue, (MHL_3D_FS_SUPPORT |MHL_3D_TB_SUPPORT), (MHL_3D_FS_SUPPORT |MHL_3D_TB_SUPPORT));
1277*53ee8cc1Swenshuai.xi                             pMHLResourcePrivate->uc3DInformationVIC[uctemp] = ucValue;
1278*53ee8cc1Swenshuai.xi 
1279*53ee8cc1Swenshuai.xi                             break;
1280*53ee8cc1Swenshuai.xi 
1281*53ee8cc1Swenshuai.xi                         case MHL_3D_PRESENT_VIC_1920x1080i60Hz: // Support side by side
1282*53ee8cc1Swenshuai.xi                         case MHL_3D_PRESENT_VIC_1920x1080i50Hz: // Support side by side
1283*53ee8cc1Swenshuai.xi                             ucValue = MASKSET(ucValue, MHL_3D_LR_SUPPORT, MHL_3D_LR_SUPPORT);
1284*53ee8cc1Swenshuai.xi                             pMHLResourcePrivate->uc3DInformationVIC[uctemp] = ucValue;
1285*53ee8cc1Swenshuai.xi 
1286*53ee8cc1Swenshuai.xi                             break;
1287*53ee8cc1Swenshuai.xi 
1288*53ee8cc1Swenshuai.xi                         default:
1289*53ee8cc1Swenshuai.xi 
1290*53ee8cc1Swenshuai.xi                             break;
1291*53ee8cc1Swenshuai.xi                     };
1292*53ee8cc1Swenshuai.xi                 }
1293*53ee8cc1Swenshuai.xi 
1294*53ee8cc1Swenshuai.xi                 ucIndex = MHL_VIC_PARSING_FINISH;
1295*53ee8cc1Swenshuai.xi 
1296*53ee8cc1Swenshuai.xi                 break;
1297*53ee8cc1Swenshuai.xi 
1298*53ee8cc1Swenshuai.xi             case MHL_VIC_PARSING_FINISH:
1299*53ee8cc1Swenshuai.xi                 bVICParseFinish = TRUE;
1300*53ee8cc1Swenshuai.xi 
1301*53ee8cc1Swenshuai.xi                 break;
1302*53ee8cc1Swenshuai.xi 
1303*53ee8cc1Swenshuai.xi             default:
1304*53ee8cc1Swenshuai.xi 
1305*53ee8cc1Swenshuai.xi                 break;
1306*53ee8cc1Swenshuai.xi         };
1307*53ee8cc1Swenshuai.xi     }
1308*53ee8cc1Swenshuai.xi 
1309*53ee8cc1Swenshuai.xi     for(uctemp = 0, ucValue = 0; uctemp < MHL_3D_VIC_INFORMATION_LENGTH; uctemp++)
1310*53ee8cc1Swenshuai.xi     {
1311*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->uc3DInformationVIC[uctemp] > 0)
1312*53ee8cc1Swenshuai.xi         {
1313*53ee8cc1Swenshuai.xi             ucValue = uctemp +1;
1314*53ee8cc1Swenshuai.xi         }
1315*53ee8cc1Swenshuai.xi     }
1316*53ee8cc1Swenshuai.xi 
1317*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->uc3DTotalEntryVIC = ucValue;
1318*53ee8cc1Swenshuai.xi 
1319*53ee8cc1Swenshuai.xi     return b3DPresent;
1320*53ee8cc1Swenshuai.xi }
1321*53ee8cc1Swenshuai.xi 
1322*53ee8cc1Swenshuai.xi //**************************************************************************
1323*53ee8cc1Swenshuai.xi //  [Function Name]:
1324*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_InsertVCInformation()
1325*53ee8cc1Swenshuai.xi //  [Description]:
1326*53ee8cc1Swenshuai.xi //
1327*53ee8cc1Swenshuai.xi //  [Arguments]:
1328*53ee8cc1Swenshuai.xi //
1329*53ee8cc1Swenshuai.xi //  [Return]:
1330*53ee8cc1Swenshuai.xi //
1331*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_InsertVCInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_BOOL bReceiveVC,MS_U8 ucVCNumber,MS_U8 ucVCFeatureID,MS_U8 ucVCSlotSize)1332*53ee8cc1Swenshuai.xi void _mdrv_mhl_InsertVCInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_BOOL bReceiveVC, MS_U8 ucVCNumber, MS_U8 ucVCFeatureID, MS_U8 ucVCSlotSize)
1333*53ee8cc1Swenshuai.xi {
1334*53ee8cc1Swenshuai.xi     MS_BOOL bFindVC = FALSE;
1335*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
1336*53ee8cc1Swenshuai.xi     MS_U8 ucTargetVC = MHL_VIRTUAL_CHANNEL_LENGTH;
1337*53ee8cc1Swenshuai.xi     MS_U8 ucTotalTimeSlot = 0;
1338*53ee8cc1Swenshuai.xi     MS_U8 ucResponseCode = MHL_VC_RESPONSE_ACCEPT;
1339*53ee8cc1Swenshuai.xi 
1340*53ee8cc1Swenshuai.xi     if(ucVCFeatureID >= MHL_VC_FEATURE_ID_END) // Invalid feature ID
1341*53ee8cc1Swenshuai.xi     {
1342*53ee8cc1Swenshuai.xi         ucResponseCode = MHL_VC_RESPONSE_REJECT_FEATURE_ID;
1343*53ee8cc1Swenshuai.xi     }
1344*53ee8cc1Swenshuai.xi     else if((ucVCFeatureID == MHL_VC_FEATURE_ID_EMSC) && (ucVCSlotSize != MHL_EMSC_TIME_SLOT_DEFAULT))
1345*53ee8cc1Swenshuai.xi     {
1346*53ee8cc1Swenshuai.xi         ucResponseCode = MHL_VC_RESPONSE_REJECT_CHANNEL_SIZE;
1347*53ee8cc1Swenshuai.xi     }
1348*53ee8cc1Swenshuai.xi 
1349*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <MHL_VIRTUAL_CHANNEL_LENGTH; uctemp++)
1350*53ee8cc1Swenshuai.xi     {
1351*53ee8cc1Swenshuai.xi         if(!bFindVC)
1352*53ee8cc1Swenshuai.xi         {
1353*53ee8cc1Swenshuai.xi             if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber == ucVCNumber) // VC present, information change
1354*53ee8cc1Swenshuai.xi             {
1355*53ee8cc1Swenshuai.xi                 ucTargetVC = uctemp;
1356*53ee8cc1Swenshuai.xi 
1357*53ee8cc1Swenshuai.xi                 bFindVC = TRUE;
1358*53ee8cc1Swenshuai.xi             }
1359*53ee8cc1Swenshuai.xi             else if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber == 0) // VC absent, insert new information
1360*53ee8cc1Swenshuai.xi             {
1361*53ee8cc1Swenshuai.xi                 ucTargetVC = uctemp;
1362*53ee8cc1Swenshuai.xi 
1363*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCNumber = ucVCNumber;
1364*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCFeatureID = ucVCFeatureID;
1365*53ee8cc1Swenshuai.xi 
1366*53ee8cc1Swenshuai.xi                 break;
1367*53ee8cc1Swenshuai.xi             }
1368*53ee8cc1Swenshuai.xi         }
1369*53ee8cc1Swenshuai.xi 
1370*53ee8cc1Swenshuai.xi         ucTotalTimeSlot = ucTotalTimeSlot +pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize;
1371*53ee8cc1Swenshuai.xi     }
1372*53ee8cc1Swenshuai.xi 
1373*53ee8cc1Swenshuai.xi     if(ucTargetVC < MHL_VIRTUAL_CHANNEL_LENGTH) // Can insert new VC information
1374*53ee8cc1Swenshuai.xi     {
1375*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].bVCConfirm = TRUE;
1376*53ee8cc1Swenshuai.xi 
1377*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCFeatureID != ucVCFeatureID) // Same VC number, but different feature ID
1378*53ee8cc1Swenshuai.xi         {
1379*53ee8cc1Swenshuai.xi             ucResponseCode = MHL_VC_RESPONSE_REJECT_NUMBER;
1380*53ee8cc1Swenshuai.xi         }
1381*53ee8cc1Swenshuai.xi         else if(ucTotalTimeSlot +ucVCSlotSize > MHL_ECBUS_S_TIME_SLOT_TOTAL -1) // Time slot not enough
1382*53ee8cc1Swenshuai.xi         {
1383*53ee8cc1Swenshuai.xi             ucResponseCode = MHL_VC_RESPONSE_REJECT_CHANNEL_SIZE;
1384*53ee8cc1Swenshuai.xi         }
1385*53ee8cc1Swenshuai.xi         else
1386*53ee8cc1Swenshuai.xi         {
1387*53ee8cc1Swenshuai.xi             if(bFindVC)
1388*53ee8cc1Swenshuai.xi             {
1389*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCResponseCode = pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCSlotSize;
1390*53ee8cc1Swenshuai.xi             }
1391*53ee8cc1Swenshuai.xi 
1392*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCSlotSize = ucVCSlotSize;
1393*53ee8cc1Swenshuai.xi         }
1394*53ee8cc1Swenshuai.xi 
1395*53ee8cc1Swenshuai.xi         if(bReceiveVC)
1396*53ee8cc1Swenshuai.xi         {
1397*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCResponseCode = ucResponseCode;
1398*53ee8cc1Swenshuai.xi         }
1399*53ee8cc1Swenshuai.xi     }
1400*53ee8cc1Swenshuai.xi     else // Virtual channel length is too small
1401*53ee8cc1Swenshuai.xi     {
1402*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL virtual channel length too small port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1403*53ee8cc1Swenshuai.xi     }
1404*53ee8cc1Swenshuai.xi }
1405*53ee8cc1Swenshuai.xi 
1406*53ee8cc1Swenshuai.xi //**************************************************************************
1407*53ee8cc1Swenshuai.xi //  [Function Name]:
1408*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CheckVCInformation()
1409*53ee8cc1Swenshuai.xi //  [Description]:
1410*53ee8cc1Swenshuai.xi //
1411*53ee8cc1Swenshuai.xi //  [Arguments]:
1412*53ee8cc1Swenshuai.xi //
1413*53ee8cc1Swenshuai.xi //  [Return]:
1414*53ee8cc1Swenshuai.xi //
1415*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckVCInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucVCNumber,MS_U8 ucVCFeatureID,MS_U8 ucResponseCode)1416*53ee8cc1Swenshuai.xi void _mdrv_mhl_CheckVCInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucVCNumber, MS_U8 ucVCFeatureID, MS_U8 ucResponseCode)
1417*53ee8cc1Swenshuai.xi {
1418*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
1419*53ee8cc1Swenshuai.xi     MS_U8 ucTargetVC = MHL_VIRTUAL_CHANNEL_LENGTH;
1420*53ee8cc1Swenshuai.xi 
1421*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <MHL_VIRTUAL_CHANNEL_LENGTH; uctemp++)
1422*53ee8cc1Swenshuai.xi     {
1423*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber == ucVCNumber) // VC present, information change
1424*53ee8cc1Swenshuai.xi         {
1425*53ee8cc1Swenshuai.xi             ucTargetVC = uctemp;
1426*53ee8cc1Swenshuai.xi 
1427*53ee8cc1Swenshuai.xi             if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCFeatureID != ucVCFeatureID)
1428*53ee8cc1Swenshuai.xi             {
1429*53ee8cc1Swenshuai.xi 
1430*53ee8cc1Swenshuai.xi             }
1431*53ee8cc1Swenshuai.xi 
1432*53ee8cc1Swenshuai.xi             break;
1433*53ee8cc1Swenshuai.xi         }
1434*53ee8cc1Swenshuai.xi     }
1435*53ee8cc1Swenshuai.xi 
1436*53ee8cc1Swenshuai.xi     if(ucTargetVC < MHL_VIRTUAL_CHANNEL_LENGTH) // Can insert new VC information
1437*53ee8cc1Swenshuai.xi     {
1438*53ee8cc1Swenshuai.xi         if(ucResponseCode == MHL_VC_RESPONSE_REJECT_CHANNEL_SIZE)
1439*53ee8cc1Swenshuai.xi         {
1440*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCSlotSize = pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCResponseCode;
1441*53ee8cc1Swenshuai.xi         }
1442*53ee8cc1Swenshuai.xi         else if(ucResponseCode == MHL_VC_RESPONSE_REJECT_NUMBER)
1443*53ee8cc1Swenshuai.xi         {
1444*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCSlotSize = 0;
1445*53ee8cc1Swenshuai.xi         }
1446*53ee8cc1Swenshuai.xi         else if(ucResponseCode == MHL_VC_RESPONSE_REJECT_FEATURE_ID)
1447*53ee8cc1Swenshuai.xi         {
1448*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCSlotSize = 0;
1449*53ee8cc1Swenshuai.xi         }
1450*53ee8cc1Swenshuai.xi 
1451*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stVirtualChannelInfo[ucTargetVC].ucVCResponseCode = MHL_VC_RESPONSE_ACCEPT;
1452*53ee8cc1Swenshuai.xi     }
1453*53ee8cc1Swenshuai.xi }
1454*53ee8cc1Swenshuai.xi 
1455*53ee8cc1Swenshuai.xi //**************************************************************************
1456*53ee8cc1Swenshuai.xi //  [Function Name]:
1457*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_ParsingEDIDfor3D()
1458*53ee8cc1Swenshuai.xi //  [Description]
1459*53ee8cc1Swenshuai.xi //
1460*53ee8cc1Swenshuai.xi //  [Arguments]:
1461*53ee8cc1Swenshuai.xi //
1462*53ee8cc1Swenshuai.xi //  [Return]:
1463*53ee8cc1Swenshuai.xi //
1464*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ParsingEDIDfor3D(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pEdid)1465*53ee8cc1Swenshuai.xi void _mdrv_mhl_ParsingEDIDfor3D(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pEdid)
1466*53ee8cc1Swenshuai.xi {
1467*53ee8cc1Swenshuai.xi     MS_BOOL bDTDParseFinish = FALSE;
1468*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
1469*53ee8cc1Swenshuai.xi     MS_U8 ucValue = 0;
1470*53ee8cc1Swenshuai.xi     MS_U8 ucIndex = 0;
1471*53ee8cc1Swenshuai.xi     MS_U8 ucDTDTimingNum = 0;
1472*53ee8cc1Swenshuai.xi     MS_U8 ucThirdDTDStart = 0;
1473*53ee8cc1Swenshuai.xi     MS_U8 ucDTDTiming[MHL_3D_DTD_INFORMATION_LENGTH] = {0};
1474*53ee8cc1Swenshuai.xi 
1475*53ee8cc1Swenshuai.xi     if(pEdid != NULL)
1476*53ee8cc1Swenshuai.xi     {
1477*53ee8cc1Swenshuai.xi         // Parsing 3D DTD information Start
1478*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_DTDPresentinEDID(&pEdid[MHL_EDID_FIRST_DTD_START])) // Check first DTD
1479*53ee8cc1Swenshuai.xi         {
1480*53ee8cc1Swenshuai.xi             ucValue = _mdrv_mhl_InsertDTD3DInformation(pMHLResourcePrivate, MHL_3D_FIRST_DTD, pEdid[MHL_EDID_FIRST_DTD_START +MHL_EDID_DTD_LENGTH -1]);
1481*53ee8cc1Swenshuai.xi 
1482*53ee8cc1Swenshuai.xi             ucDTDTiming[MHL_3D_FIRST_DTD] = _mdrv_mhl_GetDTD3DTimingInformation(&pEdid[MHL_EDID_FIRST_DTD_START]);
1483*53ee8cc1Swenshuai.xi         }
1484*53ee8cc1Swenshuai.xi         else // First DTD absent
1485*53ee8cc1Swenshuai.xi         {
1486*53ee8cc1Swenshuai.xi             bDTDParseFinish = TRUE;
1487*53ee8cc1Swenshuai.xi 
1488*53ee8cc1Swenshuai.xi             ucDTDTimingNum = 0;
1489*53ee8cc1Swenshuai.xi 
1490*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL first DTD absent in port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1491*53ee8cc1Swenshuai.xi         }
1492*53ee8cc1Swenshuai.xi 
1493*53ee8cc1Swenshuai.xi         if(!bDTDParseFinish)
1494*53ee8cc1Swenshuai.xi         {
1495*53ee8cc1Swenshuai.xi             if(_mdrv_mhl_DTDPresentinEDID(&pEdid[MHL_EDID_SECOND_DTD_START])) // Check second DTD
1496*53ee8cc1Swenshuai.xi             {
1497*53ee8cc1Swenshuai.xi                 ucValue = _mdrv_mhl_InsertDTD3DInformation(pMHLResourcePrivate, MHL_3D_SECOND_DTD, pEdid[MHL_EDID_SECOND_DTD_START +MHL_EDID_DTD_LENGTH -1]);
1498*53ee8cc1Swenshuai.xi 
1499*53ee8cc1Swenshuai.xi                 ucDTDTiming[MHL_3D_SECOND_DTD] = _mdrv_mhl_GetDTD3DTimingInformation(&pEdid[MHL_EDID_SECOND_DTD_START]);
1500*53ee8cc1Swenshuai.xi             }
1501*53ee8cc1Swenshuai.xi             else    // Second DTD absent
1502*53ee8cc1Swenshuai.xi             {
1503*53ee8cc1Swenshuai.xi                 bDTDParseFinish = TRUE;
1504*53ee8cc1Swenshuai.xi 
1505*53ee8cc1Swenshuai.xi                 ucDTDTimingNum = 1;
1506*53ee8cc1Swenshuai.xi 
1507*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL second DTD absent in port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1508*53ee8cc1Swenshuai.xi             }
1509*53ee8cc1Swenshuai.xi         }
1510*53ee8cc1Swenshuai.xi 
1511*53ee8cc1Swenshuai.xi         if(pEdid[MHL_EDID_EXTENSION_FLAG] > 0) // Have extend EDID
1512*53ee8cc1Swenshuai.xi         {
1513*53ee8cc1Swenshuai.xi             ucThirdDTDStart = MHL_EDID_BLOCK_LENGTH +pEdid[MHL_EDID_RESERVED_DATA_BLOCK];
1514*53ee8cc1Swenshuai.xi 
1515*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL third DTD start at %x in port %c\r\n", ucThirdDTDStart, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1516*53ee8cc1Swenshuai.xi 
1517*53ee8cc1Swenshuai.xi             if(!bDTDParseFinish)
1518*53ee8cc1Swenshuai.xi             {
1519*53ee8cc1Swenshuai.xi                 for(uctemp = 0; uctemp <(MHL_3D_DTD_INFORMATION_LENGTH -2); uctemp++)
1520*53ee8cc1Swenshuai.xi                 {
1521*53ee8cc1Swenshuai.xi                     if(_mdrv_mhl_DTDPresentinEDID(&pEdid[ucThirdDTDStart +MHL_EDID_DTD_LENGTH *uctemp])) // Check others DTD
1522*53ee8cc1Swenshuai.xi                     {
1523*53ee8cc1Swenshuai.xi                         ucValue = _mdrv_mhl_InsertDTD3DInformation(pMHLResourcePrivate, MHL_3D_THIRD_DTD +uctemp, pEdid[ucThirdDTDStart +MHL_EDID_DTD_LENGTH *(uctemp +1) -1]);
1524*53ee8cc1Swenshuai.xi 
1525*53ee8cc1Swenshuai.xi                         ucDTDTiming[MHL_3D_THIRD_DTD +uctemp] = _mdrv_mhl_GetDTD3DTimingInformation(&pEdid[ucThirdDTDStart +MHL_EDID_DTD_LENGTH *uctemp]);
1526*53ee8cc1Swenshuai.xi                     }
1527*53ee8cc1Swenshuai.xi                     else    // Last DTD find
1528*53ee8cc1Swenshuai.xi                     {
1529*53ee8cc1Swenshuai.xi                         bDTDParseFinish = TRUE;
1530*53ee8cc1Swenshuai.xi 
1531*53ee8cc1Swenshuai.xi                         ucDTDTimingNum = uctemp +2;
1532*53ee8cc1Swenshuai.xi 
1533*53ee8cc1Swenshuai.xi                         MDRV_MHL_MSG_INFO("** MHL total have %d DTD in port %c\r\n", ucDTDTimingNum, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
1534*53ee8cc1Swenshuai.xi 
1535*53ee8cc1Swenshuai.xi                         break;
1536*53ee8cc1Swenshuai.xi                     }
1537*53ee8cc1Swenshuai.xi                 }
1538*53ee8cc1Swenshuai.xi             }
1539*53ee8cc1Swenshuai.xi 
1540*53ee8cc1Swenshuai.xi             // Parsing 3D VIC information Start
1541*53ee8cc1Swenshuai.xi             if(ucThirdDTDStart > (MHL_EDID_RESERVED_DATA_BLOCK +2))
1542*53ee8cc1Swenshuai.xi             {
1543*53ee8cc1Swenshuai.xi                 if(_mdrv_mhl_ParsingVIC3DInformation(pMHLResourcePrivate, pEdid[MHL_EDID_RESERVED_DATA_BLOCK] -4, &pEdid[MHL_EDID_RESERVED_DATA_BLOCK +2]))
1544*53ee8cc1Swenshuai.xi                 {
1545*53ee8cc1Swenshuai.xi                     // 3D Present
1546*53ee8cc1Swenshuai.xi                     for(uctemp = 0; uctemp <ucDTDTimingNum; uctemp++)
1547*53ee8cc1Swenshuai.xi                     {
1548*53ee8cc1Swenshuai.xi                         ucIndex = pMHLResourcePrivate->uc3DInformationDTD[uctemp];
1549*53ee8cc1Swenshuai.xi 
1550*53ee8cc1Swenshuai.xi                         switch(ucDTDTiming[uctemp])
1551*53ee8cc1Swenshuai.xi                         {
1552*53ee8cc1Swenshuai.xi                             case MHL_3D_PRESENT_VIC_1920x1080p24Hz: // Support frame packing with top and bottom
1553*53ee8cc1Swenshuai.xi                             case MHL_3D_PRESENT_VIC_1280x720p60Hz: // Support frame packing with top and bottom
1554*53ee8cc1Swenshuai.xi                             case MHL_3D_PRESENT_VIC_1280x720p50Hz: // Support frame packing with top and bottom
1555*53ee8cc1Swenshuai.xi                                 ucIndex = MASKSET(ucIndex, (MHL_3D_FS_SUPPORT |MHL_3D_TB_SUPPORT), (MHL_3D_FS_SUPPORT |MHL_3D_TB_SUPPORT));
1556*53ee8cc1Swenshuai.xi                                 pMHLResourcePrivate->uc3DInformationDTD[uctemp] = ucIndex;
1557*53ee8cc1Swenshuai.xi 
1558*53ee8cc1Swenshuai.xi                                 break;
1559*53ee8cc1Swenshuai.xi 
1560*53ee8cc1Swenshuai.xi                             case MHL_3D_PRESENT_VIC_1920x1080i60Hz: // Support side by side
1561*53ee8cc1Swenshuai.xi                             case MHL_3D_PRESENT_VIC_1920x1080i50Hz: // Support side by side
1562*53ee8cc1Swenshuai.xi                                 ucIndex = MASKSET(ucIndex, MHL_3D_LR_SUPPORT, MHL_3D_LR_SUPPORT);
1563*53ee8cc1Swenshuai.xi                                 pMHLResourcePrivate->uc3DInformationDTD[uctemp] = ucIndex;
1564*53ee8cc1Swenshuai.xi 
1565*53ee8cc1Swenshuai.xi                                 break;
1566*53ee8cc1Swenshuai.xi 
1567*53ee8cc1Swenshuai.xi                             default:
1568*53ee8cc1Swenshuai.xi 
1569*53ee8cc1Swenshuai.xi                                 break;
1570*53ee8cc1Swenshuai.xi                         };
1571*53ee8cc1Swenshuai.xi 
1572*53ee8cc1Swenshuai.xi                         if(ucIndex > 0)
1573*53ee8cc1Swenshuai.xi                         {
1574*53ee8cc1Swenshuai.xi                             ucValue = uctemp +1;
1575*53ee8cc1Swenshuai.xi                         }
1576*53ee8cc1Swenshuai.xi                     }
1577*53ee8cc1Swenshuai.xi                 }
1578*53ee8cc1Swenshuai.xi             }
1579*53ee8cc1Swenshuai.xi         }
1580*53ee8cc1Swenshuai.xi 
1581*53ee8cc1Swenshuai.xi         // Parsing 3D DTD information End
1582*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->uc3DTotalEntryDTD = ucValue;
1583*53ee8cc1Swenshuai.xi     }
1584*53ee8cc1Swenshuai.xi }
1585*53ee8cc1Swenshuai.xi 
1586*53ee8cc1Swenshuai.xi //**************************************************************************
1587*53ee8cc1Swenshuai.xi //  [Function Name]:
1588*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_SlotAllocationAlgorithm()
1589*53ee8cc1Swenshuai.xi //  [Description]
1590*53ee8cc1Swenshuai.xi //
1591*53ee8cc1Swenshuai.xi //  [Arguments]:
1592*53ee8cc1Swenshuai.xi //
1593*53ee8cc1Swenshuai.xi //  [Return]:
1594*53ee8cc1Swenshuai.xi //
1595*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SlotAllocationAlgorithm(MS_U8 ucChannelIndex,MS_U8 ucNValue,MS_U8 ucMValue,MS_U8 * pSlotAllocation)1596*53ee8cc1Swenshuai.xi void _mdrv_mhl_SlotAllocationAlgorithm(MS_U8 ucChannelIndex, MS_U8 ucNValue, MS_U8 ucMValue, MS_U8 *pSlotAllocation)
1597*53ee8cc1Swenshuai.xi {
1598*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
1599*53ee8cc1Swenshuai.xi     MS_U8 ucCounter = 0;
1600*53ee8cc1Swenshuai.xi 
1601*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <MHL_ECBUS_S_TIME_SLOT_TOTAL; uctemp++)
1602*53ee8cc1Swenshuai.xi     {
1603*53ee8cc1Swenshuai.xi         if(pSlotAllocation[uctemp] == MHL_CBUS_SLOT_NOT_ALLOCATE)
1604*53ee8cc1Swenshuai.xi         {
1605*53ee8cc1Swenshuai.xi             if(ucCounter >= ucNValue)
1606*53ee8cc1Swenshuai.xi             {
1607*53ee8cc1Swenshuai.xi                 pSlotAllocation[uctemp] = ucChannelIndex;
1608*53ee8cc1Swenshuai.xi             }
1609*53ee8cc1Swenshuai.xi 
1610*53ee8cc1Swenshuai.xi             ucCounter = (ucCounter +ucNValue) %(ucNValue +ucMValue);
1611*53ee8cc1Swenshuai.xi         }
1612*53ee8cc1Swenshuai.xi     }
1613*53ee8cc1Swenshuai.xi }
1614*53ee8cc1Swenshuai.xi 
1615*53ee8cc1Swenshuai.xi //**************************************************************************
1616*53ee8cc1Swenshuai.xi //  [Function Name]:
1617*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_eCbusTimeSlotAllocation()
1618*53ee8cc1Swenshuai.xi //  [Description]
1619*53ee8cc1Swenshuai.xi //
1620*53ee8cc1Swenshuai.xi //  [Arguments]:
1621*53ee8cc1Swenshuai.xi //
1622*53ee8cc1Swenshuai.xi //  [Return]:
1623*53ee8cc1Swenshuai.xi //
1624*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_eCbusTimeSlotAllocation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)1625*53ee8cc1Swenshuai.xi void _mdrv_mhl_eCbusTimeSlotAllocation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
1626*53ee8cc1Swenshuai.xi {
1627*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
1628*53ee8cc1Swenshuai.xi     MS_U8 ucTimeSlotNumber = MHL_ECBUS_S_TIME_SLOT_TOTAL -1;
1629*53ee8cc1Swenshuai.xi     MS_U8 ucSlotAllocation[MHL_ECBUS_S_TIME_SLOT_TOTAL];
1630*53ee8cc1Swenshuai.xi     MS_U8 ucVirtualChannel[MHL_VIRTUAL_CHANNEL_LENGTH +2];
1631*53ee8cc1Swenshuai.xi 
1632*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <(MHL_VIRTUAL_CHANNEL_LENGTH +2); uctemp++)
1633*53ee8cc1Swenshuai.xi     {
1634*53ee8cc1Swenshuai.xi         ucVirtualChannel[uctemp] = 0;
1635*53ee8cc1Swenshuai.xi     }
1636*53ee8cc1Swenshuai.xi 
1637*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <MHL_ECBUS_S_TIME_SLOT_TOTAL; uctemp++)
1638*53ee8cc1Swenshuai.xi     {
1639*53ee8cc1Swenshuai.xi         if(uctemp == 0)
1640*53ee8cc1Swenshuai.xi         {
1641*53ee8cc1Swenshuai.xi             ucSlotAllocation[uctemp] = 0;
1642*53ee8cc1Swenshuai.xi         }
1643*53ee8cc1Swenshuai.xi         else
1644*53ee8cc1Swenshuai.xi         {
1645*53ee8cc1Swenshuai.xi             ucSlotAllocation[uctemp] = MHL_CBUS_SLOT_NOT_ALLOCATE;
1646*53ee8cc1Swenshuai.xi         }
1647*53ee8cc1Swenshuai.xi     }
1648*53ee8cc1Swenshuai.xi 
1649*53ee8cc1Swenshuai.xi     ucVirtualChannel[0] = MHL_CBUS1_TIME_SLOT_DEFAULT;
1650*53ee8cc1Swenshuai.xi 
1651*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <MHL_VIRTUAL_CHANNEL_LENGTH; uctemp++)
1652*53ee8cc1Swenshuai.xi     {
1653*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize == 0)
1654*53ee8cc1Swenshuai.xi         {
1655*53ee8cc1Swenshuai.xi             break;
1656*53ee8cc1Swenshuai.xi         }
1657*53ee8cc1Swenshuai.xi         else
1658*53ee8cc1Swenshuai.xi         {
1659*53ee8cc1Swenshuai.xi             ucVirtualChannel[uctemp +1] = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize;
1660*53ee8cc1Swenshuai.xi             ucTimeSlotNumber = ucTimeSlotNumber -pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize;
1661*53ee8cc1Swenshuai.xi         }
1662*53ee8cc1Swenshuai.xi     }
1663*53ee8cc1Swenshuai.xi 
1664*53ee8cc1Swenshuai.xi     ucVirtualChannel[uctemp +1] = ucTimeSlotNumber;
1665*53ee8cc1Swenshuai.xi 
1666*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <(MHL_VIRTUAL_CHANNEL_LENGTH +2); uctemp++)
1667*53ee8cc1Swenshuai.xi     {
1668*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL time slot assign %d\r\n", ucVirtualChannel[uctemp]);
1669*53ee8cc1Swenshuai.xi     }
1670*53ee8cc1Swenshuai.xi 
1671*53ee8cc1Swenshuai.xi     ucTimeSlotNumber = MHL_ECBUS_S_TIME_SLOT_TOTAL -1;
1672*53ee8cc1Swenshuai.xi 
1673*53ee8cc1Swenshuai.xi     for(uctemp = MHL_VIRTUAL_CHANNEL_LENGTH +1; ucTimeSlotNumber > 0; uctemp--)
1674*53ee8cc1Swenshuai.xi     {
1675*53ee8cc1Swenshuai.xi         if(ucVirtualChannel[uctemp] > 0)
1676*53ee8cc1Swenshuai.xi         {
1677*53ee8cc1Swenshuai.xi             ucTimeSlotNumber = ucTimeSlotNumber -ucVirtualChannel[uctemp];
1678*53ee8cc1Swenshuai.xi 
1679*53ee8cc1Swenshuai.xi             _mdrv_mhl_SlotAllocationAlgorithm(uctemp, ucTimeSlotNumber, ucVirtualChannel[uctemp], ucSlotAllocation);
1680*53ee8cc1Swenshuai.xi         }
1681*53ee8cc1Swenshuai.xi     }
1682*53ee8cc1Swenshuai.xi 
1683*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <MHL_ECBUS_S_TIME_SLOT_TOTAL; uctemp++)
1684*53ee8cc1Swenshuai.xi     {
1685*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL time slot allocation %d\r\n", ucSlotAllocation[uctemp]);
1686*53ee8cc1Swenshuai.xi     }
1687*53ee8cc1Swenshuai.xi }
1688*53ee8cc1Swenshuai.xi 
1689*53ee8cc1Swenshuai.xi //**************************************************************************
1690*53ee8cc1Swenshuai.xi //  [Function Name]:
1691*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_SortingVCInformation()
1692*53ee8cc1Swenshuai.xi //  [Description]:
1693*53ee8cc1Swenshuai.xi //
1694*53ee8cc1Swenshuai.xi //  [Arguments]:
1695*53ee8cc1Swenshuai.xi //
1696*53ee8cc1Swenshuai.xi //  [Return]:
1697*53ee8cc1Swenshuai.xi //
1698*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SortingVCInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_BOOL bClearFlag)1699*53ee8cc1Swenshuai.xi void _mdrv_mhl_SortingVCInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_BOOL bClearFlag)
1700*53ee8cc1Swenshuai.xi {
1701*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
1702*53ee8cc1Swenshuai.xi     MS_U8 ucIndex = 0;
1703*53ee8cc1Swenshuai.xi     MS_U8 ucTargetVC = MHL_VIRTUAL_CHANNEL_LENGTH;
1704*53ee8cc1Swenshuai.xi     stMHL_VIRTUAL_CHANNEL_INFO stVirtualChannelTemp = {FALSE, 0, 0, 0, 0};
1705*53ee8cc1Swenshuai.xi 
1706*53ee8cc1Swenshuai.xi     for(ucIndex = 0; ucIndex <(ucTargetVC -1); ucIndex++)
1707*53ee8cc1Swenshuai.xi     {
1708*53ee8cc1Swenshuai.xi         for(uctemp = 0; uctemp <(ucTargetVC -ucIndex -1); uctemp++)
1709*53ee8cc1Swenshuai.xi         {
1710*53ee8cc1Swenshuai.xi             if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCNumber == 0)
1711*53ee8cc1Swenshuai.xi             {
1712*53ee8cc1Swenshuai.xi                 ucTargetVC = uctemp +1;
1713*53ee8cc1Swenshuai.xi 
1714*53ee8cc1Swenshuai.xi                 break;
1715*53ee8cc1Swenshuai.xi             }
1716*53ee8cc1Swenshuai.xi             else
1717*53ee8cc1Swenshuai.xi             {
1718*53ee8cc1Swenshuai.xi                 if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize == 0)
1719*53ee8cc1Swenshuai.xi                 {
1720*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber = 0xFF;
1721*53ee8cc1Swenshuai.xi                 }
1722*53ee8cc1Swenshuai.xi 
1723*53ee8cc1Swenshuai.xi                 if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCNumber < pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber)
1724*53ee8cc1Swenshuai.xi                 {
1725*53ee8cc1Swenshuai.xi                     // temp = n +1
1726*53ee8cc1Swenshuai.xi                     stVirtualChannelTemp.bVCConfirm = pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].bVCConfirm;
1727*53ee8cc1Swenshuai.xi                     stVirtualChannelTemp.ucVCFeatureID = pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCFeatureID;
1728*53ee8cc1Swenshuai.xi                     stVirtualChannelTemp.ucVCNumber = pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCNumber;
1729*53ee8cc1Swenshuai.xi                     stVirtualChannelTemp.ucVCResponseCode = pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCResponseCode;
1730*53ee8cc1Swenshuai.xi                     stVirtualChannelTemp.ucVCSlotSize = pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCSlotSize;
1731*53ee8cc1Swenshuai.xi                     // n +1 = n
1732*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].bVCConfirm = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].bVCConfirm;
1733*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCFeatureID = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCFeatureID;
1734*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCNumber = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber;
1735*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCResponseCode = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCResponseCode;
1736*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->stVirtualChannelInfo[uctemp +1].ucVCSlotSize = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize;
1737*53ee8cc1Swenshuai.xi                     // n = temp
1738*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->stVirtualChannelInfo[uctemp].bVCConfirm = stVirtualChannelTemp.bVCConfirm;
1739*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCFeatureID = stVirtualChannelTemp.ucVCFeatureID;
1740*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber = stVirtualChannelTemp.ucVCNumber;
1741*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCResponseCode = stVirtualChannelTemp.ucVCResponseCode;
1742*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize = stVirtualChannelTemp.ucVCSlotSize;
1743*53ee8cc1Swenshuai.xi                 }
1744*53ee8cc1Swenshuai.xi             }
1745*53ee8cc1Swenshuai.xi         }
1746*53ee8cc1Swenshuai.xi     }
1747*53ee8cc1Swenshuai.xi 
1748*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <MHL_VIRTUAL_CHANNEL_LENGTH; uctemp++)
1749*53ee8cc1Swenshuai.xi     {
1750*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize == 0)
1751*53ee8cc1Swenshuai.xi         {
1752*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber = 0;
1753*53ee8cc1Swenshuai.xi         }
1754*53ee8cc1Swenshuai.xi 
1755*53ee8cc1Swenshuai.xi         if(bClearFlag)
1756*53ee8cc1Swenshuai.xi         {
1757*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stVirtualChannelInfo[uctemp].bVCConfirm = FALSE;
1758*53ee8cc1Swenshuai.xi         }
1759*53ee8cc1Swenshuai.xi 
1760*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL VC sorting number %d\r\n", pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber);
1761*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL VC sorting slot %d\r\n", pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize);
1762*53ee8cc1Swenshuai.xi     }
1763*53ee8cc1Swenshuai.xi }
1764*53ee8cc1Swenshuai.xi 
1765*53ee8cc1Swenshuai.xi //**************************************************************************
1766*53ee8cc1Swenshuai.xi //  [Function Name]:
1767*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusSendSetHPD()
1768*53ee8cc1Swenshuai.xi //  [Description]:
1769*53ee8cc1Swenshuai.xi //                  MHL Cbus set HPD state
1770*53ee8cc1Swenshuai.xi //  [Arguments]:
1771*53ee8cc1Swenshuai.xi //                  TRUE: SET_HPD
1772*53ee8cc1Swenshuai.xi //                  FALSE: CLR_HPD
1773*53ee8cc1Swenshuai.xi //  [Return]:
1774*53ee8cc1Swenshuai.xi //
1775*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendSetHPD(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_BOOL bSetHPDFlag)1776*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusSendSetHPD(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_BOOL bSetHPDFlag)
1777*53ee8cc1Swenshuai.xi {
1778*53ee8cc1Swenshuai.xi     MS_U8 ucQueueIndex = _mdrv_mhl_GetFreeQueueIndex(pMHLResourcePrivate);
1779*53ee8cc1Swenshuai.xi 
1780*53ee8cc1Swenshuai.xi     if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM)
1781*53ee8cc1Swenshuai.xi     {
1782*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_PENDING;
1783*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucLength = 0;
1784*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucCommand = (bSetHPDFlag? MSC_SET_HPD : MSC_CLR_HPD);
1785*53ee8cc1Swenshuai.xi 
1786*53ee8cc1Swenshuai.xi         if(bSetHPDFlag)
1787*53ee8cc1Swenshuai.xi         {
1788*53ee8cc1Swenshuai.xi             SET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_HPD_SET_FLAG);
1789*53ee8cc1Swenshuai.xi             SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG);
1790*53ee8cc1Swenshuai.xi         }
1791*53ee8cc1Swenshuai.xi         else
1792*53ee8cc1Swenshuai.xi         {
1793*53ee8cc1Swenshuai.xi             CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_HPD_SET_FLAG);
1794*53ee8cc1Swenshuai.xi             CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG);
1795*53ee8cc1Swenshuai.xi         }
1796*53ee8cc1Swenshuai.xi     }
1797*53ee8cc1Swenshuai.xi }
1798*53ee8cc1Swenshuai.xi 
1799*53ee8cc1Swenshuai.xi //**************************************************************************
1800*53ee8cc1Swenshuai.xi //  [Function Name]:
1801*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusWriteStatusOrSetInt(BYTE addr, BYTE val)
1802*53ee8cc1Swenshuai.xi //  [Description]:
1803*53ee8cc1Swenshuai.xi //                  MHL Cbus write status or set interrupt
1804*53ee8cc1Swenshuai.xi //  [Arguments]:
1805*53ee8cc1Swenshuai.xi //
1806*53ee8cc1Swenshuai.xi //  [Return]:
1807*53ee8cc1Swenshuai.xi //                  TRUE: Cbus message send successfully
1808*53ee8cc1Swenshuai.xi //                  FALSE: Cbus message send fail
1809*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusWriteStatusOrSetInt(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucAddress,MS_U8 ucValue,MS_BOOL bExtended)1810*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CbusWriteStatusOrSetInt(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucAddress, MS_U8 ucValue, MS_BOOL bExtended)
1811*53ee8cc1Swenshuai.xi {
1812*53ee8cc1Swenshuai.xi     MS_BOOL bInsertFlag = FALSE;
1813*53ee8cc1Swenshuai.xi     MS_U8 ucQueueIndex = _mdrv_mhl_GetFreeQueueIndex(pMHLResourcePrivate);
1814*53ee8cc1Swenshuai.xi 
1815*53ee8cc1Swenshuai.xi     if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM)
1816*53ee8cc1Swenshuai.xi     {
1817*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_PENDING;
1818*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucLength = 2;
1819*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucCommand = (bExtended? MSC_WRITE_XSTAT : MSC_WRITE_STAT_OR_SET_INT);
1820*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucData[0] = ucAddress;
1821*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucData[1] = ucValue;
1822*53ee8cc1Swenshuai.xi 
1823*53ee8cc1Swenshuai.xi         bInsertFlag = TRUE;
1824*53ee8cc1Swenshuai.xi     }
1825*53ee8cc1Swenshuai.xi 
1826*53ee8cc1Swenshuai.xi     return bInsertFlag;
1827*53ee8cc1Swenshuai.xi }
1828*53ee8cc1Swenshuai.xi 
1829*53ee8cc1Swenshuai.xi //**************************************************************************
1830*53ee8cc1Swenshuai.xi //  [Function Name]:
1831*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusSendSubMessage
1832*53ee8cc1Swenshuai.xi //  [Description]
1833*53ee8cc1Swenshuai.xi //                  MHL Cbus MSC Send RCP or RAP
1834*53ee8cc1Swenshuai.xi //  [Arguments]:
1835*53ee8cc1Swenshuai.xi //                  subCmd: MSC subcommands
1836*53ee8cc1Swenshuai.xi //                  databuf: command code
1837*53ee8cc1Swenshuai.xi //  [Return]:
1838*53ee8cc1Swenshuai.xi //                  TRUE: success
1839*53ee8cc1Swenshuai.xi //                  FALSE: fail
1840*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendSubMessage(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucSubCommand,MS_U8 ucKeyCode,MS_BOOL bWaitReply)1841*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CbusSendSubMessage(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucSubCommand, MS_U8 ucKeyCode, MS_BOOL bWaitReply)
1842*53ee8cc1Swenshuai.xi {
1843*53ee8cc1Swenshuai.xi     MS_BOOL bInsertFlag = FALSE;
1844*53ee8cc1Swenshuai.xi     MS_U8 ucQueueIndex = MHL_CBUS_TOTAL_QUEUE_NUM;
1845*53ee8cc1Swenshuai.xi 
1846*53ee8cc1Swenshuai.xi     if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_MSG_COMMAND_FLAG))
1847*53ee8cc1Swenshuai.xi     {
1848*53ee8cc1Swenshuai.xi         ucQueueIndex = _mdrv_mhl_GetFreeQueueIndex(pMHLResourcePrivate);
1849*53ee8cc1Swenshuai.xi 
1850*53ee8cc1Swenshuai.xi         if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM)
1851*53ee8cc1Swenshuai.xi         {
1852*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_PENDING;
1853*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucLength = 2;
1854*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucCommand = MSC_MSC_MSG;
1855*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucData[0] = ucSubCommand;
1856*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucData[1] = ucKeyCode;
1857*53ee8cc1Swenshuai.xi 
1858*53ee8cc1Swenshuai.xi             bInsertFlag = TRUE;
1859*53ee8cc1Swenshuai.xi         }
1860*53ee8cc1Swenshuai.xi 
1861*53ee8cc1Swenshuai.xi         if(bWaitReply && bInsertFlag)
1862*53ee8cc1Swenshuai.xi         {
1863*53ee8cc1Swenshuai.xi             _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_WAIT_MSG_RESPONSE, MHL_MSG_WAIT_RESPONSE_TIME);
1864*53ee8cc1Swenshuai.xi 
1865*53ee8cc1Swenshuai.xi             SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_MSG_COMMAND_FLAG);
1866*53ee8cc1Swenshuai.xi         }
1867*53ee8cc1Swenshuai.xi     }
1868*53ee8cc1Swenshuai.xi 
1869*53ee8cc1Swenshuai.xi     return bInsertFlag;
1870*53ee8cc1Swenshuai.xi }
1871*53ee8cc1Swenshuai.xi 
1872*53ee8cc1Swenshuai.xi //**************************************************************************
1873*53ee8cc1Swenshuai.xi //  [Function Name]:
1874*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusSendGetVenderID()
1875*53ee8cc1Swenshuai.xi //  [Description]:
1876*53ee8cc1Swenshuai.xi //
1877*53ee8cc1Swenshuai.xi //  [Arguments]:
1878*53ee8cc1Swenshuai.xi //
1879*53ee8cc1Swenshuai.xi //  [Return]:
1880*53ee8cc1Swenshuai.xi //                  TRUE: Cbus message send successfully
1881*53ee8cc1Swenshuai.xi //                  FALSE: Cbus message send fail
1882*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendGetVenderID(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)1883*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CbusSendGetVenderID(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
1884*53ee8cc1Swenshuai.xi {
1885*53ee8cc1Swenshuai.xi     MS_BOOL bInsertFlag = FALSE;
1886*53ee8cc1Swenshuai.xi     MS_U8 ucQueueIndex = _mdrv_mhl_GetFreeQueueIndex(pMHLResourcePrivate);
1887*53ee8cc1Swenshuai.xi 
1888*53ee8cc1Swenshuai.xi     if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM)
1889*53ee8cc1Swenshuai.xi     {
1890*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_PENDING;
1891*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucLength = 0;
1892*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucCommand = MSC_GET_VENDOR_ID;
1893*53ee8cc1Swenshuai.xi 
1894*53ee8cc1Swenshuai.xi         bInsertFlag = TRUE;
1895*53ee8cc1Swenshuai.xi     }
1896*53ee8cc1Swenshuai.xi 
1897*53ee8cc1Swenshuai.xi     return bInsertFlag;
1898*53ee8cc1Swenshuai.xi }
1899*53ee8cc1Swenshuai.xi 
1900*53ee8cc1Swenshuai.xi //**************************************************************************
1901*53ee8cc1Swenshuai.xi //  [Function Name]:
1902*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusReadDeviceCapability()
1903*53ee8cc1Swenshuai.xi //  [Description]:
1904*53ee8cc1Swenshuai.xi //
1905*53ee8cc1Swenshuai.xi //  [Arguments]:
1906*53ee8cc1Swenshuai.xi //
1907*53ee8cc1Swenshuai.xi //  [Return]:
1908*53ee8cc1Swenshuai.xi //                  TRUE: Cbus message send successfully
1909*53ee8cc1Swenshuai.xi //                  FALSE: Cbus message send fail
1910*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusReadDeviceCapability(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucBitNumber,MS_BOOL bExtended)1911*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CbusReadDeviceCapability(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucBitNumber, MS_BOOL bExtended)
1912*53ee8cc1Swenshuai.xi {
1913*53ee8cc1Swenshuai.xi     MS_BOOL bInsertFlag = FALSE;
1914*53ee8cc1Swenshuai.xi     MS_U8 ucQueueIndex = _mdrv_mhl_GetFreeQueueIndex(pMHLResourcePrivate);
1915*53ee8cc1Swenshuai.xi 
1916*53ee8cc1Swenshuai.xi     if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM)
1917*53ee8cc1Swenshuai.xi     {
1918*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_PENDING;
1919*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucLength = 1;
1920*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucCommand = (bExtended? MSC_READ_XDEVCAP : MSC_READ_DEVCAP);
1921*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucData[0] = (bExtended? (0x80 +ucBitNumber) : ucBitNumber);
1922*53ee8cc1Swenshuai.xi 
1923*53ee8cc1Swenshuai.xi         bInsertFlag = TRUE;
1924*53ee8cc1Swenshuai.xi     }
1925*53ee8cc1Swenshuai.xi 
1926*53ee8cc1Swenshuai.xi     return bInsertFlag;
1927*53ee8cc1Swenshuai.xi }
1928*53ee8cc1Swenshuai.xi 
1929*53ee8cc1Swenshuai.xi //**************************************************************************
1930*53ee8cc1Swenshuai.xi //  [Function Name]:
1931*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusSendWriteBurst()
1932*53ee8cc1Swenshuai.xi //  [Description]:
1933*53ee8cc1Swenshuai.xi //
1934*53ee8cc1Swenshuai.xi //  [Arguments]:
1935*53ee8cc1Swenshuai.xi //
1936*53ee8cc1Swenshuai.xi //  [Return]:
1937*53ee8cc1Swenshuai.xi //                  TRUE: Cbus message send successfully
1938*53ee8cc1Swenshuai.xi //                  FALSE: Cbus message send fail
1939*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendWriteBurst(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucAddress,MS_U8 ucLength,MS_U8 * ucData)1940*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CbusSendWriteBurst(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucAddress, MS_U8 ucLength, MS_U8 *ucData)
1941*53ee8cc1Swenshuai.xi {
1942*53ee8cc1Swenshuai.xi     MS_BOOL bInsertFlag = FALSE;
1943*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
1944*53ee8cc1Swenshuai.xi     MS_U8 ucQueueIndex = _mdrv_mhl_GetFreeQueueIndex(pMHLResourcePrivate);
1945*53ee8cc1Swenshuai.xi 
1946*53ee8cc1Swenshuai.xi     if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM)
1947*53ee8cc1Swenshuai.xi     {
1948*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_PENDING;
1949*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucLength = ucLength +1;
1950*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucCommand = MSC_WRITE_BURST;
1951*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucData[0] = ucAddress;
1952*53ee8cc1Swenshuai.xi 
1953*53ee8cc1Swenshuai.xi         for(uctemp = 0; uctemp < ucLength; uctemp++)
1954*53ee8cc1Swenshuai.xi         {
1955*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucData[uctemp +1] = ucData[uctemp];
1956*53ee8cc1Swenshuai.xi         }
1957*53ee8cc1Swenshuai.xi 
1958*53ee8cc1Swenshuai.xi         bInsertFlag = TRUE;
1959*53ee8cc1Swenshuai.xi     }
1960*53ee8cc1Swenshuai.xi 
1961*53ee8cc1Swenshuai.xi     return bInsertFlag;
1962*53ee8cc1Swenshuai.xi }
1963*53ee8cc1Swenshuai.xi 
1964*53ee8cc1Swenshuai.xi //**************************************************************************
1965*53ee8cc1Swenshuai.xi //  [Function Name]:
1966*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusSendPathEnable()
1967*53ee8cc1Swenshuai.xi //  [Description]:
1968*53ee8cc1Swenshuai.xi //                  MHL Cbus set path enable
1969*53ee8cc1Swenshuai.xi //  [Arguments]:
1970*53ee8cc1Swenshuai.xi //                  TRUE: Enable
1971*53ee8cc1Swenshuai.xi //                  FALSE: Disable
1972*53ee8cc1Swenshuai.xi //  [Return]:
1973*53ee8cc1Swenshuai.xi //
1974*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendPathEnable(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_BOOL bEnableFlag)1975*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusSendPathEnable(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_BOOL bEnableFlag)
1976*53ee8cc1Swenshuai.xi {
1977*53ee8cc1Swenshuai.xi     MS_BOOL bInsertFlag = _mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x31, (bEnableFlag ? BIT(3) : 0), FALSE);
1978*53ee8cc1Swenshuai.xi 
1979*53ee8cc1Swenshuai.xi     if(bInsertFlag)
1980*53ee8cc1Swenshuai.xi     {
1981*53ee8cc1Swenshuai.xi         mhal_mhl_Cbus_SetPathEn(bEnableFlag);
1982*53ee8cc1Swenshuai.xi 
1983*53ee8cc1Swenshuai.xi         if(bEnableFlag)
1984*53ee8cc1Swenshuai.xi         {
1985*53ee8cc1Swenshuai.xi             SET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_PATH_EN_FLAG);
1986*53ee8cc1Swenshuai.xi         }
1987*53ee8cc1Swenshuai.xi         else
1988*53ee8cc1Swenshuai.xi         {
1989*53ee8cc1Swenshuai.xi             CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_PATH_EN_FLAG);
1990*53ee8cc1Swenshuai.xi         }
1991*53ee8cc1Swenshuai.xi     }
1992*53ee8cc1Swenshuai.xi }
1993*53ee8cc1Swenshuai.xi 
1994*53ee8cc1Swenshuai.xi //**************************************************************************
1995*53ee8cc1Swenshuai.xi //  [Function Name]:
1996*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusSendDevcapReady()
1997*53ee8cc1Swenshuai.xi //  [Description]:
1998*53ee8cc1Swenshuai.xi //                  MHL Cbus set capbility ready
1999*53ee8cc1Swenshuai.xi //  [Arguments]:
2000*53ee8cc1Swenshuai.xi //                  TRUE: Enable
2001*53ee8cc1Swenshuai.xi //                  FALSE: Disable
2002*53ee8cc1Swenshuai.xi //  [Return]:
2003*53ee8cc1Swenshuai.xi //
2004*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendDevcapReady(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2005*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusSendDevcapReady(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2006*53ee8cc1Swenshuai.xi {
2007*53ee8cc1Swenshuai.xi     MS_BOOL bInsertFlag = FALSE;
2008*53ee8cc1Swenshuai.xi     MS_U8 ucDevcapValue = BIT(0);
2009*53ee8cc1Swenshuai.xi 
2010*53ee8cc1Swenshuai.xi     if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
2011*53ee8cc1Swenshuai.xi     {
2012*53ee8cc1Swenshuai.xi         ucDevcapValue = ucDevcapValue| BIT(1);
2013*53ee8cc1Swenshuai.xi     }
2014*53ee8cc1Swenshuai.xi 
2015*53ee8cc1Swenshuai.xi     bInsertFlag = _mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x30, ucDevcapValue, FALSE);
2016*53ee8cc1Swenshuai.xi 
2017*53ee8cc1Swenshuai.xi     if(bInsertFlag)
2018*53ee8cc1Swenshuai.xi     {
2019*53ee8cc1Swenshuai.xi         SET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_READY_FLAG);
2020*53ee8cc1Swenshuai.xi     }
2021*53ee8cc1Swenshuai.xi     else
2022*53ee8cc1Swenshuai.xi     {
2023*53ee8cc1Swenshuai.xi         CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_READY_FLAG);
2024*53ee8cc1Swenshuai.xi     }
2025*53ee8cc1Swenshuai.xi }
2026*53ee8cc1Swenshuai.xi 
2027*53ee8cc1Swenshuai.xi //**************************************************************************
2028*53ee8cc1Swenshuai.xi //  [Function Name]:
2029*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusSendDevcapChange()
2030*53ee8cc1Swenshuai.xi //  [Description]:
2031*53ee8cc1Swenshuai.xi //                  MHL Cbus set capbility change
2032*53ee8cc1Swenshuai.xi //  [Arguments]:
2033*53ee8cc1Swenshuai.xi //                  TRUE: Enable
2034*53ee8cc1Swenshuai.xi //                  FALSE: Disable
2035*53ee8cc1Swenshuai.xi //  [Return]:
2036*53ee8cc1Swenshuai.xi //
2037*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendDevcapChange(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2038*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusSendDevcapChange(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2039*53ee8cc1Swenshuai.xi {
2040*53ee8cc1Swenshuai.xi     MS_BOOL bInsertFlag = _mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x20, BIT(0), FALSE);
2041*53ee8cc1Swenshuai.xi 
2042*53ee8cc1Swenshuai.xi     if(bInsertFlag)
2043*53ee8cc1Swenshuai.xi     {
2044*53ee8cc1Swenshuai.xi         SET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_CHANGE_FLAG);
2045*53ee8cc1Swenshuai.xi     }
2046*53ee8cc1Swenshuai.xi     else
2047*53ee8cc1Swenshuai.xi     {
2048*53ee8cc1Swenshuai.xi         CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_CHANGE_FLAG);
2049*53ee8cc1Swenshuai.xi     }
2050*53ee8cc1Swenshuai.xi }
2051*53ee8cc1Swenshuai.xi 
2052*53ee8cc1Swenshuai.xi //**************************************************************************
2053*53ee8cc1Swenshuai.xi //  [Function Name]:
2054*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusSendVersionCode()
2055*53ee8cc1Swenshuai.xi //  [Description]:
2056*53ee8cc1Swenshuai.xi //
2057*53ee8cc1Swenshuai.xi //  [Arguments]:
2058*53ee8cc1Swenshuai.xi //
2059*53ee8cc1Swenshuai.xi //  [Return]:
2060*53ee8cc1Swenshuai.xi //
2061*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendVersionCode(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2062*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusSendVersionCode(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2063*53ee8cc1Swenshuai.xi {
2064*53ee8cc1Swenshuai.xi     MS_BOOL bInsertFlag = _mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x32, pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_VERSION], FALSE);
2065*53ee8cc1Swenshuai.xi 
2066*53ee8cc1Swenshuai.xi     if(bInsertFlag)
2067*53ee8cc1Swenshuai.xi     {
2068*53ee8cc1Swenshuai.xi         SET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_VERSION_CODE_FLAG);
2069*53ee8cc1Swenshuai.xi     }
2070*53ee8cc1Swenshuai.xi     else
2071*53ee8cc1Swenshuai.xi     {
2072*53ee8cc1Swenshuai.xi         CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_VERSION_CODE_FLAG);
2073*53ee8cc1Swenshuai.xi     }
2074*53ee8cc1Swenshuai.xi }
2075*53ee8cc1Swenshuai.xi 
2076*53ee8cc1Swenshuai.xi //**************************************************************************
2077*53ee8cc1Swenshuai.xi //  [Function Name]:
2078*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusSendLinkStatusNormal()
2079*53ee8cc1Swenshuai.xi //  [Description]:
2080*53ee8cc1Swenshuai.xi //
2081*53ee8cc1Swenshuai.xi //  [Arguments]:
2082*53ee8cc1Swenshuai.xi //
2083*53ee8cc1Swenshuai.xi //  [Return]:
2084*53ee8cc1Swenshuai.xi //
2085*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusSendLinkStatusNormal(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2086*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusSendLinkStatusNormal(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2087*53ee8cc1Swenshuai.xi {
2088*53ee8cc1Swenshuai.xi     MS_BOOL bInsertFlag = FALSE;
2089*53ee8cc1Swenshuai.xi 
2090*53ee8cc1Swenshuai.xi     if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_LINK_STATUS_NORMAL_FLAG))
2091*53ee8cc1Swenshuai.xi     {
2092*53ee8cc1Swenshuai.xi         bInsertFlag = _mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x91, 0x02, TRUE);
2093*53ee8cc1Swenshuai.xi 
2094*53ee8cc1Swenshuai.xi         if(bInsertFlag)
2095*53ee8cc1Swenshuai.xi         {
2096*53ee8cc1Swenshuai.xi             SET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_LINK_STATUS_NORMAL_FLAG);
2097*53ee8cc1Swenshuai.xi         }
2098*53ee8cc1Swenshuai.xi         else
2099*53ee8cc1Swenshuai.xi         {
2100*53ee8cc1Swenshuai.xi             CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_LINK_STATUS_NORMAL_FLAG);
2101*53ee8cc1Swenshuai.xi         }
2102*53ee8cc1Swenshuai.xi     }
2103*53ee8cc1Swenshuai.xi }
2104*53ee8cc1Swenshuai.xi 
2105*53ee8cc1Swenshuai.xi //**************************************************************************
2106*53ee8cc1Swenshuai.xi //  [Function Name]:
2107*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_GetEnhanceCbusFlag()
2108*53ee8cc1Swenshuai.xi //  [Description]
2109*53ee8cc1Swenshuai.xi //
2110*53ee8cc1Swenshuai.xi //  [Arguments]:
2111*53ee8cc1Swenshuai.xi //
2112*53ee8cc1Swenshuai.xi //  [Return]:
2113*53ee8cc1Swenshuai.xi //
2114*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetEnhanceCbusFlag(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2115*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetEnhanceCbusFlag(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2116*53ee8cc1Swenshuai.xi {
2117*53ee8cc1Swenshuai.xi     MS_BOOL bECbusSupport = GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_ECBUS_ENGINE_SUPPORT_FLAG);
2118*53ee8cc1Swenshuai.xi 
2119*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_VERSION] < 0x30)
2120*53ee8cc1Swenshuai.xi     {
2121*53ee8cc1Swenshuai.xi         bECbusSupport = FALSE;
2122*53ee8cc1Swenshuai.xi     }
2123*53ee8cc1Swenshuai.xi 
2124*53ee8cc1Swenshuai.xi     return bECbusSupport;
2125*53ee8cc1Swenshuai.xi }
2126*53ee8cc1Swenshuai.xi 
2127*53ee8cc1Swenshuai.xi //**************************************************************************
2128*53ee8cc1Swenshuai.xi //  [Function Name]:
2129*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusTimerEventProc()
2130*53ee8cc1Swenshuai.xi //  [Description]:
2131*53ee8cc1Swenshuai.xi //
2132*53ee8cc1Swenshuai.xi //  [Arguments]:
2133*53ee8cc1Swenshuai.xi //
2134*53ee8cc1Swenshuai.xi //  [Return]:
2135*53ee8cc1Swenshuai.xi //
2136*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusTimerEventProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2137*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusTimerEventProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2138*53ee8cc1Swenshuai.xi {
2139*53ee8cc1Swenshuai.xi     if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_CBUS_SILENCE_FLAG))
2140*53ee8cc1Swenshuai.xi     {
2141*53ee8cc1Swenshuai.xi         CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_CBUS_SILENCE_FLAG);
2142*53ee8cc1Swenshuai.xi         SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_SEND_FLAG);
2143*53ee8cc1Swenshuai.xi 
2144*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2145*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_CBUS_SILENCE);
2146*53ee8cc1Swenshuai.xi #endif
2147*53ee8cc1Swenshuai.xi     }
2148*53ee8cc1Swenshuai.xi 
2149*53ee8cc1Swenshuai.xi     if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_DISPLAY_COMMAND_FLAG))
2150*53ee8cc1Swenshuai.xi     {
2151*53ee8cc1Swenshuai.xi         CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_DISPLAY_COMMAND_FLAG);
2152*53ee8cc1Swenshuai.xi         SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_DISPLAY_COMMAND_ENABLE_FLAG);
2153*53ee8cc1Swenshuai.xi 
2154*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2155*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_DISPLAY_COMMAND);
2156*53ee8cc1Swenshuai.xi #endif
2157*53ee8cc1Swenshuai.xi     }
2158*53ee8cc1Swenshuai.xi 
2159*53ee8cc1Swenshuai.xi     if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_WAIT_MSG_RESPONSE_FLAG))
2160*53ee8cc1Swenshuai.xi     {
2161*53ee8cc1Swenshuai.xi         CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_WAIT_MSG_RESPONSE_FLAG);
2162*53ee8cc1Swenshuai.xi         CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_MSG_COMMAND_FLAG);
2163*53ee8cc1Swenshuai.xi 
2164*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2165*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_WAIT_MSG_RESPONSE);
2166*53ee8cc1Swenshuai.xi #endif
2167*53ee8cc1Swenshuai.xi     }
2168*53ee8cc1Swenshuai.xi 
2169*53ee8cc1Swenshuai.xi     if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_RCP_AUTO_RELEASE_FLAG))
2170*53ee8cc1Swenshuai.xi     {
2171*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RCP, (pMHLResourcePrivate->ucPreRCPKeyCode |BIT(7)), TRUE))
2172*53ee8cc1Swenshuai.xi         {
2173*53ee8cc1Swenshuai.xi             CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_RCP_AUTO_RELEASE_FLAG);
2174*53ee8cc1Swenshuai.xi             CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_RCP_RELEASE_ENABLE_FLAG);
2175*53ee8cc1Swenshuai.xi 
2176*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2177*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_RCP_AUTO_RELEASE);
2178*53ee8cc1Swenshuai.xi #endif
2179*53ee8cc1Swenshuai.xi         }
2180*53ee8cc1Swenshuai.xi     }
2181*53ee8cc1Swenshuai.xi 
2182*53ee8cc1Swenshuai.xi     if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_WAIT_WRITE_GRANT_FLAG))
2183*53ee8cc1Swenshuai.xi     {
2184*53ee8cc1Swenshuai.xi         CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_WAIT_WRITE_GRANT_FLAG);
2185*53ee8cc1Swenshuai.xi 
2186*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_SEND_REQUEST)
2187*53ee8cc1Swenshuai.xi         {
2188*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_START;
2189*53ee8cc1Swenshuai.xi         }
2190*53ee8cc1Swenshuai.xi 
2191*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2192*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_WAIT_WRITE_GRANT);
2193*53ee8cc1Swenshuai.xi #endif
2194*53ee8cc1Swenshuai.xi     }
2195*53ee8cc1Swenshuai.xi 
2196*53ee8cc1Swenshuai.xi     if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_CHECK_RECEIVE_LOSE_FLAG))
2197*53ee8cc1Swenshuai.xi     {
2198*53ee8cc1Swenshuai.xi         CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_CHECK_RECEIVE_LOSE_FLAG);
2199*53ee8cc1Swenshuai.xi 
2200*53ee8cc1Swenshuai.xi         if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_RECEIVE_LOSE_FLAG))
2201*53ee8cc1Swenshuai.xi         {
2202*53ee8cc1Swenshuai.xi             CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_RECEIVE_LOSE_FLAG);
2203*53ee8cc1Swenshuai.xi 
2204*53ee8cc1Swenshuai.xi             if(pMHLResourcePrivate->ucReceiveCounter == 0)
2205*53ee8cc1Swenshuai.xi             {
2206*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucReceiveCounter++;
2207*53ee8cc1Swenshuai.xi             }
2208*53ee8cc1Swenshuai.xi         }
2209*53ee8cc1Swenshuai.xi 
2210*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2211*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_CHECK_RECEIVE_LOSE);
2212*53ee8cc1Swenshuai.xi #endif
2213*53ee8cc1Swenshuai.xi     }
2214*53ee8cc1Swenshuai.xi 
2215*53ee8cc1Swenshuai.xi     if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_SEND_MSG_RESPONSE_FLAG))
2216*53ee8cc1Swenshuai.xi     {
2217*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, pMHLResourcePrivate->ucMSGData[0], pMHLResourcePrivate->ucMSGData[1], FALSE))
2218*53ee8cc1Swenshuai.xi         {
2219*53ee8cc1Swenshuai.xi             CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_SEND_MSG_RESPONSE_FLAG);
2220*53ee8cc1Swenshuai.xi 
2221*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2222*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_SEND_MSG_RESPONSE);
2223*53ee8cc1Swenshuai.xi #endif
2224*53ee8cc1Swenshuai.xi         }
2225*53ee8cc1Swenshuai.xi     }
2226*53ee8cc1Swenshuai.xi 
2227*53ee8cc1Swenshuai.xi     if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_CHECK_CONTENT_ON_FLAG))
2228*53ee8cc1Swenshuai.xi     {
2229*53ee8cc1Swenshuai.xi         CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_CHECK_CONTENT_ON_FLAG);
2230*53ee8cc1Swenshuai.xi         CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CHECK_CONTENT_ON_FLAG);
2231*53ee8cc1Swenshuai.xi 
2232*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2233*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_CHECK_CONTENT_ON);
2234*53ee8cc1Swenshuai.xi #endif
2235*53ee8cc1Swenshuai.xi     }
2236*53ee8cc1Swenshuai.xi 
2237*53ee8cc1Swenshuai.xi     if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_AUTO_SWITCH_STOP_FLAG))
2238*53ee8cc1Swenshuai.xi     {
2239*53ee8cc1Swenshuai.xi         CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_AUTO_SWITCH_STOP_FLAG);
2240*53ee8cc1Swenshuai.xi         CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_STOP_FLAG);
2241*53ee8cc1Swenshuai.xi 
2242*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2243*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_AUTO_SWITCH_STOP);
2244*53ee8cc1Swenshuai.xi #endif
2245*53ee8cc1Swenshuai.xi     }
2246*53ee8cc1Swenshuai.xi 
2247*53ee8cc1Swenshuai.xi     if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_WAIT_ECBUS_LOCK_FLAG))
2248*53ee8cc1Swenshuai.xi     {
2249*53ee8cc1Swenshuai.xi         CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_WAIT_ECBUS_LOCK_FLAG);
2250*53ee8cc1Swenshuai.xi 
2251*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucECbusState != MHL_ECBUS_STATE_STABLE_POLLING)
2252*53ee8cc1Swenshuai.xi         {
2253*53ee8cc1Swenshuai.xi             if(!(pMHLResourcePrivate->ucBISTModeState == MHL_CBUS_BIST_ECBUS_SWITCH)) // Not BIST mode
2254*53ee8cc1Swenshuai.xi             {
2255*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_UNLOCK_RESET;
2256*53ee8cc1Swenshuai.xi             }
2257*53ee8cc1Swenshuai.xi         }
2258*53ee8cc1Swenshuai.xi 
2259*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2260*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_WAIT_ECBUS_LOCK);
2261*53ee8cc1Swenshuai.xi #endif
2262*53ee8cc1Swenshuai.xi     }
2263*53ee8cc1Swenshuai.xi 
2264*53ee8cc1Swenshuai.xi     if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_AUTO_EQ_PROCESS_FLAG))
2265*53ee8cc1Swenshuai.xi     {
2266*53ee8cc1Swenshuai.xi         CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_AUTO_EQ_PROCESS_FLAG);
2267*53ee8cc1Swenshuai.xi         SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_EQ_FUNCTION_FLAG);
2268*53ee8cc1Swenshuai.xi 
2269*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2270*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_AUTO_EQ_PROCESS);
2271*53ee8cc1Swenshuai.xi #endif
2272*53ee8cc1Swenshuai.xi     }
2273*53ee8cc1Swenshuai.xi 
2274*53ee8cc1Swenshuai.xi     if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_BIST_PROCESS_FLAG))
2275*53ee8cc1Swenshuai.xi     {
2276*53ee8cc1Swenshuai.xi         CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_BIST_PROCESS_FLAG);
2277*53ee8cc1Swenshuai.xi 
2278*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucBISTModeState == MHL_CBUS_BIST_ECBUS_SWITCH)
2279*53ee8cc1Swenshuai.xi         {
2280*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_EVENT_FINISH;
2281*53ee8cc1Swenshuai.xi         }
2282*53ee8cc1Swenshuai.xi 
2283*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2284*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_BIST_PROCESS);
2285*53ee8cc1Swenshuai.xi #endif
2286*53ee8cc1Swenshuai.xi     }
2287*53ee8cc1Swenshuai.xi 
2288*53ee8cc1Swenshuai.xi     if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_TX_QUEUE_FREEZE_FLAG))
2289*53ee8cc1Swenshuai.xi     {
2290*53ee8cc1Swenshuai.xi         CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_TX_QUEUE_FREEZE_FLAG);
2291*53ee8cc1Swenshuai.xi         CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
2292*53ee8cc1Swenshuai.xi 
2293*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2294*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_TX_QUQUE_FREEZE);
2295*53ee8cc1Swenshuai.xi #endif
2296*53ee8cc1Swenshuai.xi     }
2297*53ee8cc1Swenshuai.xi 
2298*53ee8cc1Swenshuai.xi     if(GET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_POWER_ON_PATCH_FLAG))
2299*53ee8cc1Swenshuai.xi     {
2300*53ee8cc1Swenshuai.xi         CLR_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, MHL_TIMER_POWER_ON_PATCH_FLAG);
2301*53ee8cc1Swenshuai.xi 
2302*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucPowerOnPatchState == MHL_POWER_ON_PATCH_STATE_WAIT_PATCH_ON)
2303*53ee8cc1Swenshuai.xi         {
2304*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucPowerOnPatchState = MHL_POWER_ON_PATCH_STATE_PATCH_ON;
2305*53ee8cc1Swenshuai.xi         }
2306*53ee8cc1Swenshuai.xi         else if(pMHLResourcePrivate->ucPowerOnPatchState == MHL_POWER_ON_PATCH_STATE_WAIT_PATCH_OFF)
2307*53ee8cc1Swenshuai.xi         {
2308*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucPowerOnPatchState = MHL_POWER_ON_PATCH_STATE_PATCH_OFF;
2309*53ee8cc1Swenshuai.xi         }
2310*53ee8cc1Swenshuai.xi 
2311*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_TIMER_EVENT)
2312*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL timer event %d timeout\r\n", MHL_TIMER_EVENT_POWER_ON_PATCH);
2313*53ee8cc1Swenshuai.xi #endif
2314*53ee8cc1Swenshuai.xi     }
2315*53ee8cc1Swenshuai.xi }
2316*53ee8cc1Swenshuai.xi 
2317*53ee8cc1Swenshuai.xi //**************************************************************************
2318*53ee8cc1Swenshuai.xi //  [Function Name]:
2319*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_TimerHandler()
2320*53ee8cc1Swenshuai.xi //  [Description]
2321*53ee8cc1Swenshuai.xi //
2322*53ee8cc1Swenshuai.xi //  [Arguments]:
2323*53ee8cc1Swenshuai.xi //
2324*53ee8cc1Swenshuai.xi //  [Return]:
2325*53ee8cc1Swenshuai.xi //
2326*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_TimerHandler(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2327*53ee8cc1Swenshuai.xi void _mdrv_mhl_TimerHandler(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2328*53ee8cc1Swenshuai.xi {
2329*53ee8cc1Swenshuai.xi     MS_U8 ucTimerEvent = 0;
2330*53ee8cc1Swenshuai.xi     MS_U32 ulTimerInterval = 0;
2331*53ee8cc1Swenshuai.xi     MS_U32 ulTimerTick = (MsOS_GetSystemTime()) %CBUS_TIMER_CONTROL_MASK;
2332*53ee8cc1Swenshuai.xi 
2333*53ee8cc1Swenshuai.xi     if(ulTimerTick != pMHLResourcePrivate->ulCurrentTimerTick)
2334*53ee8cc1Swenshuai.xi     {
2335*53ee8cc1Swenshuai.xi         ulTimerInterval = (ulTimerTick +CBUS_TIMER_CONTROL_MASK -pMHLResourcePrivate->ulCurrentTimerTick) %CBUS_TIMER_CONTROL_MASK;
2336*53ee8cc1Swenshuai.xi 
2337*53ee8cc1Swenshuai.xi         if(ulTimerInterval < 50)
2338*53ee8cc1Swenshuai.xi         {
2339*53ee8cc1Swenshuai.xi             for(ucTimerEvent = 0; ucTimerEvent < MHL_TIMER_EVENT_MASK; ucTimerEvent++)
2340*53ee8cc1Swenshuai.xi             {
2341*53ee8cc1Swenshuai.xi                 if(pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].bEnableFlag)
2342*53ee8cc1Swenshuai.xi                 {
2343*53ee8cc1Swenshuai.xi                     if(pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].usTimerTick > ulTimerInterval)
2344*53ee8cc1Swenshuai.xi                     {
2345*53ee8cc1Swenshuai.xi                         pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].usTimerTick = pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].usTimerTick -ulTimerInterval;
2346*53ee8cc1Swenshuai.xi                     }
2347*53ee8cc1Swenshuai.xi                     else
2348*53ee8cc1Swenshuai.xi                     {
2349*53ee8cc1Swenshuai.xi                         pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].usTimerTick = 0;
2350*53ee8cc1Swenshuai.xi 
2351*53ee8cc1Swenshuai.xi                         SET_MHL_TIMER_FLAG(pMHLResourcePrivate->ulTimerIndex, BIT(ucTimerEvent));
2352*53ee8cc1Swenshuai.xi 
2353*53ee8cc1Swenshuai.xi                         pMHLResourcePrivate->stTimerEventInfo[ucTimerEvent].bEnableFlag = FALSE;
2354*53ee8cc1Swenshuai.xi                     }
2355*53ee8cc1Swenshuai.xi                 }
2356*53ee8cc1Swenshuai.xi             }
2357*53ee8cc1Swenshuai.xi         }
2358*53ee8cc1Swenshuai.xi 
2359*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ulCurrentTimerTick = ulTimerTick;
2360*53ee8cc1Swenshuai.xi     }
2361*53ee8cc1Swenshuai.xi 
2362*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->ulTimerIndex > 0)
2363*53ee8cc1Swenshuai.xi     {
2364*53ee8cc1Swenshuai.xi         _mdrv_mhl_CbusTimerEventProc(pMHLResourcePrivate);
2365*53ee8cc1Swenshuai.xi     }
2366*53ee8cc1Swenshuai.xi }
2367*53ee8cc1Swenshuai.xi 
2368*53ee8cc1Swenshuai.xi //**************************************************************************
2369*53ee8cc1Swenshuai.xi //  [Function Name]:
2370*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_ECbusStateHandler()
2371*53ee8cc1Swenshuai.xi //  [Description]
2372*53ee8cc1Swenshuai.xi //
2373*53ee8cc1Swenshuai.xi //  [Arguments]:
2374*53ee8cc1Swenshuai.xi //
2375*53ee8cc1Swenshuai.xi //  [Return]:
2376*53ee8cc1Swenshuai.xi //
2377*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ECbusStateHandler(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2378*53ee8cc1Swenshuai.xi void _mdrv_mhl_ECbusStateHandler(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2379*53ee8cc1Swenshuai.xi {
2380*53ee8cc1Swenshuai.xi     MS_U8 ucECbusEvent = MHL_ECBUS_EVENT_NONE;
2381*53ee8cc1Swenshuai.xi     MS_U8 ucECbusStatusFlag = mhal_mhl_GetECbusStatusFlag();
2382*53ee8cc1Swenshuai.xi 
2383*53ee8cc1Swenshuai.xi     if((pMHLResourcePrivate->stSignalStatusInfo.ucECbusTrainState < MHL_ECBUS_STATE_FAIL) && (pMHLResourcePrivate->stSignalStatusInfo.ucECbusTrainState >= MHL_ECBUS_STATE_SOURCE_ACTIVE))
2384*53ee8cc1Swenshuai.xi     {
2385*53ee8cc1Swenshuai.xi         ucECbusStatusFlag |= MHL_ECBUS_STATUS_TRAINING_PASS;
2386*53ee8cc1Swenshuai.xi     }
2387*53ee8cc1Swenshuai.xi 
2388*53ee8cc1Swenshuai.xi     switch(pMHLResourcePrivate->ucECbusState)
2389*53ee8cc1Swenshuai.xi     {
2390*53ee8cc1Swenshuai.xi         case MHL_ECBUS_STATE_RECEIVE_MODE_UP:
2391*53ee8cc1Swenshuai.xi             if(_mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RAPK, 0x00, FALSE))
2392*53ee8cc1Swenshuai.xi             {
2393*53ee8cc1Swenshuai.xi                 // Freeze Tx queue, not allow any Cbus command insert Tx queue
2394*53ee8cc1Swenshuai.xi                 SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
2395*53ee8cc1Swenshuai.xi 
2396*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_TRIGGER_MODE_UP;
2397*53ee8cc1Swenshuai.xi 
2398*53ee8cc1Swenshuai.xi                 ucECbusEvent = MHL_ECBUS_EVENT_PREPARE_MODE_UP;
2399*53ee8cc1Swenshuai.xi 
2400*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL receive mode up !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2401*53ee8cc1Swenshuai.xi             }
2402*53ee8cc1Swenshuai.xi 
2403*53ee8cc1Swenshuai.xi             break;
2404*53ee8cc1Swenshuai.xi 
2405*53ee8cc1Swenshuai.xi         case MHL_ECBUS_STATE_BIST_MODE_UP:
2406*53ee8cc1Swenshuai.xi             // Freeze Tx queue, not allow any Cbus command insert Tx queue
2407*53ee8cc1Swenshuai.xi             SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
2408*53ee8cc1Swenshuai.xi 
2409*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_TRIGGER_MODE_UP;
2410*53ee8cc1Swenshuai.xi 
2411*53ee8cc1Swenshuai.xi             ucECbusEvent = MHL_ECBUS_EVENT_PREPARE_MODE_UP;
2412*53ee8cc1Swenshuai.xi 
2413*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL BIST trigger mode up !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2414*53ee8cc1Swenshuai.xi 
2415*53ee8cc1Swenshuai.xi             break;
2416*53ee8cc1Swenshuai.xi 
2417*53ee8cc1Swenshuai.xi         case MHL_ECBUS_STATE_TRIGGER_MODE_UP:
2418*53ee8cc1Swenshuai.xi             // Wait Tx queue empty, then trigger eCbus mode up
2419*53ee8cc1Swenshuai.xi             if(_mdrv_mhl_GetCbusQueueIndex(pMHLResourcePrivate) == MHL_CBUS_TOTAL_QUEUE_NUM)
2420*53ee8cc1Swenshuai.xi             {
2421*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_PROCESS_MODE_UP;
2422*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->stSignalStatusInfo.bECbusEnableFlag = TRUE;
2423*53ee8cc1Swenshuai.xi 
2424*53ee8cc1Swenshuai.xi                 ucECbusEvent = MHL_ECBUS_EVENT_MODE_UP_PROCESS;
2425*53ee8cc1Swenshuai.xi 
2426*53ee8cc1Swenshuai.xi                 _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_WAIT_ECBUS_LOCK, MHL_WAIT_ECBUS_LOCK_TIME);
2427*53ee8cc1Swenshuai.xi 
2428*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL Tx queue empty trigger mode up !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2429*53ee8cc1Swenshuai.xi             }
2430*53ee8cc1Swenshuai.xi 
2431*53ee8cc1Swenshuai.xi             break;
2432*53ee8cc1Swenshuai.xi 
2433*53ee8cc1Swenshuai.xi         case MHL_ECBUS_STATE_PROCESS_MODE_UP:
2434*53ee8cc1Swenshuai.xi             if(ucECbusStatusFlag &MHL_ECBUS_STATUS_SLOT_SYNC_DONE)
2435*53ee8cc1Swenshuai.xi             {
2436*53ee8cc1Swenshuai.xi                 CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
2437*53ee8cc1Swenshuai.xi                 SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_EQ_FUNCTION_FLAG);
2438*53ee8cc1Swenshuai.xi                 SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS1_FUNCTION_FLAG);
2439*53ee8cc1Swenshuai.xi 
2440*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_MODE_UP_CLOCK_LOCK;
2441*53ee8cc1Swenshuai.xi 
2442*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL Cbus1 command enable !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2443*53ee8cc1Swenshuai.xi             }
2444*53ee8cc1Swenshuai.xi 
2445*53ee8cc1Swenshuai.xi             break;
2446*53ee8cc1Swenshuai.xi 
2447*53ee8cc1Swenshuai.xi         case MHL_ECBUS_STATE_MODE_UP_CLOCK_LOCK:
2448*53ee8cc1Swenshuai.xi             if(ucECbusStatusFlag &MHL_ECBUS_STATUS_EMSC_SYNC_DONE)
2449*53ee8cc1Swenshuai.xi             {
2450*53ee8cc1Swenshuai.xi                 SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_EMSC_FUNCTION_FLAG);
2451*53ee8cc1Swenshuai.xi 
2452*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_STABLE_POLLING;
2453*53ee8cc1Swenshuai.xi 
2454*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL eMSC command enable !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2455*53ee8cc1Swenshuai.xi 
2456*53ee8cc1Swenshuai.xi                 if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG))
2457*53ee8cc1Swenshuai.xi                 {
2458*53ee8cc1Swenshuai.xi                     CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG);
2459*53ee8cc1Swenshuai.xi                 }
2460*53ee8cc1Swenshuai.xi             }
2461*53ee8cc1Swenshuai.xi 
2462*53ee8cc1Swenshuai.xi             break;
2463*53ee8cc1Swenshuai.xi 
2464*53ee8cc1Swenshuai.xi         case MHL_ECBUS_STATE_STABLE_POLLING:
2465*53ee8cc1Swenshuai.xi             if((ucECbusStatusFlag &(MHL_ECBUS_STATUS_TRAINING_PASS)) == 0)
2466*53ee8cc1Swenshuai.xi             {
2467*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_NONE;
2468*53ee8cc1Swenshuai.xi 
2469*53ee8cc1Swenshuai.xi                 ucECbusEvent = MHL_ECBUS_EVENT_STUCK_TO_LOW;
2470*53ee8cc1Swenshuai.xi 
2471*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL eCbus lose lock to reset !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2472*53ee8cc1Swenshuai.xi             }
2473*53ee8cc1Swenshuai.xi             else if(ucECbusStatusFlag &MHL_ECBUS_STATUS_RETRY_TIMEOUT)
2474*53ee8cc1Swenshuai.xi             {
2475*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_NONE;
2476*53ee8cc1Swenshuai.xi 
2477*53ee8cc1Swenshuai.xi                 ucECbusEvent = MHL_ECBUS_EVENT_STUCK_TO_LOW;
2478*53ee8cc1Swenshuai.xi             }
2479*53ee8cc1Swenshuai.xi             else
2480*53ee8cc1Swenshuai.xi             {
2481*53ee8cc1Swenshuai.xi                 ucECbusEvent = MHL_ECBUS_EVENT_ECBUS_COMMAND_PARSING;
2482*53ee8cc1Swenshuai.xi             }
2483*53ee8cc1Swenshuai.xi 
2484*53ee8cc1Swenshuai.xi             break;
2485*53ee8cc1Swenshuai.xi 
2486*53ee8cc1Swenshuai.xi         case MHL_ECBUS_STATE_UNLOCK_RESET:
2487*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_NONE;
2488*53ee8cc1Swenshuai.xi 
2489*53ee8cc1Swenshuai.xi             ucECbusEvent = MHL_ECBUS_EVENT_STUCK_TO_LOW;
2490*53ee8cc1Swenshuai.xi 
2491*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL eCbus training timeout to reset !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2492*53ee8cc1Swenshuai.xi 
2493*53ee8cc1Swenshuai.xi             break;
2494*53ee8cc1Swenshuai.xi 
2495*53ee8cc1Swenshuai.xi         case MHL_ECBUS_STATE_RECEIVE_MODE_DOWN:
2496*53ee8cc1Swenshuai.xi             if(_mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RAPK, 0x00, FALSE))
2497*53ee8cc1Swenshuai.xi             {
2498*53ee8cc1Swenshuai.xi                 // Freeze Tx queue, not allow any Cbus command insert Tx queue
2499*53ee8cc1Swenshuai.xi                 SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
2500*53ee8cc1Swenshuai.xi 
2501*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_TRIGGER_MODE_DOWN;
2502*53ee8cc1Swenshuai.xi 
2503*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL receive mode down !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2504*53ee8cc1Swenshuai.xi             }
2505*53ee8cc1Swenshuai.xi 
2506*53ee8cc1Swenshuai.xi             break;
2507*53ee8cc1Swenshuai.xi 
2508*53ee8cc1Swenshuai.xi         case MHL_ECBUS_STATE_BIST_MODE_DOWN:
2509*53ee8cc1Swenshuai.xi             // Freeze Tx queue, not allow any Cbus command insert Tx queue
2510*53ee8cc1Swenshuai.xi             SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
2511*53ee8cc1Swenshuai.xi 
2512*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_TRIGGER_MODE_DOWN;
2513*53ee8cc1Swenshuai.xi 
2514*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL BIST trigger mode down !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2515*53ee8cc1Swenshuai.xi 
2516*53ee8cc1Swenshuai.xi             break;
2517*53ee8cc1Swenshuai.xi 
2518*53ee8cc1Swenshuai.xi         case MHL_ECBUS_STATE_TRIGGER_MODE_DOWN:
2519*53ee8cc1Swenshuai.xi             // Wait Tx queue empty, then trigger eCbus mode up
2520*53ee8cc1Swenshuai.xi             if(_mdrv_mhl_GetCbusQueueIndex(pMHLResourcePrivate) == MHL_CBUS_TOTAL_QUEUE_NUM)
2521*53ee8cc1Swenshuai.xi             {
2522*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_PROCESS_MODE_DOWN;
2523*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->stSignalStatusInfo.bECbusEnableFlag = FALSE;
2524*53ee8cc1Swenshuai.xi 
2525*53ee8cc1Swenshuai.xi                 ucECbusEvent = MHL_ECBUS_EVENT_MODE_DOWN_PROCESS;
2526*53ee8cc1Swenshuai.xi 
2527*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL Tx queue empty trigger mode down !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2528*53ee8cc1Swenshuai.xi             }
2529*53ee8cc1Swenshuai.xi 
2530*53ee8cc1Swenshuai.xi             break;
2531*53ee8cc1Swenshuai.xi 
2532*53ee8cc1Swenshuai.xi         default:
2533*53ee8cc1Swenshuai.xi 
2534*53ee8cc1Swenshuai.xi             break;
2535*53ee8cc1Swenshuai.xi     };
2536*53ee8cc1Swenshuai.xi 
2537*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->ucECbusTrainState != pMHLResourcePrivate->stSignalStatusInfo.ucECbusTrainState)
2538*53ee8cc1Swenshuai.xi     {
2539*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucECbusTrainState = pMHLResourcePrivate->stSignalStatusInfo.ucECbusTrainState;
2540*53ee8cc1Swenshuai.xi 
2541*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL eCbus state %x\r\n", pMHLResourcePrivate->ucECbusTrainState);
2542*53ee8cc1Swenshuai.xi     }
2543*53ee8cc1Swenshuai.xi 
2544*53ee8cc1Swenshuai.xi     mhal_mhl_ECbusEventProc(pMHLResourcePrivate->ucMHLSupportPath, ucECbusEvent, pMHLResourcePrivate->stSignalStatusInfo.bBISTEnableFlag, &(pMHLResourcePrivate->stBISTParameterInfo));
2545*53ee8cc1Swenshuai.xi }
2546*53ee8cc1Swenshuai.xi 
2547*53ee8cc1Swenshuai.xi //**************************************************************************
2548*53ee8cc1Swenshuai.xi //  [Function Name]:
2549*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_DisplayCommandCheckFlag()
2550*53ee8cc1Swenshuai.xi //  [Description]
2551*53ee8cc1Swenshuai.xi //
2552*53ee8cc1Swenshuai.xi //  [Arguments]:
2553*53ee8cc1Swenshuai.xi //
2554*53ee8cc1Swenshuai.xi //  [Return]:
2555*53ee8cc1Swenshuai.xi //
2556*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_DisplayCommandCheckFlag(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2557*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_DisplayCommandCheckFlag(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2558*53ee8cc1Swenshuai.xi {
2559*53ee8cc1Swenshuai.xi     MS_BOOL bCheckFlag = TRUE;
2560*53ee8cc1Swenshuai.xi     MS_U16 usDisplayCheck = (pMHLResourcePrivate->usDisplayIndex) >> MHL_CBUS_DISPLAY_MASK_SHIFT;
2561*53ee8cc1Swenshuai.xi 
2562*53ee8cc1Swenshuai.xi     if(((usDisplayCheck &MHL_CBUS_DISPLAY_MASK) ^MHL_CBUS_DISPLAY_MASK) > 0)
2563*53ee8cc1Swenshuai.xi     {
2564*53ee8cc1Swenshuai.xi         bCheckFlag = FALSE;
2565*53ee8cc1Swenshuai.xi     }
2566*53ee8cc1Swenshuai.xi 
2567*53ee8cc1Swenshuai.xi     return bCheckFlag;
2568*53ee8cc1Swenshuai.xi }
2569*53ee8cc1Swenshuai.xi 
2570*53ee8cc1Swenshuai.xi //**************************************************************************
2571*53ee8cc1Swenshuai.xi //  [Function Name]:
2572*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_PowerOnPatchProc()
2573*53ee8cc1Swenshuai.xi //  [Description]
2574*53ee8cc1Swenshuai.xi //
2575*53ee8cc1Swenshuai.xi //  [Arguments]:
2576*53ee8cc1Swenshuai.xi //
2577*53ee8cc1Swenshuai.xi //  [Return]:
2578*53ee8cc1Swenshuai.xi //
2579*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_PowerOnPatchProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2580*53ee8cc1Swenshuai.xi void _mdrv_mhl_PowerOnPatchProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2581*53ee8cc1Swenshuai.xi {
2582*53ee8cc1Swenshuai.xi     switch(pMHLResourcePrivate->ucPowerOnPatchState)
2583*53ee8cc1Swenshuai.xi     {
2584*53ee8cc1Swenshuai.xi         case MHL_POWER_ON_PATCH_STATE_START:
2585*53ee8cc1Swenshuai.xi             _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_POWER_ON_PATCH, MHL_WAIT_PATCH_ON_TIME);
2586*53ee8cc1Swenshuai.xi 
2587*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucPowerOnPatchState = MHL_POWER_ON_PATCH_STATE_WAIT_PATCH_ON;
2588*53ee8cc1Swenshuai.xi 
2589*53ee8cc1Swenshuai.xi             break;
2590*53ee8cc1Swenshuai.xi 
2591*53ee8cc1Swenshuai.xi         case MHL_POWER_ON_PATCH_STATE_PATCH_ON:
2592*53ee8cc1Swenshuai.xi             _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_POWER_ON_PATCH, MHL_WAIT_PATCH_OFF_TIME);
2593*53ee8cc1Swenshuai.xi 
2594*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucPowerOnPatchState = MHL_POWER_ON_PATCH_STATE_WAIT_PATCH_OFF;
2595*53ee8cc1Swenshuai.xi 
2596*53ee8cc1Swenshuai.xi             mhal_mhl_ECbusEventProc(pMHLResourcePrivate->ucMHLSupportPath, MHL_ECBUS_EVENT_POWER_ON_PATCH_ON, pMHLResourcePrivate->stSignalStatusInfo.bBISTEnableFlag, &(pMHLResourcePrivate->stBISTParameterInfo));
2597*53ee8cc1Swenshuai.xi 
2598*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL power on patch on !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2599*53ee8cc1Swenshuai.xi 
2600*53ee8cc1Swenshuai.xi             break;
2601*53ee8cc1Swenshuai.xi 
2602*53ee8cc1Swenshuai.xi         case MHL_POWER_ON_PATCH_STATE_PATCH_OFF:
2603*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucPowerOnPatchState = MHL_POWER_ON_PATCH_STATE_DONE;
2604*53ee8cc1Swenshuai.xi 
2605*53ee8cc1Swenshuai.xi             mhal_mhl_ECbusEventProc(pMHLResourcePrivate->ucMHLSupportPath, MHL_ECBUS_EVENT_POWER_ON_PATCH_OFF, pMHLResourcePrivate->stSignalStatusInfo.bBISTEnableFlag, &(pMHLResourcePrivate->stBISTParameterInfo));
2606*53ee8cc1Swenshuai.xi 
2607*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL power on patch off !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2608*53ee8cc1Swenshuai.xi 
2609*53ee8cc1Swenshuai.xi             break;
2610*53ee8cc1Swenshuai.xi 
2611*53ee8cc1Swenshuai.xi         case MHL_POWER_ON_PATCH_STATE_DONE:
2612*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucPowerOnPatchState = MHL_POWER_ON_PATCH_STATE_NONE;
2613*53ee8cc1Swenshuai.xi             break;
2614*53ee8cc1Swenshuai.xi 
2615*53ee8cc1Swenshuai.xi         default:
2616*53ee8cc1Swenshuai.xi 
2617*53ee8cc1Swenshuai.xi             break;
2618*53ee8cc1Swenshuai.xi     };
2619*53ee8cc1Swenshuai.xi }
2620*53ee8cc1Swenshuai.xi 
2621*53ee8cc1Swenshuai.xi //**************************************************************************
2622*53ee8cc1Swenshuai.xi //  [Function Name]:
2623*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CheckStatusPolling()
2624*53ee8cc1Swenshuai.xi //  [Description]
2625*53ee8cc1Swenshuai.xi //
2626*53ee8cc1Swenshuai.xi //  [Arguments]:
2627*53ee8cc1Swenshuai.xi //
2628*53ee8cc1Swenshuai.xi //  [Return]:
2629*53ee8cc1Swenshuai.xi //
2630*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckStatusPolling(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)2631*53ee8cc1Swenshuai.xi void _mdrv_mhl_CheckStatusPolling(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
2632*53ee8cc1Swenshuai.xi {
2633*53ee8cc1Swenshuai.xi     MS_BOOL bSourceChangeFlag = FALSE;
2634*53ee8cc1Swenshuai.xi     MS_U8 ucCurrentHDMIPort = mhal_mhl_GetInputPort();
2635*53ee8cc1Swenshuai.xi 
2636*53ee8cc1Swenshuai.xi     // For cable detect
2637*53ee8cc1Swenshuai.xi     if(mhal_mhl_CableDetect(pMHLResourcePrivate->ucMHLSupportPath)) // Cable plugged
2638*53ee8cc1Swenshuai.xi     {
2639*53ee8cc1Swenshuai.xi         if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG))
2640*53ee8cc1Swenshuai.xi         {
2641*53ee8cc1Swenshuai.xi             mhal_mhl_CablePlugProc(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stSignalStatusInfo));
2642*53ee8cc1Swenshuai.xi 
2643*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL Cable plugged!! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2644*53ee8cc1Swenshuai.xi 
2645*53ee8cc1Swenshuai.xi             SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG);
2646*53ee8cc1Swenshuai.xi         }
2647*53ee8cc1Swenshuai.xi 
2648*53ee8cc1Swenshuai.xi         if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_SOURCE_CHANGE_FLAG))
2649*53ee8cc1Swenshuai.xi         {
2650*53ee8cc1Swenshuai.xi             SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_SOURCE_CHANGE_FLAG);
2651*53ee8cc1Swenshuai.xi         }
2652*53ee8cc1Swenshuai.xi 
2653*53ee8cc1Swenshuai.xi         // For Cbus
2654*53ee8cc1Swenshuai.xi         if(mhal_mhl_CbusStatus() == 0x03) // Cbus connect
2655*53ee8cc1Swenshuai.xi         {
2656*53ee8cc1Swenshuai.xi             if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
2657*53ee8cc1Swenshuai.xi             {
2658*53ee8cc1Swenshuai.xi                 mhal_mhl_CbusConnectProc(pMHLResourcePrivate->ucMHLSupportPath);
2659*53ee8cc1Swenshuai.xi 
2660*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucTMDSClockMode = MHL_PHY_CLOCK_NORMAL_24BIT;
2661*53ee8cc1Swenshuai.xi 
2662*53ee8cc1Swenshuai.xi                 _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_DISPLAY_COMMAND, MHL_CBUS_CONNECT_HOLD_TIME);
2663*53ee8cc1Swenshuai.xi 
2664*53ee8cc1Swenshuai.xi                 CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_DISPLAY_COMMAND_ENABLE_FLAG);
2665*53ee8cc1Swenshuai.xi 
2666*53ee8cc1Swenshuai.xi                 _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_CBUS_SILENCE, MHL_CBUS_CONNECT_SILENCE_TIME);
2667*53ee8cc1Swenshuai.xi 
2668*53ee8cc1Swenshuai.xi                 CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_SEND_FLAG);
2669*53ee8cc1Swenshuai.xi 
2670*53ee8cc1Swenshuai.xi                 if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CHECK_CONTENT_ENABLE_FLAG))
2671*53ee8cc1Swenshuai.xi                 {
2672*53ee8cc1Swenshuai.xi                     _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_CHECK_CONTENT_ON, MHL_CHECK_CONTENT_ON_TIME);
2673*53ee8cc1Swenshuai.xi 
2674*53ee8cc1Swenshuai.xi                     SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CHECK_CONTENT_ON_FLAG);
2675*53ee8cc1Swenshuai.xi                     SET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_PATH_EN_FLAG);
2676*53ee8cc1Swenshuai.xi                 }
2677*53ee8cc1Swenshuai.xi 
2678*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL Cbus connected~~ ^Q^ port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2679*53ee8cc1Swenshuai.xi 
2680*53ee8cc1Swenshuai.xi                 SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG);
2681*53ee8cc1Swenshuai.xi             }
2682*53ee8cc1Swenshuai.xi 
2683*53ee8cc1Swenshuai.xi             if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_ECBUS_FUNCTION_FLAG))
2684*53ee8cc1Swenshuai.xi             {
2685*53ee8cc1Swenshuai.xi                 _mdrv_mhl_ECbusStateHandler(pMHLResourcePrivate);
2686*53ee8cc1Swenshuai.xi 
2687*53ee8cc1Swenshuai.xi #if(MHL3_AUTO_EQ_ENABLE)
2688*53ee8cc1Swenshuai.xi                 if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_EQ_FUNCTION_FLAG))
2689*53ee8cc1Swenshuai.xi                 {
2690*53ee8cc1Swenshuai.xi                     CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_EQ_FUNCTION_FLAG);
2691*53ee8cc1Swenshuai.xi 
2692*53ee8cc1Swenshuai.xi                     mhal_mhl_AutoEQEventProc(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stSignalStatusInfo));
2693*53ee8cc1Swenshuai.xi 
2694*53ee8cc1Swenshuai.xi                     _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_AUTO_EQ_PROCESS, MHL_AUTO_EQ_PROCESS_TIME);
2695*53ee8cc1Swenshuai.xi                 }
2696*53ee8cc1Swenshuai.xi #endif
2697*53ee8cc1Swenshuai.xi             }
2698*53ee8cc1Swenshuai.xi             else if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG))
2699*53ee8cc1Swenshuai.xi             {
2700*53ee8cc1Swenshuai.xi                 CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG);
2701*53ee8cc1Swenshuai.xi             }
2702*53ee8cc1Swenshuai.xi 
2703*53ee8cc1Swenshuai.xi             mhal_mhl_CDRModeMonitor(pMHLResourcePrivate->ucMHLSupportPath, _mdrv_mhl_DisplayCommandCheckFlag(pMHLResourcePrivate), &(pMHLResourcePrivate->stSignalStatusInfo));
2704*53ee8cc1Swenshuai.xi         }
2705*53ee8cc1Swenshuai.xi         else // Cbus disconnection
2706*53ee8cc1Swenshuai.xi         {
2707*53ee8cc1Swenshuai.xi             if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
2708*53ee8cc1Swenshuai.xi             {
2709*53ee8cc1Swenshuai.xi                 mhal_mhl_CbusStucktoLowProc(pMHLResourcePrivate->ucMHLSupportPath);
2710*53ee8cc1Swenshuai.xi 
2711*53ee8cc1Swenshuai.xi                 mhal_mhl_CDRModeMonitor(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
2712*53ee8cc1Swenshuai.xi 
2713*53ee8cc1Swenshuai.xi                 _mdrv_mhl_ClearCbusFlag(pMHLResourcePrivate, MHL_CLEAR_CONNECT_LOSS_FLAG);
2714*53ee8cc1Swenshuai.xi 
2715*53ee8cc1Swenshuai.xi                 if(pMHLResourcePrivate->ucTMDSClockMode == MHL_PHY_CLOCK_PACKET_PIXEL)
2716*53ee8cc1Swenshuai.xi                 {
2717*53ee8cc1Swenshuai.xi                     mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
2718*53ee8cc1Swenshuai.xi 
2719*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucTMDSClockMode = MHL_PHY_CLOCK_NORMAL_24BIT;
2720*53ee8cc1Swenshuai.xi                 }
2721*53ee8cc1Swenshuai.xi 
2722*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL Cbus stuck to low @@ port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2723*53ee8cc1Swenshuai.xi 
2724*53ee8cc1Swenshuai.xi                 CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG);
2725*53ee8cc1Swenshuai.xi             }
2726*53ee8cc1Swenshuai.xi         }
2727*53ee8cc1Swenshuai.xi     }
2728*53ee8cc1Swenshuai.xi     else // Cable unplugged
2729*53ee8cc1Swenshuai.xi     {
2730*53ee8cc1Swenshuai.xi         if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG))
2731*53ee8cc1Swenshuai.xi         {
2732*53ee8cc1Swenshuai.xi             mhal_mhl_CableRemoveProc(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stSignalStatusInfo));
2733*53ee8cc1Swenshuai.xi 
2734*53ee8cc1Swenshuai.xi             mhal_mhl_ECbusEventProc(pMHLResourcePrivate->ucMHLSupportPath, MHL_ECBUS_EVENT_STUCK_TO_LOW, pMHLResourcePrivate->stSignalStatusInfo.bBISTEnableFlag, &(pMHLResourcePrivate->stBISTParameterInfo));
2735*53ee8cc1Swenshuai.xi 
2736*53ee8cc1Swenshuai.xi             _mdrv_mhl_ClearCbusFlag(pMHLResourcePrivate, MHL_CLEAR_CABLE_LOSS_FLAG);
2737*53ee8cc1Swenshuai.xi 
2738*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL Cable remove~~~ port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
2739*53ee8cc1Swenshuai.xi 
2740*53ee8cc1Swenshuai.xi             CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG);
2741*53ee8cc1Swenshuai.xi 
2742*53ee8cc1Swenshuai.xi             if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
2743*53ee8cc1Swenshuai.xi             {
2744*53ee8cc1Swenshuai.xi                 CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG);
2745*53ee8cc1Swenshuai.xi             }
2746*53ee8cc1Swenshuai.xi         }
2747*53ee8cc1Swenshuai.xi 
2748*53ee8cc1Swenshuai.xi         mhal_mhl_Accumulator_Clr(pMHLResourcePrivate->ucMHLSupportPath);
2749*53ee8cc1Swenshuai.xi     }
2750*53ee8cc1Swenshuai.xi 
2751*53ee8cc1Swenshuai.xi     // For source change
2752*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->ucCurrentHDMIPort != ucCurrentHDMIPort)
2753*53ee8cc1Swenshuai.xi     {
2754*53ee8cc1Swenshuai.xi         if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_SOURCE_CHANGE_FLAG))
2755*53ee8cc1Swenshuai.xi         {
2756*53ee8cc1Swenshuai.xi             if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG))
2757*53ee8cc1Swenshuai.xi             {
2758*53ee8cc1Swenshuai.xi                 bSourceChangeFlag = TRUE;
2759*53ee8cc1Swenshuai.xi             }
2760*53ee8cc1Swenshuai.xi             else if(!mhal_mhl_CheckInputPort(pMHLResourcePrivate->ucMHLSupportPath))
2761*53ee8cc1Swenshuai.xi             {
2762*53ee8cc1Swenshuai.xi                 bSourceChangeFlag = TRUE;
2763*53ee8cc1Swenshuai.xi             }
2764*53ee8cc1Swenshuai.xi 
2765*53ee8cc1Swenshuai.xi             if(bSourceChangeFlag)
2766*53ee8cc1Swenshuai.xi             {
2767*53ee8cc1Swenshuai.xi                 mhal_mhl_SourceChangeProc(pMHLResourcePrivate->ucMHLSupportPath, pMHLResourcePrivate->stSignalStatusInfo.ucMainLinkRate);
2768*53ee8cc1Swenshuai.xi 
2769*53ee8cc1Swenshuai.xi                 if(pMHLResourcePrivate->ucTMDSClockMode == MHL_PHY_CLOCK_PACKET_PIXEL)
2770*53ee8cc1Swenshuai.xi                 {
2771*53ee8cc1Swenshuai.xi                     mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, TRUE, &(pMHLResourcePrivate->stSignalStatusInfo));
2772*53ee8cc1Swenshuai.xi                 }
2773*53ee8cc1Swenshuai.xi             }
2774*53ee8cc1Swenshuai.xi 
2775*53ee8cc1Swenshuai.xi             CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_SOURCE_CHANGE_FLAG);
2776*53ee8cc1Swenshuai.xi         }
2777*53ee8cc1Swenshuai.xi 
2778*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucCurrentHDMIPort = ucCurrentHDMIPort;
2779*53ee8cc1Swenshuai.xi     }
2780*53ee8cc1Swenshuai.xi 
2781*53ee8cc1Swenshuai.xi     // Normal Cbus engine
2782*53ee8cc1Swenshuai.xi     if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_NORMAL_FLAG))
2783*53ee8cc1Swenshuai.xi     {
2784*53ee8cc1Swenshuai.xi         mhal_mhl_CbusIsolate(pMHLResourcePrivate->ucMHLSupportPath, FALSE);
2785*53ee8cc1Swenshuai.xi         mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, VBUS_HW_DETECT);
2786*53ee8cc1Swenshuai.xi         mhal_mhl_CbusFloating(FALSE);
2787*53ee8cc1Swenshuai.xi 
2788*53ee8cc1Swenshuai.xi         _mdrv_mhl_ClearCbusFlag(pMHLResourcePrivate, MHL_CLEAR_CABLE_LOSS_FLAG);
2789*53ee8cc1Swenshuai.xi 
2790*53ee8cc1Swenshuai.xi         SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_NORMAL_FLAG);
2791*53ee8cc1Swenshuai.xi 
2792*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucPowerOnPatchState = MHL_POWER_ON_PATCH_STATE_START;
2793*53ee8cc1Swenshuai.xi     }
2794*53ee8cc1Swenshuai.xi 
2795*53ee8cc1Swenshuai.xi     _mdrv_mhl_PowerOnPatchProc(pMHLResourcePrivate);
2796*53ee8cc1Swenshuai.xi }
2797*53ee8cc1Swenshuai.xi 
2798*53ee8cc1Swenshuai.xi //**************************************************************************
2799*53ee8cc1Swenshuai.xi //  [Function Name]:
2800*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_GetCbusReceiveMSC()
2801*53ee8cc1Swenshuai.xi //  [Description]:
2802*53ee8cc1Swenshuai.xi //
2803*53ee8cc1Swenshuai.xi //  [Arguments]:
2804*53ee8cc1Swenshuai.xi //
2805*53ee8cc1Swenshuai.xi //  [Return]:
2806*53ee8cc1Swenshuai.xi //
2807*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetCbusReceiveMSC(MS_U8 * ucReceiveMSC)2808*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetCbusReceiveMSC(MS_U8 *ucReceiveMSC)
2809*53ee8cc1Swenshuai.xi {
2810*53ee8cc1Swenshuai.xi     MS_BOOL bGetMSCFlag = FALSE;
2811*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
2812*53ee8cc1Swenshuai.xi     MS_U16 usLength = 0;
2813*53ee8cc1Swenshuai.xi     MS_U16 usValue = 0;
2814*53ee8cc1Swenshuai.xi 
2815*53ee8cc1Swenshuai.xi     usLength = (mhal_mhl_GetSRAMReceiveData()) &BMASK(6:0); // Get MSC command length
2816*53ee8cc1Swenshuai.xi 
2817*53ee8cc1Swenshuai.xi     if(usLength > 0)
2818*53ee8cc1Swenshuai.xi     {
2819*53ee8cc1Swenshuai.xi         ucReceiveMSC[0] = usLength -1;
2820*53ee8cc1Swenshuai.xi 
2821*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_RECEIVE_MSC)
2822*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_DEBUG(" MHL receive MSG length = %x\r\n", (usLength &BMASK(7:0)));
2823*53ee8cc1Swenshuai.xi #endif
2824*53ee8cc1Swenshuai.xi 
2825*53ee8cc1Swenshuai.xi         usValue = mhal_mhl_GetSRAMReceiveData(); // Get MSC command
2826*53ee8cc1Swenshuai.xi 
2827*53ee8cc1Swenshuai.xi         if(usValue &BIT(8))
2828*53ee8cc1Swenshuai.xi         {
2829*53ee8cc1Swenshuai.xi             ucReceiveMSC[1] = usValue &BMASK(7:0);
2830*53ee8cc1Swenshuai.xi 
2831*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_RECEIVE_MSC)
2832*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_DEBUG(" MHL receive MSG command = %x\r\n", (usValue &BMASK(7:0)));
2833*53ee8cc1Swenshuai.xi #endif
2834*53ee8cc1Swenshuai.xi         }
2835*53ee8cc1Swenshuai.xi         else
2836*53ee8cc1Swenshuai.xi         {
2837*53ee8cc1Swenshuai.xi             ucReceiveMSC[0] = 2;
2838*53ee8cc1Swenshuai.xi             ucReceiveMSC[1] = MSC_ACK;
2839*53ee8cc1Swenshuai.xi             ucReceiveMSC[2] = usValue &BMASK(7:0);
2840*53ee8cc1Swenshuai.xi 
2841*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_RECEIVE_MSC)
2842*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_DEBUG(" MHL receive MSG data = %x\r\n", (usValue &BMASK(7:0)));
2843*53ee8cc1Swenshuai.xi #endif
2844*53ee8cc1Swenshuai.xi         }
2845*53ee8cc1Swenshuai.xi 
2846*53ee8cc1Swenshuai.xi         for(uctemp = 0; uctemp < (usLength -2); uctemp++)
2847*53ee8cc1Swenshuai.xi         {
2848*53ee8cc1Swenshuai.xi             usValue = mhal_mhl_GetSRAMReceiveData(); // Get MSC data
2849*53ee8cc1Swenshuai.xi 
2850*53ee8cc1Swenshuai.xi             if((usValue &BIT(8)) == BIT(8)) // Command in data error happen
2851*53ee8cc1Swenshuai.xi             {
2852*53ee8cc1Swenshuai.xi                 // For CTS 6.3.6.5 entry 4
2853*53ee8cc1Swenshuai.xi                 if((usValue &BMASK(7:0)) == MSC_ABORT)
2854*53ee8cc1Swenshuai.xi                 {
2855*53ee8cc1Swenshuai.xi                     ucReceiveMSC[1] = usValue &BMASK(7:0);
2856*53ee8cc1Swenshuai.xi                 }
2857*53ee8cc1Swenshuai.xi                 else if((usValue &BMASK(7:0)) == MSC_EOF)
2858*53ee8cc1Swenshuai.xi                 {
2859*53ee8cc1Swenshuai.xi                     // EOF is command but it is not error
2860*53ee8cc1Swenshuai.xi                     ucReceiveMSC[uctemp +2] = usValue &BMASK(7:0);
2861*53ee8cc1Swenshuai.xi                 }
2862*53ee8cc1Swenshuai.xi                 else // Ignort command
2863*53ee8cc1Swenshuai.xi                 {
2864*53ee8cc1Swenshuai.xi                     ucReceiveMSC[1] = MSC_NONE;
2865*53ee8cc1Swenshuai.xi                 }
2866*53ee8cc1Swenshuai.xi 
2867*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_RECEIVE_MSC)
2868*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_DEBUG(" MHL receive MSG command = %x\r\n", (usValue &BMASK(7:0)));
2869*53ee8cc1Swenshuai.xi #endif
2870*53ee8cc1Swenshuai.xi             }
2871*53ee8cc1Swenshuai.xi             else
2872*53ee8cc1Swenshuai.xi             {
2873*53ee8cc1Swenshuai.xi                 ucReceiveMSC[uctemp +2] = usValue &BMASK(7:0);
2874*53ee8cc1Swenshuai.xi 
2875*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_RECEIVE_MSC)
2876*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_DEBUG(" MHL receive MSG data = %x\r\n", (usValue &BMASK(7:0)));
2877*53ee8cc1Swenshuai.xi #endif
2878*53ee8cc1Swenshuai.xi             }
2879*53ee8cc1Swenshuai.xi         }
2880*53ee8cc1Swenshuai.xi 
2881*53ee8cc1Swenshuai.xi         bGetMSCFlag = TRUE;
2882*53ee8cc1Swenshuai.xi     }
2883*53ee8cc1Swenshuai.xi 
2884*53ee8cc1Swenshuai.xi     return bGetMSCFlag;
2885*53ee8cc1Swenshuai.xi }
2886*53ee8cc1Swenshuai.xi 
2887*53ee8cc1Swenshuai.xi //**************************************************************************
2888*53ee8cc1Swenshuai.xi //  [Function Name]:
2889*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_SetReceiveCaseFlag()
2890*53ee8cc1Swenshuai.xi //  [Description]:
2891*53ee8cc1Swenshuai.xi //
2892*53ee8cc1Swenshuai.xi //  [Arguments]:
2893*53ee8cc1Swenshuai.xi //
2894*53ee8cc1Swenshuai.xi //  [Return]:
2895*53ee8cc1Swenshuai.xi //
2896*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SetReceiveCaseFlag(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * ucReceiveMSC)2897*53ee8cc1Swenshuai.xi void _mdrv_mhl_SetReceiveCaseFlag(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *ucReceiveMSC)
2898*53ee8cc1Swenshuai.xi {
2899*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
2900*53ee8cc1Swenshuai.xi 
2901*53ee8cc1Swenshuai.xi     switch(ucReceiveMSC[1])
2902*53ee8cc1Swenshuai.xi     {
2903*53ee8cc1Swenshuai.xi         case MSC_ACK:
2904*53ee8cc1Swenshuai.xi             SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ACK_FLAG);
2905*53ee8cc1Swenshuai.xi 
2906*53ee8cc1Swenshuai.xi             if(ucReceiveMSC[0] == 2) // Command length = 2
2907*53ee8cc1Swenshuai.xi             {
2908*53ee8cc1Swenshuai.xi                 if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG))
2909*53ee8cc1Swenshuai.xi                 {
2910*53ee8cc1Swenshuai.xi                     CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG);
2911*53ee8cc1Swenshuai.xi                     SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG);
2912*53ee8cc1Swenshuai.xi 
2913*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucAskData = ucReceiveMSC[2];
2914*53ee8cc1Swenshuai.xi                 }
2915*53ee8cc1Swenshuai.xi             }
2916*53ee8cc1Swenshuai.xi 
2917*53ee8cc1Swenshuai.xi             break;
2918*53ee8cc1Swenshuai.xi 
2919*53ee8cc1Swenshuai.xi         case MSC_ABORT:
2920*53ee8cc1Swenshuai.xi             SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ABORT_FLAG);
2921*53ee8cc1Swenshuai.xi             break;
2922*53ee8cc1Swenshuai.xi 
2923*53ee8cc1Swenshuai.xi         case MSC_MSC_MSG:
2924*53ee8cc1Swenshuai.xi             SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MSG_FLAG);
2925*53ee8cc1Swenshuai.xi 
2926*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucMSGData[0] = ucReceiveMSC[2];
2927*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucMSGData[1] = ucReceiveMSC[3];
2928*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usMSGKeyInfo = (MS_U16)(ucReceiveMSC[2] << 8)| ucReceiveMSC[3];
2929*53ee8cc1Swenshuai.xi 
2930*53ee8cc1Swenshuai.xi             break;
2931*53ee8cc1Swenshuai.xi 
2932*53ee8cc1Swenshuai.xi         case MSC_WRITE_STAT_OR_SET_INT:
2933*53ee8cc1Swenshuai.xi             if(ucReceiveMSC[2] == 0x31) // Switch to PP mode or 24 bit mode
2934*53ee8cc1Swenshuai.xi             {
2935*53ee8cc1Swenshuai.xi                 if((ucReceiveMSC[3] & BIT(3)) == BIT(3))
2936*53ee8cc1Swenshuai.xi                 {
2937*53ee8cc1Swenshuai.xi                     //SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_PATH_EN_FLAG);
2938*53ee8cc1Swenshuai.xi                 }
2939*53ee8cc1Swenshuai.xi 
2940*53ee8cc1Swenshuai.xi                 if((ucReceiveMSC[3] & BIT(4)) == BIT(4))
2941*53ee8cc1Swenshuai.xi                 {
2942*53ee8cc1Swenshuai.xi                     //SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MUTED_FLAG);
2943*53ee8cc1Swenshuai.xi                 }
2944*53ee8cc1Swenshuai.xi 
2945*53ee8cc1Swenshuai.xi                 ucReceiveMSC[3] &= BMASK(2:0);
2946*53ee8cc1Swenshuai.xi 
2947*53ee8cc1Swenshuai.xi                 if(ucReceiveMSC[3] == MHL_PHY_CLOCK_PACKET_PIXEL)
2948*53ee8cc1Swenshuai.xi                 {
2949*53ee8cc1Swenshuai.xi                     SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_PP_MODE_FLAG);
2950*53ee8cc1Swenshuai.xi                     CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_24BIT_MODE_FLAG);
2951*53ee8cc1Swenshuai.xi                 }
2952*53ee8cc1Swenshuai.xi                 else if(ucReceiveMSC[3] == MHL_PHY_CLOCK_NORMAL_24BIT)
2953*53ee8cc1Swenshuai.xi                 {
2954*53ee8cc1Swenshuai.xi                     SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_24BIT_MODE_FLAG);
2955*53ee8cc1Swenshuai.xi                     CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_PP_MODE_FLAG);
2956*53ee8cc1Swenshuai.xi                 }
2957*53ee8cc1Swenshuai.xi             }
2958*53ee8cc1Swenshuai.xi 
2959*53ee8cc1Swenshuai.xi             if(ucReceiveMSC[2] == 0x30)
2960*53ee8cc1Swenshuai.xi             {
2961*53ee8cc1Swenshuai.xi                 if((ucReceiveMSC[3] & BIT(0)) == BIT(0)) // Devcap ready
2962*53ee8cc1Swenshuai.xi                 {
2963*53ee8cc1Swenshuai.xi                     SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG);
2964*53ee8cc1Swenshuai.xi                 }
2965*53ee8cc1Swenshuai.xi 
2966*53ee8cc1Swenshuai.xi                 if((ucReceiveMSC[3] & BIT(1)) == BIT(1)) // Extended device capability support
2967*53ee8cc1Swenshuai.xi                 {
2968*53ee8cc1Swenshuai.xi                     if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
2969*53ee8cc1Swenshuai.xi                     {
2970*53ee8cc1Swenshuai.xi                         SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_XDEVCAP_SUPPORT_FLAG);
2971*53ee8cc1Swenshuai.xi                     }
2972*53ee8cc1Swenshuai.xi                 }
2973*53ee8cc1Swenshuai.xi             }
2974*53ee8cc1Swenshuai.xi 
2975*53ee8cc1Swenshuai.xi             if((ucReceiveMSC[2] == 0x32) && (ucReceiveMSC[3] >= 0x30)) // Source support MHL3
2976*53ee8cc1Swenshuai.xi             {
2977*53ee8cc1Swenshuai.xi                 SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MHL3_VERSION_FLAG);
2978*53ee8cc1Swenshuai.xi             }
2979*53ee8cc1Swenshuai.xi 
2980*53ee8cc1Swenshuai.xi             if(ucReceiveMSC[2] == 0x20)
2981*53ee8cc1Swenshuai.xi             {
2982*53ee8cc1Swenshuai.xi                 if((ucReceiveMSC[3] & BIT(0)) == BIT(0)) // Devcap change
2983*53ee8cc1Swenshuai.xi                 {
2984*53ee8cc1Swenshuai.xi                     SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG);
2985*53ee8cc1Swenshuai.xi 
2986*53ee8cc1Swenshuai.xi                     if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
2987*53ee8cc1Swenshuai.xi                     {
2988*53ee8cc1Swenshuai.xi                         SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_XDEVCAP_SUPPORT_FLAG);
2989*53ee8cc1Swenshuai.xi                     }
2990*53ee8cc1Swenshuai.xi                 }
2991*53ee8cc1Swenshuai.xi 
2992*53ee8cc1Swenshuai.xi                 if((ucReceiveMSC[3] & BIT(1)) == BIT(1)) // Scratchpad register change
2993*53ee8cc1Swenshuai.xi                 {
2994*53ee8cc1Swenshuai.xi                     SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DSCR_CHANGE_FLAG);
2995*53ee8cc1Swenshuai.xi                 }
2996*53ee8cc1Swenshuai.xi 
2997*53ee8cc1Swenshuai.xi                 if((ucReceiveMSC[3] & BIT(2)) == BIT(2)) // Burst write request
2998*53ee8cc1Swenshuai.xi                 {
2999*53ee8cc1Swenshuai.xi                     //SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WRITE_REQUEST_FLAG);
3000*53ee8cc1Swenshuai.xi                 }
3001*53ee8cc1Swenshuai.xi 
3002*53ee8cc1Swenshuai.xi                 if((ucReceiveMSC[3] & BIT(3)) == BIT(3)) // Burst write grant
3003*53ee8cc1Swenshuai.xi                 {
3004*53ee8cc1Swenshuai.xi                     SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WRITE_GRANT_FLAG);
3005*53ee8cc1Swenshuai.xi                 }
3006*53ee8cc1Swenshuai.xi 
3007*53ee8cc1Swenshuai.xi                 if((ucReceiveMSC[3] & BIT(4)) == BIT(4)) // 3D request
3008*53ee8cc1Swenshuai.xi                 {
3009*53ee8cc1Swenshuai.xi                     SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_3D_REQ_FLAG);
3010*53ee8cc1Swenshuai.xi                 }
3011*53ee8cc1Swenshuai.xi 
3012*53ee8cc1Swenshuai.xi                 if((ucReceiveMSC[3] & BIT(5)) == BIT(5)) // Feature request
3013*53ee8cc1Swenshuai.xi                 {
3014*53ee8cc1Swenshuai.xi                     SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_FEATURE_REQUEST_FLAG);
3015*53ee8cc1Swenshuai.xi                 }
3016*53ee8cc1Swenshuai.xi 
3017*53ee8cc1Swenshuai.xi                 if((ucReceiveMSC[3] & BIT(6)) == BIT(6)) // Feature complete
3018*53ee8cc1Swenshuai.xi                 {
3019*53ee8cc1Swenshuai.xi                     SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_FEATURE_COMPLETE_FLAG);
3020*53ee8cc1Swenshuai.xi                 }
3021*53ee8cc1Swenshuai.xi             }
3022*53ee8cc1Swenshuai.xi 
3023*53ee8cc1Swenshuai.xi             break;
3024*53ee8cc1Swenshuai.xi 
3025*53ee8cc1Swenshuai.xi         case MSC_WRITE_XSTAT:
3026*53ee8cc1Swenshuai.xi             if(ucReceiveMSC[2] == 0x90) // eCbus mode
3027*53ee8cc1Swenshuai.xi             {
3028*53ee8cc1Swenshuai.xi                 SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ECBUS_MODE_FLAG);
3029*53ee8cc1Swenshuai.xi             }
3030*53ee8cc1Swenshuai.xi 
3031*53ee8cc1Swenshuai.xi             if(ucReceiveMSC[2] == 0x92) // Link rate
3032*53ee8cc1Swenshuai.xi             {
3033*53ee8cc1Swenshuai.xi                 SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_LINK_RATE_FLAG);
3034*53ee8cc1Swenshuai.xi 
3035*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->stSignalStatusInfo.ucMainLinkRate = ucReceiveMSC[3];
3036*53ee8cc1Swenshuai.xi             }
3037*53ee8cc1Swenshuai.xi 
3038*53ee8cc1Swenshuai.xi             break;
3039*53ee8cc1Swenshuai.xi 
3040*53ee8cc1Swenshuai.xi         case MSC_WRITE_BURST:
3041*53ee8cc1Swenshuai.xi             SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WRITE_BURST_FLAG);
3042*53ee8cc1Swenshuai.xi 
3043*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucWriteBurstAddress = ucReceiveMSC[2];
3044*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucWriteBurstLength = MHL_MSC_SCRATCHPAD_SIZE +1;
3045*53ee8cc1Swenshuai.xi 
3046*53ee8cc1Swenshuai.xi             for(uctemp = 0; uctemp < (MHL_MSC_SCRATCHPAD_SIZE +1); uctemp++)
3047*53ee8cc1Swenshuai.xi             {
3048*53ee8cc1Swenshuai.xi                 if(uctemp < pMHLResourcePrivate->ucWriteBurstLength)
3049*53ee8cc1Swenshuai.xi                 {
3050*53ee8cc1Swenshuai.xi                     if((ucReceiveMSC[uctemp +3] == MSC_EOF) && (uctemp >= (ucReceiveMSC[0] -3)))
3051*53ee8cc1Swenshuai.xi                     {
3052*53ee8cc1Swenshuai.xi                         pMHLResourcePrivate->ucWriteBurstInformation[uctemp] = 0;
3053*53ee8cc1Swenshuai.xi                         pMHLResourcePrivate->ucWriteBurstLength = uctemp;
3054*53ee8cc1Swenshuai.xi                     }
3055*53ee8cc1Swenshuai.xi                     else
3056*53ee8cc1Swenshuai.xi                     {
3057*53ee8cc1Swenshuai.xi                         pMHLResourcePrivate->ucWriteBurstInformation[uctemp] = ucReceiveMSC[uctemp +3];
3058*53ee8cc1Swenshuai.xi                     }
3059*53ee8cc1Swenshuai.xi                 }
3060*53ee8cc1Swenshuai.xi                 else if(uctemp < MHL_MSC_SCRATCHPAD_SIZE)
3061*53ee8cc1Swenshuai.xi                 {
3062*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucWriteBurstInformation[uctemp] = 0;
3063*53ee8cc1Swenshuai.xi                 }
3064*53ee8cc1Swenshuai.xi             }
3065*53ee8cc1Swenshuai.xi 
3066*53ee8cc1Swenshuai.xi             break;
3067*53ee8cc1Swenshuai.xi 
3068*53ee8cc1Swenshuai.xi         default:
3069*53ee8cc1Swenshuai.xi 
3070*53ee8cc1Swenshuai.xi             break;
3071*53ee8cc1Swenshuai.xi     };
3072*53ee8cc1Swenshuai.xi }
3073*53ee8cc1Swenshuai.xi 
3074*53ee8cc1Swenshuai.xi //**************************************************************************
3075*53ee8cc1Swenshuai.xi //  [Function Name]:
3076*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusDisplayLinkCheck()
3077*53ee8cc1Swenshuai.xi //  [Description]
3078*53ee8cc1Swenshuai.xi //
3079*53ee8cc1Swenshuai.xi //  [Arguments]:
3080*53ee8cc1Swenshuai.xi //
3081*53ee8cc1Swenshuai.xi //  [Return]:
3082*53ee8cc1Swenshuai.xi //
3083*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusDisplayLinkCheck(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)3084*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusDisplayLinkCheck(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
3085*53ee8cc1Swenshuai.xi {
3086*53ee8cc1Swenshuai.xi     MS_U8 ucDisplayIndex = (pMHLResourcePrivate->usDisplayIndex) &BMASK(7:0);
3087*53ee8cc1Swenshuai.xi     MS_U8 ucDisplayMask = MHL_CBUS_DISPLAY_MASK;
3088*53ee8cc1Swenshuai.xi     MS_U16 usDisplayCheck = (pMHLResourcePrivate->usDisplayIndex) >> MHL_CBUS_DISPLAY_MASK_SHIFT;
3089*53ee8cc1Swenshuai.xi 
3090*53ee8cc1Swenshuai.xi     if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_ECBUS_FUNCTION_FLAG))
3091*53ee8cc1Swenshuai.xi     {
3092*53ee8cc1Swenshuai.xi         ucDisplayMask = ucDisplayMask |MHL_ECBUS_DISPLAY_MASK;
3093*53ee8cc1Swenshuai.xi     }
3094*53ee8cc1Swenshuai.xi 
3095*53ee8cc1Swenshuai.xi     if((ucDisplayIndex ^ usDisplayCheck) > 0)
3096*53ee8cc1Swenshuai.xi     {
3097*53ee8cc1Swenshuai.xi         usDisplayCheck = usDisplayCheck ^ ucDisplayMask;
3098*53ee8cc1Swenshuai.xi 
3099*53ee8cc1Swenshuai.xi         if(usDisplayCheck > 0)
3100*53ee8cc1Swenshuai.xi         {
3101*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usDisplayIndex |= (_mdrv_mhl_CbusGetLeastFlag(usDisplayCheck) << MHL_CBUS_DISPLAY_MASK_SHIFT);
3102*53ee8cc1Swenshuai.xi 
3103*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL Cbus Receive ACK for Link\r\n");
3104*53ee8cc1Swenshuai.xi         }
3105*53ee8cc1Swenshuai.xi     }
3106*53ee8cc1Swenshuai.xi }
3107*53ee8cc1Swenshuai.xi 
3108*53ee8cc1Swenshuai.xi //**************************************************************************
3109*53ee8cc1Swenshuai.xi //  [Function Name]:
3110*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_ParsingWriteBurstVCAssign()
3111*53ee8cc1Swenshuai.xi //  [Description]:
3112*53ee8cc1Swenshuai.xi //
3113*53ee8cc1Swenshuai.xi //  [Arguments]:
3114*53ee8cc1Swenshuai.xi //
3115*53ee8cc1Swenshuai.xi //  [Return]:
3116*53ee8cc1Swenshuai.xi //
3117*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ParsingWriteBurstVCAssign(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)3118*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_ParsingWriteBurstVCAssign(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
3119*53ee8cc1Swenshuai.xi {
3120*53ee8cc1Swenshuai.xi     MS_BOOL bParsingFinish = FALSE;
3121*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
3122*53ee8cc1Swenshuai.xi     MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstInformation[4];
3123*53ee8cc1Swenshuai.xi     MS_U8 ucNumberEntry = pMHLResourcePrivate->ucWriteBurstInformation[5];
3124*53ee8cc1Swenshuai.xi 
3125*53ee8cc1Swenshuai.xi     if(ucNumberEntry +(ucSequence -1) *MHL_VC_SEQUENCE_LENGTH == pMHLResourcePrivate->ucWriteBurstInformation[3]) // Number entry + (sequece -1) x length = total entry
3126*53ee8cc1Swenshuai.xi     {
3127*53ee8cc1Swenshuai.xi         bParsingFinish = TRUE;
3128*53ee8cc1Swenshuai.xi     }
3129*53ee8cc1Swenshuai.xi 
3130*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <ucNumberEntry; uctemp++)
3131*53ee8cc1Swenshuai.xi     {
3132*53ee8cc1Swenshuai.xi         _mdrv_mhl_InsertVCInformation(pMHLResourcePrivate, TRUE, pMHLResourcePrivate->ucWriteBurstInformation[uctemp *MHL_VC_SEQUENCE_LENGTH +3], pMHLResourcePrivate->ucWriteBurstInformation[uctemp *MHL_VC_SEQUENCE_LENGTH +4], pMHLResourcePrivate->ucWriteBurstInformation[uctemp *MHL_VC_SEQUENCE_LENGTH +5]);
3133*53ee8cc1Swenshuai.xi     }
3134*53ee8cc1Swenshuai.xi 
3135*53ee8cc1Swenshuai.xi     return bParsingFinish;
3136*53ee8cc1Swenshuai.xi }
3137*53ee8cc1Swenshuai.xi 
3138*53ee8cc1Swenshuai.xi //**************************************************************************
3139*53ee8cc1Swenshuai.xi //  [Function Name]:
3140*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_ParsingWriteBurstVCConfirm()
3141*53ee8cc1Swenshuai.xi //  [Description]:
3142*53ee8cc1Swenshuai.xi //
3143*53ee8cc1Swenshuai.xi //  [Arguments]:
3144*53ee8cc1Swenshuai.xi //
3145*53ee8cc1Swenshuai.xi //  [Return]:
3146*53ee8cc1Swenshuai.xi //
3147*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ParsingWriteBurstVCConfirm(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)3148*53ee8cc1Swenshuai.xi void _mdrv_mhl_ParsingWriteBurstVCConfirm(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
3149*53ee8cc1Swenshuai.xi {
3150*53ee8cc1Swenshuai.xi     MS_BOOL bParsingFinish = FALSE;
3151*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
3152*53ee8cc1Swenshuai.xi     MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstInformation[4];
3153*53ee8cc1Swenshuai.xi     MS_U8 ucNumberEntry = pMHLResourcePrivate->ucWriteBurstInformation[5];
3154*53ee8cc1Swenshuai.xi 
3155*53ee8cc1Swenshuai.xi     if(ucNumberEntry +(ucSequence -1) *MHL_VC_SEQUENCE_LENGTH == pMHLResourcePrivate->ucWriteBurstInformation[3]) // Number entry + (sequece -1) x length = total entry
3156*53ee8cc1Swenshuai.xi     {
3157*53ee8cc1Swenshuai.xi         bParsingFinish = TRUE;
3158*53ee8cc1Swenshuai.xi     }
3159*53ee8cc1Swenshuai.xi 
3160*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <ucNumberEntry; uctemp++)
3161*53ee8cc1Swenshuai.xi     {
3162*53ee8cc1Swenshuai.xi         _mdrv_mhl_CheckVCInformation(pMHLResourcePrivate, pMHLResourcePrivate->ucWriteBurstInformation[uctemp *MHL_VC_SEQUENCE_LENGTH +3], pMHLResourcePrivate->ucWriteBurstInformation[uctemp *MHL_VC_SEQUENCE_LENGTH +4], pMHLResourcePrivate->ucWriteBurstInformation[uctemp *MHL_VC_SEQUENCE_LENGTH +5]);
3163*53ee8cc1Swenshuai.xi     }
3164*53ee8cc1Swenshuai.xi 
3165*53ee8cc1Swenshuai.xi     if(bParsingFinish)
3166*53ee8cc1Swenshuai.xi     {
3167*53ee8cc1Swenshuai.xi         _mdrv_mhl_SortingVCInformation(pMHLResourcePrivate, TRUE);
3168*53ee8cc1Swenshuai.xi 
3169*53ee8cc1Swenshuai.xi         _mdrv_mhl_eCbusTimeSlotAllocation(pMHLResourcePrivate);
3170*53ee8cc1Swenshuai.xi     }
3171*53ee8cc1Swenshuai.xi }
3172*53ee8cc1Swenshuai.xi 
3173*53ee8cc1Swenshuai.xi //**************************************************************************
3174*53ee8cc1Swenshuai.xi //  [Function Name]:
3175*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CheckAVLineVideoMode()
3176*53ee8cc1Swenshuai.xi //  [Description]:
3177*53ee8cc1Swenshuai.xi //
3178*53ee8cc1Swenshuai.xi //  [Arguments]:
3179*53ee8cc1Swenshuai.xi //
3180*53ee8cc1Swenshuai.xi //  [Return]:
3181*53ee8cc1Swenshuai.xi //
3182*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckAVLineVideoMode(MS_U8 ucAVLinkVideoMode)3183*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_CheckAVLineVideoMode(MS_U8 ucAVLinkVideoMode)
3184*53ee8cc1Swenshuai.xi {
3185*53ee8cc1Swenshuai.xi     MS_U8 ucFrameRate = 1;
3186*53ee8cc1Swenshuai.xi 
3187*53ee8cc1Swenshuai.xi     switch(ucAVLinkVideoMode)
3188*53ee8cc1Swenshuai.xi     {
3189*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX1:
3190*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX2:
3191*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX3:
3192*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX4:
3193*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX5:
3194*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX6:
3195*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX7:
3196*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX16:
3197*53ee8cc1Swenshuai.xi             ucFrameRate = 60;
3198*53ee8cc1Swenshuai.xi             break;
3199*53ee8cc1Swenshuai.xi 
3200*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX17:
3201*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX18:
3202*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX19:
3203*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX20:
3204*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX21:
3205*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX22:
3206*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX31:
3207*53ee8cc1Swenshuai.xi             ucFrameRate = 50;
3208*53ee8cc1Swenshuai.xi             break;
3209*53ee8cc1Swenshuai.xi 
3210*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX34:
3211*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX95:
3212*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX100:
3213*53ee8cc1Swenshuai.xi             ucFrameRate = 30;
3214*53ee8cc1Swenshuai.xi             break;
3215*53ee8cc1Swenshuai.xi 
3216*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX63:
3217*53ee8cc1Swenshuai.xi             ucFrameRate = 120;
3218*53ee8cc1Swenshuai.xi             break;
3219*53ee8cc1Swenshuai.xi 
3220*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX64:
3221*53ee8cc1Swenshuai.xi             ucFrameRate = 100;
3222*53ee8cc1Swenshuai.xi             break;
3223*53ee8cc1Swenshuai.xi 
3224*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX93:
3225*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX98:
3226*53ee8cc1Swenshuai.xi             ucFrameRate = 24;
3227*53ee8cc1Swenshuai.xi             break;
3228*53ee8cc1Swenshuai.xi 
3229*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX94:
3230*53ee8cc1Swenshuai.xi         case MHL_VIC_INDEX99:
3231*53ee8cc1Swenshuai.xi             ucFrameRate = 25;
3232*53ee8cc1Swenshuai.xi             break;
3233*53ee8cc1Swenshuai.xi 
3234*53ee8cc1Swenshuai.xi         default:
3235*53ee8cc1Swenshuai.xi 
3236*53ee8cc1Swenshuai.xi             break;
3237*53ee8cc1Swenshuai.xi     };
3238*53ee8cc1Swenshuai.xi 
3239*53ee8cc1Swenshuai.xi     return ucFrameRate;
3240*53ee8cc1Swenshuai.xi }
3241*53ee8cc1Swenshuai.xi 
3242*53ee8cc1Swenshuai.xi //**************************************************************************
3243*53ee8cc1Swenshuai.xi //  [Function Name]:
3244*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_ParsingWriteBurstBISTSetup()
3245*53ee8cc1Swenshuai.xi //  [Description]:
3246*53ee8cc1Swenshuai.xi //
3247*53ee8cc1Swenshuai.xi //  [Arguments]:
3248*53ee8cc1Swenshuai.xi //
3249*53ee8cc1Swenshuai.xi //  [Return]:
3250*53ee8cc1Swenshuai.xi //
3251*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ParsingWriteBurstBISTSetup(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)3252*53ee8cc1Swenshuai.xi void _mdrv_mhl_ParsingWriteBurstBISTSetup(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
3253*53ee8cc1Swenshuai.xi {
3254*53ee8cc1Swenshuai.xi     MS_U8 ucReadyIndex = 0x70;
3255*53ee8cc1Swenshuai.xi     MS_U8 ucBISTeCbusPattern = pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_ECBUS_SPEEDS];
3256*53ee8cc1Swenshuai.xi     MS_U8 ucBISTAVLinkRate = pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_TMDS_SPEEDS];
3257*53ee8cc1Swenshuai.xi     MS_U16 usBISTeCbusPatternFixed = 0;
3258*53ee8cc1Swenshuai.xi     MS_U16 usBISTAVLinkFixed = 0;
3259*53ee8cc1Swenshuai.xi     MS_U16 usBISTeCbusDuration = 0;
3260*53ee8cc1Swenshuai.xi     MS_U16 usBISTAVLinkDuration = 0;
3261*53ee8cc1Swenshuai.xi 
3262*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[0]: BIST_SETUP_H
3263*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[1]: BIST_SETUP_L
3264*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[2]: CHECK_SUM
3265*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[3]: eCBUS_DURATION
3266*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[4]: eCBUS_PATTERN
3267*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[5]: eCBUS_FIXED_H
3268*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[6]: eCBUS_FIXED_L
3269*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[7]: Reserved
3270*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[8]: AV LINK_DATA_RATE
3271*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[9]: AV LINK_PATTERN
3272*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[10]: AV LINK_VIDEO_MODE
3273*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[11]: AV LINK_DURATION
3274*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[12]: AV LINK_FIXED_H
3275*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[13]: AV LINK_FIXED_L
3276*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[14]: AV LINK_RANDOMIZER
3277*53ee8cc1Swenshuai.xi     // ucWriteBurstInformation[15]: IMPEDANCE_MODE
3278*53ee8cc1Swenshuai.xi 
3279*53ee8cc1Swenshuai.xi     if((ucBISTeCbusPattern &BIT(4)) == BIT(4)) // MHL_ECBUS_D_150
3280*53ee8cc1Swenshuai.xi     {
3281*53ee8cc1Swenshuai.xi         ucBISTeCbusPattern = MHL_BIST_ECBUS_PATTERN_FIXED10;
3282*53ee8cc1Swenshuai.xi     }
3283*53ee8cc1Swenshuai.xi     else if((ucBISTeCbusPattern &BIT(0)) == BIT(0)) // MHL_ECBUS_S_075
3284*53ee8cc1Swenshuai.xi     {
3285*53ee8cc1Swenshuai.xi         ucBISTeCbusPattern = MHL_BIST_ECBUS_PATTERN_FIXED8;
3286*53ee8cc1Swenshuai.xi     }
3287*53ee8cc1Swenshuai.xi     else
3288*53ee8cc1Swenshuai.xi     {
3289*53ee8cc1Swenshuai.xi         ucBISTeCbusPattern = MHL_BIST_ECBUS_PATTERN_PRBS;
3290*53ee8cc1Swenshuai.xi     }
3291*53ee8cc1Swenshuai.xi 
3292*53ee8cc1Swenshuai.xi     if((ucBISTAVLinkRate & BIT(2)) == BIT(2)) // MHL_TMDS_600
3293*53ee8cc1Swenshuai.xi     {
3294*53ee8cc1Swenshuai.xi         ucBISTAVLinkRate = MHL_BIST_AV_LINK_600;
3295*53ee8cc1Swenshuai.xi     }
3296*53ee8cc1Swenshuai.xi     else if((ucBISTAVLinkRate & BIT(1)) == BIT(1)) // MHL_TMDS_300
3297*53ee8cc1Swenshuai.xi     {
3298*53ee8cc1Swenshuai.xi         ucBISTAVLinkRate = MHL_BIST_AV_LINK_300;
3299*53ee8cc1Swenshuai.xi     }
3300*53ee8cc1Swenshuai.xi     else if((ucBISTAVLinkRate & BIT(0)) == BIT(0)) // MHL_TMDS_150
3301*53ee8cc1Swenshuai.xi     {
3302*53ee8cc1Swenshuai.xi         ucBISTAVLinkRate = MHL_BIST_AV_LINK_150;
3303*53ee8cc1Swenshuai.xi     }
3304*53ee8cc1Swenshuai.xi     else
3305*53ee8cc1Swenshuai.xi     {
3306*53ee8cc1Swenshuai.xi         ucBISTAVLinkRate = MHL_BIST_AV_LINK_RESERVED;
3307*53ee8cc1Swenshuai.xi     }
3308*53ee8cc1Swenshuai.xi 
3309*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->ucWriteBurstInformation[4] <= ucBISTeCbusPattern) // Check eCbus pattern
3310*53ee8cc1Swenshuai.xi     {
3311*53ee8cc1Swenshuai.xi        ucReadyIndex = MASKSET(ucReadyIndex, BIT(0), (BIT(0) |BIT(4)));
3312*53ee8cc1Swenshuai.xi 
3313*53ee8cc1Swenshuai.xi        ucBISTeCbusPattern = pMHLResourcePrivate->ucWriteBurstInformation[4];
3314*53ee8cc1Swenshuai.xi        usBISTeCbusPatternFixed = ((MS_U16)pMHLResourcePrivate->ucWriteBurstInformation[5] <<8) |pMHLResourcePrivate->ucWriteBurstInformation[6];
3315*53ee8cc1Swenshuai.xi     }
3316*53ee8cc1Swenshuai.xi 
3317*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->ucWriteBurstInformation[8] <= ucBISTAVLinkRate) // Check AV link rate
3318*53ee8cc1Swenshuai.xi     {
3319*53ee8cc1Swenshuai.xi         ucReadyIndex = MASKSET(ucReadyIndex, BIT(1), (BIT(1) |BIT(5)));
3320*53ee8cc1Swenshuai.xi 
3321*53ee8cc1Swenshuai.xi         ucBISTAVLinkRate = pMHLResourcePrivate->ucWriteBurstInformation[8];
3322*53ee8cc1Swenshuai.xi         usBISTAVLinkFixed = ((MS_U16)pMHLResourcePrivate->ucWriteBurstInformation[12] <<8) |pMHLResourcePrivate->ucWriteBurstInformation[13];
3323*53ee8cc1Swenshuai.xi     }
3324*53ee8cc1Swenshuai.xi 
3325*53ee8cc1Swenshuai.xi     //if() // Unknow condition
3326*53ee8cc1Swenshuai.xi     {
3327*53ee8cc1Swenshuai.xi         ucReadyIndex = MASKSET(ucReadyIndex, BIT(2), (BIT(2) |BIT(6)));
3328*53ee8cc1Swenshuai.xi     }
3329*53ee8cc1Swenshuai.xi 
3330*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->ucWriteBurstInformation[3] == 0) // Check eCbus duration
3331*53ee8cc1Swenshuai.xi     {
3332*53ee8cc1Swenshuai.xi         // Can't allow
3333*53ee8cc1Swenshuai.xi     }
3334*53ee8cc1Swenshuai.xi     else
3335*53ee8cc1Swenshuai.xi     {
3336*53ee8cc1Swenshuai.xi         usBISTeCbusDuration = (MS_U16)pMHLResourcePrivate->ucWriteBurstInformation[3] *1010ul;
3337*53ee8cc1Swenshuai.xi     }
3338*53ee8cc1Swenshuai.xi 
3339*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->ucWriteBurstInformation[9] <= MHL_BIST_LINK_PATTERN_FIXED8)
3340*53ee8cc1Swenshuai.xi     {
3341*53ee8cc1Swenshuai.xi         usBISTAVLinkDuration = ((MS_U16)pMHLResourcePrivate->ucWriteBurstInformation[11] *32 /_mdrv_mhl_CheckAVLineVideoMode(pMHLResourcePrivate->ucWriteBurstInformation[10]) +1) *1000;
3342*53ee8cc1Swenshuai.xi     }
3343*53ee8cc1Swenshuai.xi     else if(pMHLResourcePrivate->ucWriteBurstInformation[9] == MHL_BIST_LINK_PATTERN_FIXED10)
3344*53ee8cc1Swenshuai.xi     {
3345*53ee8cc1Swenshuai.xi         usBISTAVLinkDuration = (MS_U16)pMHLResourcePrivate->ucWriteBurstInformation[11] *1010ul;
3346*53ee8cc1Swenshuai.xi     }
3347*53ee8cc1Swenshuai.xi 
3348*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stBISTParameterInfo.ucBISTReadyIndex = ucReadyIndex;
3349*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stBISTParameterInfo.ucBISTeCbusPattern = ucBISTeCbusPattern;
3350*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusPatternFixed = usBISTeCbusPatternFixed;
3351*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusDuration = usBISTeCbusDuration;
3352*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stBISTParameterInfo.ucBISTAVLinkRate = ucBISTAVLinkRate;
3353*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stBISTParameterInfo.ucBISTAVLinkPattern = pMHLResourcePrivate->ucWriteBurstInformation[9];
3354*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkFixed = usBISTAVLinkFixed;
3355*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkDuration = usBISTAVLinkDuration;
3356*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stBISTParameterInfo.ucBISTAVLinkRateRandomizer = pMHLResourcePrivate->ucWriteBurstInformation[14];
3357*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->stBISTParameterInfo.ucBISTImpedanceMode = pMHLResourcePrivate->ucWriteBurstInformation[15];
3358*53ee8cc1Swenshuai.xi 
3359*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_BIST_MODE)
3360*53ee8cc1Swenshuai.xi     MDRV_MHL_MSG_INFO("** MHL BIST eCbus pattern = %d\r\n", pMHLResourcePrivate->stBISTParameterInfo.ucBISTeCbusPattern);
3361*53ee8cc1Swenshuai.xi     MDRV_MHL_MSG_INFO("** MHL BIST eCbus fixed = %x\r\n", pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusPatternFixed);
3362*53ee8cc1Swenshuai.xi     MDRV_MHL_MSG_INFO("** MHL BIST eCbus duration = %d\r\n", pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusDuration);
3363*53ee8cc1Swenshuai.xi     MDRV_MHL_MSG_INFO("** MHL BIST AV link rate = %d\r\n", pMHLResourcePrivate->stBISTParameterInfo.ucBISTAVLinkRate);
3364*53ee8cc1Swenshuai.xi     MDRV_MHL_MSG_INFO("** MHL BIST AV link pattern = %d\r\n", pMHLResourcePrivate->stBISTParameterInfo.ucBISTAVLinkPattern);
3365*53ee8cc1Swenshuai.xi     MDRV_MHL_MSG_INFO("** MHL BIST AV link fixed = %x\r\n", pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkFixed);
3366*53ee8cc1Swenshuai.xi     MDRV_MHL_MSG_INFO("** MHL BIST AV link duration = %d\r\n", pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkDuration);
3367*53ee8cc1Swenshuai.xi     MDRV_MHL_MSG_INFO("** MHL BIST AV link random = %d\r\n", pMHLResourcePrivate->stBISTParameterInfo.ucBISTAVLinkRateRandomizer);
3368*53ee8cc1Swenshuai.xi     MDRV_MHL_MSG_INFO("** MHL BIST Impedance mode = %d\r\n", pMHLResourcePrivate->stBISTParameterInfo.ucBISTImpedanceMode);
3369*53ee8cc1Swenshuai.xi #endif
3370*53ee8cc1Swenshuai.xi }
3371*53ee8cc1Swenshuai.xi 
3372*53ee8cc1Swenshuai.xi //**************************************************************************
3373*53ee8cc1Swenshuai.xi //  [Function Name]:
3374*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_ParsingWriteBurstInformation()
3375*53ee8cc1Swenshuai.xi //  [Description]:
3376*53ee8cc1Swenshuai.xi //
3377*53ee8cc1Swenshuai.xi //  [Arguments]:
3378*53ee8cc1Swenshuai.xi //
3379*53ee8cc1Swenshuai.xi //  [Return]:
3380*53ee8cc1Swenshuai.xi //
3381*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ParsingWriteBurstInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)3382*53ee8cc1Swenshuai.xi void _mdrv_mhl_ParsingWriteBurstInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
3383*53ee8cc1Swenshuai.xi {
3384*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
3385*53ee8cc1Swenshuai.xi     MS_U8 ucCheckSum = 0;
3386*53ee8cc1Swenshuai.xi     MS_U16 usWriteBurstID = ((MS_U16)pMHLResourcePrivate->ucWriteBurstInformation[0] <<8) |pMHLResourcePrivate->ucWriteBurstInformation[1];
3387*53ee8cc1Swenshuai.xi 
3388*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp <MHL_MSC_SCRATCHPAD_SIZE; uctemp++)
3389*53ee8cc1Swenshuai.xi     {
3390*53ee8cc1Swenshuai.xi         ucCheckSum = ucCheckSum +pMHLResourcePrivate->ucWriteBurstInformation[uctemp];
3391*53ee8cc1Swenshuai.xi     }
3392*53ee8cc1Swenshuai.xi 
3393*53ee8cc1Swenshuai.xi     if(ucCheckSum == 0)
3394*53ee8cc1Swenshuai.xi     {
3395*53ee8cc1Swenshuai.xi         switch(usWriteBurstID)
3396*53ee8cc1Swenshuai.xi         {
3397*53ee8cc1Swenshuai.xi             case MHL_BURST_ID_VC_ASSIGN:
3398*53ee8cc1Swenshuai.xi                 if(_mdrv_mhl_ParsingWriteBurstVCAssign(pMHLResourcePrivate))
3399*53ee8cc1Swenshuai.xi                 {
3400*53ee8cc1Swenshuai.xi                     SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_VC_ASSIGN_FLAG);
3401*53ee8cc1Swenshuai.xi                 }
3402*53ee8cc1Swenshuai.xi                 break;
3403*53ee8cc1Swenshuai.xi 
3404*53ee8cc1Swenshuai.xi             case MHL_BURST_ID_VC_CONFIRM:
3405*53ee8cc1Swenshuai.xi                 _mdrv_mhl_ParsingWriteBurstVCConfirm(pMHLResourcePrivate);
3406*53ee8cc1Swenshuai.xi                 break;
3407*53ee8cc1Swenshuai.xi 
3408*53ee8cc1Swenshuai.xi             case MHL_BURST_ID_BIST_SETUP:
3409*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_RECEIVE_SETUP;
3410*53ee8cc1Swenshuai.xi 
3411*53ee8cc1Swenshuai.xi                 _mdrv_mhl_ParsingWriteBurstBISTSetup(pMHLResourcePrivate);
3412*53ee8cc1Swenshuai.xi 
3413*53ee8cc1Swenshuai.xi                 break;
3414*53ee8cc1Swenshuai.xi 
3415*53ee8cc1Swenshuai.xi             default:
3416*53ee8cc1Swenshuai.xi 
3417*53ee8cc1Swenshuai.xi                 break;
3418*53ee8cc1Swenshuai.xi         };
3419*53ee8cc1Swenshuai.xi     }
3420*53ee8cc1Swenshuai.xi     else
3421*53ee8cc1Swenshuai.xi     {
3422*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL write burst check sum error port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3423*53ee8cc1Swenshuai.xi     }
3424*53ee8cc1Swenshuai.xi }
3425*53ee8cc1Swenshuai.xi 
3426*53ee8cc1Swenshuai.xi //**************************************************************************
3427*53ee8cc1Swenshuai.xi //  [Function Name]:
3428*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusBISTTriggerProc()
3429*53ee8cc1Swenshuai.xi //  [Description]
3430*53ee8cc1Swenshuai.xi //
3431*53ee8cc1Swenshuai.xi //  [Arguments]:
3432*53ee8cc1Swenshuai.xi //
3433*53ee8cc1Swenshuai.xi //  [Return]:
3434*53ee8cc1Swenshuai.xi //
3435*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusBISTTriggerProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucKeyCode)3436*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusBISTTriggerProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucKeyCode)
3437*53ee8cc1Swenshuai.xi {
3438*53ee8cc1Swenshuai.xi     MS_BOOL bGeteCbusDuration = FALSE;
3439*53ee8cc1Swenshuai.xi     MS_BOOL bGetAVLinkDuration = FALSE;
3440*53ee8cc1Swenshuai.xi     MS_U8 ucBISTDeviceType = pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_DEV_CAT] &BMASK(3:0);
3441*53ee8cc1Swenshuai.xi     MS_U8 ucBISTeCbusSelect = pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_ECBUS_SPEEDS];
3442*53ee8cc1Swenshuai.xi     MS_U16 usTimerCount = 0;
3443*53ee8cc1Swenshuai.xi 
3444*53ee8cc1Swenshuai.xi     if(((ucKeyCode &BIT(3)) == BIT(3)) && ((ucBISTeCbusSelect &BIT(4)) != BIT(4))) // Not support eCbus-D
3445*53ee8cc1Swenshuai.xi     {
3446*53ee8cc1Swenshuai.xi         // Chip only support eCbus-S
3447*53ee8cc1Swenshuai.xi     }
3448*53ee8cc1Swenshuai.xi 
3449*53ee8cc1Swenshuai.xi     if((ucKeyCode &BIT(0)) == BIT(0)) // Source device and eCbus Tx
3450*53ee8cc1Swenshuai.xi     {
3451*53ee8cc1Swenshuai.xi         bGeteCbusDuration = TRUE;
3452*53ee8cc1Swenshuai.xi 
3453*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stBISTParameterInfo.bBISTeCbusTxFlag = TRUE;
3454*53ee8cc1Swenshuai.xi     }
3455*53ee8cc1Swenshuai.xi     else
3456*53ee8cc1Swenshuai.xi     {
3457*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stBISTParameterInfo.bBISTeCbusTxFlag = FALSE;
3458*53ee8cc1Swenshuai.xi     }
3459*53ee8cc1Swenshuai.xi 
3460*53ee8cc1Swenshuai.xi     if((ucKeyCode &BIT(1)) == BIT(1)) // Sink device and eCbus link Rx
3461*53ee8cc1Swenshuai.xi     {
3462*53ee8cc1Swenshuai.xi         bGeteCbusDuration = TRUE;
3463*53ee8cc1Swenshuai.xi 
3464*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stBISTParameterInfo.bBISTeCbusRxFlag = TRUE;
3465*53ee8cc1Swenshuai.xi     }
3466*53ee8cc1Swenshuai.xi     else
3467*53ee8cc1Swenshuai.xi     {
3468*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stBISTParameterInfo.bBISTeCbusRxFlag = FALSE;
3469*53ee8cc1Swenshuai.xi     }
3470*53ee8cc1Swenshuai.xi 
3471*53ee8cc1Swenshuai.xi     if((ucBISTDeviceType == MHL_DEVICE_SOURCE) || (ucBISTDeviceType == MHL_DEVICE_DIRECT_ATTACH_SOURCE))
3472*53ee8cc1Swenshuai.xi     {
3473*53ee8cc1Swenshuai.xi         if((ucKeyCode &BIT(4)) == BIT(4)) // Source device and AV link Tx
3474*53ee8cc1Swenshuai.xi         {
3475*53ee8cc1Swenshuai.xi 
3476*53ee8cc1Swenshuai.xi         }
3477*53ee8cc1Swenshuai.xi     }
3478*53ee8cc1Swenshuai.xi     else if((ucBISTDeviceType == MHL_DEVICE_SINK) || (ucBISTDeviceType == MHL_DEVICE_DIRECT_ATTACH_SINK))
3479*53ee8cc1Swenshuai.xi     {
3480*53ee8cc1Swenshuai.xi         if((ucKeyCode &BIT(6)) == BIT(6)) // Impedance test
3481*53ee8cc1Swenshuai.xi         {
3482*53ee8cc1Swenshuai.xi             bGeteCbusDuration = TRUE;
3483*53ee8cc1Swenshuai.xi         }
3484*53ee8cc1Swenshuai.xi 
3485*53ee8cc1Swenshuai.xi         if((ucKeyCode &BIT(5)) == BIT(5)) // Sink device and AV link Rx
3486*53ee8cc1Swenshuai.xi         {
3487*53ee8cc1Swenshuai.xi             bGetAVLinkDuration = TRUE;
3488*53ee8cc1Swenshuai.xi         }
3489*53ee8cc1Swenshuai.xi     }
3490*53ee8cc1Swenshuai.xi 
3491*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->ucBISTModeState == MHL_CBUS_BIST_WAIT_TRIGGER)
3492*53ee8cc1Swenshuai.xi     {
3493*53ee8cc1Swenshuai.xi         if(bGeteCbusDuration)
3494*53ee8cc1Swenshuai.xi         {
3495*53ee8cc1Swenshuai.xi             usTimerCount = pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusDuration;
3496*53ee8cc1Swenshuai.xi         }
3497*53ee8cc1Swenshuai.xi 
3498*53ee8cc1Swenshuai.xi         if(bGetAVLinkDuration)
3499*53ee8cc1Swenshuai.xi         {
3500*53ee8cc1Swenshuai.xi             if(usTimerCount < pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkDuration)
3501*53ee8cc1Swenshuai.xi             {
3502*53ee8cc1Swenshuai.xi                 usTimerCount = pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkDuration;
3503*53ee8cc1Swenshuai.xi             }
3504*53ee8cc1Swenshuai.xi         }
3505*53ee8cc1Swenshuai.xi 
3506*53ee8cc1Swenshuai.xi         if(bGeteCbusDuration || bGetAVLinkDuration)
3507*53ee8cc1Swenshuai.xi         {
3508*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_RECEIVE_TRIGGER;
3509*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusDuration = usTimerCount;
3510*53ee8cc1Swenshuai.xi         }
3511*53ee8cc1Swenshuai.xi     }
3512*53ee8cc1Swenshuai.xi 
3513*53ee8cc1Swenshuai.xi     MDRV_MHL_MSG_INFO("** MHL receive BIST trigger in port %c keycode %x\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucKeyCode);
3514*53ee8cc1Swenshuai.xi }
3515*53ee8cc1Swenshuai.xi 
3516*53ee8cc1Swenshuai.xi //**************************************************************************
3517*53ee8cc1Swenshuai.xi //  [Function Name]:
3518*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusBISTRequestStatusProc()
3519*53ee8cc1Swenshuai.xi //  [Description]
3520*53ee8cc1Swenshuai.xi //
3521*53ee8cc1Swenshuai.xi //  [Arguments]:
3522*53ee8cc1Swenshuai.xi //
3523*53ee8cc1Swenshuai.xi //  [Return]:
3524*53ee8cc1Swenshuai.xi //
3525*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusBISTRequestStatusProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucKeyCode)3526*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusBISTRequestStatusProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucKeyCode)
3527*53ee8cc1Swenshuai.xi {
3528*53ee8cc1Swenshuai.xi     //if(ucKeyCode == MHL_BIST_REQ_RETURN_STATUS)
3529*53ee8cc1Swenshuai.xi     {
3530*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_REQUEST_STATUS;
3531*53ee8cc1Swenshuai.xi     }
3532*53ee8cc1Swenshuai.xi 
3533*53ee8cc1Swenshuai.xi     MDRV_MHL_MSG_INFO("** MHL receive BIST request status in port %c keycode %x\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucKeyCode);
3534*53ee8cc1Swenshuai.xi }
3535*53ee8cc1Swenshuai.xi 
3536*53ee8cc1Swenshuai.xi //**************************************************************************
3537*53ee8cc1Swenshuai.xi //  [Function Name]:
3538*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusBISTStopProc()
3539*53ee8cc1Swenshuai.xi //  [Description]
3540*53ee8cc1Swenshuai.xi //                  Disable AV LINK_BIST when currently running
3541*53ee8cc1Swenshuai.xi //  [Arguments]:
3542*53ee8cc1Swenshuai.xi //
3543*53ee8cc1Swenshuai.xi //  [Return]:
3544*53ee8cc1Swenshuai.xi //
3545*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusBISTStopProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucKeyCode)3546*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusBISTStopProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucKeyCode)
3547*53ee8cc1Swenshuai.xi {
3548*53ee8cc1Swenshuai.xi     if(ucKeyCode == 0) // Key code must be set to 0
3549*53ee8cc1Swenshuai.xi     {
3550*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucBISTModeState == MHL_CBUS_BIST_ECBUS_SWITCH)
3551*53ee8cc1Swenshuai.xi         {
3552*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_EVENT_FINISH;
3553*53ee8cc1Swenshuai.xi         }
3554*53ee8cc1Swenshuai.xi     }
3555*53ee8cc1Swenshuai.xi 
3556*53ee8cc1Swenshuai.xi     MDRV_MHL_MSG_INFO("** MHL receive BIST stop in port %c keycode %x\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucKeyCode);
3557*53ee8cc1Swenshuai.xi }
3558*53ee8cc1Swenshuai.xi 
3559*53ee8cc1Swenshuai.xi //**************************************************************************
3560*53ee8cc1Swenshuai.xi //  [Function Name]:
3561*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusReceiveEventProc()
3562*53ee8cc1Swenshuai.xi //  [Description]:
3563*53ee8cc1Swenshuai.xi //
3564*53ee8cc1Swenshuai.xi //  [Arguments]:
3565*53ee8cc1Swenshuai.xi //
3566*53ee8cc1Swenshuai.xi //  [Return]:
3567*53ee8cc1Swenshuai.xi //
3568*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusReceiveEventProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)3569*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusReceiveEventProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
3570*53ee8cc1Swenshuai.xi {
3571*53ee8cc1Swenshuai.xi     MS_U8 ucQueueIndex = 0;
3572*53ee8cc1Swenshuai.xi     MS_U16 usTimeTick = MHL_CBUS_IDEL_FREE_TIME;
3573*53ee8cc1Swenshuai.xi 
3574*53ee8cc1Swenshuai.xi     if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MSC_FLAG))
3575*53ee8cc1Swenshuai.xi     {
3576*53ee8cc1Swenshuai.xi         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MSC_FLAG);
3577*53ee8cc1Swenshuai.xi 
3578*53ee8cc1Swenshuai.xi         if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ABORT_FLAG))
3579*53ee8cc1Swenshuai.xi         {
3580*53ee8cc1Swenshuai.xi             CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ABORT_FLAG);
3581*53ee8cc1Swenshuai.xi 
3582*53ee8cc1Swenshuai.xi             usTimeTick = MHL_CBUS_ABORT_HOLD_TIME;
3583*53ee8cc1Swenshuai.xi         }
3584*53ee8cc1Swenshuai.xi 
3585*53ee8cc1Swenshuai.xi         _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_CBUS_SILENCE, usTimeTick);
3586*53ee8cc1Swenshuai.xi     }
3587*53ee8cc1Swenshuai.xi 
3588*53ee8cc1Swenshuai.xi     if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ACK_FLAG))
3589*53ee8cc1Swenshuai.xi     {
3590*53ee8cc1Swenshuai.xi         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ACK_FLAG);
3591*53ee8cc1Swenshuai.xi 
3592*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucQueueState != MHL_QUEUE_STATE_IDLE)
3593*53ee8cc1Swenshuai.xi         {
3594*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stCbusQueueInfo[MHL_CBUS_RX_QUEUE_INDEX].ucQueueState = MHL_QUEUE_STATE_IDLE;
3595*53ee8cc1Swenshuai.xi         }
3596*53ee8cc1Swenshuai.xi         else if(pMHLResourcePrivate->stCbusQueueInfo[pMHLResourcePrivate->ucCurrentQueueIndex].ucQueueState != MHL_QUEUE_STATE_PENDING)
3597*53ee8cc1Swenshuai.xi         {
3598*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stCbusQueueInfo[pMHLResourcePrivate->ucCurrentQueueIndex].ucQueueState = MHL_QUEUE_STATE_IDLE;
3599*53ee8cc1Swenshuai.xi         }
3600*53ee8cc1Swenshuai.xi 
3601*53ee8cc1Swenshuai.xi         ucQueueIndex = _mdrv_mhl_GetCbusQueueIndex(pMHLResourcePrivate);
3602*53ee8cc1Swenshuai.xi 
3603*53ee8cc1Swenshuai.xi         // Update current index to search index, but not Rx queue index
3604*53ee8cc1Swenshuai.xi         if(ucQueueIndex < MHL_CBUS_RX_QUEUE_INDEX)
3605*53ee8cc1Swenshuai.xi         {
3606*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucCurrentQueueIndex = ucQueueIndex;
3607*53ee8cc1Swenshuai.xi         }
3608*53ee8cc1Swenshuai.xi 
3609*53ee8cc1Swenshuai.xi         _mdrv_mhl_CbusDisplayLinkCheck(pMHLResourcePrivate);
3610*53ee8cc1Swenshuai.xi     }
3611*53ee8cc1Swenshuai.xi 
3612*53ee8cc1Swenshuai.xi     if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_24BIT_MODE_FLAG))
3613*53ee8cc1Swenshuai.xi     {
3614*53ee8cc1Swenshuai.xi         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_24BIT_MODE_FLAG);
3615*53ee8cc1Swenshuai.xi 
3616*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucTMDSClockMode == MHL_PHY_CLOCK_PACKET_PIXEL)
3617*53ee8cc1Swenshuai.xi         {
3618*53ee8cc1Swenshuai.xi             mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
3619*53ee8cc1Swenshuai.xi 
3620*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL switch back to 24 bits mode port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3621*53ee8cc1Swenshuai.xi 
3622*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucTMDSClockMode = MHL_PHY_CLOCK_NORMAL_24BIT;
3623*53ee8cc1Swenshuai.xi         }
3624*53ee8cc1Swenshuai.xi     }
3625*53ee8cc1Swenshuai.xi 
3626*53ee8cc1Swenshuai.xi     if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_PP_MODE_FLAG))
3627*53ee8cc1Swenshuai.xi     {
3628*53ee8cc1Swenshuai.xi         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_PP_MODE_FLAG);
3629*53ee8cc1Swenshuai.xi 
3630*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucTMDSClockMode == MHL_PHY_CLOCK_NORMAL_24BIT)
3631*53ee8cc1Swenshuai.xi         {
3632*53ee8cc1Swenshuai.xi             mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, TRUE, &(pMHLResourcePrivate->stSignalStatusInfo));
3633*53ee8cc1Swenshuai.xi 
3634*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL switch to packet pixel mode port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3635*53ee8cc1Swenshuai.xi 
3636*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucTMDSClockMode = MHL_PHY_CLOCK_PACKET_PIXEL;
3637*53ee8cc1Swenshuai.xi         }
3638*53ee8cc1Swenshuai.xi     }
3639*53ee8cc1Swenshuai.xi 
3640*53ee8cc1Swenshuai.xi     if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MHL3_VERSION_FLAG))
3641*53ee8cc1Swenshuai.xi     {
3642*53ee8cc1Swenshuai.xi         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MHL3_VERSION_FLAG);
3643*53ee8cc1Swenshuai.xi 
3644*53ee8cc1Swenshuai.xi         if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
3645*53ee8cc1Swenshuai.xi         {
3646*53ee8cc1Swenshuai.xi             SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_ECBUS_FUNCTION_FLAG);
3647*53ee8cc1Swenshuai.xi         }
3648*53ee8cc1Swenshuai.xi     }
3649*53ee8cc1Swenshuai.xi 
3650*53ee8cc1Swenshuai.xi     if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WRITE_GRANT_FLAG))
3651*53ee8cc1Swenshuai.xi     {
3652*53ee8cc1Swenshuai.xi         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WRITE_GRANT_FLAG);
3653*53ee8cc1Swenshuai.xi 
3654*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_SEND_REQUEST)
3655*53ee8cc1Swenshuai.xi         {
3656*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_REVEIVE_GRANT;
3657*53ee8cc1Swenshuai.xi         }
3658*53ee8cc1Swenshuai.xi     }
3659*53ee8cc1Swenshuai.xi 
3660*53ee8cc1Swenshuai.xi     if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_3D_REQ_FLAG))
3661*53ee8cc1Swenshuai.xi     {
3662*53ee8cc1Swenshuai.xi         if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_INFORMATION_FLAG))
3663*53ee8cc1Swenshuai.xi         {
3664*53ee8cc1Swenshuai.xi             CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_3D_REQ_FLAG);
3665*53ee8cc1Swenshuai.xi         }
3666*53ee8cc1Swenshuai.xi         else if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_NONE)
3667*53ee8cc1Swenshuai.xi         {
3668*53ee8cc1Swenshuai.xi             CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_3D_REQ_FLAG);
3669*53ee8cc1Swenshuai.xi             SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_INFORMATION_FLAG);
3670*53ee8cc1Swenshuai.xi             SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_DTD_FLAG);
3671*53ee8cc1Swenshuai.xi             SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_VIC_FLAG);
3672*53ee8cc1Swenshuai.xi         }
3673*53ee8cc1Swenshuai.xi     }
3674*53ee8cc1Swenshuai.xi 
3675*53ee8cc1Swenshuai.xi     if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DSCR_CHANGE_FLAG))
3676*53ee8cc1Swenshuai.xi     {
3677*53ee8cc1Swenshuai.xi         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DSCR_CHANGE_FLAG);
3678*53ee8cc1Swenshuai.xi 
3679*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_END;
3680*53ee8cc1Swenshuai.xi     }
3681*53ee8cc1Swenshuai.xi 
3682*53ee8cc1Swenshuai.xi     if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_FEATURE_REQUEST_FLAG))
3683*53ee8cc1Swenshuai.xi     {
3684*53ee8cc1Swenshuai.xi         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_FEATURE_REQUEST_FLAG);
3685*53ee8cc1Swenshuai.xi 
3686*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucFeatureRequestState == MHL_CBUS_FEATURE_NONE)
3687*53ee8cc1Swenshuai.xi         {
3688*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_START;
3689*53ee8cc1Swenshuai.xi         }
3690*53ee8cc1Swenshuai.xi     }
3691*53ee8cc1Swenshuai.xi 
3692*53ee8cc1Swenshuai.xi     if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_FEATURE_COMPLETE_FLAG))
3693*53ee8cc1Swenshuai.xi     {
3694*53ee8cc1Swenshuai.xi         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_FEATURE_COMPLETE_FLAG);
3695*53ee8cc1Swenshuai.xi 
3696*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucFeatureRequestState == MHL_CBUS_FEATURE_SEND_FEATURE_REQUEST)
3697*53ee8cc1Swenshuai.xi         {
3698*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_END;
3699*53ee8cc1Swenshuai.xi         }
3700*53ee8cc1Swenshuai.xi     }
3701*53ee8cc1Swenshuai.xi 
3702*53ee8cc1Swenshuai.xi     if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_LINK_RATE_FLAG))
3703*53ee8cc1Swenshuai.xi     {
3704*53ee8cc1Swenshuai.xi         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_LINK_RATE_FLAG);
3705*53ee8cc1Swenshuai.xi         SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_LINK_STATUS_NORMAL_FLAG);
3706*53ee8cc1Swenshuai.xi 
3707*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->stSignalStatusInfo.ucMainLinkRate < MHL_AV_LINK_NONE)
3708*53ee8cc1Swenshuai.xi         {
3709*53ee8cc1Swenshuai.xi             mhal_mhl_SetMainLinkRate(pMHLResourcePrivate->ucMHLSupportPath, pMHLResourcePrivate->stSignalStatusInfo.ucMainLinkRate);
3710*53ee8cc1Swenshuai.xi 
3711*53ee8cc1Swenshuai.xi             mhal_mhl_CDRModeMonitor(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
3712*53ee8cc1Swenshuai.xi 
3713*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL set AV link rate mode %d port %c\r\n", pMHLResourcePrivate->stSignalStatusInfo.ucMainLinkRate, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3714*53ee8cc1Swenshuai.xi         }
3715*53ee8cc1Swenshuai.xi     }
3716*53ee8cc1Swenshuai.xi 
3717*53ee8cc1Swenshuai.xi     if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WRITE_BURST_FLAG))
3718*53ee8cc1Swenshuai.xi     {
3719*53ee8cc1Swenshuai.xi         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WRITE_BURST_FLAG);
3720*53ee8cc1Swenshuai.xi 
3721*53ee8cc1Swenshuai.xi         _mdrv_mhl_ParsingWriteBurstInformation(pMHLResourcePrivate);
3722*53ee8cc1Swenshuai.xi     }
3723*53ee8cc1Swenshuai.xi 
3724*53ee8cc1Swenshuai.xi     if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_VC_ASSIGN_FLAG))
3725*53ee8cc1Swenshuai.xi     {
3726*53ee8cc1Swenshuai.xi         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_VC_ASSIGN_FLAG);
3727*53ee8cc1Swenshuai.xi         SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_VC_INFORMATION_FLAG);
3728*53ee8cc1Swenshuai.xi         SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_VC_CONFIRM_FLAG);
3729*53ee8cc1Swenshuai.xi     }
3730*53ee8cc1Swenshuai.xi 
3731*53ee8cc1Swenshuai.xi     if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ECBUS_MODE_FLAG))
3732*53ee8cc1Swenshuai.xi     {
3733*53ee8cc1Swenshuai.xi         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_ECBUS_MODE_FLAG);
3734*53ee8cc1Swenshuai.xi 
3735*53ee8cc1Swenshuai.xi         if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS1_FUNCTION_FLAG))
3736*53ee8cc1Swenshuai.xi         {
3737*53ee8cc1Swenshuai.xi             SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
3738*53ee8cc1Swenshuai.xi 
3739*53ee8cc1Swenshuai.xi             _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_TX_QUQUE_FREEZE, MHL_CBUS_1_SECOND_TIME);
3740*53ee8cc1Swenshuai.xi 
3741*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL CTS 6.3.9.1 patch port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3742*53ee8cc1Swenshuai.xi         }
3743*53ee8cc1Swenshuai.xi     }
3744*53ee8cc1Swenshuai.xi }
3745*53ee8cc1Swenshuai.xi 
3746*53ee8cc1Swenshuai.xi //**************************************************************************
3747*53ee8cc1Swenshuai.xi //  [Function Name]:
3748*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusMSGEventProc()
3749*53ee8cc1Swenshuai.xi //  [Description]:
3750*53ee8cc1Swenshuai.xi //
3751*53ee8cc1Swenshuai.xi //  [Arguments]:
3752*53ee8cc1Swenshuai.xi //
3753*53ee8cc1Swenshuai.xi //  [Return]:
3754*53ee8cc1Swenshuai.xi //
3755*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusMSGEventProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)3756*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusMSGEventProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
3757*53ee8cc1Swenshuai.xi {
3758*53ee8cc1Swenshuai.xi     MS_BOOL bReceiveResponse = FALSE;
3759*53ee8cc1Swenshuai.xi     MS_BOOL bResponseErrorFlag = FALSE;
3760*53ee8cc1Swenshuai.xi     MS_U8 ucStatus = MHL_RCP_NO_ERROR;
3761*53ee8cc1Swenshuai.xi     MS_U8 ucSubCommand = 0;
3762*53ee8cc1Swenshuai.xi     MS_U8 ucKeyCode = MHL_RCP_NO_ERROR;
3763*53ee8cc1Swenshuai.xi 
3764*53ee8cc1Swenshuai.xi     if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MSG_FLAG))
3765*53ee8cc1Swenshuai.xi     {
3766*53ee8cc1Swenshuai.xi         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MSG_FLAG);
3767*53ee8cc1Swenshuai.xi 
3768*53ee8cc1Swenshuai.xi         switch(pMHLResourcePrivate->ucMSGData[0])
3769*53ee8cc1Swenshuai.xi         {
3770*53ee8cc1Swenshuai.xi             case MSC_MSG_MSGE:
3771*53ee8cc1Swenshuai.xi 
3772*53ee8cc1Swenshuai.xi                 break;
3773*53ee8cc1Swenshuai.xi 
3774*53ee8cc1Swenshuai.xi             case MSC_MSG_RCP:
3775*53ee8cc1Swenshuai.xi                 if(!GET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RCP_FUNCTION_FLAG))
3776*53ee8cc1Swenshuai.xi                 {
3777*53ee8cc1Swenshuai.xi                     ucStatus = MHL_RCP_NO_ERROR;
3778*53ee8cc1Swenshuai.xi 
3779*53ee8cc1Swenshuai.xi                     MDRV_MHL_MSG_WARNING("** MHL RCP call back NULL port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3780*53ee8cc1Swenshuai.xi                 }
3781*53ee8cc1Swenshuai.xi                 else if(!(pMHLResourcePrivate->ucMSGData[1] &BIT(7))) // Ignore release key
3782*53ee8cc1Swenshuai.xi                 {
3783*53ee8cc1Swenshuai.xi                     SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG);
3784*53ee8cc1Swenshuai.xi                 }
3785*53ee8cc1Swenshuai.xi 
3786*53ee8cc1Swenshuai.xi                 if(ucStatus == MHL_RCP_NO_ERROR)
3787*53ee8cc1Swenshuai.xi                 {
3788*53ee8cc1Swenshuai.xi                     ucSubCommand = MSC_MSG_RCPK;
3789*53ee8cc1Swenshuai.xi                     ucKeyCode = pMHLResourcePrivate->ucMSGData[1];
3790*53ee8cc1Swenshuai.xi                 }
3791*53ee8cc1Swenshuai.xi                 else
3792*53ee8cc1Swenshuai.xi                 {
3793*53ee8cc1Swenshuai.xi                     ucSubCommand = MSC_MSG_RCPE;
3794*53ee8cc1Swenshuai.xi                     ucKeyCode = ucStatus;
3795*53ee8cc1Swenshuai.xi 
3796*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucMSGData[0] = MSC_MSG_RCPK;
3797*53ee8cc1Swenshuai.xi                     bResponseErrorFlag = TRUE;
3798*53ee8cc1Swenshuai.xi                 }
3799*53ee8cc1Swenshuai.xi 
3800*53ee8cc1Swenshuai.xi                 _mdrv_mhl_CbusRxQueueInsertMSG(pMHLResourcePrivate, ucSubCommand, ucKeyCode);
3801*53ee8cc1Swenshuai.xi 
3802*53ee8cc1Swenshuai.xi                 break;
3803*53ee8cc1Swenshuai.xi 
3804*53ee8cc1Swenshuai.xi             case MSC_MSG_RCPK:
3805*53ee8cc1Swenshuai.xi             case MSC_MSG_RCPE:
3806*53ee8cc1Swenshuai.xi                 bReceiveResponse = TRUE;
3807*53ee8cc1Swenshuai.xi                 break;
3808*53ee8cc1Swenshuai.xi 
3809*53ee8cc1Swenshuai.xi             case MSC_MSG_RAP:
3810*53ee8cc1Swenshuai.xi                 if(!GET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RAP_FUNCTION_FLAG))
3811*53ee8cc1Swenshuai.xi                 {
3812*53ee8cc1Swenshuai.xi                     ucStatus = MHL_RAP_NO_ERROR;
3813*53ee8cc1Swenshuai.xi 
3814*53ee8cc1Swenshuai.xi                     MDRV_MHL_MSG_WARNING("** MHL RAP call back NULL port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3815*53ee8cc1Swenshuai.xi                 }
3816*53ee8cc1Swenshuai.xi                 else if(_mdrv_mhl_CheckCbusModeChange(pMHLResourcePrivate))
3817*53ee8cc1Swenshuai.xi                 {
3818*53ee8cc1Swenshuai.xi                     if(_mdrv_mhl_GetRAPEnableFlag(pMHLResourcePrivate))
3819*53ee8cc1Swenshuai.xi                     {
3820*53ee8cc1Swenshuai.xi                         SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG);
3821*53ee8cc1Swenshuai.xi                     }
3822*53ee8cc1Swenshuai.xi 
3823*53ee8cc1Swenshuai.xi                     ucSubCommand = MSC_MSG_RAPK;
3824*53ee8cc1Swenshuai.xi                     ucKeyCode = ucStatus;
3825*53ee8cc1Swenshuai.xi 
3826*53ee8cc1Swenshuai.xi                     _mdrv_mhl_CbusRxQueueInsertMSG(pMHLResourcePrivate, ucSubCommand, ucKeyCode);
3827*53ee8cc1Swenshuai.xi                 }
3828*53ee8cc1Swenshuai.xi                 else if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG))
3829*53ee8cc1Swenshuai.xi                 {
3830*53ee8cc1Swenshuai.xi                     CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG);
3831*53ee8cc1Swenshuai.xi                 }
3832*53ee8cc1Swenshuai.xi 
3833*53ee8cc1Swenshuai.xi                 break;
3834*53ee8cc1Swenshuai.xi 
3835*53ee8cc1Swenshuai.xi             case MSC_MSG_RAPK:
3836*53ee8cc1Swenshuai.xi                 bReceiveResponse = TRUE;
3837*53ee8cc1Swenshuai.xi                 break;
3838*53ee8cc1Swenshuai.xi 
3839*53ee8cc1Swenshuai.xi             case MSC_MSG_UCP:
3840*53ee8cc1Swenshuai.xi                 if(!GET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_UCP_FUNCTION_FLAG))
3841*53ee8cc1Swenshuai.xi                 {
3842*53ee8cc1Swenshuai.xi                     ucStatus = MHL_UCP_NO_ERROR;
3843*53ee8cc1Swenshuai.xi 
3844*53ee8cc1Swenshuai.xi                     MDRV_MHL_MSG_WARNING("** MHL UCP call back NULL port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3845*53ee8cc1Swenshuai.xi                 }
3846*53ee8cc1Swenshuai.xi                 else
3847*53ee8cc1Swenshuai.xi                 {
3848*53ee8cc1Swenshuai.xi                     SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG);
3849*53ee8cc1Swenshuai.xi                 }
3850*53ee8cc1Swenshuai.xi 
3851*53ee8cc1Swenshuai.xi                 if(ucStatus == MHL_UCP_NO_ERROR)
3852*53ee8cc1Swenshuai.xi                 {
3853*53ee8cc1Swenshuai.xi                     ucSubCommand = MSC_MSG_UCPK;
3854*53ee8cc1Swenshuai.xi                     ucKeyCode = pMHLResourcePrivate->ucMSGData[1];
3855*53ee8cc1Swenshuai.xi                 }
3856*53ee8cc1Swenshuai.xi                 else
3857*53ee8cc1Swenshuai.xi                 {
3858*53ee8cc1Swenshuai.xi                     ucSubCommand = MSC_MSG_UCPE;
3859*53ee8cc1Swenshuai.xi                     ucKeyCode = ucStatus;
3860*53ee8cc1Swenshuai.xi 
3861*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucMSGData[0] = MSC_MSG_UCPK;
3862*53ee8cc1Swenshuai.xi                     bResponseErrorFlag = TRUE;
3863*53ee8cc1Swenshuai.xi                 }
3864*53ee8cc1Swenshuai.xi 
3865*53ee8cc1Swenshuai.xi                 _mdrv_mhl_CbusRxQueueInsertMSG(pMHLResourcePrivate, ucSubCommand, ucKeyCode);
3866*53ee8cc1Swenshuai.xi 
3867*53ee8cc1Swenshuai.xi                 break;
3868*53ee8cc1Swenshuai.xi 
3869*53ee8cc1Swenshuai.xi             case MSC_MSG_UCPK:
3870*53ee8cc1Swenshuai.xi             case MSC_MSG_UCPE:
3871*53ee8cc1Swenshuai.xi                 bReceiveResponse = TRUE;
3872*53ee8cc1Swenshuai.xi                 break;
3873*53ee8cc1Swenshuai.xi 
3874*53ee8cc1Swenshuai.xi             case MSC_MSG_ATT:
3875*53ee8cc1Swenshuai.xi                 if(!GET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_ATT_FUNCTION_FLAG))
3876*53ee8cc1Swenshuai.xi                 {
3877*53ee8cc1Swenshuai.xi                     ucStatus = MHL_ATT_NO_ERROR;
3878*53ee8cc1Swenshuai.xi 
3879*53ee8cc1Swenshuai.xi                     MDRV_MHL_MSG_WARNING("** MHL ATT call back NULL port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3880*53ee8cc1Swenshuai.xi                 }
3881*53ee8cc1Swenshuai.xi                 else
3882*53ee8cc1Swenshuai.xi                 {
3883*53ee8cc1Swenshuai.xi                     SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG);
3884*53ee8cc1Swenshuai.xi                 }
3885*53ee8cc1Swenshuai.xi 
3886*53ee8cc1Swenshuai.xi                 ucSubCommand = MSC_MSG_ATTK;
3887*53ee8cc1Swenshuai.xi                 ucKeyCode = ucStatus;
3888*53ee8cc1Swenshuai.xi 
3889*53ee8cc1Swenshuai.xi                 _mdrv_mhl_CbusRxQueueInsertMSG(pMHLResourcePrivate, ucSubCommand, ucKeyCode);
3890*53ee8cc1Swenshuai.xi 
3891*53ee8cc1Swenshuai.xi                 break;
3892*53ee8cc1Swenshuai.xi 
3893*53ee8cc1Swenshuai.xi             case MSC_MSG_ATTK:
3894*53ee8cc1Swenshuai.xi                 bReceiveResponse = TRUE;
3895*53ee8cc1Swenshuai.xi                 break;
3896*53ee8cc1Swenshuai.xi 
3897*53ee8cc1Swenshuai.xi             case MSC_MSG_RBP:
3898*53ee8cc1Swenshuai.xi                 if(!GET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RBP_FUNCTION_FLAG))
3899*53ee8cc1Swenshuai.xi                 {
3900*53ee8cc1Swenshuai.xi                     ucStatus = MHL_RBP_NO_ERROR;
3901*53ee8cc1Swenshuai.xi 
3902*53ee8cc1Swenshuai.xi                     MDRV_MHL_MSG_WARNING("** MHL RBP call back NULL port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
3903*53ee8cc1Swenshuai.xi                 }
3904*53ee8cc1Swenshuai.xi                 else
3905*53ee8cc1Swenshuai.xi                 {
3906*53ee8cc1Swenshuai.xi                     SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG);
3907*53ee8cc1Swenshuai.xi                 }
3908*53ee8cc1Swenshuai.xi 
3909*53ee8cc1Swenshuai.xi                 if(ucStatus == MHL_RBP_NO_ERROR)
3910*53ee8cc1Swenshuai.xi                 {
3911*53ee8cc1Swenshuai.xi                     ucSubCommand = MSC_MSG_RBPK;
3912*53ee8cc1Swenshuai.xi                     ucKeyCode = pMHLResourcePrivate->ucMSGData[1];
3913*53ee8cc1Swenshuai.xi                 }
3914*53ee8cc1Swenshuai.xi                 else
3915*53ee8cc1Swenshuai.xi                 {
3916*53ee8cc1Swenshuai.xi                     ucSubCommand = MSC_MSG_RBPE;
3917*53ee8cc1Swenshuai.xi                     ucKeyCode = ucStatus;
3918*53ee8cc1Swenshuai.xi 
3919*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucMSGData[0] = MSC_MSG_RBPK;
3920*53ee8cc1Swenshuai.xi                     bResponseErrorFlag = TRUE;
3921*53ee8cc1Swenshuai.xi                 }
3922*53ee8cc1Swenshuai.xi 
3923*53ee8cc1Swenshuai.xi                 _mdrv_mhl_CbusRxQueueInsertMSG(pMHLResourcePrivate, ucSubCommand, ucKeyCode);
3924*53ee8cc1Swenshuai.xi 
3925*53ee8cc1Swenshuai.xi                 break;
3926*53ee8cc1Swenshuai.xi 
3927*53ee8cc1Swenshuai.xi             case MSC_MSG_RBPK:
3928*53ee8cc1Swenshuai.xi             case MSC_MSG_RBPE:
3929*53ee8cc1Swenshuai.xi                 bReceiveResponse = TRUE;
3930*53ee8cc1Swenshuai.xi                 break;
3931*53ee8cc1Swenshuai.xi 
3932*53ee8cc1Swenshuai.xi             case MSC_MSG_RUSB:
3933*53ee8cc1Swenshuai.xi 
3934*53ee8cc1Swenshuai.xi                 break;
3935*53ee8cc1Swenshuai.xi 
3936*53ee8cc1Swenshuai.xi             case MSC_MSG_RUSBK:
3937*53ee8cc1Swenshuai.xi                 bReceiveResponse = TRUE;
3938*53ee8cc1Swenshuai.xi                 break;
3939*53ee8cc1Swenshuai.xi 
3940*53ee8cc1Swenshuai.xi             case MSC_MSG_RHID:
3941*53ee8cc1Swenshuai.xi 
3942*53ee8cc1Swenshuai.xi                 break;
3943*53ee8cc1Swenshuai.xi 
3944*53ee8cc1Swenshuai.xi             case MSC_MSG_RHIDK:
3945*53ee8cc1Swenshuai.xi                 bReceiveResponse = TRUE;
3946*53ee8cc1Swenshuai.xi                 break;
3947*53ee8cc1Swenshuai.xi 
3948*53ee8cc1Swenshuai.xi             case MSC_MSG_BIST_TRIGGRT:
3949*53ee8cc1Swenshuai.xi                 _mdrv_mhl_CbusBISTTriggerProc(pMHLResourcePrivate, pMHLResourcePrivate->ucMSGData[1]);
3950*53ee8cc1Swenshuai.xi                 break;
3951*53ee8cc1Swenshuai.xi 
3952*53ee8cc1Swenshuai.xi             case MSC_MSG_BIST_REQUEST_STAT:
3953*53ee8cc1Swenshuai.xi                 _mdrv_mhl_CbusBISTRequestStatusProc(pMHLResourcePrivate, pMHLResourcePrivate->ucMSGData[1]);
3954*53ee8cc1Swenshuai.xi                 break;
3955*53ee8cc1Swenshuai.xi 
3956*53ee8cc1Swenshuai.xi             case MSC_MSG_BIST_STOP:
3957*53ee8cc1Swenshuai.xi                 _mdrv_mhl_CbusBISTStopProc(pMHLResourcePrivate, pMHLResourcePrivate->ucMSGData[1]);
3958*53ee8cc1Swenshuai.xi                 break;
3959*53ee8cc1Swenshuai.xi 
3960*53ee8cc1Swenshuai.xi             case MSC_MSG_SI_UNKNOWN:
3961*53ee8cc1Swenshuai.xi                 _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_SI_UNKNOWNK, 0, FALSE);
3962*53ee8cc1Swenshuai.xi                 break;
3963*53ee8cc1Swenshuai.xi 
3964*53ee8cc1Swenshuai.xi             default:
3965*53ee8cc1Swenshuai.xi                 if(pMHLResourcePrivate->ucMSGData[0] < 0x20) // For CTS 6.3.11.23
3966*53ee8cc1Swenshuai.xi                 {
3967*53ee8cc1Swenshuai.xi                     _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_MSGE, MHL_MSGE_INVALID_SUB_COMMAND_CODE, FALSE);
3968*53ee8cc1Swenshuai.xi                 }
3969*53ee8cc1Swenshuai.xi 
3970*53ee8cc1Swenshuai.xi                 break;
3971*53ee8cc1Swenshuai.xi         };
3972*53ee8cc1Swenshuai.xi 
3973*53ee8cc1Swenshuai.xi         if(bReceiveResponse)
3974*53ee8cc1Swenshuai.xi         {
3975*53ee8cc1Swenshuai.xi             CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_MSG_COMMAND_FLAG);
3976*53ee8cc1Swenshuai.xi         }
3977*53ee8cc1Swenshuai.xi 
3978*53ee8cc1Swenshuai.xi         if(bResponseErrorFlag)
3979*53ee8cc1Swenshuai.xi         {
3980*53ee8cc1Swenshuai.xi             _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_SEND_MSG_RESPONSE, MHL_MSG_SEND_RESPONSE_TIME);
3981*53ee8cc1Swenshuai.xi         }
3982*53ee8cc1Swenshuai.xi     }
3983*53ee8cc1Swenshuai.xi }
3984*53ee8cc1Swenshuai.xi 
3985*53ee8cc1Swenshuai.xi //**************************************************************************
3986*53ee8cc1Swenshuai.xi //  [Function Name]:
3987*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_EMSCParsingEMSCSupport()
3988*53ee8cc1Swenshuai.xi //  [Description]:
3989*53ee8cc1Swenshuai.xi //
3990*53ee8cc1Swenshuai.xi //  [Arguments]:
3991*53ee8cc1Swenshuai.xi //
3992*53ee8cc1Swenshuai.xi //  [Return]:
3993*53ee8cc1Swenshuai.xi //
3994*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_EMSCParsingEMSCSupport(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * bReveiceEMSC)3995*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_EMSCParsingEMSCSupport(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *bReveiceEMSC)
3996*53ee8cc1Swenshuai.xi {
3997*53ee8cc1Swenshuai.xi     MS_U8 ucLength = bReveiceEMSC[3] *MHL_EMSC_SUPPORT_ITEM_LENGTH +6;
3998*53ee8cc1Swenshuai.xi 
3999*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate != NULL)
4000*53ee8cc1Swenshuai.xi     {
4001*53ee8cc1Swenshuai.xi 
4002*53ee8cc1Swenshuai.xi     }
4003*53ee8cc1Swenshuai.xi 
4004*53ee8cc1Swenshuai.xi     return ucLength;
4005*53ee8cc1Swenshuai.xi }
4006*53ee8cc1Swenshuai.xi 
4007*53ee8cc1Swenshuai.xi //**************************************************************************
4008*53ee8cc1Swenshuai.xi //  [Function Name]:
4009*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_ParsingEMSCReceiveData()
4010*53ee8cc1Swenshuai.xi //  [Description]:
4011*53ee8cc1Swenshuai.xi //
4012*53ee8cc1Swenshuai.xi //  [Arguments]:
4013*53ee8cc1Swenshuai.xi //
4014*53ee8cc1Swenshuai.xi //  [Return]:
4015*53ee8cc1Swenshuai.xi //
4016*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ParsingEMSCReceiveData(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4017*53ee8cc1Swenshuai.xi void _mdrv_mhl_ParsingEMSCReceiveData(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4018*53ee8cc1Swenshuai.xi {
4019*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 3;
4020*53ee8cc1Swenshuai.xi     MS_U8 ucReceiveEMSC[MHL_EMSC_DATA_SIZE +1] = {0};
4021*53ee8cc1Swenshuai.xi     MS_U16 usEMSCRxBufferSize = 0;
4022*53ee8cc1Swenshuai.xi     MS_U16 usEMSCTxBufferSize = 0;
4023*53ee8cc1Swenshuai.xi     MS_U16 usWriteBurstID = 0;
4024*53ee8cc1Swenshuai.xi 
4025*53ee8cc1Swenshuai.xi     mhal_mhl_GetEMSCReceiveData(ucReceiveEMSC);
4026*53ee8cc1Swenshuai.xi 
4027*53ee8cc1Swenshuai.xi     usEMSCTxBufferSize = ucReceiveEMSC[1]; // Rx unload ACK
4028*53ee8cc1Swenshuai.xi 
4029*53ee8cc1Swenshuai.xi     if(ucReceiveEMSC[2] > 0) // Check length remaining
4030*53ee8cc1Swenshuai.xi     {
4031*53ee8cc1Swenshuai.xi         while((ucReceiveEMSC[2] +3) > uctemp)
4032*53ee8cc1Swenshuai.xi         {
4033*53ee8cc1Swenshuai.xi             usWriteBurstID = (ucReceiveEMSC[uctemp] << 8) |ucReceiveEMSC[uctemp +1];
4034*53ee8cc1Swenshuai.xi 
4035*53ee8cc1Swenshuai.xi             switch(usWriteBurstID)
4036*53ee8cc1Swenshuai.xi             {
4037*53ee8cc1Swenshuai.xi                 case MHL_BURST_ID_BLK_RCV_BUFFER_INFO:
4038*53ee8cc1Swenshuai.xi                     usEMSCTxBufferSize = usEMSCTxBufferSize +((ucReceiveEMSC[uctemp +3] << 8) |ucReceiveEMSC[uctemp +2]) -MHL_EMSC_DATA_SIZE;
4039*53ee8cc1Swenshuai.xi 
4040*53ee8cc1Swenshuai.xi                     uctemp = uctemp +4;
4041*53ee8cc1Swenshuai.xi 
4042*53ee8cc1Swenshuai.xi                     MDRV_MHL_MSG_INFO("** MHL eMSC parsing buffer info in port %c !!\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
4043*53ee8cc1Swenshuai.xi 
4044*53ee8cc1Swenshuai.xi                     break;
4045*53ee8cc1Swenshuai.xi 
4046*53ee8cc1Swenshuai.xi                 case MHL_BURST_ID_BITS_PER_PIXEL_FMT:
4047*53ee8cc1Swenshuai.xi                     if(ucReceiveEMSC[uctemp +7] == MHL_VIEW_PIXEL_FORMATE_16BPP)
4048*53ee8cc1Swenshuai.xi                     {
4049*53ee8cc1Swenshuai.xi                         SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_PP_MODE_FLAG);
4050*53ee8cc1Swenshuai.xi                         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_24BIT_MODE_FLAG);
4051*53ee8cc1Swenshuai.xi                     }
4052*53ee8cc1Swenshuai.xi                     else if(ucReceiveEMSC[uctemp +7] == MHL_VIEW_PIXEL_FORMATE_24BPP)
4053*53ee8cc1Swenshuai.xi                     {
4054*53ee8cc1Swenshuai.xi                         SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_24BIT_MODE_FLAG);
4055*53ee8cc1Swenshuai.xi                         CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_PP_MODE_FLAG);
4056*53ee8cc1Swenshuai.xi                     }
4057*53ee8cc1Swenshuai.xi 
4058*53ee8cc1Swenshuai.xi                     uctemp = uctemp +8;
4059*53ee8cc1Swenshuai.xi 
4060*53ee8cc1Swenshuai.xi                     MDRV_MHL_MSG_INFO("** MHL eMSC parsing pexel FMT in port %c !!\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
4061*53ee8cc1Swenshuai.xi 
4062*53ee8cc1Swenshuai.xi                     break;
4063*53ee8cc1Swenshuai.xi 
4064*53ee8cc1Swenshuai.xi                 case MHL_BURST_ID_EMSC_SUPPORT:
4065*53ee8cc1Swenshuai.xi                     uctemp = uctemp +_mdrv_mhl_EMSCParsingEMSCSupport(pMHLResourcePrivate, &ucReceiveEMSC[uctemp +3]);
4066*53ee8cc1Swenshuai.xi 
4067*53ee8cc1Swenshuai.xi                     MDRV_MHL_MSG_INFO("** MHL eMSC parsing eMSC support in port %c !!\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
4068*53ee8cc1Swenshuai.xi 
4069*53ee8cc1Swenshuai.xi                     break;
4070*53ee8cc1Swenshuai.xi 
4071*53ee8cc1Swenshuai.xi                 default:
4072*53ee8cc1Swenshuai.xi                     MDRV_MHL_MSG_INFO("** MHL eMSC parsing unknow burst ID in port %c !!\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
4073*53ee8cc1Swenshuai.xi 
4074*53ee8cc1Swenshuai.xi                     uctemp = ucReceiveEMSC[2] +3;
4075*53ee8cc1Swenshuai.xi 
4076*53ee8cc1Swenshuai.xi                     break;
4077*53ee8cc1Swenshuai.xi             };
4078*53ee8cc1Swenshuai.xi         }
4079*53ee8cc1Swenshuai.xi     }
4080*53ee8cc1Swenshuai.xi 
4081*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->usEMSCRxBufferSize = pMHLResourcePrivate->usEMSCRxBufferSize - ucReceiveEMSC[0];
4082*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->usEMSCTxBufferSize = usEMSCTxBufferSize + pMHLResourcePrivate->usEMSCTxBufferSize;
4083*53ee8cc1Swenshuai.xi     usEMSCRxBufferSize = pMHLResourcePrivate->usEMSCRxBufferSize;
4084*53ee8cc1Swenshuai.xi     usEMSCTxBufferSize = pMHLResourcePrivate->usEMSCTxBufferSize;
4085*53ee8cc1Swenshuai.xi 
4086*53ee8cc1Swenshuai.xi     MDRV_MHL_MSG_INFO("** MHL eMSC receive Rx buffer size %d in port %c !!\r\n", usEMSCRxBufferSize, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
4087*53ee8cc1Swenshuai.xi     MDRV_MHL_MSG_INFO("** MHL eMSC receive Tx buffer size %d in port %c !!\r\n", usEMSCTxBufferSize, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
4088*53ee8cc1Swenshuai.xi }
4089*53ee8cc1Swenshuai.xi 
4090*53ee8cc1Swenshuai.xi //**************************************************************************
4091*53ee8cc1Swenshuai.xi //  [Function Name]:
4092*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusRxHandler()
4093*53ee8cc1Swenshuai.xi //  [Description]
4094*53ee8cc1Swenshuai.xi //
4095*53ee8cc1Swenshuai.xi //  [Arguments]:
4096*53ee8cc1Swenshuai.xi //
4097*53ee8cc1Swenshuai.xi //  [Return]:
4098*53ee8cc1Swenshuai.xi //
4099*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusRxHandler(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4100*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusRxHandler(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4101*53ee8cc1Swenshuai.xi {
4102*53ee8cc1Swenshuai.xi     MS_U8 ucReceiveCount = 0;
4103*53ee8cc1Swenshuai.xi     MS_U8 ucReceiveMSC[MHL_CBUS_DATA_SIZE +4];
4104*53ee8cc1Swenshuai.xi 
4105*53ee8cc1Swenshuai.xi     if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
4106*53ee8cc1Swenshuai.xi     {
4107*53ee8cc1Swenshuai.xi         // Check receive MSC
4108*53ee8cc1Swenshuai.xi         if(mhal_mhl_CheckSRAMReceiveBuffer())
4109*53ee8cc1Swenshuai.xi         {
4110*53ee8cc1Swenshuai.xi             ucReceiveCount = pMHLResourcePrivate->ucReceiveCounter;
4111*53ee8cc1Swenshuai.xi 
4112*53ee8cc1Swenshuai.xi             if(ucReceiveCount > 0)
4113*53ee8cc1Swenshuai.xi             {
4114*53ee8cc1Swenshuai.xi                 for( ; ucReceiveCount > 0; ucReceiveCount--)
4115*53ee8cc1Swenshuai.xi                 {
4116*53ee8cc1Swenshuai.xi                     if(_mdrv_mhl_GetCbusReceiveMSC(ucReceiveMSC))
4117*53ee8cc1Swenshuai.xi                     {
4118*53ee8cc1Swenshuai.xi                         _mdrv_mhl_SetReceiveCaseFlag(pMHLResourcePrivate, ucReceiveMSC);
4119*53ee8cc1Swenshuai.xi 
4120*53ee8cc1Swenshuai.xi                         pMHLResourcePrivate->ucReceiveCounter--;
4121*53ee8cc1Swenshuai.xi                     }
4122*53ee8cc1Swenshuai.xi                 }
4123*53ee8cc1Swenshuai.xi             }
4124*53ee8cc1Swenshuai.xi             else if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_RECEIVE_LOSE_FLAG))
4125*53ee8cc1Swenshuai.xi             {
4126*53ee8cc1Swenshuai.xi                 SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_RECEIVE_LOSE_FLAG);
4127*53ee8cc1Swenshuai.xi 
4128*53ee8cc1Swenshuai.xi                 _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_CHECK_RECEIVE_LOSE, MHL_CHECK_RECEIVE_LOSE_TIME);
4129*53ee8cc1Swenshuai.xi             }
4130*53ee8cc1Swenshuai.xi         }
4131*53ee8cc1Swenshuai.xi 
4132*53ee8cc1Swenshuai.xi         // Check receive EMSC
4133*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucEMSCReceiveCounter > 0)
4134*53ee8cc1Swenshuai.xi         {
4135*53ee8cc1Swenshuai.xi             _mdrv_mhl_ParsingEMSCReceiveData(pMHLResourcePrivate);
4136*53ee8cc1Swenshuai.xi 
4137*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucEMSCReceiveCounter--;
4138*53ee8cc1Swenshuai.xi         }
4139*53ee8cc1Swenshuai.xi 
4140*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ulCbusReceiveIndex > 0)
4141*53ee8cc1Swenshuai.xi         {
4142*53ee8cc1Swenshuai.xi             _mdrv_mhl_CbusReceiveEventProc(pMHLResourcePrivate);
4143*53ee8cc1Swenshuai.xi 
4144*53ee8cc1Swenshuai.xi             _mdrv_mhl_CbusMSGEventProc(pMHLResourcePrivate);
4145*53ee8cc1Swenshuai.xi         }
4146*53ee8cc1Swenshuai.xi     }
4147*53ee8cc1Swenshuai.xi }
4148*53ee8cc1Swenshuai.xi 
4149*53ee8cc1Swenshuai.xi //**************************************************************************
4150*53ee8cc1Swenshuai.xi //  [Function Name]:
4151*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_TxQueueHandler()
4152*53ee8cc1Swenshuai.xi //  [Description]
4153*53ee8cc1Swenshuai.xi //
4154*53ee8cc1Swenshuai.xi //  [Arguments]:
4155*53ee8cc1Swenshuai.xi //
4156*53ee8cc1Swenshuai.xi //  [Return]:
4157*53ee8cc1Swenshuai.xi //
4158*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_TxQueueHandler(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4159*53ee8cc1Swenshuai.xi void _mdrv_mhl_TxQueueHandler(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4160*53ee8cc1Swenshuai.xi {
4161*53ee8cc1Swenshuai.xi     MS_U8 ucQueueIndex = 0;
4162*53ee8cc1Swenshuai.xi 
4163*53ee8cc1Swenshuai.xi     if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_SEND_FLAG))
4164*53ee8cc1Swenshuai.xi     {
4165*53ee8cc1Swenshuai.xi         ucQueueIndex = _mdrv_mhl_GetCbusQueueIndex(pMHLResourcePrivate);
4166*53ee8cc1Swenshuai.xi 
4167*53ee8cc1Swenshuai.xi         if(ucQueueIndex < MHL_CBUS_TOTAL_QUEUE_NUM)
4168*53ee8cc1Swenshuai.xi         {
4169*53ee8cc1Swenshuai.xi             if(_mdrv_mhl_CbusTxWriteCommand(pMHLResourcePrivate->stSignalStatusInfo.bECbusEnableFlag, &(pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex])))
4170*53ee8cc1Swenshuai.xi             {
4171*53ee8cc1Swenshuai.xi                 // Retry send packet twice
4172*53ee8cc1Swenshuai.xi                 if(pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState == MHL_QUEUE_STATE_SEND)
4173*53ee8cc1Swenshuai.xi                 {
4174*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_IDLE;
4175*53ee8cc1Swenshuai.xi                 }
4176*53ee8cc1Swenshuai.xi                 else if(pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState > MHL_QUEUE_STATE_SEND)
4177*53ee8cc1Swenshuai.xi                 {
4178*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->stCbusQueueInfo[ucQueueIndex].ucQueueState = MHL_QUEUE_STATE_SEND;
4179*53ee8cc1Swenshuai.xi                 }
4180*53ee8cc1Swenshuai.xi 
4181*53ee8cc1Swenshuai.xi                 // Update current index to search index, but not Rx queue index
4182*53ee8cc1Swenshuai.xi                 if(ucQueueIndex < MHL_CBUS_RX_QUEUE_INDEX)
4183*53ee8cc1Swenshuai.xi                 {
4184*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucCurrentQueueIndex = ucQueueIndex;
4185*53ee8cc1Swenshuai.xi                 }
4186*53ee8cc1Swenshuai.xi 
4187*53ee8cc1Swenshuai.xi                 _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_CBUS_SILENCE, MHL_CBUS_SEND_SILENCE_TIME);
4188*53ee8cc1Swenshuai.xi 
4189*53ee8cc1Swenshuai.xi                 CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_SEND_FLAG);
4190*53ee8cc1Swenshuai.xi             }
4191*53ee8cc1Swenshuai.xi         }
4192*53ee8cc1Swenshuai.xi     }
4193*53ee8cc1Swenshuai.xi }
4194*53ee8cc1Swenshuai.xi 
4195*53ee8cc1Swenshuai.xi //**************************************************************************
4196*53ee8cc1Swenshuai.xi //  [Function Name]:
4197*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_SendDisplayCommand()
4198*53ee8cc1Swenshuai.xi //  [Description]
4199*53ee8cc1Swenshuai.xi //
4200*53ee8cc1Swenshuai.xi //  [Arguments]:
4201*53ee8cc1Swenshuai.xi //
4202*53ee8cc1Swenshuai.xi //  [Return]:
4203*53ee8cc1Swenshuai.xi //
4204*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendDisplayCommand(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4205*53ee8cc1Swenshuai.xi void _mdrv_mhl_SendDisplayCommand(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4206*53ee8cc1Swenshuai.xi {
4207*53ee8cc1Swenshuai.xi     MS_U8 ucDisplayIndex = (pMHLResourcePrivate->usDisplayIndex) &BMASK(7:0);
4208*53ee8cc1Swenshuai.xi     MS_U8 ucDisplayMask = MHL_CBUS_DISPLAY_MASK;
4209*53ee8cc1Swenshuai.xi 
4210*53ee8cc1Swenshuai.xi     if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_DISPLAY_COMMAND_ENABLE_FLAG))
4211*53ee8cc1Swenshuai.xi     {
4212*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_CheckSendCommand(pMHLResourcePrivate))
4213*53ee8cc1Swenshuai.xi         {
4214*53ee8cc1Swenshuai.xi             if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_ECBUS_FUNCTION_FLAG))
4215*53ee8cc1Swenshuai.xi             {
4216*53ee8cc1Swenshuai.xi                 ucDisplayMask = ucDisplayMask |MHL_ECBUS_DISPLAY_MASK;
4217*53ee8cc1Swenshuai.xi             }
4218*53ee8cc1Swenshuai.xi 
4219*53ee8cc1Swenshuai.xi             ucDisplayIndex = ucDisplayIndex ^ucDisplayMask;
4220*53ee8cc1Swenshuai.xi 
4221*53ee8cc1Swenshuai.xi             if(ucDisplayIndex > 0)
4222*53ee8cc1Swenshuai.xi             {
4223*53ee8cc1Swenshuai.xi                 switch(_mdrv_mhl_CbusGetLeastFlag(ucDisplayIndex))
4224*53ee8cc1Swenshuai.xi                 {
4225*53ee8cc1Swenshuai.xi                     case MHL_CBUS_HPD_SET_FLAG:
4226*53ee8cc1Swenshuai.xi                         _mdrv_mhl_CbusSendSetHPD(pMHLResourcePrivate, TRUE);
4227*53ee8cc1Swenshuai.xi                         break;
4228*53ee8cc1Swenshuai.xi 
4229*53ee8cc1Swenshuai.xi                     case MHL_CBUS_DEVCAP_READY_FLAG:
4230*53ee8cc1Swenshuai.xi                         _mdrv_mhl_CbusSendDevcapReady(pMHLResourcePrivate);
4231*53ee8cc1Swenshuai.xi                         break;
4232*53ee8cc1Swenshuai.xi 
4233*53ee8cc1Swenshuai.xi                     case MHL_CBUS_PATH_EN_FLAG:
4234*53ee8cc1Swenshuai.xi                         _mdrv_mhl_CbusSendPathEnable(pMHLResourcePrivate, TRUE);
4235*53ee8cc1Swenshuai.xi                         break;
4236*53ee8cc1Swenshuai.xi 
4237*53ee8cc1Swenshuai.xi                     case MHL_CBUS_DEVCAP_CHANGE_FLAG:
4238*53ee8cc1Swenshuai.xi                         _mdrv_mhl_CbusSendDevcapChange(pMHLResourcePrivate);
4239*53ee8cc1Swenshuai.xi                         break;
4240*53ee8cc1Swenshuai.xi 
4241*53ee8cc1Swenshuai.xi                     case MHL_CBUS_VERSION_CODE_FLAG:
4242*53ee8cc1Swenshuai.xi                         _mdrv_mhl_CbusSendVersionCode(pMHLResourcePrivate);
4243*53ee8cc1Swenshuai.xi                         break;
4244*53ee8cc1Swenshuai.xi 
4245*53ee8cc1Swenshuai.xi                     case MHL_CBUS_LINK_STATUS_NORMAL_FLAG:
4246*53ee8cc1Swenshuai.xi                         _mdrv_mhl_CbusSendLinkStatusNormal(pMHLResourcePrivate);
4247*53ee8cc1Swenshuai.xi                         break;
4248*53ee8cc1Swenshuai.xi 
4249*53ee8cc1Swenshuai.xi                     default:
4250*53ee8cc1Swenshuai.xi 
4251*53ee8cc1Swenshuai.xi                         break;
4252*53ee8cc1Swenshuai.xi                 };
4253*53ee8cc1Swenshuai.xi             }
4254*53ee8cc1Swenshuai.xi         }
4255*53ee8cc1Swenshuai.xi         else if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CHECK_CONTENT_ON_FLAG))
4256*53ee8cc1Swenshuai.xi         {
4257*53ee8cc1Swenshuai.xi             if(!GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_HPD_SET_FLAG))
4258*53ee8cc1Swenshuai.xi             {
4259*53ee8cc1Swenshuai.xi                 _mdrv_mhl_CbusSendSetHPD(pMHLResourcePrivate, TRUE);
4260*53ee8cc1Swenshuai.xi             }
4261*53ee8cc1Swenshuai.xi             else if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_PATH_EN_FLAG))
4262*53ee8cc1Swenshuai.xi             {
4263*53ee8cc1Swenshuai.xi                 _mdrv_mhl_CbusSendPathEnable(pMHLResourcePrivate, FALSE);
4264*53ee8cc1Swenshuai.xi             }
4265*53ee8cc1Swenshuai.xi             else if(!GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_READY_FLAG))
4266*53ee8cc1Swenshuai.xi             {
4267*53ee8cc1Swenshuai.xi                 _mdrv_mhl_CbusSendDevcapReady(pMHLResourcePrivate);
4268*53ee8cc1Swenshuai.xi             }
4269*53ee8cc1Swenshuai.xi         }
4270*53ee8cc1Swenshuai.xi         else
4271*53ee8cc1Swenshuai.xi         {
4272*53ee8cc1Swenshuai.xi             if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_HPD_SET_FLAG))
4273*53ee8cc1Swenshuai.xi             {
4274*53ee8cc1Swenshuai.xi                 _mdrv_mhl_CbusSendSetHPD(pMHLResourcePrivate, FALSE);
4275*53ee8cc1Swenshuai.xi 
4276*53ee8cc1Swenshuai.xi                 CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_PATH_EN_FLAG);
4277*53ee8cc1Swenshuai.xi 
4278*53ee8cc1Swenshuai.xi                 if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_LINK_STATUS_NORMAL_FLAG))
4279*53ee8cc1Swenshuai.xi                 {
4280*53ee8cc1Swenshuai.xi                     CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_LINK_STATUS_NORMAL_FLAG);
4281*53ee8cc1Swenshuai.xi                 }
4282*53ee8cc1Swenshuai.xi             }
4283*53ee8cc1Swenshuai.xi 
4284*53ee8cc1Swenshuai.xi             if(GET_MHL_DEVICE_FLAG(pMHLResourcePrivate->usDeviceIndex, MHL_DEVICE_ROKU_DONGLE_FLAG))
4285*53ee8cc1Swenshuai.xi             {
4286*53ee8cc1Swenshuai.xi                 if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_READY_FLAG))
4287*53ee8cc1Swenshuai.xi                 {
4288*53ee8cc1Swenshuai.xi                     _mdrv_mhl_CbusSendDevcapReady(pMHLResourcePrivate);
4289*53ee8cc1Swenshuai.xi                 }
4290*53ee8cc1Swenshuai.xi                 else if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_PATH_EN_FLAG))
4291*53ee8cc1Swenshuai.xi                 {
4292*53ee8cc1Swenshuai.xi                     _mdrv_mhl_CbusSendPathEnable(pMHLResourcePrivate, TRUE);
4293*53ee8cc1Swenshuai.xi                 }
4294*53ee8cc1Swenshuai.xi             }
4295*53ee8cc1Swenshuai.xi 
4296*53ee8cc1Swenshuai.xi             if(GET_MHL_DEVICE_FLAG(pMHLResourcePrivate->usDeviceIndex, MHL_DEVICE_PHONE_HTC_FLAG))
4297*53ee8cc1Swenshuai.xi             {
4298*53ee8cc1Swenshuai.xi                 if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_READY_FLAG))
4299*53ee8cc1Swenshuai.xi                 {
4300*53ee8cc1Swenshuai.xi                     _mdrv_mhl_CbusSendDevcapReady(pMHLResourcePrivate);
4301*53ee8cc1Swenshuai.xi                 }
4302*53ee8cc1Swenshuai.xi             }
4303*53ee8cc1Swenshuai.xi             else if(GET_MHL_DEVICE_FLAG(pMHLResourcePrivate->usDeviceIndex, MHL_DEVICE_PHONE_SONY_FLAG))
4304*53ee8cc1Swenshuai.xi             {
4305*53ee8cc1Swenshuai.xi                 if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_DEVCAP_READY_FLAG))
4306*53ee8cc1Swenshuai.xi                 {
4307*53ee8cc1Swenshuai.xi                     _mdrv_mhl_CbusSendDevcapReady(pMHLResourcePrivate);
4308*53ee8cc1Swenshuai.xi                 }
4309*53ee8cc1Swenshuai.xi             }
4310*53ee8cc1Swenshuai.xi         }
4311*53ee8cc1Swenshuai.xi     }
4312*53ee8cc1Swenshuai.xi }
4313*53ee8cc1Swenshuai.xi 
4314*53ee8cc1Swenshuai.xi //**************************************************************************
4315*53ee8cc1Swenshuai.xi //  [Function Name]:
4316*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_GetVenderIDProc()
4317*53ee8cc1Swenshuai.xi //  [Description]
4318*53ee8cc1Swenshuai.xi //
4319*53ee8cc1Swenshuai.xi //  [Arguments]:
4320*53ee8cc1Swenshuai.xi //
4321*53ee8cc1Swenshuai.xi //  [Return]:
4322*53ee8cc1Swenshuai.xi //
4323*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetVenderIDProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4324*53ee8cc1Swenshuai.xi void _mdrv_mhl_GetVenderIDProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4325*53ee8cc1Swenshuai.xi {
4326*53ee8cc1Swenshuai.xi     if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_GET_VENDER_ID_FLAG))
4327*53ee8cc1Swenshuai.xi     {
4328*53ee8cc1Swenshuai.xi         if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_GET_VENDER_ID_FLAG))
4329*53ee8cc1Swenshuai.xi         {
4330*53ee8cc1Swenshuai.xi             if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG))
4331*53ee8cc1Swenshuai.xi             {
4332*53ee8cc1Swenshuai.xi                 CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG);
4333*53ee8cc1Swenshuai.xi                 CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_GET_VENDER_ID_FLAG);
4334*53ee8cc1Swenshuai.xi                 CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_GET_VENDER_ID_FLAG);
4335*53ee8cc1Swenshuai.xi                 SET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_GET_VENDER_ID_DONE_FLAG);
4336*53ee8cc1Swenshuai.xi 
4337*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucSourceVenderID = pMHLResourcePrivate->ucAskData;
4338*53ee8cc1Swenshuai.xi 
4339*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_SOURCE_INFO)
4340*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL get vender ID %d\r\n", pMHLResourcePrivate->ucSourceVenderID);
4341*53ee8cc1Swenshuai.xi #endif
4342*53ee8cc1Swenshuai.xi             }
4343*53ee8cc1Swenshuai.xi         }
4344*53ee8cc1Swenshuai.xi         else if((!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG)) && (!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG)))
4345*53ee8cc1Swenshuai.xi         {
4346*53ee8cc1Swenshuai.xi             if(_mdrv_mhl_CbusSendGetVenderID(pMHLResourcePrivate))
4347*53ee8cc1Swenshuai.xi             {
4348*53ee8cc1Swenshuai.xi                 SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_GET_VENDER_ID_FLAG);
4349*53ee8cc1Swenshuai.xi                 SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG);
4350*53ee8cc1Swenshuai.xi             }
4351*53ee8cc1Swenshuai.xi         }
4352*53ee8cc1Swenshuai.xi     }
4353*53ee8cc1Swenshuai.xi }
4354*53ee8cc1Swenshuai.xi 
4355*53ee8cc1Swenshuai.xi //**************************************************************************
4356*53ee8cc1Swenshuai.xi //  [Function Name]:
4357*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CheckDeviceCapability()
4358*53ee8cc1Swenshuai.xi //  [Description]
4359*53ee8cc1Swenshuai.xi //
4360*53ee8cc1Swenshuai.xi //  [Arguments]:
4361*53ee8cc1Swenshuai.xi //
4362*53ee8cc1Swenshuai.xi //  [Return]:
4363*53ee8cc1Swenshuai.xi //
4364*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckDeviceCapability(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4365*53ee8cc1Swenshuai.xi void _mdrv_mhl_CheckDeviceCapability(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4366*53ee8cc1Swenshuai.xi {
4367*53ee8cc1Swenshuai.xi     MS_U16 usAdopterID = 0;
4368*53ee8cc1Swenshuai.xi     MS_U16 usDeviceID = 0;
4369*53ee8cc1Swenshuai.xi 
4370*53ee8cc1Swenshuai.xi     usAdopterID = pMHLResourcePrivate->ucSourceDevcapTable[4] |(pMHLResourcePrivate->ucSourceDevcapTable[3] << 8);
4371*53ee8cc1Swenshuai.xi     usDeviceID = pMHLResourcePrivate->ucSourceDevcapTable[12] |(pMHLResourcePrivate->ucSourceDevcapTable[11] << 8);
4372*53ee8cc1Swenshuai.xi 
4373*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->usDeviceIndex = 0;
4374*53ee8cc1Swenshuai.xi 
4375*53ee8cc1Swenshuai.xi     if(usAdopterID == MHL_ADOPTER_ID_ROKU)
4376*53ee8cc1Swenshuai.xi     {
4377*53ee8cc1Swenshuai.xi         SET_MHL_DEVICE_FLAG(pMHLResourcePrivate->usDeviceIndex, MHL_DEVICE_ROKU_DONGLE_FLAG);
4378*53ee8cc1Swenshuai.xi     }
4379*53ee8cc1Swenshuai.xi 
4380*53ee8cc1Swenshuai.xi     if(usAdopterID == MHL_ADOPTER_ID_HTC)
4381*53ee8cc1Swenshuai.xi     {
4382*53ee8cc1Swenshuai.xi         SET_MHL_DEVICE_FLAG(pMHLResourcePrivate->usDeviceIndex, MHL_DEVICE_PHONE_HTC_FLAG);
4383*53ee8cc1Swenshuai.xi     }
4384*53ee8cc1Swenshuai.xi 
4385*53ee8cc1Swenshuai.xi     if(usAdopterID == MHL_ADOPTER_ID_SONY)
4386*53ee8cc1Swenshuai.xi     {
4387*53ee8cc1Swenshuai.xi         SET_MHL_DEVICE_FLAG(pMHLResourcePrivate->usDeviceIndex, MHL_DEVICE_PHONE_SONY_FLAG);
4388*53ee8cc1Swenshuai.xi     }
4389*53ee8cc1Swenshuai.xi 
4390*53ee8cc1Swenshuai.xi     if(usDeviceID == MHL_DEVICE_ID_HTC)
4391*53ee8cc1Swenshuai.xi     {
4392*53ee8cc1Swenshuai.xi         // Do nothing
4393*53ee8cc1Swenshuai.xi     }
4394*53ee8cc1Swenshuai.xi 
4395*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->ucSourceDevcapTable[MHL_CBUS_FEATURE_FLAG] &BIT(0))
4396*53ee8cc1Swenshuai.xi     {
4397*53ee8cc1Swenshuai.xi         SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_RCP_FUNCTION_FLAG);
4398*53ee8cc1Swenshuai.xi     }
4399*53ee8cc1Swenshuai.xi 
4400*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->ucSourceDevcapTable[MHL_CBUS_FEATURE_FLAG] &BIT(1))
4401*53ee8cc1Swenshuai.xi     {
4402*53ee8cc1Swenshuai.xi         SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_RAP_FUNCTION_FLAG);
4403*53ee8cc1Swenshuai.xi     }
4404*53ee8cc1Swenshuai.xi 
4405*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->ucSourceDevcapTable[MHL_CBUS_VERSION] >= 0x30)
4406*53ee8cc1Swenshuai.xi     {
4407*53ee8cc1Swenshuai.xi         SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MHL3_VERSION_FLAG);
4408*53ee8cc1Swenshuai.xi     }
4409*53ee8cc1Swenshuai.xi }
4410*53ee8cc1Swenshuai.xi 
4411*53ee8cc1Swenshuai.xi //**************************************************************************
4412*53ee8cc1Swenshuai.xi //  [Function Name]:
4413*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_ReadDeviceCapabilityProc()
4414*53ee8cc1Swenshuai.xi //  [Description]
4415*53ee8cc1Swenshuai.xi //
4416*53ee8cc1Swenshuai.xi //  [Arguments]:
4417*53ee8cc1Swenshuai.xi //
4418*53ee8cc1Swenshuai.xi //  [Return]:
4419*53ee8cc1Swenshuai.xi //
4420*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ReadDeviceCapabilityProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4421*53ee8cc1Swenshuai.xi void _mdrv_mhl_ReadDeviceCapabilityProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4422*53ee8cc1Swenshuai.xi {
4423*53ee8cc1Swenshuai.xi     MS_BOOL bReDoFlag = FALSE;
4424*53ee8cc1Swenshuai.xi     MS_U8 ucBitNumber = 0;
4425*53ee8cc1Swenshuai.xi 
4426*53ee8cc1Swenshuai.xi     if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_DEVCAP_FLAG))
4427*53ee8cc1Swenshuai.xi     {
4428*53ee8cc1Swenshuai.xi         do
4429*53ee8cc1Swenshuai.xi         {
4430*53ee8cc1Swenshuai.xi             bReDoFlag = FALSE;
4431*53ee8cc1Swenshuai.xi 
4432*53ee8cc1Swenshuai.xi             if(pMHLResourcePrivate->usReadDevcapMask > 0)
4433*53ee8cc1Swenshuai.xi             {
4434*53ee8cc1Swenshuai.xi                 ucBitNumber = _mdrv_mhl_GetLeastBitNum(pMHLResourcePrivate->usReadDevcapMask);
4435*53ee8cc1Swenshuai.xi 
4436*53ee8cc1Swenshuai.xi                 if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_READ_DEVCAP_FLAG))
4437*53ee8cc1Swenshuai.xi                 {
4438*53ee8cc1Swenshuai.xi                     if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG))
4439*53ee8cc1Swenshuai.xi                     {
4440*53ee8cc1Swenshuai.xi                         CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG);
4441*53ee8cc1Swenshuai.xi                         CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_READ_DEVCAP_FLAG);
4442*53ee8cc1Swenshuai.xi 
4443*53ee8cc1Swenshuai.xi                         pMHLResourcePrivate->ucSourceDevcapTable[ucBitNumber] = pMHLResourcePrivate->ucAskData;
4444*53ee8cc1Swenshuai.xi 
4445*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_SOURCE_INFO)
4446*53ee8cc1Swenshuai.xi                         MDRV_MHL_MSG_INFO("** MHL read devcap[%d] = %x\r\n", ucBitNumber, pMHLResourcePrivate->ucSourceDevcapTable[ucBitNumber]);
4447*53ee8cc1Swenshuai.xi #endif
4448*53ee8cc1Swenshuai.xi 
4449*53ee8cc1Swenshuai.xi                         bReDoFlag = TRUE;
4450*53ee8cc1Swenshuai.xi                     }
4451*53ee8cc1Swenshuai.xi                 }
4452*53ee8cc1Swenshuai.xi                 else if((!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG)) && (!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG)))
4453*53ee8cc1Swenshuai.xi                 {
4454*53ee8cc1Swenshuai.xi                     if(_mdrv_mhl_CbusReadDeviceCapability(pMHLResourcePrivate, ucBitNumber, FALSE))
4455*53ee8cc1Swenshuai.xi                     {
4456*53ee8cc1Swenshuai.xi                         SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_READ_DEVCAP_FLAG);
4457*53ee8cc1Swenshuai.xi                         SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG);
4458*53ee8cc1Swenshuai.xi                     }
4459*53ee8cc1Swenshuai.xi                 }
4460*53ee8cc1Swenshuai.xi 
4461*53ee8cc1Swenshuai.xi                 if(bReDoFlag)
4462*53ee8cc1Swenshuai.xi                 {
4463*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->usReadDevcapMask = MASKSET(pMHLResourcePrivate->usReadDevcapMask, 0, BIT(ucBitNumber));
4464*53ee8cc1Swenshuai.xi 
4465*53ee8cc1Swenshuai.xi                     if(pMHLResourcePrivate->usReadDevcapMask == 0)
4466*53ee8cc1Swenshuai.xi                     {
4467*53ee8cc1Swenshuai.xi                         SET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_READ_DEVCAP_DONE_FLAG);
4468*53ee8cc1Swenshuai.xi 
4469*53ee8cc1Swenshuai.xi                         _mdrv_mhl_CheckDeviceCapability(pMHLResourcePrivate);
4470*53ee8cc1Swenshuai.xi                     }
4471*53ee8cc1Swenshuai.xi                 }
4472*53ee8cc1Swenshuai.xi             }
4473*53ee8cc1Swenshuai.xi             else
4474*53ee8cc1Swenshuai.xi             {
4475*53ee8cc1Swenshuai.xi                 CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_DEVCAP_FLAG);
4476*53ee8cc1Swenshuai.xi             }
4477*53ee8cc1Swenshuai.xi         }while(bReDoFlag);
4478*53ee8cc1Swenshuai.xi 
4479*53ee8cc1Swenshuai.xi         if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG))
4480*53ee8cc1Swenshuai.xi         {
4481*53ee8cc1Swenshuai.xi             CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG);
4482*53ee8cc1Swenshuai.xi         }
4483*53ee8cc1Swenshuai.xi     }
4484*53ee8cc1Swenshuai.xi     else
4485*53ee8cc1Swenshuai.xi     {
4486*53ee8cc1Swenshuai.xi         if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG))
4487*53ee8cc1Swenshuai.xi         {
4488*53ee8cc1Swenshuai.xi             if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_XDEVCAP_FLAG))
4489*53ee8cc1Swenshuai.xi             {
4490*53ee8cc1Swenshuai.xi                 CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG);
4491*53ee8cc1Swenshuai.xi                 SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_DEVCAP_FLAG);
4492*53ee8cc1Swenshuai.xi             }
4493*53ee8cc1Swenshuai.xi         }
4494*53ee8cc1Swenshuai.xi     }
4495*53ee8cc1Swenshuai.xi }
4496*53ee8cc1Swenshuai.xi 
4497*53ee8cc1Swenshuai.xi //**************************************************************************
4498*53ee8cc1Swenshuai.xi //  [Function Name]:
4499*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_ReadExtendDeviceCapabilityProc()
4500*53ee8cc1Swenshuai.xi //  [Description]
4501*53ee8cc1Swenshuai.xi //
4502*53ee8cc1Swenshuai.xi //  [Arguments]:
4503*53ee8cc1Swenshuai.xi //
4504*53ee8cc1Swenshuai.xi //  [Return]:
4505*53ee8cc1Swenshuai.xi //
4506*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ReadExtendDeviceCapabilityProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4507*53ee8cc1Swenshuai.xi void _mdrv_mhl_ReadExtendDeviceCapabilityProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4508*53ee8cc1Swenshuai.xi {
4509*53ee8cc1Swenshuai.xi     MS_BOOL bReDoFlag = FALSE;
4510*53ee8cc1Swenshuai.xi     MS_U8 ucBitNumber = 0;
4511*53ee8cc1Swenshuai.xi 
4512*53ee8cc1Swenshuai.xi     if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_XDEVCAP_FLAG))
4513*53ee8cc1Swenshuai.xi     {
4514*53ee8cc1Swenshuai.xi         do
4515*53ee8cc1Swenshuai.xi         {
4516*53ee8cc1Swenshuai.xi             bReDoFlag = FALSE;
4517*53ee8cc1Swenshuai.xi 
4518*53ee8cc1Swenshuai.xi             if(pMHLResourcePrivate->usReadExtendDevcapMask > 0)
4519*53ee8cc1Swenshuai.xi             {
4520*53ee8cc1Swenshuai.xi                 ucBitNumber = _mdrv_mhl_GetLeastBitNum(pMHLResourcePrivate->usReadExtendDevcapMask);
4521*53ee8cc1Swenshuai.xi 
4522*53ee8cc1Swenshuai.xi                 if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_READ_DEVCAP_FLAG))
4523*53ee8cc1Swenshuai.xi                 {
4524*53ee8cc1Swenshuai.xi                     if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG))
4525*53ee8cc1Swenshuai.xi                     {
4526*53ee8cc1Swenshuai.xi                         CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG);
4527*53ee8cc1Swenshuai.xi                         CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_READ_DEVCAP_FLAG);
4528*53ee8cc1Swenshuai.xi 
4529*53ee8cc1Swenshuai.xi                         pMHLResourcePrivate->ucSourceDevcapTable[MHL_DEVICE_CAPABILITY_SIZE +ucBitNumber] = pMHLResourcePrivate->ucAskData;
4530*53ee8cc1Swenshuai.xi 
4531*53ee8cc1Swenshuai.xi #if(MHL_DEBUG_SOURCE_INFO)
4532*53ee8cc1Swenshuai.xi                         MDRV_MHL_MSG_INFO("** MHL read extend devcap[%d] = %x\r\n", ucBitNumber, pMHLResourcePrivate->ucSourceDevcapTable[MHL_DEVICE_CAPABILITY_SIZE +ucBitNumber]);
4533*53ee8cc1Swenshuai.xi #endif
4534*53ee8cc1Swenshuai.xi 
4535*53ee8cc1Swenshuai.xi                         bReDoFlag = TRUE;
4536*53ee8cc1Swenshuai.xi                     }
4537*53ee8cc1Swenshuai.xi                 }
4538*53ee8cc1Swenshuai.xi                 else if((!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG)) && (!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_FINISH_FLAG)))
4539*53ee8cc1Swenshuai.xi                 {
4540*53ee8cc1Swenshuai.xi                     if(_mdrv_mhl_CbusReadDeviceCapability(pMHLResourcePrivate, ucBitNumber, TRUE))
4541*53ee8cc1Swenshuai.xi                     {
4542*53ee8cc1Swenshuai.xi                         SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_READ_DEVCAP_FLAG);
4543*53ee8cc1Swenshuai.xi                         SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_ASK_DATA_FLAG);
4544*53ee8cc1Swenshuai.xi                     }
4545*53ee8cc1Swenshuai.xi                 }
4546*53ee8cc1Swenshuai.xi 
4547*53ee8cc1Swenshuai.xi                 if(bReDoFlag)
4548*53ee8cc1Swenshuai.xi                 {
4549*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->usReadExtendDevcapMask = MASKSET(pMHLResourcePrivate->usReadExtendDevcapMask, 0, BIT(ucBitNumber));
4550*53ee8cc1Swenshuai.xi 
4551*53ee8cc1Swenshuai.xi                     if(pMHLResourcePrivate->usReadExtendDevcapMask == 0)
4552*53ee8cc1Swenshuai.xi                     {
4553*53ee8cc1Swenshuai.xi                         SET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_READ_XDEVCAP_DONE_FLAG);
4554*53ee8cc1Swenshuai.xi 
4555*53ee8cc1Swenshuai.xi                         _mdrv_mhl_CheckDeviceCapability(pMHLResourcePrivate);
4556*53ee8cc1Swenshuai.xi                     }
4557*53ee8cc1Swenshuai.xi                 }
4558*53ee8cc1Swenshuai.xi             }
4559*53ee8cc1Swenshuai.xi             else
4560*53ee8cc1Swenshuai.xi             {
4561*53ee8cc1Swenshuai.xi                 CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_XDEVCAP_FLAG);
4562*53ee8cc1Swenshuai.xi             }
4563*53ee8cc1Swenshuai.xi         }while(bReDoFlag);
4564*53ee8cc1Swenshuai.xi 
4565*53ee8cc1Swenshuai.xi         if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_XDEVCAP_SUPPORT_FLAG))
4566*53ee8cc1Swenshuai.xi         {
4567*53ee8cc1Swenshuai.xi             CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_XDEVCAP_SUPPORT_FLAG);
4568*53ee8cc1Swenshuai.xi         }
4569*53ee8cc1Swenshuai.xi     }
4570*53ee8cc1Swenshuai.xi     else
4571*53ee8cc1Swenshuai.xi     {
4572*53ee8cc1Swenshuai.xi         if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_XDEVCAP_SUPPORT_FLAG))
4573*53ee8cc1Swenshuai.xi         {
4574*53ee8cc1Swenshuai.xi             if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_DEVCAP_FLAG))
4575*53ee8cc1Swenshuai.xi             {
4576*53ee8cc1Swenshuai.xi                 CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_XDEVCAP_SUPPORT_FLAG);
4577*53ee8cc1Swenshuai.xi                 SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_XDEVCAP_FLAG);
4578*53ee8cc1Swenshuai.xi             }
4579*53ee8cc1Swenshuai.xi         }
4580*53ee8cc1Swenshuai.xi     }
4581*53ee8cc1Swenshuai.xi }
4582*53ee8cc1Swenshuai.xi 
4583*53ee8cc1Swenshuai.xi //**************************************************************************
4584*53ee8cc1Swenshuai.xi //  [Function Name]:
4585*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_WriteBurstEventProc()
4586*53ee8cc1Swenshuai.xi //  [Description]
4587*53ee8cc1Swenshuai.xi //
4588*53ee8cc1Swenshuai.xi //  [Arguments]:
4589*53ee8cc1Swenshuai.xi //
4590*53ee8cc1Swenshuai.xi //  [Return]:
4591*53ee8cc1Swenshuai.xi //
4592*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_WriteBurstEventProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4593*53ee8cc1Swenshuai.xi void _mdrv_mhl_WriteBurstEventProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4594*53ee8cc1Swenshuai.xi {
4595*53ee8cc1Swenshuai.xi     switch(pMHLResourcePrivate->ucWriteBurstState)
4596*53ee8cc1Swenshuai.xi     {
4597*53ee8cc1Swenshuai.xi         case MHL_CBUS_WRITE_BURST_START:
4598*53ee8cc1Swenshuai.xi             if(_mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x20, BIT(2), FALSE))
4599*53ee8cc1Swenshuai.xi             {
4600*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_REQUEST;
4601*53ee8cc1Swenshuai.xi 
4602*53ee8cc1Swenshuai.xi                 _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_WAIT_WRITE_GRANT, MHL_WAIT_WRITE_GRANT_TIME);
4603*53ee8cc1Swenshuai.xi             }
4604*53ee8cc1Swenshuai.xi 
4605*53ee8cc1Swenshuai.xi             break;
4606*53ee8cc1Swenshuai.xi 
4607*53ee8cc1Swenshuai.xi         case MHL_CBUS_WRITE_BURST_SEND_DATA:
4608*53ee8cc1Swenshuai.xi             if(_mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x20, BIT(1), FALSE))
4609*53ee8cc1Swenshuai.xi             {
4610*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_END;
4611*53ee8cc1Swenshuai.xi             }
4612*53ee8cc1Swenshuai.xi             break;
4613*53ee8cc1Swenshuai.xi 
4614*53ee8cc1Swenshuai.xi         case MHL_CBUS_WRITE_BURST_END:
4615*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_NONE;
4616*53ee8cc1Swenshuai.xi             break;
4617*53ee8cc1Swenshuai.xi 
4618*53ee8cc1Swenshuai.xi         default:
4619*53ee8cc1Swenshuai.xi 
4620*53ee8cc1Swenshuai.xi             break;
4621*53ee8cc1Swenshuai.xi     };
4622*53ee8cc1Swenshuai.xi }
4623*53ee8cc1Swenshuai.xi 
4624*53ee8cc1Swenshuai.xi //**************************************************************************
4625*53ee8cc1Swenshuai.xi //  [Function Name]:
4626*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_GetDTDBurstfor3D()
4627*53ee8cc1Swenshuai.xi //  [Description]
4628*53ee8cc1Swenshuai.xi //
4629*53ee8cc1Swenshuai.xi //  [Arguments]:
4630*53ee8cc1Swenshuai.xi //
4631*53ee8cc1Swenshuai.xi //  [Return]:
4632*53ee8cc1Swenshuai.xi //
4633*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetDTDBurstfor3D(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pData)4634*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetDTDBurstfor3D(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pData)
4635*53ee8cc1Swenshuai.xi {
4636*53ee8cc1Swenshuai.xi     MS_BOOL bFinish = FALSE;
4637*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
4638*53ee8cc1Swenshuai.xi     MS_U8 ucDTDCount = 0;
4639*53ee8cc1Swenshuai.xi     MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
4640*53ee8cc1Swenshuai.xi 
4641*53ee8cc1Swenshuai.xi     ucDTDCount = ucSequence *MHL_3D_SEQUENCE_LENGTH;
4642*53ee8cc1Swenshuai.xi 
4643*53ee8cc1Swenshuai.xi     pData[0] = (MHL_BURST_ID_3D_DTD >> 8);
4644*53ee8cc1Swenshuai.xi     pData[1] = (MHL_BURST_ID_3D_DTD &BMASK(7:0));
4645*53ee8cc1Swenshuai.xi     pData[3] = pMHLResourcePrivate->uc3DTotalEntryDTD;
4646*53ee8cc1Swenshuai.xi 
4647*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->uc3DTotalEntryDTD == 0)
4648*53ee8cc1Swenshuai.xi     {
4649*53ee8cc1Swenshuai.xi         bFinish = TRUE;
4650*53ee8cc1Swenshuai.xi     }
4651*53ee8cc1Swenshuai.xi 
4652*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < MHL_3D_SEQUENCE_LENGTH; uctemp++)
4653*53ee8cc1Swenshuai.xi     {
4654*53ee8cc1Swenshuai.xi         if((!bFinish) && ((ucDTDCount +uctemp) == (pMHLResourcePrivate->uc3DTotalEntryDTD -1)))
4655*53ee8cc1Swenshuai.xi         {
4656*53ee8cc1Swenshuai.xi             bFinish = TRUE;
4657*53ee8cc1Swenshuai.xi         }
4658*53ee8cc1Swenshuai.xi 
4659*53ee8cc1Swenshuai.xi         if((ucDTDCount +uctemp) < pMHLResourcePrivate->uc3DTotalEntryDTD)
4660*53ee8cc1Swenshuai.xi         {
4661*53ee8cc1Swenshuai.xi             pData[6 +uctemp *MHL_3D_ITEM_LENGTH] = 0;
4662*53ee8cc1Swenshuai.xi             pData[6 +uctemp *MHL_3D_ITEM_LENGTH +1] = pMHLResourcePrivate->uc3DInformationDTD[ucDTDCount +uctemp] &BMASK(3:0);
4663*53ee8cc1Swenshuai.xi         }
4664*53ee8cc1Swenshuai.xi         else
4665*53ee8cc1Swenshuai.xi         {
4666*53ee8cc1Swenshuai.xi             pData[6 +uctemp *MHL_3D_ITEM_LENGTH] = 0;
4667*53ee8cc1Swenshuai.xi             pData[6 +uctemp *MHL_3D_ITEM_LENGTH +1] = 0;
4668*53ee8cc1Swenshuai.xi         }
4669*53ee8cc1Swenshuai.xi     }
4670*53ee8cc1Swenshuai.xi 
4671*53ee8cc1Swenshuai.xi     ucSequence++;
4672*53ee8cc1Swenshuai.xi 
4673*53ee8cc1Swenshuai.xi     pData[4] = ucSequence;
4674*53ee8cc1Swenshuai.xi 
4675*53ee8cc1Swenshuai.xi     if(bFinish)
4676*53ee8cc1Swenshuai.xi     {
4677*53ee8cc1Swenshuai.xi         pData[5] = pMHLResourcePrivate->uc3DTotalEntryDTD -ucDTDCount;
4678*53ee8cc1Swenshuai.xi         ucSequence = 0;
4679*53ee8cc1Swenshuai.xi     }
4680*53ee8cc1Swenshuai.xi     else
4681*53ee8cc1Swenshuai.xi     {
4682*53ee8cc1Swenshuai.xi         pData[5] = MHL_3D_SEQUENCE_LENGTH;
4683*53ee8cc1Swenshuai.xi     }
4684*53ee8cc1Swenshuai.xi 
4685*53ee8cc1Swenshuai.xi     pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
4686*53ee8cc1Swenshuai.xi 
4687*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
4688*53ee8cc1Swenshuai.xi 
4689*53ee8cc1Swenshuai.xi     return bFinish;
4690*53ee8cc1Swenshuai.xi }
4691*53ee8cc1Swenshuai.xi 
4692*53ee8cc1Swenshuai.xi //**************************************************************************
4693*53ee8cc1Swenshuai.xi //  [Function Name]:
4694*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_GetVICBurstfor3D()
4695*53ee8cc1Swenshuai.xi //  [Description]
4696*53ee8cc1Swenshuai.xi //
4697*53ee8cc1Swenshuai.xi //  [Arguments]:
4698*53ee8cc1Swenshuai.xi //
4699*53ee8cc1Swenshuai.xi //  [Return]:
4700*53ee8cc1Swenshuai.xi //
4701*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetVICBurstfor3D(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pData)4702*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetVICBurstfor3D(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pData)
4703*53ee8cc1Swenshuai.xi {
4704*53ee8cc1Swenshuai.xi     MS_BOOL bFinish = FALSE;
4705*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
4706*53ee8cc1Swenshuai.xi     MS_U8 ucVICCount = 0;
4707*53ee8cc1Swenshuai.xi     MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
4708*53ee8cc1Swenshuai.xi 
4709*53ee8cc1Swenshuai.xi     ucVICCount = ucSequence *MHL_3D_SEQUENCE_LENGTH;
4710*53ee8cc1Swenshuai.xi 
4711*53ee8cc1Swenshuai.xi     pData[0] = (MHL_BURST_ID_3D_VIC >> 8);
4712*53ee8cc1Swenshuai.xi     pData[1] = (MHL_BURST_ID_3D_VIC &BMASK(7:0));
4713*53ee8cc1Swenshuai.xi     pData[3] = pMHLResourcePrivate->uc3DTotalEntryVIC;
4714*53ee8cc1Swenshuai.xi 
4715*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->uc3DTotalEntryVIC == 0)
4716*53ee8cc1Swenshuai.xi     {
4717*53ee8cc1Swenshuai.xi         bFinish = TRUE;
4718*53ee8cc1Swenshuai.xi     }
4719*53ee8cc1Swenshuai.xi 
4720*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < MHL_3D_SEQUENCE_LENGTH; uctemp++)
4721*53ee8cc1Swenshuai.xi     {
4722*53ee8cc1Swenshuai.xi         if((!bFinish) && ((ucVICCount +uctemp) == (pMHLResourcePrivate->uc3DTotalEntryVIC -1)))
4723*53ee8cc1Swenshuai.xi         {
4724*53ee8cc1Swenshuai.xi             bFinish = TRUE;
4725*53ee8cc1Swenshuai.xi         }
4726*53ee8cc1Swenshuai.xi 
4727*53ee8cc1Swenshuai.xi         if((ucVICCount +uctemp) < pMHLResourcePrivate->uc3DTotalEntryVIC)
4728*53ee8cc1Swenshuai.xi         {
4729*53ee8cc1Swenshuai.xi             pData[6 +uctemp *MHL_3D_ITEM_LENGTH] = 0;
4730*53ee8cc1Swenshuai.xi             pData[6 +uctemp *MHL_3D_ITEM_LENGTH +1] = pMHLResourcePrivate->uc3DInformationVIC[ucVICCount +uctemp] &BMASK(3:0);
4731*53ee8cc1Swenshuai.xi         }
4732*53ee8cc1Swenshuai.xi         else
4733*53ee8cc1Swenshuai.xi         {
4734*53ee8cc1Swenshuai.xi             pData[6 +uctemp *MHL_3D_ITEM_LENGTH] = 0;
4735*53ee8cc1Swenshuai.xi             pData[6 +uctemp *MHL_3D_ITEM_LENGTH +1] = 0;
4736*53ee8cc1Swenshuai.xi         }
4737*53ee8cc1Swenshuai.xi     }
4738*53ee8cc1Swenshuai.xi 
4739*53ee8cc1Swenshuai.xi     ucSequence++;
4740*53ee8cc1Swenshuai.xi 
4741*53ee8cc1Swenshuai.xi     pData[4] = ucSequence;
4742*53ee8cc1Swenshuai.xi 
4743*53ee8cc1Swenshuai.xi     if(bFinish)
4744*53ee8cc1Swenshuai.xi     {
4745*53ee8cc1Swenshuai.xi         pData[5] = pMHLResourcePrivate->uc3DTotalEntryVIC -ucVICCount;
4746*53ee8cc1Swenshuai.xi         ucSequence = 0;
4747*53ee8cc1Swenshuai.xi     }
4748*53ee8cc1Swenshuai.xi     else
4749*53ee8cc1Swenshuai.xi     {
4750*53ee8cc1Swenshuai.xi         pData[5] = MHL_3D_SEQUENCE_LENGTH;
4751*53ee8cc1Swenshuai.xi     }
4752*53ee8cc1Swenshuai.xi 
4753*53ee8cc1Swenshuai.xi     pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
4754*53ee8cc1Swenshuai.xi 
4755*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
4756*53ee8cc1Swenshuai.xi 
4757*53ee8cc1Swenshuai.xi     return bFinish;
4758*53ee8cc1Swenshuai.xi }
4759*53ee8cc1Swenshuai.xi 
4760*53ee8cc1Swenshuai.xi //**************************************************************************
4761*53ee8cc1Swenshuai.xi //  [Function Name]:
4762*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_Send3DTimingInformation()
4763*53ee8cc1Swenshuai.xi //  [Description]
4764*53ee8cc1Swenshuai.xi //
4765*53ee8cc1Swenshuai.xi //  [Arguments]:
4766*53ee8cc1Swenshuai.xi //
4767*53ee8cc1Swenshuai.xi //  [Return]:
4768*53ee8cc1Swenshuai.xi //
4769*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_Send3DTimingInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4770*53ee8cc1Swenshuai.xi void _mdrv_mhl_Send3DTimingInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4771*53ee8cc1Swenshuai.xi {
4772*53ee8cc1Swenshuai.xi     MS_BOOL bFinish = FALSE;
4773*53ee8cc1Swenshuai.xi     MS_U8 ucData[MHL_MSC_SCRATCHPAD_SIZE] = {0};
4774*53ee8cc1Swenshuai.xi 
4775*53ee8cc1Swenshuai.xi     if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_DTD_FLAG))
4776*53ee8cc1Swenshuai.xi     {
4777*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_GetDTDBurstfor3D(pMHLResourcePrivate, ucData))
4778*53ee8cc1Swenshuai.xi         {
4779*53ee8cc1Swenshuai.xi             bFinish = TRUE;
4780*53ee8cc1Swenshuai.xi         }
4781*53ee8cc1Swenshuai.xi 
4782*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
4783*53ee8cc1Swenshuai.xi         {
4784*53ee8cc1Swenshuai.xi             if(bFinish)
4785*53ee8cc1Swenshuai.xi             {
4786*53ee8cc1Swenshuai.xi                 CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_DTD_FLAG);
4787*53ee8cc1Swenshuai.xi             }
4788*53ee8cc1Swenshuai.xi 
4789*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
4790*53ee8cc1Swenshuai.xi 
4791*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL sent 3D DTD port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
4792*53ee8cc1Swenshuai.xi         }
4793*53ee8cc1Swenshuai.xi     }
4794*53ee8cc1Swenshuai.xi     else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_VIC_FLAG))
4795*53ee8cc1Swenshuai.xi     {
4796*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_GetVICBurstfor3D(pMHLResourcePrivate, ucData))
4797*53ee8cc1Swenshuai.xi         {
4798*53ee8cc1Swenshuai.xi             bFinish= TRUE;
4799*53ee8cc1Swenshuai.xi         }
4800*53ee8cc1Swenshuai.xi 
4801*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
4802*53ee8cc1Swenshuai.xi         {
4803*53ee8cc1Swenshuai.xi             if(bFinish)
4804*53ee8cc1Swenshuai.xi             {
4805*53ee8cc1Swenshuai.xi                 CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_VIC_FLAG);
4806*53ee8cc1Swenshuai.xi                 CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_INFORMATION_FLAG);
4807*53ee8cc1Swenshuai.xi             }
4808*53ee8cc1Swenshuai.xi 
4809*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
4810*53ee8cc1Swenshuai.xi 
4811*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL sent 3D VIC port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
4812*53ee8cc1Swenshuai.xi         }
4813*53ee8cc1Swenshuai.xi     }
4814*53ee8cc1Swenshuai.xi }
4815*53ee8cc1Swenshuai.xi 
4816*53ee8cc1Swenshuai.xi //**************************************************************************
4817*53ee8cc1Swenshuai.xi //  [Function Name]:
4818*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_GetBurstforVirtualChannel()
4819*53ee8cc1Swenshuai.xi //  [Description]
4820*53ee8cc1Swenshuai.xi //
4821*53ee8cc1Swenshuai.xi //  [Arguments]:
4822*53ee8cc1Swenshuai.xi //
4823*53ee8cc1Swenshuai.xi //  [Return]:
4824*53ee8cc1Swenshuai.xi //
4825*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetBurstforVirtualChannel(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_BOOL bVCConfirm,MS_U8 * pData)4826*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetBurstforVirtualChannel(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_BOOL bVCConfirm, MS_U8 *pData)
4827*53ee8cc1Swenshuai.xi {
4828*53ee8cc1Swenshuai.xi     MS_BOOL bFinish = FALSE;
4829*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
4830*53ee8cc1Swenshuai.xi     MS_U8 ucVCCount = 0;
4831*53ee8cc1Swenshuai.xi     MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
4832*53ee8cc1Swenshuai.xi     MS_U8 ucVCTotalEntry = 0;
4833*53ee8cc1Swenshuai.xi     MS_U8 ucVCFinishEntry = 0;
4834*53ee8cc1Swenshuai.xi     MS_U16 usWriteBurstID = MHL_BURST_ID_VC_ASSIGN;
4835*53ee8cc1Swenshuai.xi 
4836*53ee8cc1Swenshuai.xi     if(bVCConfirm)
4837*53ee8cc1Swenshuai.xi     {
4838*53ee8cc1Swenshuai.xi         usWriteBurstID = MHL_BURST_ID_VC_CONFIRM;
4839*53ee8cc1Swenshuai.xi     }
4840*53ee8cc1Swenshuai.xi 
4841*53ee8cc1Swenshuai.xi     ucVCFinishEntry = ucSequence *MHL_VC_SEQUENCE_LENGTH;
4842*53ee8cc1Swenshuai.xi 
4843*53ee8cc1Swenshuai.xi     pData[0] = (usWriteBurstID >> 8);
4844*53ee8cc1Swenshuai.xi     pData[1] = (usWriteBurstID &BMASK(7:0));
4845*53ee8cc1Swenshuai.xi     pData[15] = 0;
4846*53ee8cc1Swenshuai.xi 
4847*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < MHL_VIRTUAL_CHANNEL_LENGTH; uctemp++)
4848*53ee8cc1Swenshuai.xi     {
4849*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->stVirtualChannelInfo[uctemp].bVCConfirm)
4850*53ee8cc1Swenshuai.xi         {
4851*53ee8cc1Swenshuai.xi             ucVCTotalEntry++;
4852*53ee8cc1Swenshuai.xi 
4853*53ee8cc1Swenshuai.xi             if(ucVCFinishEntry > 0)
4854*53ee8cc1Swenshuai.xi             {
4855*53ee8cc1Swenshuai.xi                 ucVCFinishEntry--;
4856*53ee8cc1Swenshuai.xi             }
4857*53ee8cc1Swenshuai.xi             else if(ucVCCount < MHL_VC_SEQUENCE_LENGTH)
4858*53ee8cc1Swenshuai.xi             {
4859*53ee8cc1Swenshuai.xi                 pData[6 +ucVCCount *MHL_VC_ITEM_LENGTH] = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCNumber;
4860*53ee8cc1Swenshuai.xi                 pData[6 +ucVCCount *MHL_VC_ITEM_LENGTH +1] = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCFeatureID;
4861*53ee8cc1Swenshuai.xi 
4862*53ee8cc1Swenshuai.xi                 if(bVCConfirm)
4863*53ee8cc1Swenshuai.xi                 {
4864*53ee8cc1Swenshuai.xi                     pData[6 +ucVCCount *MHL_VC_ITEM_LENGTH +2] = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCResponseCode;
4865*53ee8cc1Swenshuai.xi                 }
4866*53ee8cc1Swenshuai.xi                 else
4867*53ee8cc1Swenshuai.xi                 {
4868*53ee8cc1Swenshuai.xi                     pData[6 +ucVCCount *MHL_VC_ITEM_LENGTH +2] = pMHLResourcePrivate->stVirtualChannelInfo[uctemp].ucVCSlotSize;
4869*53ee8cc1Swenshuai.xi                 }
4870*53ee8cc1Swenshuai.xi 
4871*53ee8cc1Swenshuai.xi                 ucVCCount++;
4872*53ee8cc1Swenshuai.xi             }
4873*53ee8cc1Swenshuai.xi         }
4874*53ee8cc1Swenshuai.xi     }
4875*53ee8cc1Swenshuai.xi 
4876*53ee8cc1Swenshuai.xi     ucSequence++;
4877*53ee8cc1Swenshuai.xi 
4878*53ee8cc1Swenshuai.xi     pData[3] = ucVCTotalEntry;
4879*53ee8cc1Swenshuai.xi     pData[4] = ucSequence;
4880*53ee8cc1Swenshuai.xi     pData[5] = ucVCCount;
4881*53ee8cc1Swenshuai.xi     pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
4882*53ee8cc1Swenshuai.xi 
4883*53ee8cc1Swenshuai.xi     if(((ucSequence -1) *MHL_VC_SEQUENCE_LENGTH +ucVCCount) == ucVCTotalEntry)
4884*53ee8cc1Swenshuai.xi     {
4885*53ee8cc1Swenshuai.xi         bFinish = TRUE;
4886*53ee8cc1Swenshuai.xi         ucSequence = 0;
4887*53ee8cc1Swenshuai.xi     }
4888*53ee8cc1Swenshuai.xi 
4889*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
4890*53ee8cc1Swenshuai.xi 
4891*53ee8cc1Swenshuai.xi     return bFinish;
4892*53ee8cc1Swenshuai.xi }
4893*53ee8cc1Swenshuai.xi 
4894*53ee8cc1Swenshuai.xi //**************************************************************************
4895*53ee8cc1Swenshuai.xi //  [Function Name]:
4896*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_SendVirtualChannelInformation()
4897*53ee8cc1Swenshuai.xi //  [Description]
4898*53ee8cc1Swenshuai.xi //
4899*53ee8cc1Swenshuai.xi //  [Arguments]:
4900*53ee8cc1Swenshuai.xi //
4901*53ee8cc1Swenshuai.xi //  [Return]:
4902*53ee8cc1Swenshuai.xi //
4903*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendVirtualChannelInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)4904*53ee8cc1Swenshuai.xi void _mdrv_mhl_SendVirtualChannelInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
4905*53ee8cc1Swenshuai.xi {
4906*53ee8cc1Swenshuai.xi     MS_BOOL bFinish = FALSE;
4907*53ee8cc1Swenshuai.xi     MS_BOOL bSendVCConfirm = FALSE;
4908*53ee8cc1Swenshuai.xi     MS_U8 ucData[MHL_MSC_SCRATCHPAD_SIZE] = {0};
4909*53ee8cc1Swenshuai.xi 
4910*53ee8cc1Swenshuai.xi     if(_mdrv_mhl_GetBurstforVirtualChannel(pMHLResourcePrivate, GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_VC_CONFIRM_FLAG), ucData))
4911*53ee8cc1Swenshuai.xi     {
4912*53ee8cc1Swenshuai.xi         bFinish = TRUE;
4913*53ee8cc1Swenshuai.xi     }
4914*53ee8cc1Swenshuai.xi 
4915*53ee8cc1Swenshuai.xi     if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
4916*53ee8cc1Swenshuai.xi     {
4917*53ee8cc1Swenshuai.xi         if(bFinish)
4918*53ee8cc1Swenshuai.xi         {
4919*53ee8cc1Swenshuai.xi             if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_VC_CONFIRM_FLAG))
4920*53ee8cc1Swenshuai.xi             {
4921*53ee8cc1Swenshuai.xi                 CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_VC_CONFIRM_FLAG);
4922*53ee8cc1Swenshuai.xi 
4923*53ee8cc1Swenshuai.xi                 bSendVCConfirm = TRUE;
4924*53ee8cc1Swenshuai.xi             }
4925*53ee8cc1Swenshuai.xi 
4926*53ee8cc1Swenshuai.xi             CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_VC_INFORMATION_FLAG);
4927*53ee8cc1Swenshuai.xi         }
4928*53ee8cc1Swenshuai.xi 
4929*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
4930*53ee8cc1Swenshuai.xi 
4931*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL sent VC information port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
4932*53ee8cc1Swenshuai.xi     }
4933*53ee8cc1Swenshuai.xi 
4934*53ee8cc1Swenshuai.xi     if(bSendVCConfirm)
4935*53ee8cc1Swenshuai.xi     {
4936*53ee8cc1Swenshuai.xi         _mdrv_mhl_SortingVCInformation(pMHLResourcePrivate, TRUE);
4937*53ee8cc1Swenshuai.xi 
4938*53ee8cc1Swenshuai.xi         _mdrv_mhl_eCbusTimeSlotAllocation(pMHLResourcePrivate);
4939*53ee8cc1Swenshuai.xi     }
4940*53ee8cc1Swenshuai.xi }
4941*53ee8cc1Swenshuai.xi 
4942*53ee8cc1Swenshuai.xi //**************************************************************************
4943*53ee8cc1Swenshuai.xi //  [Function Name]:
4944*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetHighEndVideoVIC()
4945*53ee8cc1Swenshuai.xi //  [Description]
4946*53ee8cc1Swenshuai.xi //
4947*53ee8cc1Swenshuai.xi //  [Arguments]:
4948*53ee8cc1Swenshuai.xi //
4949*53ee8cc1Swenshuai.xi //  [Return]:
4950*53ee8cc1Swenshuai.xi //
4951*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetHighEndVideoVIC(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pData)4952*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetHighEndVideoVIC(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pData)
4953*53ee8cc1Swenshuai.xi {
4954*53ee8cc1Swenshuai.xi     MS_BOOL bFinish = FALSE;
4955*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
4956*53ee8cc1Swenshuai.xi     MS_U8 ucEntryCount = 0;
4957*53ee8cc1Swenshuai.xi     MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
4958*53ee8cc1Swenshuai.xi     MS_U8 ucFinishEntry = 0;
4959*53ee8cc1Swenshuai.xi     MS_U8 ucTotalEntry = pMHLResourcePrivate->ucHighEndVICTotalEntry;
4960*53ee8cc1Swenshuai.xi 
4961*53ee8cc1Swenshuai.xi     ucFinishEntry = ucSequence *MHL_HEV_VIC_SEQUENCE_LENGTH;
4962*53ee8cc1Swenshuai.xi 
4963*53ee8cc1Swenshuai.xi     pData[0] = (MHL_BURST_ID_HEV_VIC >> 8);
4964*53ee8cc1Swenshuai.xi     pData[1] = (MHL_BURST_ID_HEV_VIC &BMASK(7:0));
4965*53ee8cc1Swenshuai.xi     pData[3] = ucTotalEntry;
4966*53ee8cc1Swenshuai.xi 
4967*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < MHL_HEV_VIC_SEQUENCE_LENGTH; uctemp++)
4968*53ee8cc1Swenshuai.xi     {
4969*53ee8cc1Swenshuai.xi         if((uctemp +ucFinishEntry) == ucTotalEntry)
4970*53ee8cc1Swenshuai.xi         {
4971*53ee8cc1Swenshuai.xi             break;
4972*53ee8cc1Swenshuai.xi         }
4973*53ee8cc1Swenshuai.xi 
4974*53ee8cc1Swenshuai.xi         pData[6 +(uctemp *2)] = pMHLResourcePrivate->usHighEndVICTable[uctemp +ucFinishEntry] >> 8;
4975*53ee8cc1Swenshuai.xi         pData[7 +(uctemp *2)] = pMHLResourcePrivate->usHighEndVICTable[uctemp +ucFinishEntry] &BMASK(7:0);
4976*53ee8cc1Swenshuai.xi 
4977*53ee8cc1Swenshuai.xi         ucEntryCount++;
4978*53ee8cc1Swenshuai.xi     }
4979*53ee8cc1Swenshuai.xi 
4980*53ee8cc1Swenshuai.xi     ucSequence++;
4981*53ee8cc1Swenshuai.xi 
4982*53ee8cc1Swenshuai.xi     pData[4] = ucSequence;
4983*53ee8cc1Swenshuai.xi     pData[5] = ucEntryCount;
4984*53ee8cc1Swenshuai.xi     pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
4985*53ee8cc1Swenshuai.xi 
4986*53ee8cc1Swenshuai.xi     if(((ucSequence -1) *MHL_HEV_VIC_SEQUENCE_LENGTH +ucEntryCount) == ucTotalEntry)
4987*53ee8cc1Swenshuai.xi     {
4988*53ee8cc1Swenshuai.xi         bFinish = TRUE;
4989*53ee8cc1Swenshuai.xi         ucSequence = 0;
4990*53ee8cc1Swenshuai.xi     }
4991*53ee8cc1Swenshuai.xi 
4992*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
4993*53ee8cc1Swenshuai.xi 
4994*53ee8cc1Swenshuai.xi     return bFinish;
4995*53ee8cc1Swenshuai.xi }
4996*53ee8cc1Swenshuai.xi 
4997*53ee8cc1Swenshuai.xi //**************************************************************************
4998*53ee8cc1Swenshuai.xi //  [Function Name]:
4999*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_GetHighEndVideoDTDA()
5000*53ee8cc1Swenshuai.xi //  [Description]
5001*53ee8cc1Swenshuai.xi //
5002*53ee8cc1Swenshuai.xi //  [Arguments]:
5003*53ee8cc1Swenshuai.xi //
5004*53ee8cc1Swenshuai.xi //  [Return]:
5005*53ee8cc1Swenshuai.xi //
5006*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetHighEndVideoDTDA(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pData)5007*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetHighEndVideoDTDA(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pData)
5008*53ee8cc1Swenshuai.xi {
5009*53ee8cc1Swenshuai.xi     MS_BOOL bFinish = FALSE;
5010*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
5011*53ee8cc1Swenshuai.xi     MS_U8 ucEntryCount = 0;
5012*53ee8cc1Swenshuai.xi     MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
5013*53ee8cc1Swenshuai.xi     MS_U8 ucFinishEntry = 0;
5014*53ee8cc1Swenshuai.xi     MS_U8 ucTotalEntry = MHL_HEV_DTD_TOTAL_ENTRY;
5015*53ee8cc1Swenshuai.xi 
5016*53ee8cc1Swenshuai.xi     ucFinishEntry = ucSequence *MHL_HEV_DTD_SEQUENCE_LENGTH;
5017*53ee8cc1Swenshuai.xi 
5018*53ee8cc1Swenshuai.xi     pData[0] = (MHL_BURST_ID_HEV_DTDA >> 8);
5019*53ee8cc1Swenshuai.xi     pData[1] = (MHL_BURST_ID_HEV_DTDA &BMASK(7:0));
5020*53ee8cc1Swenshuai.xi     pData[3] = MHL_HEV_DTD_TOTAL_ENTRY;
5021*53ee8cc1Swenshuai.xi 
5022*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < ucTotalEntry; uctemp++)
5023*53ee8cc1Swenshuai.xi     {
5024*53ee8cc1Swenshuai.xi         if(ucFinishEntry > 0)
5025*53ee8cc1Swenshuai.xi         {
5026*53ee8cc1Swenshuai.xi             ucFinishEntry--;
5027*53ee8cc1Swenshuai.xi         }
5028*53ee8cc1Swenshuai.xi         else if(ucEntryCount < MHL_HEV_DTD_SEQUENCE_LENGTH)
5029*53ee8cc1Swenshuai.xi         {
5030*53ee8cc1Swenshuai.xi             ucEntryCount++;
5031*53ee8cc1Swenshuai.xi         }
5032*53ee8cc1Swenshuai.xi     }
5033*53ee8cc1Swenshuai.xi 
5034*53ee8cc1Swenshuai.xi     ucSequence++;
5035*53ee8cc1Swenshuai.xi 
5036*53ee8cc1Swenshuai.xi     pData[4] = ucSequence;
5037*53ee8cc1Swenshuai.xi     pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
5038*53ee8cc1Swenshuai.xi 
5039*53ee8cc1Swenshuai.xi     if(((ucSequence -1) *MHL_HEV_DTD_SEQUENCE_LENGTH +ucEntryCount) == MHL_HEV_DTD_TOTAL_ENTRY)
5040*53ee8cc1Swenshuai.xi     {
5041*53ee8cc1Swenshuai.xi         bFinish = TRUE;
5042*53ee8cc1Swenshuai.xi         ucSequence = 0;
5043*53ee8cc1Swenshuai.xi     }
5044*53ee8cc1Swenshuai.xi 
5045*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
5046*53ee8cc1Swenshuai.xi 
5047*53ee8cc1Swenshuai.xi     return bFinish;
5048*53ee8cc1Swenshuai.xi }
5049*53ee8cc1Swenshuai.xi 
5050*53ee8cc1Swenshuai.xi //**************************************************************************
5051*53ee8cc1Swenshuai.xi //  [Function Name]:
5052*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_GetHighEndVideoDTDB()
5053*53ee8cc1Swenshuai.xi //  [Description]
5054*53ee8cc1Swenshuai.xi //
5055*53ee8cc1Swenshuai.xi //  [Arguments]:
5056*53ee8cc1Swenshuai.xi //
5057*53ee8cc1Swenshuai.xi //  [Return]:
5058*53ee8cc1Swenshuai.xi //
5059*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetHighEndVideoDTDB(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pData)5060*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetHighEndVideoDTDB(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pData)
5061*53ee8cc1Swenshuai.xi {
5062*53ee8cc1Swenshuai.xi     MS_BOOL bFinish = FALSE;
5063*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
5064*53ee8cc1Swenshuai.xi     MS_U8 ucEntryCount = 0;
5065*53ee8cc1Swenshuai.xi     MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
5066*53ee8cc1Swenshuai.xi     MS_U8 ucFinishEntry = 0;
5067*53ee8cc1Swenshuai.xi     MS_U8 ucTotalEntry = MHL_HEV_DTD_TOTAL_ENTRY;
5068*53ee8cc1Swenshuai.xi 
5069*53ee8cc1Swenshuai.xi     ucFinishEntry = ucSequence *MHL_HEV_DTD_SEQUENCE_LENGTH;
5070*53ee8cc1Swenshuai.xi 
5071*53ee8cc1Swenshuai.xi     pData[0] = (MHL_BURST_ID_HEV_DTDB >> 8);
5072*53ee8cc1Swenshuai.xi     pData[1] = (MHL_BURST_ID_HEV_DTDB &BMASK(7:0));
5073*53ee8cc1Swenshuai.xi     pData[3] = MHL_HEV_DTD_TOTAL_ENTRY;
5074*53ee8cc1Swenshuai.xi 
5075*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < ucTotalEntry; uctemp++)
5076*53ee8cc1Swenshuai.xi     {
5077*53ee8cc1Swenshuai.xi         if(ucFinishEntry > 0)
5078*53ee8cc1Swenshuai.xi         {
5079*53ee8cc1Swenshuai.xi             ucFinishEntry--;
5080*53ee8cc1Swenshuai.xi         }
5081*53ee8cc1Swenshuai.xi         else if(ucEntryCount < MHL_HEV_DTD_SEQUENCE_LENGTH)
5082*53ee8cc1Swenshuai.xi         {
5083*53ee8cc1Swenshuai.xi             ucEntryCount++;
5084*53ee8cc1Swenshuai.xi         }
5085*53ee8cc1Swenshuai.xi     }
5086*53ee8cc1Swenshuai.xi 
5087*53ee8cc1Swenshuai.xi     ucSequence++;
5088*53ee8cc1Swenshuai.xi 
5089*53ee8cc1Swenshuai.xi     pData[4] = ucSequence;
5090*53ee8cc1Swenshuai.xi     pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
5091*53ee8cc1Swenshuai.xi 
5092*53ee8cc1Swenshuai.xi     if(((ucSequence -1) *MHL_HEV_DTD_SEQUENCE_LENGTH +ucEntryCount) == MHL_HEV_DTD_TOTAL_ENTRY)
5093*53ee8cc1Swenshuai.xi     {
5094*53ee8cc1Swenshuai.xi         bFinish = TRUE;
5095*53ee8cc1Swenshuai.xi         ucSequence = 0;
5096*53ee8cc1Swenshuai.xi     }
5097*53ee8cc1Swenshuai.xi 
5098*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
5099*53ee8cc1Swenshuai.xi 
5100*53ee8cc1Swenshuai.xi     return bFinish;
5101*53ee8cc1Swenshuai.xi }
5102*53ee8cc1Swenshuai.xi 
5103*53ee8cc1Swenshuai.xi //**************************************************************************
5104*53ee8cc1Swenshuai.xi //  [Function Name]:
5105*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_SendHighEndVideoSupport()
5106*53ee8cc1Swenshuai.xi //  [Description]
5107*53ee8cc1Swenshuai.xi //
5108*53ee8cc1Swenshuai.xi //  [Arguments]:
5109*53ee8cc1Swenshuai.xi //
5110*53ee8cc1Swenshuai.xi //  [Return]:
5111*53ee8cc1Swenshuai.xi //
5112*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendHighEndVideoSupport(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5113*53ee8cc1Swenshuai.xi void _mdrv_mhl_SendHighEndVideoSupport(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5114*53ee8cc1Swenshuai.xi {
5115*53ee8cc1Swenshuai.xi     MS_BOOL bFinish = FALSE;
5116*53ee8cc1Swenshuai.xi     MS_U8 ucData[MHL_MSC_SCRATCHPAD_SIZE] = {0};
5117*53ee8cc1Swenshuai.xi 
5118*53ee8cc1Swenshuai.xi     if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_VIC_FLAG))
5119*53ee8cc1Swenshuai.xi     {
5120*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_GetHighEndVideoVIC(pMHLResourcePrivate, ucData))
5121*53ee8cc1Swenshuai.xi         {
5122*53ee8cc1Swenshuai.xi             bFinish = TRUE;
5123*53ee8cc1Swenshuai.xi         }
5124*53ee8cc1Swenshuai.xi 
5125*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
5126*53ee8cc1Swenshuai.xi         {
5127*53ee8cc1Swenshuai.xi             if(bFinish)
5128*53ee8cc1Swenshuai.xi             {
5129*53ee8cc1Swenshuai.xi                 CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_VIC_FLAG);
5130*53ee8cc1Swenshuai.xi             }
5131*53ee8cc1Swenshuai.xi 
5132*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
5133*53ee8cc1Swenshuai.xi 
5134*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL sent HEV VIC port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
5135*53ee8cc1Swenshuai.xi         }
5136*53ee8cc1Swenshuai.xi     }
5137*53ee8cc1Swenshuai.xi     else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_DTDA_FLAG))
5138*53ee8cc1Swenshuai.xi     {
5139*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_GetHighEndVideoDTDA(pMHLResourcePrivate, ucData))
5140*53ee8cc1Swenshuai.xi         {
5141*53ee8cc1Swenshuai.xi             bFinish = TRUE;
5142*53ee8cc1Swenshuai.xi         }
5143*53ee8cc1Swenshuai.xi 
5144*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
5145*53ee8cc1Swenshuai.xi         {
5146*53ee8cc1Swenshuai.xi             if(bFinish)
5147*53ee8cc1Swenshuai.xi             {
5148*53ee8cc1Swenshuai.xi                 CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_DTDA_FLAG);
5149*53ee8cc1Swenshuai.xi             }
5150*53ee8cc1Swenshuai.xi 
5151*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
5152*53ee8cc1Swenshuai.xi 
5153*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL sent HEV DTDA port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
5154*53ee8cc1Swenshuai.xi         }
5155*53ee8cc1Swenshuai.xi     }
5156*53ee8cc1Swenshuai.xi     else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_DTDB_FLAG))
5157*53ee8cc1Swenshuai.xi     {
5158*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_GetHighEndVideoDTDB(pMHLResourcePrivate, ucData))
5159*53ee8cc1Swenshuai.xi         {
5160*53ee8cc1Swenshuai.xi             bFinish = TRUE;
5161*53ee8cc1Swenshuai.xi         }
5162*53ee8cc1Swenshuai.xi 
5163*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
5164*53ee8cc1Swenshuai.xi         {
5165*53ee8cc1Swenshuai.xi             if(bFinish)
5166*53ee8cc1Swenshuai.xi             {
5167*53ee8cc1Swenshuai.xi                 CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_DTDB_FLAG);
5168*53ee8cc1Swenshuai.xi                 CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HIGH_END_VIDEO_FLAG);
5169*53ee8cc1Swenshuai.xi             }
5170*53ee8cc1Swenshuai.xi 
5171*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
5172*53ee8cc1Swenshuai.xi 
5173*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL sent HEV DTDB port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
5174*53ee8cc1Swenshuai.xi         }
5175*53ee8cc1Swenshuai.xi     }
5176*53ee8cc1Swenshuai.xi }
5177*53ee8cc1Swenshuai.xi 
5178*53ee8cc1Swenshuai.xi //**************************************************************************
5179*53ee8cc1Swenshuai.xi //  [Function Name]:
5180*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetAudioDataTunnel()
5181*53ee8cc1Swenshuai.xi //  [Description]
5182*53ee8cc1Swenshuai.xi //
5183*53ee8cc1Swenshuai.xi //  [Arguments]:
5184*53ee8cc1Swenshuai.xi //
5185*53ee8cc1Swenshuai.xi //  [Return]:
5186*53ee8cc1Swenshuai.xi //
5187*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GetAudioDataTunnel(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pData)5188*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GetAudioDataTunnel(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pData)
5189*53ee8cc1Swenshuai.xi {
5190*53ee8cc1Swenshuai.xi     MS_BOOL bFinish = FALSE;
5191*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
5192*53ee8cc1Swenshuai.xi     MS_U8 ucEntryCount = 0;
5193*53ee8cc1Swenshuai.xi     MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
5194*53ee8cc1Swenshuai.xi     MS_U8 ucFinishEntry = 0;
5195*53ee8cc1Swenshuai.xi     MS_U8 ucTotalEntry = MHL_AUDIO_TUNNEL_TOTAL_ENTRY;
5196*53ee8cc1Swenshuai.xi 
5197*53ee8cc1Swenshuai.xi     ucFinishEntry = ucSequence *MHL_AUDIO_TUNNEL_SEQUENCE_LENGTH;
5198*53ee8cc1Swenshuai.xi 
5199*53ee8cc1Swenshuai.xi     pData[0] = (MHL_BURST_ID_ADT_BURSTID >> 8);
5200*53ee8cc1Swenshuai.xi     pData[1] = (MHL_BURST_ID_ADT_BURSTID &BMASK(7:0));
5201*53ee8cc1Swenshuai.xi     pData[3] = ucTotalEntry;
5202*53ee8cc1Swenshuai.xi 
5203*53ee8cc1Swenshuai.xi     if((ucSequence == 0) && (MHL_AUDIO_TUNNEL_SADB_RNTRY > 0)) // Support speaker allocation data block
5204*53ee8cc1Swenshuai.xi     {
5205*53ee8cc1Swenshuai.xi         pData[5] = 1;
5206*53ee8cc1Swenshuai.xi     }
5207*53ee8cc1Swenshuai.xi 
5208*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < MHL_AUDIO_TUNNEL_SEQUENCE_LENGTH; uctemp++)
5209*53ee8cc1Swenshuai.xi     {
5210*53ee8cc1Swenshuai.xi         if((uctemp +ucFinishEntry) == ucTotalEntry)
5211*53ee8cc1Swenshuai.xi         {
5212*53ee8cc1Swenshuai.xi             break;
5213*53ee8cc1Swenshuai.xi         }
5214*53ee8cc1Swenshuai.xi 
5215*53ee8cc1Swenshuai.xi         pData[7 +(uctemp *3)] = pMHLResourcePrivate->ulAudioTunnelTable[uctemp +ucFinishEntry] >> 16;
5216*53ee8cc1Swenshuai.xi         pData[8 +(uctemp *3)] = pMHLResourcePrivate->ulAudioTunnelTable[uctemp +ucFinishEntry] >> 8;
5217*53ee8cc1Swenshuai.xi         pData[9 +(uctemp *3)] = pMHLResourcePrivate->ulAudioTunnelTable[uctemp +ucFinishEntry] &BMASK(7:0);
5218*53ee8cc1Swenshuai.xi 
5219*53ee8cc1Swenshuai.xi         ucEntryCount++;
5220*53ee8cc1Swenshuai.xi     }
5221*53ee8cc1Swenshuai.xi 
5222*53ee8cc1Swenshuai.xi     ucSequence++;
5223*53ee8cc1Swenshuai.xi 
5224*53ee8cc1Swenshuai.xi     pData[4] = ucSequence;
5225*53ee8cc1Swenshuai.xi     pData[6] = ucEntryCount;
5226*53ee8cc1Swenshuai.xi     pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
5227*53ee8cc1Swenshuai.xi 
5228*53ee8cc1Swenshuai.xi     if(((ucSequence -1) *MHL_AUDIO_TUNNEL_SEQUENCE_LENGTH +ucEntryCount) == ucTotalEntry)
5229*53ee8cc1Swenshuai.xi     {
5230*53ee8cc1Swenshuai.xi         bFinish = TRUE;
5231*53ee8cc1Swenshuai.xi         ucSequence = 0;
5232*53ee8cc1Swenshuai.xi     }
5233*53ee8cc1Swenshuai.xi 
5234*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
5235*53ee8cc1Swenshuai.xi 
5236*53ee8cc1Swenshuai.xi     return bFinish;
5237*53ee8cc1Swenshuai.xi }
5238*53ee8cc1Swenshuai.xi 
5239*53ee8cc1Swenshuai.xi //**************************************************************************
5240*53ee8cc1Swenshuai.xi //  [Function Name]:
5241*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_SendAudioDataTunnelSupport()
5242*53ee8cc1Swenshuai.xi //  [Description]
5243*53ee8cc1Swenshuai.xi //
5244*53ee8cc1Swenshuai.xi //  [Arguments]:
5245*53ee8cc1Swenshuai.xi //
5246*53ee8cc1Swenshuai.xi //  [Return]:
5247*53ee8cc1Swenshuai.xi //
5248*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendAudioDataTunnelSupport(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5249*53ee8cc1Swenshuai.xi void _mdrv_mhl_SendAudioDataTunnelSupport(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5250*53ee8cc1Swenshuai.xi {
5251*53ee8cc1Swenshuai.xi     MS_BOOL bFinish = FALSE;
5252*53ee8cc1Swenshuai.xi     MS_U8 ucData[MHL_MSC_SCRATCHPAD_SIZE] = {0};
5253*53ee8cc1Swenshuai.xi 
5254*53ee8cc1Swenshuai.xi     if(_mdrv_mhl_GetAudioDataTunnel(pMHLResourcePrivate, ucData))
5255*53ee8cc1Swenshuai.xi     {
5256*53ee8cc1Swenshuai.xi         bFinish = TRUE;
5257*53ee8cc1Swenshuai.xi     }
5258*53ee8cc1Swenshuai.xi 
5259*53ee8cc1Swenshuai.xi     if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
5260*53ee8cc1Swenshuai.xi     {
5261*53ee8cc1Swenshuai.xi         if(bFinish)
5262*53ee8cc1Swenshuai.xi         {
5263*53ee8cc1Swenshuai.xi             CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_AUDIO_DATA_TUNNEL_FLAG);
5264*53ee8cc1Swenshuai.xi         }
5265*53ee8cc1Swenshuai.xi 
5266*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
5267*53ee8cc1Swenshuai.xi 
5268*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL sent audio tunnel port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
5269*53ee8cc1Swenshuai.xi     }
5270*53ee8cc1Swenshuai.xi }
5271*53ee8cc1Swenshuai.xi 
5272*53ee8cc1Swenshuai.xi //**************************************************************************
5273*53ee8cc1Swenshuai.xi //  [Function Name]:
5274*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GeteMSCSupportInformation()
5275*53ee8cc1Swenshuai.xi //  [Description]
5276*53ee8cc1Swenshuai.xi //
5277*53ee8cc1Swenshuai.xi //  [Arguments]:
5278*53ee8cc1Swenshuai.xi //
5279*53ee8cc1Swenshuai.xi //  [Return]:
5280*53ee8cc1Swenshuai.xi //
5281*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_GeteMSCSupportInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 * pData)5282*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_GeteMSCSupportInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 *pData)
5283*53ee8cc1Swenshuai.xi {
5284*53ee8cc1Swenshuai.xi     MS_BOOL bFinish = FALSE;
5285*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
5286*53ee8cc1Swenshuai.xi     MS_U8 ucEntryCount = 0;
5287*53ee8cc1Swenshuai.xi     MS_U8 ucSequence = pMHLResourcePrivate->ucWriteBurstSequence;
5288*53ee8cc1Swenshuai.xi     MS_U8 ucFinishEntry = 0;
5289*53ee8cc1Swenshuai.xi     MS_U8 ucTotalEntry = MHL_EMSC_SUPPORT_TOTAL_ENTRY;
5290*53ee8cc1Swenshuai.xi 
5291*53ee8cc1Swenshuai.xi     ucFinishEntry = ucSequence *MHL_EMSC_SUPPORT_SEQUENCE_LENGTH;
5292*53ee8cc1Swenshuai.xi 
5293*53ee8cc1Swenshuai.xi     pData[0] = (MHL_BURST_ID_EMSC_SUPPORT >> 8);
5294*53ee8cc1Swenshuai.xi     pData[1] = (MHL_BURST_ID_EMSC_SUPPORT &BMASK(7:0));
5295*53ee8cc1Swenshuai.xi     pData[3] = ucTotalEntry;
5296*53ee8cc1Swenshuai.xi 
5297*53ee8cc1Swenshuai.xi     for(uctemp = 0; uctemp < MHL_EMSC_SUPPORT_SEQUENCE_LENGTH; uctemp++)
5298*53ee8cc1Swenshuai.xi     {
5299*53ee8cc1Swenshuai.xi         if((uctemp +ucFinishEntry) == ucTotalEntry)
5300*53ee8cc1Swenshuai.xi         {
5301*53ee8cc1Swenshuai.xi             break;
5302*53ee8cc1Swenshuai.xi         }
5303*53ee8cc1Swenshuai.xi 
5304*53ee8cc1Swenshuai.xi         pData[6 +(uctemp *2)] = pMHLResourcePrivate->usEMSCSupportTable[uctemp +ucFinishEntry] >> 8;
5305*53ee8cc1Swenshuai.xi         pData[7 +(uctemp *2)] = pMHLResourcePrivate->usEMSCSupportTable[uctemp +ucFinishEntry] &BMASK(7:0);
5306*53ee8cc1Swenshuai.xi 
5307*53ee8cc1Swenshuai.xi         ucEntryCount++;
5308*53ee8cc1Swenshuai.xi     }
5309*53ee8cc1Swenshuai.xi 
5310*53ee8cc1Swenshuai.xi     ucSequence++;
5311*53ee8cc1Swenshuai.xi 
5312*53ee8cc1Swenshuai.xi     pData[4] = ucSequence;
5313*53ee8cc1Swenshuai.xi     pData[5] = ucEntryCount;
5314*53ee8cc1Swenshuai.xi     pData[2] = _mdrv_mhl_WriteBurstCheckSum(pData);
5315*53ee8cc1Swenshuai.xi 
5316*53ee8cc1Swenshuai.xi     if(((ucSequence -1) *MHL_EMSC_SUPPORT_SEQUENCE_LENGTH +ucEntryCount) == ucTotalEntry)
5317*53ee8cc1Swenshuai.xi     {
5318*53ee8cc1Swenshuai.xi         bFinish = TRUE;
5319*53ee8cc1Swenshuai.xi         ucSequence = 0;
5320*53ee8cc1Swenshuai.xi     }
5321*53ee8cc1Swenshuai.xi 
5322*53ee8cc1Swenshuai.xi     pMHLResourcePrivate->ucWriteBurstSequence = ucSequence;
5323*53ee8cc1Swenshuai.xi 
5324*53ee8cc1Swenshuai.xi     return bFinish;
5325*53ee8cc1Swenshuai.xi }
5326*53ee8cc1Swenshuai.xi 
5327*53ee8cc1Swenshuai.xi //**************************************************************************
5328*53ee8cc1Swenshuai.xi //  [Function Name]:
5329*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_SendeMSCSupportInformation()
5330*53ee8cc1Swenshuai.xi //  [Description]
5331*53ee8cc1Swenshuai.xi //
5332*53ee8cc1Swenshuai.xi //  [Arguments]:
5333*53ee8cc1Swenshuai.xi //
5334*53ee8cc1Swenshuai.xi //  [Return]:
5335*53ee8cc1Swenshuai.xi //
5336*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendeMSCSupportInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5337*53ee8cc1Swenshuai.xi void _mdrv_mhl_SendeMSCSupportInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5338*53ee8cc1Swenshuai.xi {
5339*53ee8cc1Swenshuai.xi     MS_BOOL bFinish = FALSE;
5340*53ee8cc1Swenshuai.xi     MS_U8 ucData[MHL_MSC_SCRATCHPAD_SIZE] = {0};
5341*53ee8cc1Swenshuai.xi 
5342*53ee8cc1Swenshuai.xi     if(_mdrv_mhl_GeteMSCSupportInformation(pMHLResourcePrivate, ucData))
5343*53ee8cc1Swenshuai.xi     {
5344*53ee8cc1Swenshuai.xi         bFinish = TRUE;
5345*53ee8cc1Swenshuai.xi     }
5346*53ee8cc1Swenshuai.xi 
5347*53ee8cc1Swenshuai.xi     if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
5348*53ee8cc1Swenshuai.xi     {
5349*53ee8cc1Swenshuai.xi         if(bFinish)
5350*53ee8cc1Swenshuai.xi         {
5351*53ee8cc1Swenshuai.xi             CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_EMSC_DATA_TUNNEL_FLAG);
5352*53ee8cc1Swenshuai.xi         }
5353*53ee8cc1Swenshuai.xi 
5354*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
5355*53ee8cc1Swenshuai.xi 
5356*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL sent eMSC support port %c in %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), ucData[4]);
5357*53ee8cc1Swenshuai.xi     }
5358*53ee8cc1Swenshuai.xi }
5359*53ee8cc1Swenshuai.xi 
5360*53ee8cc1Swenshuai.xi //**************************************************************************
5361*53ee8cc1Swenshuai.xi //  [Function Name]:
5362*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_SendBISTReturnStatus()
5363*53ee8cc1Swenshuai.xi //  [Description]
5364*53ee8cc1Swenshuai.xi //
5365*53ee8cc1Swenshuai.xi //  [Arguments]:
5366*53ee8cc1Swenshuai.xi //
5367*53ee8cc1Swenshuai.xi //  [Return]:
5368*53ee8cc1Swenshuai.xi //
5369*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendBISTReturnStatus(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5370*53ee8cc1Swenshuai.xi void _mdrv_mhl_SendBISTReturnStatus(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5371*53ee8cc1Swenshuai.xi {
5372*53ee8cc1Swenshuai.xi     MS_U8 ucData[MHL_MSC_SCRATCHPAD_SIZE] = {0};
5373*53ee8cc1Swenshuai.xi 
5374*53ee8cc1Swenshuai.xi     ucData[0] = (MHL_BURST_ID_BIST_RETURN_STAT >> 8);
5375*53ee8cc1Swenshuai.xi     ucData[1] = (MHL_BURST_ID_BIST_RETURN_STAT &BMASK(7:0));
5376*53ee8cc1Swenshuai.xi     ucData[12] = (pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusErrorCount >> 8);
5377*53ee8cc1Swenshuai.xi     ucData[13] = (pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusErrorCount &BMASK(7:0));
5378*53ee8cc1Swenshuai.xi     ucData[14] = (pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkErrorCount >> 8);
5379*53ee8cc1Swenshuai.xi     ucData[15] = (pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkErrorCount &BMASK(7:0));
5380*53ee8cc1Swenshuai.xi     ucData[2] = _mdrv_mhl_WriteBurstCheckSum(ucData);
5381*53ee8cc1Swenshuai.xi 
5382*53ee8cc1Swenshuai.xi     if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, MHL_MSC_SCRATCHPAD_SIZE, ucData))
5383*53ee8cc1Swenshuai.xi     {
5384*53ee8cc1Swenshuai.xi         CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_BIST_RETURN_STATUS_FLAG);
5385*53ee8cc1Swenshuai.xi 
5386*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
5387*53ee8cc1Swenshuai.xi 
5388*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL send BIST eCbus port %c error count %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusErrorCount);
5389*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL send BIST AV link port %c error count %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkErrorCount);
5390*53ee8cc1Swenshuai.xi     }
5391*53ee8cc1Swenshuai.xi }
5392*53ee8cc1Swenshuai.xi 
5393*53ee8cc1Swenshuai.xi //**************************************************************************
5394*53ee8cc1Swenshuai.xi //  [Function Name]:
5395*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_SendWriteBurstInformation()
5396*53ee8cc1Swenshuai.xi //  [Description]
5397*53ee8cc1Swenshuai.xi //
5398*53ee8cc1Swenshuai.xi //  [Arguments]:
5399*53ee8cc1Swenshuai.xi //
5400*53ee8cc1Swenshuai.xi //  [Return]:
5401*53ee8cc1Swenshuai.xi //
5402*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendWriteBurstInformation(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5403*53ee8cc1Swenshuai.xi void _mdrv_mhl_SendWriteBurstInformation(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5404*53ee8cc1Swenshuai.xi {
5405*53ee8cc1Swenshuai.xi     MS_BOOL bSendWriteBurst = FALSE;
5406*53ee8cc1Swenshuai.xi     MS_U8 ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_NONE;
5407*53ee8cc1Swenshuai.xi 
5408*53ee8cc1Swenshuai.xi     if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_USER_WRITE_BURST_FLAG))
5409*53ee8cc1Swenshuai.xi     {
5410*53ee8cc1Swenshuai.xi         ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_USER_DATA;
5411*53ee8cc1Swenshuai.xi     }
5412*53ee8cc1Swenshuai.xi     else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_INFORMATION_FLAG))
5413*53ee8cc1Swenshuai.xi     {
5414*53ee8cc1Swenshuai.xi         ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_3D_INFORMATION;
5415*53ee8cc1Swenshuai.xi     }
5416*53ee8cc1Swenshuai.xi     else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_VC_INFORMATION_FLAG))
5417*53ee8cc1Swenshuai.xi     {
5418*53ee8cc1Swenshuai.xi         ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_VIRTUAL_CHANNEL;
5419*53ee8cc1Swenshuai.xi     }
5420*53ee8cc1Swenshuai.xi     else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HIGH_END_VIDEO_FLAG))
5421*53ee8cc1Swenshuai.xi     {
5422*53ee8cc1Swenshuai.xi         ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_HIGH_END_VIDEO;
5423*53ee8cc1Swenshuai.xi     }
5424*53ee8cc1Swenshuai.xi     else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_AUDIO_DATA_TUNNEL_FLAG))
5425*53ee8cc1Swenshuai.xi     {
5426*53ee8cc1Swenshuai.xi         ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_AUDIO_DATA_TUNNEL;
5427*53ee8cc1Swenshuai.xi     }
5428*53ee8cc1Swenshuai.xi     else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_EMSC_DATA_TUNNEL_FLAG))
5429*53ee8cc1Swenshuai.xi     {
5430*53ee8cc1Swenshuai.xi         ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_EMSC_DATA_TUNNEL;
5431*53ee8cc1Swenshuai.xi     }
5432*53ee8cc1Swenshuai.xi     else if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_BIST_RETURN_STATUS_FLAG))
5433*53ee8cc1Swenshuai.xi     {
5434*53ee8cc1Swenshuai.xi         ucWriteBurstType = MHL_CBUS_SEND_WRITE_BURST_BIST_RETURN_STATUS;
5435*53ee8cc1Swenshuai.xi     }
5436*53ee8cc1Swenshuai.xi 
5437*53ee8cc1Swenshuai.xi     if(ucWriteBurstType != MHL_CBUS_SEND_WRITE_BURST_NONE)
5438*53ee8cc1Swenshuai.xi     {
5439*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_NONE)
5440*53ee8cc1Swenshuai.xi         {
5441*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_START;
5442*53ee8cc1Swenshuai.xi         }
5443*53ee8cc1Swenshuai.xi         else if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_REVEIVE_GRANT)
5444*53ee8cc1Swenshuai.xi         {
5445*53ee8cc1Swenshuai.xi             bSendWriteBurst = TRUE;
5446*53ee8cc1Swenshuai.xi         }
5447*53ee8cc1Swenshuai.xi     }
5448*53ee8cc1Swenshuai.xi 
5449*53ee8cc1Swenshuai.xi     if(bSendWriteBurst)
5450*53ee8cc1Swenshuai.xi     {
5451*53ee8cc1Swenshuai.xi         switch(ucWriteBurstType)
5452*53ee8cc1Swenshuai.xi         {
5453*53ee8cc1Swenshuai.xi             case MHL_CBUS_SEND_WRITE_BURST_3D_INFORMATION:
5454*53ee8cc1Swenshuai.xi                 _mdrv_mhl_Send3DTimingInformation(pMHLResourcePrivate);
5455*53ee8cc1Swenshuai.xi                 break;
5456*53ee8cc1Swenshuai.xi 
5457*53ee8cc1Swenshuai.xi             case MHL_CBUS_SEND_WRITE_BURST_VIRTUAL_CHANNEL:
5458*53ee8cc1Swenshuai.xi                 _mdrv_mhl_SendVirtualChannelInformation(pMHLResourcePrivate);
5459*53ee8cc1Swenshuai.xi                 break;
5460*53ee8cc1Swenshuai.xi 
5461*53ee8cc1Swenshuai.xi             case MHL_CBUS_SEND_WRITE_BURST_HIGH_END_VIDEO:
5462*53ee8cc1Swenshuai.xi                 _mdrv_mhl_SendHighEndVideoSupport(pMHLResourcePrivate);
5463*53ee8cc1Swenshuai.xi                 break;
5464*53ee8cc1Swenshuai.xi 
5465*53ee8cc1Swenshuai.xi             case MHL_CBUS_SEND_WRITE_BURST_AUDIO_DATA_TUNNEL:
5466*53ee8cc1Swenshuai.xi                 _mdrv_mhl_SendAudioDataTunnelSupport(pMHLResourcePrivate);
5467*53ee8cc1Swenshuai.xi                 break;
5468*53ee8cc1Swenshuai.xi 
5469*53ee8cc1Swenshuai.xi             case MHL_CBUS_SEND_WRITE_BURST_EMSC_DATA_TUNNEL:
5470*53ee8cc1Swenshuai.xi                 _mdrv_mhl_SendeMSCSupportInformation(pMHLResourcePrivate);
5471*53ee8cc1Swenshuai.xi                 break;
5472*53ee8cc1Swenshuai.xi 
5473*53ee8cc1Swenshuai.xi             case MHL_CBUS_SEND_WRITE_BURST_BIST_RETURN_STATUS:
5474*53ee8cc1Swenshuai.xi                 _mdrv_mhl_SendBISTReturnStatus(pMHLResourcePrivate);
5475*53ee8cc1Swenshuai.xi                 break;
5476*53ee8cc1Swenshuai.xi 
5477*53ee8cc1Swenshuai.xi             default:
5478*53ee8cc1Swenshuai.xi 
5479*53ee8cc1Swenshuai.xi                 break;
5480*53ee8cc1Swenshuai.xi         };
5481*53ee8cc1Swenshuai.xi     }
5482*53ee8cc1Swenshuai.xi }
5483*53ee8cc1Swenshuai.xi 
5484*53ee8cc1Swenshuai.xi //**************************************************************************
5485*53ee8cc1Swenshuai.xi //  [Function Name]:
5486*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_FeatureRequestStateProc()
5487*53ee8cc1Swenshuai.xi //  [Description]
5488*53ee8cc1Swenshuai.xi //
5489*53ee8cc1Swenshuai.xi //  [Arguments]:
5490*53ee8cc1Swenshuai.xi //
5491*53ee8cc1Swenshuai.xi //  [Return]:
5492*53ee8cc1Swenshuai.xi //
5493*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_FeatureRequestStateProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5494*53ee8cc1Swenshuai.xi void _mdrv_mhl_FeatureRequestStateProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5495*53ee8cc1Swenshuai.xi {
5496*53ee8cc1Swenshuai.xi     switch(pMHLResourcePrivate->ucFeatureRequestState)
5497*53ee8cc1Swenshuai.xi     {
5498*53ee8cc1Swenshuai.xi         case MHL_CBUS_FEATURE_START:
5499*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_SEND_3D_INFORMATION;
5500*53ee8cc1Swenshuai.xi             SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_INFORMATION_FLAG);
5501*53ee8cc1Swenshuai.xi             SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_DTD_FLAG);
5502*53ee8cc1Swenshuai.xi             SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_VIC_FLAG);
5503*53ee8cc1Swenshuai.xi 
5504*53ee8cc1Swenshuai.xi             break;
5505*53ee8cc1Swenshuai.xi 
5506*53ee8cc1Swenshuai.xi         case MHL_CBUS_FEATURE_SEND_3D_INFORMATION:
5507*53ee8cc1Swenshuai.xi             if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_3D_INFORMATION_FLAG))
5508*53ee8cc1Swenshuai.xi             {
5509*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_SEND_HIGH_END_VIDEO;
5510*53ee8cc1Swenshuai.xi                 SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HIGH_END_VIDEO_FLAG);
5511*53ee8cc1Swenshuai.xi                 SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_VIC_FLAG);
5512*53ee8cc1Swenshuai.xi                 SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_DTDA_FLAG);
5513*53ee8cc1Swenshuai.xi                 SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HEV_DTDB_FLAG);
5514*53ee8cc1Swenshuai.xi             }
5515*53ee8cc1Swenshuai.xi 
5516*53ee8cc1Swenshuai.xi             break;
5517*53ee8cc1Swenshuai.xi 
5518*53ee8cc1Swenshuai.xi         case MHL_CBUS_FEATURE_SEND_HIGH_END_VIDEO:
5519*53ee8cc1Swenshuai.xi             if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_HIGH_END_VIDEO_FLAG))
5520*53ee8cc1Swenshuai.xi             {
5521*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_SEND_AUDIO_DATA_TUNNEL;
5522*53ee8cc1Swenshuai.xi                 SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_AUDIO_DATA_TUNNEL_FLAG);
5523*53ee8cc1Swenshuai.xi             }
5524*53ee8cc1Swenshuai.xi 
5525*53ee8cc1Swenshuai.xi             break;
5526*53ee8cc1Swenshuai.xi 
5527*53ee8cc1Swenshuai.xi         case MHL_CBUS_FEATURE_SEND_AUDIO_DATA_TUNNEL:
5528*53ee8cc1Swenshuai.xi             if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_AUDIO_DATA_TUNNEL_FLAG))
5529*53ee8cc1Swenshuai.xi             {
5530*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_SEND_EMSC_DATA_TUNNEL;
5531*53ee8cc1Swenshuai.xi                 SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_EMSC_DATA_TUNNEL_FLAG);
5532*53ee8cc1Swenshuai.xi             }
5533*53ee8cc1Swenshuai.xi 
5534*53ee8cc1Swenshuai.xi             break;
5535*53ee8cc1Swenshuai.xi 
5536*53ee8cc1Swenshuai.xi         case MHL_CBUS_FEATURE_SEND_EMSC_DATA_TUNNEL:
5537*53ee8cc1Swenshuai.xi             if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_EMSC_DATA_TUNNEL_FLAG))
5538*53ee8cc1Swenshuai.xi             {
5539*53ee8cc1Swenshuai.xi                 if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_NONE)
5540*53ee8cc1Swenshuai.xi                 {
5541*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_SEND_FEATURE_COMPLETE;
5542*53ee8cc1Swenshuai.xi                 }
5543*53ee8cc1Swenshuai.xi             }
5544*53ee8cc1Swenshuai.xi 
5545*53ee8cc1Swenshuai.xi             break;
5546*53ee8cc1Swenshuai.xi 
5547*53ee8cc1Swenshuai.xi         case MHL_CBUS_FEATURE_SEND_FEATURE_COMPLETE:
5548*53ee8cc1Swenshuai.xi             if(_mdrv_mhl_CbusWriteStatusOrSetInt(pMHLResourcePrivate, 0x20, BIT(6), FALSE))
5549*53ee8cc1Swenshuai.xi             {
5550*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_END;
5551*53ee8cc1Swenshuai.xi             }
5552*53ee8cc1Swenshuai.xi 
5553*53ee8cc1Swenshuai.xi             break;
5554*53ee8cc1Swenshuai.xi 
5555*53ee8cc1Swenshuai.xi         case MHL_CBUS_FEATURE_END:
5556*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucFeatureRequestState = MHL_CBUS_FEATURE_NONE;
5557*53ee8cc1Swenshuai.xi             break;
5558*53ee8cc1Swenshuai.xi 
5559*53ee8cc1Swenshuai.xi         default:
5560*53ee8cc1Swenshuai.xi 
5561*53ee8cc1Swenshuai.xi             break;
5562*53ee8cc1Swenshuai.xi     };
5563*53ee8cc1Swenshuai.xi }
5564*53ee8cc1Swenshuai.xi 
5565*53ee8cc1Swenshuai.xi //**************************************************************************
5566*53ee8cc1Swenshuai.xi //  [Function Name]:
5567*53ee8cc1Swenshuai.xi //                  _mapi_mhl_CbusBISTStateProc()
5568*53ee8cc1Swenshuai.xi //  [Description]
5569*53ee8cc1Swenshuai.xi //
5570*53ee8cc1Swenshuai.xi //  [Arguments]:
5571*53ee8cc1Swenshuai.xi //
5572*53ee8cc1Swenshuai.xi //  [Return]:
5573*53ee8cc1Swenshuai.xi //
5574*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusBISTStateProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5575*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusBISTStateProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5576*53ee8cc1Swenshuai.xi {
5577*53ee8cc1Swenshuai.xi     MS_U8 ucBISTECbusMode = 0;
5578*53ee8cc1Swenshuai.xi 
5579*53ee8cc1Swenshuai.xi     switch(pMHLResourcePrivate->ucBISTModeState)
5580*53ee8cc1Swenshuai.xi     {
5581*53ee8cc1Swenshuai.xi         case MHL_CBUS_BIST_RECEIVE_SETUP:
5582*53ee8cc1Swenshuai.xi             if(_mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_BIST_READY, pMHLResourcePrivate->stBISTParameterInfo.ucBISTReadyIndex, FALSE)) // Send BIST ready
5583*53ee8cc1Swenshuai.xi             {
5584*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_WAIT_TRIGGER;
5585*53ee8cc1Swenshuai.xi 
5586*53ee8cc1Swenshuai.xi                 mhal_mhl_SetBISTParameterInfo(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stBISTParameterInfo));
5587*53ee8cc1Swenshuai.xi             }
5588*53ee8cc1Swenshuai.xi 
5589*53ee8cc1Swenshuai.xi             break;
5590*53ee8cc1Swenshuai.xi 
5591*53ee8cc1Swenshuai.xi         case MHL_CBUS_BIST_RECEIVE_TRIGGER:
5592*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_ECBUS_SWITCH;
5593*53ee8cc1Swenshuai.xi             ucBISTECbusMode = MHL_RAP_KEY_CBUS_MODE_UP;
5594*53ee8cc1Swenshuai.xi 
5595*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL BIST receive trigger in port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
5596*53ee8cc1Swenshuai.xi 
5597*53ee8cc1Swenshuai.xi             if(pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusDuration > 0)
5598*53ee8cc1Swenshuai.xi             {
5599*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL set BIST trigger timer in port %c timer %d\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath), pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusDuration);
5600*53ee8cc1Swenshuai.xi 
5601*53ee8cc1Swenshuai.xi                 _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_BIST_PROCESS, pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusDuration);
5602*53ee8cc1Swenshuai.xi             }
5603*53ee8cc1Swenshuai.xi 
5604*53ee8cc1Swenshuai.xi             break;
5605*53ee8cc1Swenshuai.xi 
5606*53ee8cc1Swenshuai.xi         case MHL_CBUS_BIST_ECBUS_SWITCH:
5607*53ee8cc1Swenshuai.xi             //mhal_mhl_GetBISTErrorCount(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stBISTParameterInfo));
5608*53ee8cc1Swenshuai.xi             break;
5609*53ee8cc1Swenshuai.xi 
5610*53ee8cc1Swenshuai.xi         case MHL_CBUS_BIST_EVENT_FINISH:
5611*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_WAIT_TRIGGER;
5612*53ee8cc1Swenshuai.xi             ucBISTECbusMode = MHL_RAP_KEY_CBUS_MODE_DOWN;
5613*53ee8cc1Swenshuai.xi 
5614*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL BIST run finish in port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
5615*53ee8cc1Swenshuai.xi 
5616*53ee8cc1Swenshuai.xi             break;
5617*53ee8cc1Swenshuai.xi 
5618*53ee8cc1Swenshuai.xi         case MHL_CBUS_BIST_REQUEST_STATUS:
5619*53ee8cc1Swenshuai.xi             SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_BIST_RETURN_STATUS_FLAG);
5620*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_RETURN_STATUS;
5621*53ee8cc1Swenshuai.xi             break;
5622*53ee8cc1Swenshuai.xi 
5623*53ee8cc1Swenshuai.xi         case MHL_CBUS_BIST_RETURN_STATUS:
5624*53ee8cc1Swenshuai.xi             if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_BIST_RETURN_STATUS_FLAG))
5625*53ee8cc1Swenshuai.xi             {
5626*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_WAIT_TRIGGER;
5627*53ee8cc1Swenshuai.xi             }
5628*53ee8cc1Swenshuai.xi             break;
5629*53ee8cc1Swenshuai.xi 
5630*53ee8cc1Swenshuai.xi         case MHL_CBUS_BIST_END:
5631*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucBISTModeState = MHL_CBUS_BIST_NONE;
5632*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stSignalStatusInfo.bBISTEnableFlag = FALSE;
5633*53ee8cc1Swenshuai.xi             break;
5634*53ee8cc1Swenshuai.xi 
5635*53ee8cc1Swenshuai.xi         default:
5636*53ee8cc1Swenshuai.xi 
5637*53ee8cc1Swenshuai.xi             break;
5638*53ee8cc1Swenshuai.xi     };
5639*53ee8cc1Swenshuai.xi 
5640*53ee8cc1Swenshuai.xi     if(ucBISTECbusMode > 0)
5641*53ee8cc1Swenshuai.xi     {
5642*53ee8cc1Swenshuai.xi         if(ucBISTECbusMode == MHL_RAP_KEY_CBUS_MODE_UP)
5643*53ee8cc1Swenshuai.xi         {
5644*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stBISTParameterInfo.usBISTeCbusErrorCount = 0;
5645*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stBISTParameterInfo.usBISTAVLinkErrorCount = 0;
5646*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->stSignalStatusInfo.bBISTEnableFlag = TRUE;
5647*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_BIST_MODE_UP;
5648*53ee8cc1Swenshuai.xi         }
5649*53ee8cc1Swenshuai.xi         else if(ucBISTECbusMode == MHL_RAP_KEY_CBUS_MODE_DOWN)
5650*53ee8cc1Swenshuai.xi         {
5651*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucECbusState = MHL_ECBUS_STATE_BIST_MODE_DOWN;
5652*53ee8cc1Swenshuai.xi 
5653*53ee8cc1Swenshuai.xi             mhal_mhl_GetBISTErrorCount(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stBISTParameterInfo));
5654*53ee8cc1Swenshuai.xi         }
5655*53ee8cc1Swenshuai.xi     }
5656*53ee8cc1Swenshuai.xi }
5657*53ee8cc1Swenshuai.xi 
5658*53ee8cc1Swenshuai.xi //**************************************************************************
5659*53ee8cc1Swenshuai.xi //  [Function Name]:
5660*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_SendEMSCDataString()
5661*53ee8cc1Swenshuai.xi //  [Description]
5662*53ee8cc1Swenshuai.xi //
5663*53ee8cc1Swenshuai.xi //  [Arguments]:
5664*53ee8cc1Swenshuai.xi //
5665*53ee8cc1Swenshuai.xi //  [Return]:
5666*53ee8cc1Swenshuai.xi //
5667*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_SendEMSCDataString(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_U8 ucLength,MS_U8 * ucSendData)5668*53ee8cc1Swenshuai.xi MS_U8 _mdrv_mhl_SendEMSCDataString(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_U8 ucLength, MS_U8 *ucSendData)
5669*53ee8cc1Swenshuai.xi {
5670*53ee8cc1Swenshuai.xi     MS_BOOL bDoAgainFlag = FALSE;
5671*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
5672*53ee8cc1Swenshuai.xi     MS_U8 ucSendStatus = 0;
5673*53ee8cc1Swenshuai.xi     MS_U8 ucSendEMSC[MHL_EMSC_DATA_SIZE] = {0};
5674*53ee8cc1Swenshuai.xi 
5675*53ee8cc1Swenshuai.xi     do
5676*53ee8cc1Swenshuai.xi     {
5677*53ee8cc1Swenshuai.xi         bDoAgainFlag = FALSE;
5678*53ee8cc1Swenshuai.xi 
5679*53ee8cc1Swenshuai.xi         switch(pMHLResourcePrivate->ucEMSCSendStatus)
5680*53ee8cc1Swenshuai.xi         {
5681*53ee8cc1Swenshuai.xi             case MHL_EMSC_SEND_NONE:
5682*53ee8cc1Swenshuai.xi                 if((ucLength +2) <= pMHLResourcePrivate->usEMSCTxBufferSize) // eMSC data length must small than Tx buffer +2
5683*53ee8cc1Swenshuai.xi                 {
5684*53ee8cc1Swenshuai.xi                     ucSendEMSC[0] = MHL_EMSC_DATA_SIZE - pMHLResourcePrivate->usEMSCRxBufferSize;
5685*53ee8cc1Swenshuai.xi                     ucSendEMSC[1] = ucLength;
5686*53ee8cc1Swenshuai.xi 
5687*53ee8cc1Swenshuai.xi                     if(ucSendData != 0)
5688*53ee8cc1Swenshuai.xi                     {
5689*53ee8cc1Swenshuai.xi                         for(uctemp = 0; uctemp < ucLength; uctemp++)
5690*53ee8cc1Swenshuai.xi                         {
5691*53ee8cc1Swenshuai.xi                             ucSendEMSC[uctemp +2] = ucSendData[uctemp];
5692*53ee8cc1Swenshuai.xi                         }
5693*53ee8cc1Swenshuai.xi                     }
5694*53ee8cc1Swenshuai.xi 
5695*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucEMSCSendStatus = MHL_EMSC_SEND_DATA;
5696*53ee8cc1Swenshuai.xi                     bDoAgainFlag = TRUE;
5697*53ee8cc1Swenshuai.xi                 }
5698*53ee8cc1Swenshuai.xi 
5699*53ee8cc1Swenshuai.xi                 break;
5700*53ee8cc1Swenshuai.xi 
5701*53ee8cc1Swenshuai.xi             case MHL_EMSC_SEND_DATA:
5702*53ee8cc1Swenshuai.xi                 ucSendStatus = mhal_mhl_GetEMSCSendStatus();
5703*53ee8cc1Swenshuai.xi                 mhal_mhl_InsertEMSCSendData(ucLength +2, ucSendEMSC);
5704*53ee8cc1Swenshuai.xi 
5705*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucEMSCSendStatus = MHL_EMSC_SEND_CHECK;
5706*53ee8cc1Swenshuai.xi 
5707*53ee8cc1Swenshuai.xi                 break;
5708*53ee8cc1Swenshuai.xi 
5709*53ee8cc1Swenshuai.xi             case MHL_EMSC_SEND_CHECK:
5710*53ee8cc1Swenshuai.xi                 ucSendStatus = mhal_mhl_GetEMSCSendStatus();
5711*53ee8cc1Swenshuai.xi 
5712*53ee8cc1Swenshuai.xi                 if(ucSendStatus != MHL_EMSC_SEND_NONE)
5713*53ee8cc1Swenshuai.xi                 {
5714*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucEMSCSendStatus = ucSendStatus;
5715*53ee8cc1Swenshuai.xi                 }
5716*53ee8cc1Swenshuai.xi 
5717*53ee8cc1Swenshuai.xi                 break;
5718*53ee8cc1Swenshuai.xi 
5719*53ee8cc1Swenshuai.xi             case MHL_EMSC_SEND_PASS:
5720*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucEMSCSendStatus = MHL_EMSC_SEND_NONE;
5721*53ee8cc1Swenshuai.xi                 break;
5722*53ee8cc1Swenshuai.xi 
5723*53ee8cc1Swenshuai.xi             case MHL_EMSC_SEND_FAIL:
5724*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucEMSCSendStatus = MHL_EMSC_SEND_NONE;
5725*53ee8cc1Swenshuai.xi                 break;
5726*53ee8cc1Swenshuai.xi 
5727*53ee8cc1Swenshuai.xi             default:
5728*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucEMSCSendStatus = MHL_EMSC_SEND_NONE;
5729*53ee8cc1Swenshuai.xi                 break;
5730*53ee8cc1Swenshuai.xi         };
5731*53ee8cc1Swenshuai.xi     }while(bDoAgainFlag);
5732*53ee8cc1Swenshuai.xi 
5733*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->ucEMSCSendStatus == MHL_EMSC_SEND_PASS)
5734*53ee8cc1Swenshuai.xi     {
5735*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL eMSC send pass !! port %c\r\n", MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
5736*53ee8cc1Swenshuai.xi 
5737*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->usEMSCRxBufferSize = MHL_EMSC_DATA_SIZE;
5738*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->usEMSCTxBufferSize = pMHLResourcePrivate->usEMSCTxBufferSize -ucLength -2;
5739*53ee8cc1Swenshuai.xi 
5740*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL eMSC send Rx buffer size %d in port %c !!\r\n", pMHLResourcePrivate->usEMSCRxBufferSize, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
5741*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_INFO("** MHL eMSC send Tx buffer size %d in port %c !!\r\n", pMHLResourcePrivate->usEMSCTxBufferSize, MHL_INPUT_PORT(pMHLResourcePrivate->ucMHLSupportPath));
5742*53ee8cc1Swenshuai.xi     }
5743*53ee8cc1Swenshuai.xi 
5744*53ee8cc1Swenshuai.xi     return pMHLResourcePrivate->ucEMSCSendStatus;
5745*53ee8cc1Swenshuai.xi }
5746*53ee8cc1Swenshuai.xi 
5747*53ee8cc1Swenshuai.xi //**************************************************************************
5748*53ee8cc1Swenshuai.xi //  [Function Name]:
5749*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CheckEMSCRxBufferSize()
5750*53ee8cc1Swenshuai.xi //  [Description]
5751*53ee8cc1Swenshuai.xi //
5752*53ee8cc1Swenshuai.xi //  [Arguments]:
5753*53ee8cc1Swenshuai.xi //
5754*53ee8cc1Swenshuai.xi //  [Return]:
5755*53ee8cc1Swenshuai.xi //
5756*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CheckEMSCRxBufferSize(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5757*53ee8cc1Swenshuai.xi void _mdrv_mhl_CheckEMSCRxBufferSize(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5758*53ee8cc1Swenshuai.xi {
5759*53ee8cc1Swenshuai.xi     MS_U8 ucSendStatus = 0;
5760*53ee8cc1Swenshuai.xi 
5761*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->usEMSCRxBufferSize < MHL_EMSC_DATA_SIZE_THRESHOLD)
5762*53ee8cc1Swenshuai.xi     {
5763*53ee8cc1Swenshuai.xi         ucSendStatus = _mdrv_mhl_SendEMSCDataString(pMHLResourcePrivate, 0, NULL);
5764*53ee8cc1Swenshuai.xi     }
5765*53ee8cc1Swenshuai.xi }
5766*53ee8cc1Swenshuai.xi 
5767*53ee8cc1Swenshuai.xi //**************************************************************************
5768*53ee8cc1Swenshuai.xi //  [Function Name]:
5769*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CbusTxHandler()
5770*53ee8cc1Swenshuai.xi //  [Description]
5771*53ee8cc1Swenshuai.xi //
5772*53ee8cc1Swenshuai.xi //  [Arguments]:
5773*53ee8cc1Swenshuai.xi //
5774*53ee8cc1Swenshuai.xi //  [Return]:
5775*53ee8cc1Swenshuai.xi //
5776*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CbusTxHandler(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5777*53ee8cc1Swenshuai.xi void _mdrv_mhl_CbusTxHandler(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5778*53ee8cc1Swenshuai.xi {
5779*53ee8cc1Swenshuai.xi     if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
5780*53ee8cc1Swenshuai.xi     {
5781*53ee8cc1Swenshuai.xi         _mdrv_mhl_TxQueueHandler(pMHLResourcePrivate);
5782*53ee8cc1Swenshuai.xi 
5783*53ee8cc1Swenshuai.xi         if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CBUS_TX_QUEUE_FREEZE_FLAG))
5784*53ee8cc1Swenshuai.xi         {
5785*53ee8cc1Swenshuai.xi             _mdrv_mhl_SendDisplayCommand(pMHLResourcePrivate);
5786*53ee8cc1Swenshuai.xi 
5787*53ee8cc1Swenshuai.xi             _mdrv_mhl_WriteBurstEventProc(pMHLResourcePrivate);
5788*53ee8cc1Swenshuai.xi 
5789*53ee8cc1Swenshuai.xi             _mdrv_mhl_SendWriteBurstInformation(pMHLResourcePrivate);
5790*53ee8cc1Swenshuai.xi 
5791*53ee8cc1Swenshuai.xi             if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_ECBUS_FUNCTION_FLAG))
5792*53ee8cc1Swenshuai.xi             {
5793*53ee8cc1Swenshuai.xi                 _mdrv_mhl_ReadExtendDeviceCapabilityProc(pMHLResourcePrivate);
5794*53ee8cc1Swenshuai.xi 
5795*53ee8cc1Swenshuai.xi                 _mdrv_mhl_FeatureRequestStateProc(pMHLResourcePrivate);
5796*53ee8cc1Swenshuai.xi 
5797*53ee8cc1Swenshuai.xi                 _mdrv_mhl_CheckEMSCRxBufferSize(pMHLResourcePrivate);
5798*53ee8cc1Swenshuai.xi             }
5799*53ee8cc1Swenshuai.xi 
5800*53ee8cc1Swenshuai.xi             _mdrv_mhl_GetVenderIDProc(pMHLResourcePrivate);
5801*53ee8cc1Swenshuai.xi 
5802*53ee8cc1Swenshuai.xi             _mdrv_mhl_ReadDeviceCapabilityProc(pMHLResourcePrivate);
5803*53ee8cc1Swenshuai.xi         }
5804*53ee8cc1Swenshuai.xi 
5805*53ee8cc1Swenshuai.xi         if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_ECBUS_FUNCTION_FLAG))
5806*53ee8cc1Swenshuai.xi         {
5807*53ee8cc1Swenshuai.xi             _mdrv_mhl_CbusBISTStateProc(pMHLResourcePrivate);
5808*53ee8cc1Swenshuai.xi         }
5809*53ee8cc1Swenshuai.xi     }
5810*53ee8cc1Swenshuai.xi }
5811*53ee8cc1Swenshuai.xi 
5812*53ee8cc1Swenshuai.xi //**************************************************************************
5813*53ee8cc1Swenshuai.xi //  [Function Name]:
5814*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_AutoSwitchProc()
5815*53ee8cc1Swenshuai.xi //  [Description]
5816*53ee8cc1Swenshuai.xi //
5817*53ee8cc1Swenshuai.xi //  [Arguments]:
5818*53ee8cc1Swenshuai.xi //
5819*53ee8cc1Swenshuai.xi //  [Return]:
5820*53ee8cc1Swenshuai.xi //
5821*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_AutoSwitchProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5822*53ee8cc1Swenshuai.xi void _mdrv_mhl_AutoSwitchProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5823*53ee8cc1Swenshuai.xi {
5824*53ee8cc1Swenshuai.xi     MS_BOOL bOnLinePortFlag = FALSE;
5825*53ee8cc1Swenshuai.xi 
5826*53ee8cc1Swenshuai.xi     if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG))
5827*53ee8cc1Swenshuai.xi     {
5828*53ee8cc1Swenshuai.xi         if(mhal_mhl_CheckInputPort(pMHLResourcePrivate->ucMHLSupportPath) && mhal_mhl_CheckPIPWindow())
5829*53ee8cc1Swenshuai.xi         {
5830*53ee8cc1Swenshuai.xi             bOnLinePortFlag = TRUE;
5831*53ee8cc1Swenshuai.xi         }
5832*53ee8cc1Swenshuai.xi 
5833*53ee8cc1Swenshuai.xi         if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_AUTO_SWITCH_SETTING_FLAG))
5834*53ee8cc1Swenshuai.xi         {
5835*53ee8cc1Swenshuai.xi             if(GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WAKE_FLAG))
5836*53ee8cc1Swenshuai.xi             {
5837*53ee8cc1Swenshuai.xi                 CLR_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WAKE_FLAG);
5838*53ee8cc1Swenshuai.xi                 CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG);
5839*53ee8cc1Swenshuai.xi                 CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_AUTO_SWITCH_SETTING_FLAG);
5840*53ee8cc1Swenshuai.xi                 SET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_AUTO_SWITCH_DONE_FLAG);
5841*53ee8cc1Swenshuai.xi             }
5842*53ee8cc1Swenshuai.xi             else // Setting but not wake up
5843*53ee8cc1Swenshuai.xi             {
5844*53ee8cc1Swenshuai.xi                 if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG))
5845*53ee8cc1Swenshuai.xi                 {
5846*53ee8cc1Swenshuai.xi                     mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, MHL_VBUS_CHARGE_ON);
5847*53ee8cc1Swenshuai.xi                 }
5848*53ee8cc1Swenshuai.xi                 else
5849*53ee8cc1Swenshuai.xi                 {
5850*53ee8cc1Swenshuai.xi                     mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, MHL_VBUS_HW_DETCET);
5851*53ee8cc1Swenshuai.xi                 }
5852*53ee8cc1Swenshuai.xi 
5853*53ee8cc1Swenshuai.xi                 if(bOnLinePortFlag)
5854*53ee8cc1Swenshuai.xi                 {
5855*53ee8cc1Swenshuai.xi                     mhal_mhl_CbusWakeupIntSetting(pMHLResourcePrivate->ucMHLSupportPath, FALSE);
5856*53ee8cc1Swenshuai.xi 
5857*53ee8cc1Swenshuai.xi                     CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_AUTO_SWITCH_SETTING_FLAG);
5858*53ee8cc1Swenshuai.xi                     CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG);
5859*53ee8cc1Swenshuai.xi                 }
5860*53ee8cc1Swenshuai.xi             }
5861*53ee8cc1Swenshuai.xi         }
5862*53ee8cc1Swenshuai.xi         else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
5863*53ee8cc1Swenshuai.xi         {
5864*53ee8cc1Swenshuai.xi             CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG);
5865*53ee8cc1Swenshuai.xi         }
5866*53ee8cc1Swenshuai.xi         else // Not setting
5867*53ee8cc1Swenshuai.xi         {
5868*53ee8cc1Swenshuai.xi             if(!bOnLinePortFlag)
5869*53ee8cc1Swenshuai.xi             {
5870*53ee8cc1Swenshuai.xi                 mhal_mhl_CbusWakeupIntSetting(pMHLResourcePrivate->ucMHLSupportPath, TRUE);
5871*53ee8cc1Swenshuai.xi 
5872*53ee8cc1Swenshuai.xi                 SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_AUTO_SWITCH_SETTING_FLAG);
5873*53ee8cc1Swenshuai.xi             }
5874*53ee8cc1Swenshuai.xi         }
5875*53ee8cc1Swenshuai.xi     }
5876*53ee8cc1Swenshuai.xi }
5877*53ee8cc1Swenshuai.xi 
5878*53ee8cc1Swenshuai.xi //**************************************************************************
5879*53ee8cc1Swenshuai.xi //  [Function Name]:
5880*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_ForceSendClearHPD()
5881*53ee8cc1Swenshuai.xi //  [Description]
5882*53ee8cc1Swenshuai.xi //
5883*53ee8cc1Swenshuai.xi //  [Arguments]:
5884*53ee8cc1Swenshuai.xi //
5885*53ee8cc1Swenshuai.xi //  [Return]:
5886*53ee8cc1Swenshuai.xi //
5887*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ForceSendClearHPD(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5888*53ee8cc1Swenshuai.xi void _mdrv_mhl_ForceSendClearHPD(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5889*53ee8cc1Swenshuai.xi {
5890*53ee8cc1Swenshuai.xi     stMHL_QUEUE_INFO stCbusQueueInfo = {0};
5891*53ee8cc1Swenshuai.xi 
5892*53ee8cc1Swenshuai.xi     stCbusQueueInfo.ucQueueState = MHL_QUEUE_STATE_PENDING;
5893*53ee8cc1Swenshuai.xi     stCbusQueueInfo.ucLength = 0;
5894*53ee8cc1Swenshuai.xi     stCbusQueueInfo.ucCommand = MSC_CLR_HPD;
5895*53ee8cc1Swenshuai.xi 
5896*53ee8cc1Swenshuai.xi     if(_mdrv_mhl_CbusTxWriteCommand(pMHLResourcePrivate->stSignalStatusInfo.bECbusEnableFlag, &stCbusQueueInfo))
5897*53ee8cc1Swenshuai.xi     {
5898*53ee8cc1Swenshuai.xi         CLR_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_HPD_SET_FLAG);
5899*53ee8cc1Swenshuai.xi     }
5900*53ee8cc1Swenshuai.xi }
5901*53ee8cc1Swenshuai.xi 
5902*53ee8cc1Swenshuai.xi //**************************************************************************
5903*53ee8cc1Swenshuai.xi //  [Function Name]:
5904*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_RtermControlHWMode()
5905*53ee8cc1Swenshuai.xi //  [Description]
5906*53ee8cc1Swenshuai.xi //
5907*53ee8cc1Swenshuai.xi //  [Arguments]:
5908*53ee8cc1Swenshuai.xi //
5909*53ee8cc1Swenshuai.xi //  [Return]:
5910*53ee8cc1Swenshuai.xi //
5911*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_RtermControlHWMode(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate,MS_BOOL bEnableFlag)5912*53ee8cc1Swenshuai.xi void _mdrv_mhl_RtermControlHWMode(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate, MS_BOOL bEnableFlag)
5913*53ee8cc1Swenshuai.xi {
5914*53ee8cc1Swenshuai.xi     if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG))
5915*53ee8cc1Swenshuai.xi     {
5916*53ee8cc1Swenshuai.xi         mhal_mhl_RtermControlHWMode(pMHLResourcePrivate->ucMHLSupportPath, bEnableFlag);
5917*53ee8cc1Swenshuai.xi     }
5918*53ee8cc1Swenshuai.xi }
5919*53ee8cc1Swenshuai.xi 
5920*53ee8cc1Swenshuai.xi //**************************************************************************
5921*53ee8cc1Swenshuai.xi //  [Function Name]:
5922*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_PollingEventProc
5923*53ee8cc1Swenshuai.xi //  [Description]:
5924*53ee8cc1Swenshuai.xi //
5925*53ee8cc1Swenshuai.xi //  [Arguments]:
5926*53ee8cc1Swenshuai.xi //
5927*53ee8cc1Swenshuai.xi //  [Return]:
5928*53ee8cc1Swenshuai.xi //
5929*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_PollingEventProc(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)5930*53ee8cc1Swenshuai.xi void _mdrv_mhl_PollingEventProc(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
5931*53ee8cc1Swenshuai.xi {
5932*53ee8cc1Swenshuai.xi     _mdrv_mhl_TimerHandler(pMHLResourcePrivate);
5933*53ee8cc1Swenshuai.xi 
5934*53ee8cc1Swenshuai.xi     _mdrv_mhl_RtermControlHWMode(pMHLResourcePrivate, FALSE);
5935*53ee8cc1Swenshuai.xi 
5936*53ee8cc1Swenshuai.xi     _mdrv_mhl_CheckStatusPolling(pMHLResourcePrivate);
5937*53ee8cc1Swenshuai.xi 
5938*53ee8cc1Swenshuai.xi     _mdrv_mhl_RtermControlHWMode(pMHLResourcePrivate, TRUE);
5939*53ee8cc1Swenshuai.xi 
5940*53ee8cc1Swenshuai.xi     _mdrv_mhl_CbusRxHandler(pMHLResourcePrivate);
5941*53ee8cc1Swenshuai.xi 
5942*53ee8cc1Swenshuai.xi     _mdrv_mhl_CbusTxHandler(pMHLResourcePrivate);
5943*53ee8cc1Swenshuai.xi 
5944*53ee8cc1Swenshuai.xi     _mdrv_mhl_AutoSwitchProc(pMHLResourcePrivate);
5945*53ee8cc1Swenshuai.xi }
5946*53ee8cc1Swenshuai.xi 
5947*53ee8cc1Swenshuai.xi #if(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_10)
5948*53ee8cc1Swenshuai.xi //**************************************************************************
5949*53ee8cc1Swenshuai.xi //  [Function Name]:
5950*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_ResourceGetPrivate
5951*53ee8cc1Swenshuai.xi //  [Description]:
5952*53ee8cc1Swenshuai.xi //
5953*53ee8cc1Swenshuai.xi //  [Arguments]:
5954*53ee8cc1Swenshuai.xi //
5955*53ee8cc1Swenshuai.xi //  [Return]:
5956*53ee8cc1Swenshuai.xi //
5957*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ResourceGetPrivate(void ** ppPrivate)5958*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_ResourceGetPrivate(void** ppPrivate)
5959*53ee8cc1Swenshuai.xi {
5960*53ee8cc1Swenshuai.xi     MS_BOOL bGetPrivateFlag = FALSE;
5961*53ee8cc1Swenshuai.xi 
5962*53ee8cc1Swenshuai.xi     *ppPrivate = &stMHLResourcePrivate;
5963*53ee8cc1Swenshuai.xi 
5964*53ee8cc1Swenshuai.xi     if(*ppPrivate != NULL)
5965*53ee8cc1Swenshuai.xi     {
5966*53ee8cc1Swenshuai.xi         bGetPrivateFlag = TRUE;
5967*53ee8cc1Swenshuai.xi     }
5968*53ee8cc1Swenshuai.xi 
5969*53ee8cc1Swenshuai.xi     return bGetPrivateFlag;
5970*53ee8cc1Swenshuai.xi }
5971*53ee8cc1Swenshuai.xi 
5972*53ee8cc1Swenshuai.xi #elif(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_20)
5973*53ee8cc1Swenshuai.xi //**************************************************************************
5974*53ee8cc1Swenshuai.xi //  [Function Name]:
5975*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_PollingTask
5976*53ee8cc1Swenshuai.xi //  [Description]:
5977*53ee8cc1Swenshuai.xi //
5978*53ee8cc1Swenshuai.xi //  [Arguments]:
5979*53ee8cc1Swenshuai.xi //
5980*53ee8cc1Swenshuai.xi //  [Return]:
5981*53ee8cc1Swenshuai.xi //
5982*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_PollingTask(void)5983*53ee8cc1Swenshuai.xi void _mdrv_mhl_PollingTask(void)
5984*53ee8cc1Swenshuai.xi {
5985*53ee8cc1Swenshuai.xi     void* pModule = NULL;
5986*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
5987*53ee8cc1Swenshuai.xi     MS_BOOL bMHLTaskProcFlag = TRUE;
5988*53ee8cc1Swenshuai.xi     MS_U32 usPollingTaskInterval = 0;
5989*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
5990*53ee8cc1Swenshuai.xi 
5991*53ee8cc1Swenshuai.xi     UtopiaModuleGetPtr(MODULE_MHL, &pModule);
5992*53ee8cc1Swenshuai.xi 
5993*53ee8cc1Swenshuai.xi     while(bMHLTaskProcFlag)
5994*53ee8cc1Swenshuai.xi     {
5995*53ee8cc1Swenshuai.xi         if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
5996*53ee8cc1Swenshuai.xi         {
5997*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
5998*53ee8cc1Swenshuai.xi         }
5999*53ee8cc1Swenshuai.xi         else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
6000*53ee8cc1Swenshuai.xi         {
6001*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6002*53ee8cc1Swenshuai.xi         }
6003*53ee8cc1Swenshuai.xi         else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6004*53ee8cc1Swenshuai.xi         {
6005*53ee8cc1Swenshuai.xi             _mdrv_mhl_PollingEventProc(pMHLResourcePrivate);
6006*53ee8cc1Swenshuai.xi 
6007*53ee8cc1Swenshuai.xi             if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG))
6008*53ee8cc1Swenshuai.xi             {
6009*53ee8cc1Swenshuai.xi                 usPollingTaskInterval = MHL_POLLING_INTERVAL_BUSY;
6010*53ee8cc1Swenshuai.xi             }
6011*53ee8cc1Swenshuai.xi             else
6012*53ee8cc1Swenshuai.xi             {
6013*53ee8cc1Swenshuai.xi                 usPollingTaskInterval = MHL_POLLING_INTERVAL_NORMAL;
6014*53ee8cc1Swenshuai.xi             }
6015*53ee8cc1Swenshuai.xi 
6016*53ee8cc1Swenshuai.xi             bMHLTaskProcFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_TASK_PROCESS_FLAG);
6017*53ee8cc1Swenshuai.xi         }
6018*53ee8cc1Swenshuai.xi 
6019*53ee8cc1Swenshuai.xi         UtopiaResourceRelease(pMHLResource);
6020*53ee8cc1Swenshuai.xi 
6021*53ee8cc1Swenshuai.xi         MsOS_DelayTask(usPollingTaskInterval);
6022*53ee8cc1Swenshuai.xi     }
6023*53ee8cc1Swenshuai.xi }
6024*53ee8cc1Swenshuai.xi 
6025*53ee8cc1Swenshuai.xi //**************************************************************************
6026*53ee8cc1Swenshuai.xi //  [Function Name]:
6027*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_CreateTask
6028*53ee8cc1Swenshuai.xi //  [Description]:
6029*53ee8cc1Swenshuai.xi //
6030*53ee8cc1Swenshuai.xi //  [Arguments]:
6031*53ee8cc1Swenshuai.xi //
6032*53ee8cc1Swenshuai.xi //  [Return]:
6033*53ee8cc1Swenshuai.xi //
6034*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_CreateTask(MHL_RESOURCE_PRIVATE * pMHLResourcePrivate)6035*53ee8cc1Swenshuai.xi MS_BOOL _mdrv_mhl_CreateTask(MHL_RESOURCE_PRIVATE *pMHLResourcePrivate)
6036*53ee8cc1Swenshuai.xi {
6037*53ee8cc1Swenshuai.xi     MS_BOOL bCreateSuccess = TRUE;
6038*53ee8cc1Swenshuai.xi 
6039*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->slMHLPollingTaskID < 0)
6040*53ee8cc1Swenshuai.xi     {
6041*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->slMHLPollingTaskID = MsOS_CreateTask((TaskEntry) _mdrv_mhl_PollingTask,
6042*53ee8cc1Swenshuai.xi                                      (MS_VIRT) NULL,
6043*53ee8cc1Swenshuai.xi                                      E_TASK_PRI_MEDIUM,
6044*53ee8cc1Swenshuai.xi                                      TRUE,
6045*53ee8cc1Swenshuai.xi                                      (void *)pMHLResourcePrivate->ucMHLPollingStack,
6046*53ee8cc1Swenshuai.xi                                      MHL_POLLING_STACK_SIZE,
6047*53ee8cc1Swenshuai.xi                                      "MHL task");
6048*53ee8cc1Swenshuai.xi 
6049*53ee8cc1Swenshuai.xi         SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_TASK_PROCESS_FLAG);
6050*53ee8cc1Swenshuai.xi     }
6051*53ee8cc1Swenshuai.xi 
6052*53ee8cc1Swenshuai.xi     if(pMHLResourcePrivate->slMHLPollingTaskID < 0)
6053*53ee8cc1Swenshuai.xi     {
6054*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("MsOS_CreateTask failed!!\n");
6055*53ee8cc1Swenshuai.xi 
6056*53ee8cc1Swenshuai.xi         MsOS_DeleteEventGroup(pMHLResourcePrivate->slMHLPollingTaskID);
6057*53ee8cc1Swenshuai.xi 
6058*53ee8cc1Swenshuai.xi         bCreateSuccess = FALSE;
6059*53ee8cc1Swenshuai.xi     }
6060*53ee8cc1Swenshuai.xi 
6061*53ee8cc1Swenshuai.xi     return bCreateSuccess;
6062*53ee8cc1Swenshuai.xi }
6063*53ee8cc1Swenshuai.xi 
6064*53ee8cc1Swenshuai.xi #endif
6065*53ee8cc1Swenshuai.xi 
6066*53ee8cc1Swenshuai.xi //**************************************************************************
6067*53ee8cc1Swenshuai.xi //  [Function Name]:
6068*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_IsrHandler()
6069*53ee8cc1Swenshuai.xi //  [Description]
6070*53ee8cc1Swenshuai.xi //
6071*53ee8cc1Swenshuai.xi //  [Arguments]:
6072*53ee8cc1Swenshuai.xi //
6073*53ee8cc1Swenshuai.xi //  [Return]:
6074*53ee8cc1Swenshuai.xi //
6075*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_IsrHandler(InterruptNum eIntNum)6076*53ee8cc1Swenshuai.xi static void _mdrv_mhl_IsrHandler(InterruptNum eIntNum)
6077*53ee8cc1Swenshuai.xi {
6078*53ee8cc1Swenshuai.xi #if(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_10)
6079*53ee8cc1Swenshuai.xi     MS_BOOL bGetResourceFlag = FALSE;
6080*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6081*53ee8cc1Swenshuai.xi 
6082*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6083*53ee8cc1Swenshuai.xi     {
6084*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6085*53ee8cc1Swenshuai.xi     }
6086*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6087*53ee8cc1Swenshuai.xi     {
6088*53ee8cc1Swenshuai.xi         bGetResourceFlag = TRUE;
6089*53ee8cc1Swenshuai.xi     }
6090*53ee8cc1Swenshuai.xi 
6091*53ee8cc1Swenshuai.xi     UNUSED(eIntNum);
6092*53ee8cc1Swenshuai.xi 
6093*53ee8cc1Swenshuai.xi     //MsOS_DisableInterrupt(E_INT_IRQ_MHL_CBUS_PM);
6094*53ee8cc1Swenshuai.xi 
6095*53ee8cc1Swenshuai.xi     if(mhal_mhl_CbusIsMscMsgReceived() && bGetResourceFlag)
6096*53ee8cc1Swenshuai.xi     {
6097*53ee8cc1Swenshuai.xi         SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MSC_FLAG);
6098*53ee8cc1Swenshuai.xi         CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_RECEIVE_LOSE_FLAG);
6099*53ee8cc1Swenshuai.xi 
6100*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucReceiveCounter++;
6101*53ee8cc1Swenshuai.xi     }
6102*53ee8cc1Swenshuai.xi 
6103*53ee8cc1Swenshuai.xi     if(mhal_mhl_CbusStucktoLowFlag())
6104*53ee8cc1Swenshuai.xi     {
6105*53ee8cc1Swenshuai.xi         mhal_mhl_CbusStucktoLow(FALSE);
6106*53ee8cc1Swenshuai.xi 
6107*53ee8cc1Swenshuai.xi         if(bGetResourceFlag)
6108*53ee8cc1Swenshuai.xi         {
6109*53ee8cc1Swenshuai.xi             mhal_mhl_CbusStucktoLowProc(pMHLResourcePrivate->ucMHLSupportPath);
6110*53ee8cc1Swenshuai.xi 
6111*53ee8cc1Swenshuai.xi             mhal_mhl_CDRModeMonitor(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
6112*53ee8cc1Swenshuai.xi         }
6113*53ee8cc1Swenshuai.xi     }
6114*53ee8cc1Swenshuai.xi 
6115*53ee8cc1Swenshuai.xi     if(mhal_mhl_CbusWakeupIntFlag())
6116*53ee8cc1Swenshuai.xi     {
6117*53ee8cc1Swenshuai.xi         mhal_mhl_CbusWakeupInterrupt(FALSE);
6118*53ee8cc1Swenshuai.xi 
6119*53ee8cc1Swenshuai.xi         if(bGetResourceFlag)
6120*53ee8cc1Swenshuai.xi         {
6121*53ee8cc1Swenshuai.xi             SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WAKE_FLAG);
6122*53ee8cc1Swenshuai.xi         }
6123*53ee8cc1Swenshuai.xi     }
6124*53ee8cc1Swenshuai.xi 
6125*53ee8cc1Swenshuai.xi     if(bGetResourceFlag)
6126*53ee8cc1Swenshuai.xi     {
6127*53ee8cc1Swenshuai.xi         if(GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_INTERRUPT_USE_PM_IRQ_FLAG))
6128*53ee8cc1Swenshuai.xi         {
6129*53ee8cc1Swenshuai.xi             MsOS_EnableInterrupt(E_INT_IRQ_PM);
6130*53ee8cc1Swenshuai.xi         }
6131*53ee8cc1Swenshuai.xi         else
6132*53ee8cc1Swenshuai.xi         {
6133*53ee8cc1Swenshuai.xi             MsOS_EnableInterrupt(E_INT_IRQ_MHL_CBUS_PM);
6134*53ee8cc1Swenshuai.xi         }
6135*53ee8cc1Swenshuai.xi     }
6136*53ee8cc1Swenshuai.xi 
6137*53ee8cc1Swenshuai.xi #elif(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_20)
6138*53ee8cc1Swenshuai.xi     void* pModule = NULL;
6139*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
6140*53ee8cc1Swenshuai.xi     MS_BOOL bGetResourceFlag = FALSE;
6141*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6142*53ee8cc1Swenshuai.xi 
6143*53ee8cc1Swenshuai.xi     UtopiaModuleGetPtr(MODULE_MHL, &pModule);
6144*53ee8cc1Swenshuai.xi 
6145*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
6146*53ee8cc1Swenshuai.xi     {
6147*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
6148*53ee8cc1Swenshuai.xi     }
6149*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
6150*53ee8cc1Swenshuai.xi     {
6151*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6152*53ee8cc1Swenshuai.xi     }
6153*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6154*53ee8cc1Swenshuai.xi     {
6155*53ee8cc1Swenshuai.xi         bGetResourceFlag = TRUE;
6156*53ee8cc1Swenshuai.xi     }
6157*53ee8cc1Swenshuai.xi 
6158*53ee8cc1Swenshuai.xi     UNUSED(eIntNum);
6159*53ee8cc1Swenshuai.xi 
6160*53ee8cc1Swenshuai.xi     //MsOS_DisableInterrupt(E_INT_IRQ_MHL_CBUS_PM);
6161*53ee8cc1Swenshuai.xi 
6162*53ee8cc1Swenshuai.xi     if(mhal_mhl_CbusIsMscMsgReceived() && bGetResourceFlag)
6163*53ee8cc1Swenshuai.xi     {
6164*53ee8cc1Swenshuai.xi         SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_MSC_FLAG);
6165*53ee8cc1Swenshuai.xi         CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_RECEIVE_LOSE_FLAG);
6166*53ee8cc1Swenshuai.xi 
6167*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucReceiveCounter++;
6168*53ee8cc1Swenshuai.xi     }
6169*53ee8cc1Swenshuai.xi 
6170*53ee8cc1Swenshuai.xi     if(mhal_mhl_CbusStucktoLowFlag())
6171*53ee8cc1Swenshuai.xi     {
6172*53ee8cc1Swenshuai.xi         mhal_mhl_CbusStucktoLow(FALSE);
6173*53ee8cc1Swenshuai.xi 
6174*53ee8cc1Swenshuai.xi         if(bGetResourceFlag)
6175*53ee8cc1Swenshuai.xi         {
6176*53ee8cc1Swenshuai.xi             mhal_mhl_CbusStucktoLowProc(pMHLResourcePrivate->ucMHLSupportPath);
6177*53ee8cc1Swenshuai.xi 
6178*53ee8cc1Swenshuai.xi             mhal_mhl_CDRModeMonitor(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
6179*53ee8cc1Swenshuai.xi         }
6180*53ee8cc1Swenshuai.xi     }
6181*53ee8cc1Swenshuai.xi 
6182*53ee8cc1Swenshuai.xi     if(mhal_mhl_CbusWakeupIntFlag())
6183*53ee8cc1Swenshuai.xi     {
6184*53ee8cc1Swenshuai.xi         mhal_mhl_CbusWakeupInterrupt(FALSE);
6185*53ee8cc1Swenshuai.xi 
6186*53ee8cc1Swenshuai.xi         if(bGetResourceFlag)
6187*53ee8cc1Swenshuai.xi         {
6188*53ee8cc1Swenshuai.xi             SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WAKE_FLAG);
6189*53ee8cc1Swenshuai.xi         }
6190*53ee8cc1Swenshuai.xi     }
6191*53ee8cc1Swenshuai.xi 
6192*53ee8cc1Swenshuai.xi     if(bGetResourceFlag)
6193*53ee8cc1Swenshuai.xi     {
6194*53ee8cc1Swenshuai.xi         if(GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_INTERRUPT_USE_PM_IRQ_FLAG))
6195*53ee8cc1Swenshuai.xi         {
6196*53ee8cc1Swenshuai.xi             MsOS_EnableInterrupt(E_INT_IRQ_PM);
6197*53ee8cc1Swenshuai.xi         }
6198*53ee8cc1Swenshuai.xi         else
6199*53ee8cc1Swenshuai.xi         {
6200*53ee8cc1Swenshuai.xi             MsOS_EnableInterrupt(E_INT_IRQ_MHL_CBUS_PM);
6201*53ee8cc1Swenshuai.xi         }
6202*53ee8cc1Swenshuai.xi     }
6203*53ee8cc1Swenshuai.xi 
6204*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
6205*53ee8cc1Swenshuai.xi 
6206*53ee8cc1Swenshuai.xi #endif
6207*53ee8cc1Swenshuai.xi }
6208*53ee8cc1Swenshuai.xi 
6209*53ee8cc1Swenshuai.xi //**************************************************************************
6210*53ee8cc1Swenshuai.xi //  [Function Name]:
6211*53ee8cc1Swenshuai.xi //                  _mdrv_mhl_ECbusIsrHandler()
6212*53ee8cc1Swenshuai.xi //  [Description]
6213*53ee8cc1Swenshuai.xi //
6214*53ee8cc1Swenshuai.xi //  [Arguments]:
6215*53ee8cc1Swenshuai.xi //
6216*53ee8cc1Swenshuai.xi //  [Return]:
6217*53ee8cc1Swenshuai.xi //
6218*53ee8cc1Swenshuai.xi //**************************************************************************
_mdrv_mhl_ECbusIsrHandler(InterruptNum eIntNum)6219*53ee8cc1Swenshuai.xi static void _mdrv_mhl_ECbusIsrHandler(InterruptNum eIntNum)
6220*53ee8cc1Swenshuai.xi {
6221*53ee8cc1Swenshuai.xi #if(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_10)
6222*53ee8cc1Swenshuai.xi     MS_BOOL bGetResourceFlag = FALSE;
6223*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6224*53ee8cc1Swenshuai.xi 
6225*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6226*53ee8cc1Swenshuai.xi     {
6227*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6228*53ee8cc1Swenshuai.xi     }
6229*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6230*53ee8cc1Swenshuai.xi     {
6231*53ee8cc1Swenshuai.xi         bGetResourceFlag = TRUE;
6232*53ee8cc1Swenshuai.xi     }
6233*53ee8cc1Swenshuai.xi 
6234*53ee8cc1Swenshuai.xi     UNUSED(eIntNum);
6235*53ee8cc1Swenshuai.xi 
6236*53ee8cc1Swenshuai.xi     if(bGetResourceFlag)
6237*53ee8cc1Swenshuai.xi     {
6238*53ee8cc1Swenshuai.xi         if(mhal_mhl_GetECbusStateChangeFlag(&(pMHLResourcePrivate->stSignalStatusInfo), &(pMHLResourcePrivate->stBISTParameterInfo)))
6239*53ee8cc1Swenshuai.xi         {
6240*53ee8cc1Swenshuai.xi 
6241*53ee8cc1Swenshuai.xi         }
6242*53ee8cc1Swenshuai.xi     }
6243*53ee8cc1Swenshuai.xi     else
6244*53ee8cc1Swenshuai.xi     {
6245*53ee8cc1Swenshuai.xi         if(mhal_mhl_GetECbusStateChangeFlag(NULL, NULL))
6246*53ee8cc1Swenshuai.xi         {
6247*53ee8cc1Swenshuai.xi 
6248*53ee8cc1Swenshuai.xi         }
6249*53ee8cc1Swenshuai.xi     }
6250*53ee8cc1Swenshuai.xi 
6251*53ee8cc1Swenshuai.xi     if(mhal_mhl_GetEMSCReceiveFlag() && bGetResourceFlag)
6252*53ee8cc1Swenshuai.xi     {
6253*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucEMSCReceiveCounter++;
6254*53ee8cc1Swenshuai.xi     }
6255*53ee8cc1Swenshuai.xi 
6256*53ee8cc1Swenshuai.xi #elif(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_20)
6257*53ee8cc1Swenshuai.xi     void* pModule = NULL;
6258*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
6259*53ee8cc1Swenshuai.xi     MS_BOOL bGetResourceFlag = FALSE;
6260*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6261*53ee8cc1Swenshuai.xi 
6262*53ee8cc1Swenshuai.xi     UtopiaModuleGetPtr(MODULE_MHL, &pModule);
6263*53ee8cc1Swenshuai.xi 
6264*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
6265*53ee8cc1Swenshuai.xi     {
6266*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
6267*53ee8cc1Swenshuai.xi     }
6268*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
6269*53ee8cc1Swenshuai.xi     {
6270*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6271*53ee8cc1Swenshuai.xi     }
6272*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6273*53ee8cc1Swenshuai.xi     {
6274*53ee8cc1Swenshuai.xi         bGetResourceFlag = TRUE;
6275*53ee8cc1Swenshuai.xi     }
6276*53ee8cc1Swenshuai.xi 
6277*53ee8cc1Swenshuai.xi     UNUSED(eIntNum);
6278*53ee8cc1Swenshuai.xi 
6279*53ee8cc1Swenshuai.xi     if(bGetResourceFlag)
6280*53ee8cc1Swenshuai.xi     {
6281*53ee8cc1Swenshuai.xi         if(mhal_mhl_GetECbusStateChangeFlag(&(pMHLResourcePrivate->stSignalStatusInfo), &(pMHLResourcePrivate->stBISTParameterInfo)))
6282*53ee8cc1Swenshuai.xi         {
6283*53ee8cc1Swenshuai.xi 
6284*53ee8cc1Swenshuai.xi         }
6285*53ee8cc1Swenshuai.xi     }
6286*53ee8cc1Swenshuai.xi     else
6287*53ee8cc1Swenshuai.xi     {
6288*53ee8cc1Swenshuai.xi         if(mhal_mhl_GetECbusStateChangeFlag(NULL, NULL))
6289*53ee8cc1Swenshuai.xi         {
6290*53ee8cc1Swenshuai.xi 
6291*53ee8cc1Swenshuai.xi         }
6292*53ee8cc1Swenshuai.xi     }
6293*53ee8cc1Swenshuai.xi 
6294*53ee8cc1Swenshuai.xi     if(mhal_mhl_GetEMSCReceiveFlag() && bGetResourceFlag)
6295*53ee8cc1Swenshuai.xi     {
6296*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucEMSCReceiveCounter++;
6297*53ee8cc1Swenshuai.xi     }
6298*53ee8cc1Swenshuai.xi 
6299*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
6300*53ee8cc1Swenshuai.xi 
6301*53ee8cc1Swenshuai.xi #endif
6302*53ee8cc1Swenshuai.xi 
6303*53ee8cc1Swenshuai.xi     MsOS_EnableInterrupt(E_INT_IRQ_MHL_ECBUS_INT);
6304*53ee8cc1Swenshuai.xi }
6305*53ee8cc1Swenshuai.xi 
6306*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
6307*53ee8cc1Swenshuai.xi //  Global Functions
6308*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
6309*53ee8cc1Swenshuai.xi #if(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_10)
6310*53ee8cc1Swenshuai.xi //**************************************************************************
6311*53ee8cc1Swenshuai.xi //  [Function Name]:
6312*53ee8cc1Swenshuai.xi //                  mdrv_mhl_STREventProc()
6313*53ee8cc1Swenshuai.xi //  [Description]
6314*53ee8cc1Swenshuai.xi //
6315*53ee8cc1Swenshuai.xi //  [Arguments]:
6316*53ee8cc1Swenshuai.xi //
6317*53ee8cc1Swenshuai.xi //  [Return]:
6318*53ee8cc1Swenshuai.xi //
6319*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_STREventProc(EN_POWER_MODE usPowerState)6320*53ee8cc1Swenshuai.xi MS_U32 mdrv_mhl_STREventProc(EN_POWER_MODE usPowerState)
6321*53ee8cc1Swenshuai.xi {
6322*53ee8cc1Swenshuai.xi     MS_U32 ulReturnValue = UTOPIA_STATUS_FAIL;
6323*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6324*53ee8cc1Swenshuai.xi 
6325*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6326*53ee8cc1Swenshuai.xi     {
6327*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6328*53ee8cc1Swenshuai.xi     }
6329*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6330*53ee8cc1Swenshuai.xi     {
6331*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->usPrePowerState != usPowerState)
6332*53ee8cc1Swenshuai.xi         {
6333*53ee8cc1Swenshuai.xi             if(usPowerState == E_POWER_SUSPEND)
6334*53ee8cc1Swenshuai.xi             {
6335*53ee8cc1Swenshuai.xi                 if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_HPD_SET_FLAG))
6336*53ee8cc1Swenshuai.xi                 {
6337*53ee8cc1Swenshuai.xi                     _mdrv_mhl_ForceSendClearHPD(pMHLResourcePrivate);
6338*53ee8cc1Swenshuai.xi                 }
6339*53ee8cc1Swenshuai.xi 
6340*53ee8cc1Swenshuai.xi                 ulReturnValue = UTOPIA_STATUS_SUCCESS;
6341*53ee8cc1Swenshuai.xi             }
6342*53ee8cc1Swenshuai.xi             else if(usPowerState == E_POWER_RESUME)
6343*53ee8cc1Swenshuai.xi             {
6344*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucChipCapability = mhal_mhl_initial(pMHLResourcePrivate->ucMHLSupportPath, NULL, NULL, pMHLResourcePrivate->ucDeviceVenderID);
6345*53ee8cc1Swenshuai.xi 
6346*53ee8cc1Swenshuai.xi                 CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_NORMAL_FLAG);
6347*53ee8cc1Swenshuai.xi 
6348*53ee8cc1Swenshuai.xi                 if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG))
6349*53ee8cc1Swenshuai.xi                 {
6350*53ee8cc1Swenshuai.xi                     if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
6351*53ee8cc1Swenshuai.xi                     {
6352*53ee8cc1Swenshuai.xi                         mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
6353*53ee8cc1Swenshuai.xi 
6354*53ee8cc1Swenshuai.xi                         mhal_mhl_CbusConnectProc(pMHLResourcePrivate->ucMHLSupportPath);
6355*53ee8cc1Swenshuai.xi 
6356*53ee8cc1Swenshuai.xi                         if(pMHLResourcePrivate->ucTMDSClockMode == MHL_PHY_CLOCK_PACKET_PIXEL)
6357*53ee8cc1Swenshuai.xi                         {
6358*53ee8cc1Swenshuai.xi                             mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, TRUE, &(pMHLResourcePrivate->stSignalStatusInfo));
6359*53ee8cc1Swenshuai.xi                         }
6360*53ee8cc1Swenshuai.xi                     }
6361*53ee8cc1Swenshuai.xi                     else
6362*53ee8cc1Swenshuai.xi                     {
6363*53ee8cc1Swenshuai.xi                         mhal_mhl_CablePlugProc(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stSignalStatusInfo));
6364*53ee8cc1Swenshuai.xi                     }
6365*53ee8cc1Swenshuai.xi                 }
6366*53ee8cc1Swenshuai.xi 
6367*53ee8cc1Swenshuai.xi                 ulReturnValue = UTOPIA_STATUS_SUCCESS;
6368*53ee8cc1Swenshuai.xi             }
6369*53ee8cc1Swenshuai.xi 
6370*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usPrePowerState = usPowerState;
6371*53ee8cc1Swenshuai.xi         }
6372*53ee8cc1Swenshuai.xi     }
6373*53ee8cc1Swenshuai.xi 
6374*53ee8cc1Swenshuai.xi     return ulReturnValue;
6375*53ee8cc1Swenshuai.xi }
6376*53ee8cc1Swenshuai.xi 
6377*53ee8cc1Swenshuai.xi //**************************************************************************
6378*53ee8cc1Swenshuai.xi //  [Function Name]:
6379*53ee8cc1Swenshuai.xi //                  mdrv_mhl_MHLSupportPath()
6380*53ee8cc1Swenshuai.xi //  [Description]
6381*53ee8cc1Swenshuai.xi //                  MHL support path
6382*53ee8cc1Swenshuai.xi //  [Arguments]:
6383*53ee8cc1Swenshuai.xi //
6384*53ee8cc1Swenshuai.xi //  [Return]:
6385*53ee8cc1Swenshuai.xi //
6386*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_MHLSupportPath(MS_U8 ucSelect)6387*53ee8cc1Swenshuai.xi void mdrv_mhl_MHLSupportPath(MS_U8 ucSelect)
6388*53ee8cc1Swenshuai.xi {
6389*53ee8cc1Swenshuai.xi     MS_BOOL bMHLEfuseFlag = TRUE;
6390*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
6391*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6392*53ee8cc1Swenshuai.xi 
6393*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6394*53ee8cc1Swenshuai.xi     {
6395*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6396*53ee8cc1Swenshuai.xi     }
6397*53ee8cc1Swenshuai.xi     else
6398*53ee8cc1Swenshuai.xi     {
6399*53ee8cc1Swenshuai.xi         // Clear flag
6400*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucInitialIndex != 0xA5)
6401*53ee8cc1Swenshuai.xi         {
6402*53ee8cc1Swenshuai.xi             _mdrv_mhl_ClearCbusFlag(pMHLResourcePrivate, MHL_CLEAR_INITIAL_FLAG);
6403*53ee8cc1Swenshuai.xi 
6404*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucInitialIndex = 0xA5;
6405*53ee8cc1Swenshuai.xi 
6406*53ee8cc1Swenshuai.xi             if(_mdrv_mhl_InitRiuBase(pMHLResourcePrivate)) // Get base success
6407*53ee8cc1Swenshuai.xi             {
6408*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL get XC and PM base success \n");
6409*53ee8cc1Swenshuai.xi 
6410*53ee8cc1Swenshuai.xi                 SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG);
6411*53ee8cc1Swenshuai.xi             }
6412*53ee8cc1Swenshuai.xi         }
6413*53ee8cc1Swenshuai.xi         else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6414*53ee8cc1Swenshuai.xi         {
6415*53ee8cc1Swenshuai.xi             mhal_mhl_SetRegisterBaseAddress(pMHLResourcePrivate->ulRiuBaseAddress, pMHLResourcePrivate->ulPMRiuBaseAddress);
6416*53ee8cc1Swenshuai.xi         }
6417*53ee8cc1Swenshuai.xi 
6418*53ee8cc1Swenshuai.xi         mhal_mhl_MHLSupportPath(ucSelect);
6419*53ee8cc1Swenshuai.xi 
6420*53ee8cc1Swenshuai.xi         bMHLEfuseFlag = MDrv_SYS_Query(E_SYS_QUERY_MHL_SUPPORTED);
6421*53ee8cc1Swenshuai.xi 
6422*53ee8cc1Swenshuai.xi         if(mhal_mhl_CheckEfuseControlFlag(bMHLEfuseFlag))
6423*53ee8cc1Swenshuai.xi         {
6424*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL function not support in this chip ###\r\n");
6425*53ee8cc1Swenshuai.xi         }
6426*53ee8cc1Swenshuai.xi         else
6427*53ee8cc1Swenshuai.xi         {
6428*53ee8cc1Swenshuai.xi             for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK ;uctemp++)
6429*53ee8cc1Swenshuai.xi             {
6430*53ee8cc1Swenshuai.xi                 if(ucSelect &BIT(uctemp))
6431*53ee8cc1Swenshuai.xi                 {
6432*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucMHLSupportPath = uctemp;
6433*53ee8cc1Swenshuai.xi 
6434*53ee8cc1Swenshuai.xi                     MDRV_MHL_MSG_INFO("** MHL function support in port %c\r\n", MHL_INPUT_PORT(uctemp));
6435*53ee8cc1Swenshuai.xi                 }
6436*53ee8cc1Swenshuai.xi             }
6437*53ee8cc1Swenshuai.xi         }
6438*53ee8cc1Swenshuai.xi     }
6439*53ee8cc1Swenshuai.xi }
6440*53ee8cc1Swenshuai.xi 
6441*53ee8cc1Swenshuai.xi //**************************************************************************
6442*53ee8cc1Swenshuai.xi //  [Function Name]:
6443*53ee8cc1Swenshuai.xi //                  mdrv_mhl_Initial()
6444*53ee8cc1Swenshuai.xi //  [Description]
6445*53ee8cc1Swenshuai.xi //                  MHL init
6446*53ee8cc1Swenshuai.xi //  [Arguments]:
6447*53ee8cc1Swenshuai.xi //                  *edid: MHL EDID data
6448*53ee8cc1Swenshuai.xi //                  *devcap: MHL device capability
6449*53ee8cc1Swenshuai.xi //  [Return]:
6450*53ee8cc1Swenshuai.xi //
6451*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_Initial(MS_U8 * edid,MS_U8 * DevCap)6452*53ee8cc1Swenshuai.xi void mdrv_mhl_Initial(MS_U8 *edid, MS_U8 *DevCap)
6453*53ee8cc1Swenshuai.xi {
6454*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
6455*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6456*53ee8cc1Swenshuai.xi 
6457*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6458*53ee8cc1Swenshuai.xi     {
6459*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6460*53ee8cc1Swenshuai.xi     }
6461*53ee8cc1Swenshuai.xi     else
6462*53ee8cc1Swenshuai.xi     {
6463*53ee8cc1Swenshuai.xi         // Clear flag
6464*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucInitialIndex != 0xA5)
6465*53ee8cc1Swenshuai.xi         {
6466*53ee8cc1Swenshuai.xi             _mdrv_mhl_ClearCbusFlag(pMHLResourcePrivate, MHL_CLEAR_INITIAL_FLAG);
6467*53ee8cc1Swenshuai.xi 
6468*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucInitialIndex = 0xA5;
6469*53ee8cc1Swenshuai.xi         }
6470*53ee8cc1Swenshuai.xi 
6471*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_InitRiuBase(pMHLResourcePrivate)) // Get base success
6472*53ee8cc1Swenshuai.xi         {
6473*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL get XC and PM base success \n");
6474*53ee8cc1Swenshuai.xi 
6475*53ee8cc1Swenshuai.xi             SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG);
6476*53ee8cc1Swenshuai.xi         }
6477*53ee8cc1Swenshuai.xi 
6478*53ee8cc1Swenshuai.xi         if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6479*53ee8cc1Swenshuai.xi         {
6480*53ee8cc1Swenshuai.xi             if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_PREVENT_REINITIAL_FLAG))
6481*53ee8cc1Swenshuai.xi             {
6482*53ee8cc1Swenshuai.xi                 // Chip initial
6483*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucChipCapability = mhal_mhl_initial(pMHLResourcePrivate->ucMHLSupportPath, edid, DevCap, pMHLResourcePrivate->ucDeviceVenderID);
6484*53ee8cc1Swenshuai.xi 
6485*53ee8cc1Swenshuai.xi                 SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_PREVENT_REINITIAL_FLAG);
6486*53ee8cc1Swenshuai.xi             }
6487*53ee8cc1Swenshuai.xi             else
6488*53ee8cc1Swenshuai.xi             {
6489*53ee8cc1Swenshuai.xi                 // Load EDID
6490*53ee8cc1Swenshuai.xi                 mhal_mhl_LoadEDID(edid);
6491*53ee8cc1Swenshuai.xi 
6492*53ee8cc1Swenshuai.xi                 // Load vendor ID
6493*53ee8cc1Swenshuai.xi                 mhal_mhl_SetVenderID(pMHLResourcePrivate->ucDeviceVenderID);
6494*53ee8cc1Swenshuai.xi 
6495*53ee8cc1Swenshuai.xi                 // Load DevCap
6496*53ee8cc1Swenshuai.xi                 mhal_mhl_LoadDeviceCapability(DevCap);
6497*53ee8cc1Swenshuai.xi             }
6498*53ee8cc1Swenshuai.xi 
6499*53ee8cc1Swenshuai.xi             // Parsing EDID
6500*53ee8cc1Swenshuai.xi             _mdrv_mhl_ParsingEDIDfor3D(pMHLResourcePrivate, edid);
6501*53ee8cc1Swenshuai.xi 
6502*53ee8cc1Swenshuai.xi             // Check and insert device capability
6503*53ee8cc1Swenshuai.xi             if(DevCap != NULL)
6504*53ee8cc1Swenshuai.xi             {
6505*53ee8cc1Swenshuai.xi                 for(uctemp = 0; uctemp < MHL_DEVICE_CAPABILITY_SIZE; uctemp++)
6506*53ee8cc1Swenshuai.xi                 {
6507*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucDeviceCapabilityTable[uctemp] = DevCap[uctemp];
6508*53ee8cc1Swenshuai.xi                 }
6509*53ee8cc1Swenshuai.xi 
6510*53ee8cc1Swenshuai.xi                 if(_mdrv_mhl_GetEnhanceCbusFlag(pMHLResourcePrivate)) // Chip support MHL 3.0
6511*53ee8cc1Swenshuai.xi                 {
6512*53ee8cc1Swenshuai.xi                     SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG);
6513*53ee8cc1Swenshuai.xi 
6514*53ee8cc1Swenshuai.xi                     for(uctemp = 0; uctemp < MHL_XDEVICE_CAPABILITY_SIZE; uctemp++)
6515*53ee8cc1Swenshuai.xi                     {
6516*53ee8cc1Swenshuai.xi                         pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_DEVICE_CAPABILITY_SIZE +uctemp] = DevCap[MHL_DEVICE_CAPABILITY_SIZE +uctemp];
6517*53ee8cc1Swenshuai.xi                     }
6518*53ee8cc1Swenshuai.xi                 }
6519*53ee8cc1Swenshuai.xi                 else if(DevCap[MHL_CBUS_VERSION] >= 0x30) // Change MHL version to 2.1
6520*53ee8cc1Swenshuai.xi                 {
6521*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_VERSION] = 0x21;
6522*53ee8cc1Swenshuai.xi 
6523*53ee8cc1Swenshuai.xi                     mhal_mhl_LoadDeviceCapability(pMHLResourcePrivate->ucDeviceCapabilityTable);
6524*53ee8cc1Swenshuai.xi 
6525*53ee8cc1Swenshuai.xi                     MDRV_MHL_MSG_INFO("** MHL this chip not supprt MHL 3.0 \r\n");
6526*53ee8cc1Swenshuai.xi                 }
6527*53ee8cc1Swenshuai.xi             }
6528*53ee8cc1Swenshuai.xi 
6529*53ee8cc1Swenshuai.xi             // Attach Cbus ISR
6530*53ee8cc1Swenshuai.xi             if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ISR_ATTACH_FLAG))
6531*53ee8cc1Swenshuai.xi             {
6532*53ee8cc1Swenshuai.xi                 if(GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_INTERRUPT_USE_PM_IRQ_FLAG))
6533*53ee8cc1Swenshuai.xi                 {
6534*53ee8cc1Swenshuai.xi                     MsOS_AttachInterrupt(E_INT_IRQ_PM, _mdrv_mhl_IsrHandler);
6535*53ee8cc1Swenshuai.xi                     MsOS_EnableInterrupt(E_INT_IRQ_PM);
6536*53ee8cc1Swenshuai.xi                 }
6537*53ee8cc1Swenshuai.xi                 else
6538*53ee8cc1Swenshuai.xi                 {
6539*53ee8cc1Swenshuai.xi                     MsOS_AttachInterrupt(E_INT_IRQ_MHL_CBUS_PM, _mdrv_mhl_IsrHandler);
6540*53ee8cc1Swenshuai.xi                     MsOS_EnableInterrupt(E_INT_IRQ_MHL_CBUS_PM);
6541*53ee8cc1Swenshuai.xi                 }
6542*53ee8cc1Swenshuai.xi 
6543*53ee8cc1Swenshuai.xi                 SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ISR_ATTACH_FLAG);
6544*53ee8cc1Swenshuai.xi             }
6545*53ee8cc1Swenshuai.xi 
6546*53ee8cc1Swenshuai.xi             // Attach eCbus ISR
6547*53ee8cc1Swenshuai.xi             if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG))
6548*53ee8cc1Swenshuai.xi             {
6549*53ee8cc1Swenshuai.xi                 if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
6550*53ee8cc1Swenshuai.xi                 {
6551*53ee8cc1Swenshuai.xi                     MsOS_AttachInterrupt(E_INT_IRQ_MHL_ECBUS_INT, _mdrv_mhl_ECbusIsrHandler);
6552*53ee8cc1Swenshuai.xi                     MsOS_EnableInterrupt(E_INT_IRQ_MHL_ECBUS_INT);
6553*53ee8cc1Swenshuai.xi 
6554*53ee8cc1Swenshuai.xi                     SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG);
6555*53ee8cc1Swenshuai.xi                 }
6556*53ee8cc1Swenshuai.xi             }
6557*53ee8cc1Swenshuai.xi         }
6558*53ee8cc1Swenshuai.xi     }
6559*53ee8cc1Swenshuai.xi }
6560*53ee8cc1Swenshuai.xi 
6561*53ee8cc1Swenshuai.xi //**************************************************************************
6562*53ee8cc1Swenshuai.xi //  [Function Name]:
6563*53ee8cc1Swenshuai.xi //                  mdrv_mhl_Handler()
6564*53ee8cc1Swenshuai.xi //  [Description]
6565*53ee8cc1Swenshuai.xi //                  MHL handler
6566*53ee8cc1Swenshuai.xi //  [Arguments]:
6567*53ee8cc1Swenshuai.xi //
6568*53ee8cc1Swenshuai.xi //  [Return]:
6569*53ee8cc1Swenshuai.xi //
6570*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_Handler(void)6571*53ee8cc1Swenshuai.xi MS_U16 mdrv_mhl_Handler(void)
6572*53ee8cc1Swenshuai.xi {
6573*53ee8cc1Swenshuai.xi     MS_U16 usMSGKeyInfo = 0;
6574*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6575*53ee8cc1Swenshuai.xi 
6576*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6577*53ee8cc1Swenshuai.xi     {
6578*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6579*53ee8cc1Swenshuai.xi     }
6580*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6581*53ee8cc1Swenshuai.xi     {
6582*53ee8cc1Swenshuai.xi         _mdrv_mhl_PollingEventProc(pMHLResourcePrivate);
6583*53ee8cc1Swenshuai.xi 
6584*53ee8cc1Swenshuai.xi         if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG))
6585*53ee8cc1Swenshuai.xi         {
6586*53ee8cc1Swenshuai.xi             CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG);
6587*53ee8cc1Swenshuai.xi 
6588*53ee8cc1Swenshuai.xi             usMSGKeyInfo = pMHLResourcePrivate->usMSGKeyInfo;
6589*53ee8cc1Swenshuai.xi         }
6590*53ee8cc1Swenshuai.xi     }
6591*53ee8cc1Swenshuai.xi 
6592*53ee8cc1Swenshuai.xi     return usMSGKeyInfo;
6593*53ee8cc1Swenshuai.xi }
6594*53ee8cc1Swenshuai.xi 
6595*53ee8cc1Swenshuai.xi //**************************************************************************
6596*53ee8cc1Swenshuai.xi //  [Function Name]:
6597*53ee8cc1Swenshuai.xi //                  mdrv_mhl_AutoSwitchHandler()
6598*53ee8cc1Swenshuai.xi //  [Description]
6599*53ee8cc1Swenshuai.xi //
6600*53ee8cc1Swenshuai.xi //  [Arguments]:
6601*53ee8cc1Swenshuai.xi //
6602*53ee8cc1Swenshuai.xi //  [Return]:
6603*53ee8cc1Swenshuai.xi //
6604*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_AutoSwitchHandler(MS_BOOL bReset,MS_U8 * ucCbusPath)6605*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_AutoSwitchHandler(MS_BOOL bReset, MS_U8 *ucCbusPath)
6606*53ee8cc1Swenshuai.xi {
6607*53ee8cc1Swenshuai.xi     MS_BOOL bAutoSwitchFlag = FALSE;
6608*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6609*53ee8cc1Swenshuai.xi 
6610*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6611*53ee8cc1Swenshuai.xi     {
6612*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6613*53ee8cc1Swenshuai.xi     }
6614*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6615*53ee8cc1Swenshuai.xi     {
6616*53ee8cc1Swenshuai.xi         if(bReset)
6617*53ee8cc1Swenshuai.xi         {
6618*53ee8cc1Swenshuai.xi             CLR_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_AUTO_SWITCH_DONE_FLAG);
6619*53ee8cc1Swenshuai.xi             CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG);
6620*53ee8cc1Swenshuai.xi         }
6621*53ee8cc1Swenshuai.xi         else
6622*53ee8cc1Swenshuai.xi         {
6623*53ee8cc1Swenshuai.xi             if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_AUTO_SWITCH_DONE_FLAG))
6624*53ee8cc1Swenshuai.xi             {
6625*53ee8cc1Swenshuai.xi                 CLR_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_AUTO_SWITCH_DONE_FLAG);
6626*53ee8cc1Swenshuai.xi 
6627*53ee8cc1Swenshuai.xi                 _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_AUTO_SWITCH_STOP, MHL_AUTO_SWITCH_STOP_TIME);
6628*53ee8cc1Swenshuai.xi 
6629*53ee8cc1Swenshuai.xi                 SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_STOP_FLAG);
6630*53ee8cc1Swenshuai.xi 
6631*53ee8cc1Swenshuai.xi                 bAutoSwitchFlag = TRUE;
6632*53ee8cc1Swenshuai.xi             }
6633*53ee8cc1Swenshuai.xi             else if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_STOP_FLAG))
6634*53ee8cc1Swenshuai.xi             {
6635*53ee8cc1Swenshuai.xi                 if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG))
6636*53ee8cc1Swenshuai.xi                 {
6637*53ee8cc1Swenshuai.xi                     if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
6638*53ee8cc1Swenshuai.xi                     {
6639*53ee8cc1Swenshuai.xi                         SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG);
6640*53ee8cc1Swenshuai.xi                     }
6641*53ee8cc1Swenshuai.xi                 }
6642*53ee8cc1Swenshuai.xi             }
6643*53ee8cc1Swenshuai.xi         }
6644*53ee8cc1Swenshuai.xi     }
6645*53ee8cc1Swenshuai.xi 
6646*53ee8cc1Swenshuai.xi     return bAutoSwitchFlag;
6647*53ee8cc1Swenshuai.xi }
6648*53ee8cc1Swenshuai.xi 
6649*53ee8cc1Swenshuai.xi //**************************************************************************
6650*53ee8cc1Swenshuai.xi //  [Function Name]:
6651*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SetPowerState()
6652*53ee8cc1Swenshuai.xi //  [Description]
6653*53ee8cc1Swenshuai.xi //
6654*53ee8cc1Swenshuai.xi //  [Arguments]:
6655*53ee8cc1Swenshuai.xi //
6656*53ee8cc1Swenshuai.xi //  [Return]:
6657*53ee8cc1Swenshuai.xi //
6658*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SetPowerState(EN_POWER_MODE usPowerState)6659*53ee8cc1Swenshuai.xi MS_U32 mdrv_mhl_SetPowerState(EN_POWER_MODE usPowerState)
6660*53ee8cc1Swenshuai.xi {
6661*53ee8cc1Swenshuai.xi     return mdrv_mhl_STREventProc(usPowerState);
6662*53ee8cc1Swenshuai.xi }
6663*53ee8cc1Swenshuai.xi 
6664*53ee8cc1Swenshuai.xi //**************************************************************************
6665*53ee8cc1Swenshuai.xi //  [Function Name]:
6666*53ee8cc1Swenshuai.xi //                  mdrv_mhl_CbusControl()
6667*53ee8cc1Swenshuai.xi //  [Description]
6668*53ee8cc1Swenshuai.xi //
6669*53ee8cc1Swenshuai.xi //  [Arguments]:
6670*53ee8cc1Swenshuai.xi //
6671*53ee8cc1Swenshuai.xi //  [Return]:
6672*53ee8cc1Swenshuai.xi //
6673*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusControl(MS_U8 ucState)6674*53ee8cc1Swenshuai.xi void mdrv_mhl_CbusControl(MS_U8 ucState)
6675*53ee8cc1Swenshuai.xi {
6676*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6677*53ee8cc1Swenshuai.xi 
6678*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6679*53ee8cc1Swenshuai.xi     {
6680*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6681*53ee8cc1Swenshuai.xi     }
6682*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6683*53ee8cc1Swenshuai.xi     {
6684*53ee8cc1Swenshuai.xi         switch(ucState)
6685*53ee8cc1Swenshuai.xi         {
6686*53ee8cc1Swenshuai.xi             case MHL_CBUS_FORCE_READY_DEVCAP:
6687*53ee8cc1Swenshuai.xi                 SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG);
6688*53ee8cc1Swenshuai.xi                 break;
6689*53ee8cc1Swenshuai.xi 
6690*53ee8cc1Swenshuai.xi             case MHL_CBUS_FORCE_RECEIVE_3D_REQ:
6691*53ee8cc1Swenshuai.xi                 SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_3D_REQ_FLAG);
6692*53ee8cc1Swenshuai.xi                 break;
6693*53ee8cc1Swenshuai.xi 
6694*53ee8cc1Swenshuai.xi             case MHL_CBUS_FORCE_SEND_COMMAND_ENABLE:
6695*53ee8cc1Swenshuai.xi                 SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_FORCE_SEND_COMMAND_FLAG);
6696*53ee8cc1Swenshuai.xi                 break;
6697*53ee8cc1Swenshuai.xi 
6698*53ee8cc1Swenshuai.xi             case MHL_CBUS_FORCE_SEND_COMMAND_DISABLE:
6699*53ee8cc1Swenshuai.xi                 CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_FORCE_SEND_COMMAND_FLAG);
6700*53ee8cc1Swenshuai.xi                 break;
6701*53ee8cc1Swenshuai.xi 
6702*53ee8cc1Swenshuai.xi             case MHL_CBUS_CHECK_CONTEND_ON_ENABLE:
6703*53ee8cc1Swenshuai.xi                 SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CHECK_CONTENT_ENABLE_FLAG);
6704*53ee8cc1Swenshuai.xi                 break;
6705*53ee8cc1Swenshuai.xi 
6706*53ee8cc1Swenshuai.xi             case MHL_CBUS_CHECK_CONTEND_ON_DISABLE:
6707*53ee8cc1Swenshuai.xi                 CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CHECK_CONTENT_ENABLE_FLAG);
6708*53ee8cc1Swenshuai.xi                 break;
6709*53ee8cc1Swenshuai.xi 
6710*53ee8cc1Swenshuai.xi             case MHL_CBUS_ISOLATION_ON:
6711*53ee8cc1Swenshuai.xi                 mhal_mhl_CbusIsolate(pMHLResourcePrivate->ucMHLSupportPath, TRUE);
6712*53ee8cc1Swenshuai.xi                 break;
6713*53ee8cc1Swenshuai.xi 
6714*53ee8cc1Swenshuai.xi             case MHL_CBUS_ISOLATION_OFF:
6715*53ee8cc1Swenshuai.xi                 mhal_mhl_CbusIsolate(pMHLResourcePrivate->ucMHLSupportPath, FALSE);
6716*53ee8cc1Swenshuai.xi                 break;
6717*53ee8cc1Swenshuai.xi 
6718*53ee8cc1Swenshuai.xi             case MHL_CBUS_FLOATING_ON:
6719*53ee8cc1Swenshuai.xi                 mhal_mhl_CbusFloating(TRUE);
6720*53ee8cc1Swenshuai.xi                 break;
6721*53ee8cc1Swenshuai.xi 
6722*53ee8cc1Swenshuai.xi             case MHL_CBUS_FLOATING_OFF:
6723*53ee8cc1Swenshuai.xi                 mhal_mhl_CbusFloating(FALSE);
6724*53ee8cc1Swenshuai.xi                 break;
6725*53ee8cc1Swenshuai.xi 
6726*53ee8cc1Swenshuai.xi             case MHL_VBUS_HW_DETCET:
6727*53ee8cc1Swenshuai.xi                 mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, VBUS_HW_DETECT);
6728*53ee8cc1Swenshuai.xi                 break;
6729*53ee8cc1Swenshuai.xi 
6730*53ee8cc1Swenshuai.xi             case MHL_VBUS_CHARGE_ON:
6731*53ee8cc1Swenshuai.xi                 mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, VBUS_SW_CHARGE);
6732*53ee8cc1Swenshuai.xi                 break;
6733*53ee8cc1Swenshuai.xi 
6734*53ee8cc1Swenshuai.xi             case MHL_VBUS_CHARGE_OFF:
6735*53ee8cc1Swenshuai.xi                 mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, VBUS_SW_UNCHARGE);
6736*53ee8cc1Swenshuai.xi                 break;
6737*53ee8cc1Swenshuai.xi 
6738*53ee8cc1Swenshuai.xi             default:
6739*53ee8cc1Swenshuai.xi 
6740*53ee8cc1Swenshuai.xi                 break;
6741*53ee8cc1Swenshuai.xi         };
6742*53ee8cc1Swenshuai.xi     }
6743*53ee8cc1Swenshuai.xi }
6744*53ee8cc1Swenshuai.xi 
6745*53ee8cc1Swenshuai.xi //**************************************************************************
6746*53ee8cc1Swenshuai.xi //  [Function Name]:
6747*53ee8cc1Swenshuai.xi //                  mdrv_mhl_LoadEDID()
6748*53ee8cc1Swenshuai.xi //  [Description]
6749*53ee8cc1Swenshuai.xi //
6750*53ee8cc1Swenshuai.xi //  [Arguments]:
6751*53ee8cc1Swenshuai.xi //
6752*53ee8cc1Swenshuai.xi //  [Return]:
6753*53ee8cc1Swenshuai.xi //
6754*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_LoadEDID(MS_U8 * edid)6755*53ee8cc1Swenshuai.xi void mdrv_mhl_LoadEDID(MS_U8 *edid)
6756*53ee8cc1Swenshuai.xi {
6757*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6758*53ee8cc1Swenshuai.xi 
6759*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6760*53ee8cc1Swenshuai.xi     {
6761*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6762*53ee8cc1Swenshuai.xi     }
6763*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6764*53ee8cc1Swenshuai.xi     {
6765*53ee8cc1Swenshuai.xi         mhal_mhl_LoadEDID(edid);
6766*53ee8cc1Swenshuai.xi 
6767*53ee8cc1Swenshuai.xi         // Parsing EDID
6768*53ee8cc1Swenshuai.xi         _mdrv_mhl_ParsingEDIDfor3D(pMHLResourcePrivate, edid);
6769*53ee8cc1Swenshuai.xi     }
6770*53ee8cc1Swenshuai.xi }
6771*53ee8cc1Swenshuai.xi 
6772*53ee8cc1Swenshuai.xi //**************************************************************************
6773*53ee8cc1Swenshuai.xi //  [Function Name]:
6774*53ee8cc1Swenshuai.xi //                  mdrv_mhl_ReadEDID()
6775*53ee8cc1Swenshuai.xi //  [Description]
6776*53ee8cc1Swenshuai.xi //
6777*53ee8cc1Swenshuai.xi //  [Arguments]:
6778*53ee8cc1Swenshuai.xi //
6779*53ee8cc1Swenshuai.xi //  [Return]:
6780*53ee8cc1Swenshuai.xi //
6781*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_ReadEDID(MS_U16 usSize,MS_U8 * edid)6782*53ee8cc1Swenshuai.xi void mdrv_mhl_ReadEDID(MS_U16 usSize, MS_U8 *edid)
6783*53ee8cc1Swenshuai.xi {
6784*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6785*53ee8cc1Swenshuai.xi 
6786*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6787*53ee8cc1Swenshuai.xi     {
6788*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6789*53ee8cc1Swenshuai.xi     }
6790*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6791*53ee8cc1Swenshuai.xi     {
6792*53ee8cc1Swenshuai.xi         if(usSize > 0)
6793*53ee8cc1Swenshuai.xi         {
6794*53ee8cc1Swenshuai.xi             mhal_mhl_ReadEDID(usSize, edid);
6795*53ee8cc1Swenshuai.xi         }
6796*53ee8cc1Swenshuai.xi     }
6797*53ee8cc1Swenshuai.xi }
6798*53ee8cc1Swenshuai.xi 
6799*53ee8cc1Swenshuai.xi //**************************************************************************
6800*53ee8cc1Swenshuai.xi //  [Function Name]:
6801*53ee8cc1Swenshuai.xi //                  mdrv_mhl_LoadDeviceCapability()
6802*53ee8cc1Swenshuai.xi //  [Description]
6803*53ee8cc1Swenshuai.xi //
6804*53ee8cc1Swenshuai.xi //  [Arguments]:
6805*53ee8cc1Swenshuai.xi //
6806*53ee8cc1Swenshuai.xi //  [Return]:
6807*53ee8cc1Swenshuai.xi //
6808*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_LoadDeviceCapability(MS_U8 * devcap)6809*53ee8cc1Swenshuai.xi void mdrv_mhl_LoadDeviceCapability(MS_U8 *devcap)
6810*53ee8cc1Swenshuai.xi {
6811*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
6812*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6813*53ee8cc1Swenshuai.xi 
6814*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6815*53ee8cc1Swenshuai.xi     {
6816*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6817*53ee8cc1Swenshuai.xi     }
6818*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6819*53ee8cc1Swenshuai.xi     {
6820*53ee8cc1Swenshuai.xi         if(devcap != NULL)
6821*53ee8cc1Swenshuai.xi         {
6822*53ee8cc1Swenshuai.xi             for(uctemp = 0; uctemp < MHL_DEVICE_CAPABILITY_SIZE; uctemp++)
6823*53ee8cc1Swenshuai.xi             {
6824*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucDeviceCapabilityTable[uctemp] = devcap[uctemp];
6825*53ee8cc1Swenshuai.xi             }
6826*53ee8cc1Swenshuai.xi 
6827*53ee8cc1Swenshuai.xi             if(_mdrv_mhl_GetEnhanceCbusFlag(pMHLResourcePrivate)) // Chip support MHL 3.0
6828*53ee8cc1Swenshuai.xi             {
6829*53ee8cc1Swenshuai.xi                 SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG);
6830*53ee8cc1Swenshuai.xi 
6831*53ee8cc1Swenshuai.xi                 for(uctemp = 0; uctemp < MHL_XDEVICE_CAPABILITY_SIZE; uctemp++)
6832*53ee8cc1Swenshuai.xi                 {
6833*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_DEVICE_CAPABILITY_SIZE +uctemp] = devcap[MHL_DEVICE_CAPABILITY_SIZE +uctemp];
6834*53ee8cc1Swenshuai.xi                 }
6835*53ee8cc1Swenshuai.xi             }
6836*53ee8cc1Swenshuai.xi             else if(devcap[MHL_CBUS_VERSION] >= 0x30) // Change MHL version to 2.1
6837*53ee8cc1Swenshuai.xi             {
6838*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_VERSION] = 0x21;
6839*53ee8cc1Swenshuai.xi 
6840*53ee8cc1Swenshuai.xi                 mhal_mhl_LoadDeviceCapability(pMHLResourcePrivate->ucDeviceCapabilityTable);
6841*53ee8cc1Swenshuai.xi 
6842*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL this chip not supprt MHL 3.0 \r\n");
6843*53ee8cc1Swenshuai.xi             }
6844*53ee8cc1Swenshuai.xi 
6845*53ee8cc1Swenshuai.xi             // Attach eCbus ISR
6846*53ee8cc1Swenshuai.xi             if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG))
6847*53ee8cc1Swenshuai.xi             {
6848*53ee8cc1Swenshuai.xi                 if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
6849*53ee8cc1Swenshuai.xi                 {
6850*53ee8cc1Swenshuai.xi                     MsOS_AttachInterrupt(E_INT_IRQ_MHL_ECBUS_INT, _mdrv_mhl_ECbusIsrHandler);
6851*53ee8cc1Swenshuai.xi                     MsOS_EnableInterrupt(E_INT_IRQ_MHL_ECBUS_INT);
6852*53ee8cc1Swenshuai.xi 
6853*53ee8cc1Swenshuai.xi                     SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG);
6854*53ee8cc1Swenshuai.xi                 }
6855*53ee8cc1Swenshuai.xi             }
6856*53ee8cc1Swenshuai.xi         }
6857*53ee8cc1Swenshuai.xi     }
6858*53ee8cc1Swenshuai.xi }
6859*53ee8cc1Swenshuai.xi 
6860*53ee8cc1Swenshuai.xi //**************************************************************************
6861*53ee8cc1Swenshuai.xi //  [Function Name]:
6862*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SetVenderID()
6863*53ee8cc1Swenshuai.xi //  [Description]
6864*53ee8cc1Swenshuai.xi //
6865*53ee8cc1Swenshuai.xi //  [Arguments]:
6866*53ee8cc1Swenshuai.xi //
6867*53ee8cc1Swenshuai.xi //  [Return]:
6868*53ee8cc1Swenshuai.xi //
6869*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SetVenderID(MS_U8 ucVenderID)6870*53ee8cc1Swenshuai.xi void mdrv_mhl_SetVenderID(MS_U8 ucVenderID)
6871*53ee8cc1Swenshuai.xi {
6872*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6873*53ee8cc1Swenshuai.xi 
6874*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6875*53ee8cc1Swenshuai.xi     {
6876*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6877*53ee8cc1Swenshuai.xi     }
6878*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6879*53ee8cc1Swenshuai.xi     {
6880*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucDeviceVenderID = ucVenderID;
6881*53ee8cc1Swenshuai.xi 
6882*53ee8cc1Swenshuai.xi         mhal_mhl_SetVenderID(ucVenderID);
6883*53ee8cc1Swenshuai.xi     }
6884*53ee8cc1Swenshuai.xi }
6885*53ee8cc1Swenshuai.xi 
6886*53ee8cc1Swenshuai.xi //**************************************************************************
6887*53ee8cc1Swenshuai.xi //  [Function Name]:
6888*53ee8cc1Swenshuai.xi //                  mdrv_mhl_InvertCableDetect()
6889*53ee8cc1Swenshuai.xi //  [Description]
6890*53ee8cc1Swenshuai.xi //
6891*53ee8cc1Swenshuai.xi //  [Arguments]:
6892*53ee8cc1Swenshuai.xi //
6893*53ee8cc1Swenshuai.xi //  [Return]:
6894*53ee8cc1Swenshuai.xi //
6895*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_InvertCableDetect(MS_BOOL bCableDetectInvert)6896*53ee8cc1Swenshuai.xi void mdrv_mhl_InvertCableDetect(MS_BOOL bCableDetectInvert)
6897*53ee8cc1Swenshuai.xi {
6898*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6899*53ee8cc1Swenshuai.xi 
6900*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6901*53ee8cc1Swenshuai.xi     {
6902*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6903*53ee8cc1Swenshuai.xi     }
6904*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6905*53ee8cc1Swenshuai.xi     {
6906*53ee8cc1Swenshuai.xi         mhal_mhl_InvertCableDetect(pMHLResourcePrivate->ucMHLSupportPath, bCableDetectInvert);
6907*53ee8cc1Swenshuai.xi     }
6908*53ee8cc1Swenshuai.xi }
6909*53ee8cc1Swenshuai.xi 
6910*53ee8cc1Swenshuai.xi //**************************************************************************
6911*53ee8cc1Swenshuai.xi //  [Function Name]:
6912*53ee8cc1Swenshuai.xi //                  mdrv_mhl_VbusConfigSetting()
6913*53ee8cc1Swenshuai.xi //  [Description]
6914*53ee8cc1Swenshuai.xi //
6915*53ee8cc1Swenshuai.xi //  [Arguments]:
6916*53ee8cc1Swenshuai.xi //
6917*53ee8cc1Swenshuai.xi //  [Return]:
6918*53ee8cc1Swenshuai.xi //
6919*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_VbusConfigSetting(MS_U8 ucState)6920*53ee8cc1Swenshuai.xi void mdrv_mhl_VbusConfigSetting(MS_U8 ucState)
6921*53ee8cc1Swenshuai.xi {
6922*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6923*53ee8cc1Swenshuai.xi 
6924*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6925*53ee8cc1Swenshuai.xi     {
6926*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6927*53ee8cc1Swenshuai.xi     }
6928*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6929*53ee8cc1Swenshuai.xi     {
6930*53ee8cc1Swenshuai.xi         mhal_mhl_VbusConfigSetting(pMHLResourcePrivate->ucMHLSupportPath, ucState);
6931*53ee8cc1Swenshuai.xi     }
6932*53ee8cc1Swenshuai.xi }
6933*53ee8cc1Swenshuai.xi 
6934*53ee8cc1Swenshuai.xi //**************************************************************************
6935*53ee8cc1Swenshuai.xi //  [Function Name]:
6936*53ee8cc1Swenshuai.xi //                  mdrv_mhl_AdjustSettingIControl()
6937*53ee8cc1Swenshuai.xi //  [Description]
6938*53ee8cc1Swenshuai.xi //
6939*53ee8cc1Swenshuai.xi //  [Arguments]:
6940*53ee8cc1Swenshuai.xi //
6941*53ee8cc1Swenshuai.xi //  [Return]:
6942*53ee8cc1Swenshuai.xi //
6943*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_AdjustSettingIControl(MS_U8 ucIControl)6944*53ee8cc1Swenshuai.xi void mdrv_mhl_AdjustSettingIControl(MS_U8 ucIControl)
6945*53ee8cc1Swenshuai.xi {
6946*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6947*53ee8cc1Swenshuai.xi 
6948*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6949*53ee8cc1Swenshuai.xi     {
6950*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6951*53ee8cc1Swenshuai.xi     }
6952*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6953*53ee8cc1Swenshuai.xi     {
6954*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stSignalStatusInfo.ucIControlValue = ucIControl;
6955*53ee8cc1Swenshuai.xi     }
6956*53ee8cc1Swenshuai.xi }
6957*53ee8cc1Swenshuai.xi 
6958*53ee8cc1Swenshuai.xi //**************************************************************************
6959*53ee8cc1Swenshuai.xi //  [Function Name]:
6960*53ee8cc1Swenshuai.xi //                  mdrv_mhl_AdjustImpedanceSetting()
6961*53ee8cc1Swenshuai.xi //  [Description]
6962*53ee8cc1Swenshuai.xi //
6963*53ee8cc1Swenshuai.xi //  [Arguments]:
6964*53ee8cc1Swenshuai.xi //
6965*53ee8cc1Swenshuai.xi //  [Return]:
6966*53ee8cc1Swenshuai.xi //
6967*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_AdjustImpedanceSetting(MS_U8 ucImpedance)6968*53ee8cc1Swenshuai.xi void mdrv_mhl_AdjustImpedanceSetting(MS_U8 ucImpedance)
6969*53ee8cc1Swenshuai.xi {
6970*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6971*53ee8cc1Swenshuai.xi 
6972*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6973*53ee8cc1Swenshuai.xi     {
6974*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
6975*53ee8cc1Swenshuai.xi     }
6976*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
6977*53ee8cc1Swenshuai.xi     {
6978*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stSignalStatusInfo.ucImpedanceOffset = ucImpedance;
6979*53ee8cc1Swenshuai.xi     }
6980*53ee8cc1Swenshuai.xi }
6981*53ee8cc1Swenshuai.xi 
6982*53ee8cc1Swenshuai.xi //**************************************************************************
6983*53ee8cc1Swenshuai.xi //  [Function Name]:
6984*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetCableDetectFlag()
6985*53ee8cc1Swenshuai.xi //  [Description]
6986*53ee8cc1Swenshuai.xi //
6987*53ee8cc1Swenshuai.xi //  [Arguments]:
6988*53ee8cc1Swenshuai.xi //
6989*53ee8cc1Swenshuai.xi //  [Return]:
6990*53ee8cc1Swenshuai.xi //
6991*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetCableDetectFlag(void)6992*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetCableDetectFlag(void)
6993*53ee8cc1Swenshuai.xi {
6994*53ee8cc1Swenshuai.xi     MS_BOOL bStatusFlag = FALSE;
6995*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
6996*53ee8cc1Swenshuai.xi 
6997*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
6998*53ee8cc1Swenshuai.xi     {
6999*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7000*53ee8cc1Swenshuai.xi     }
7001*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7002*53ee8cc1Swenshuai.xi     {
7003*53ee8cc1Swenshuai.xi         bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG);
7004*53ee8cc1Swenshuai.xi     }
7005*53ee8cc1Swenshuai.xi 
7006*53ee8cc1Swenshuai.xi     return bStatusFlag;
7007*53ee8cc1Swenshuai.xi }
7008*53ee8cc1Swenshuai.xi 
7009*53ee8cc1Swenshuai.xi //**************************************************************************
7010*53ee8cc1Swenshuai.xi //  [Function Name]:
7011*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetCbusConnectFlag()
7012*53ee8cc1Swenshuai.xi //  [Description]
7013*53ee8cc1Swenshuai.xi //
7014*53ee8cc1Swenshuai.xi //  [Arguments]:
7015*53ee8cc1Swenshuai.xi //
7016*53ee8cc1Swenshuai.xi //  [Return]:
7017*53ee8cc1Swenshuai.xi //
7018*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetCbusConnectFlag(void)7019*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetCbusConnectFlag(void)
7020*53ee8cc1Swenshuai.xi {
7021*53ee8cc1Swenshuai.xi     MS_BOOL bStatusFlag = FALSE;
7022*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7023*53ee8cc1Swenshuai.xi 
7024*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7025*53ee8cc1Swenshuai.xi     {
7026*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7027*53ee8cc1Swenshuai.xi     }
7028*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7029*53ee8cc1Swenshuai.xi     {
7030*53ee8cc1Swenshuai.xi         bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG);
7031*53ee8cc1Swenshuai.xi     }
7032*53ee8cc1Swenshuai.xi 
7033*53ee8cc1Swenshuai.xi     return bStatusFlag;
7034*53ee8cc1Swenshuai.xi }
7035*53ee8cc1Swenshuai.xi 
7036*53ee8cc1Swenshuai.xi //**************************************************************************
7037*53ee8cc1Swenshuai.xi //  [Function Name]:
7038*53ee8cc1Swenshuai.xi //                  mdrv_mhl_CbusWakeupIntFlag()
7039*53ee8cc1Swenshuai.xi //  [Description]
7040*53ee8cc1Swenshuai.xi //
7041*53ee8cc1Swenshuai.xi //  [Arguments]:
7042*53ee8cc1Swenshuai.xi //
7043*53ee8cc1Swenshuai.xi //  [Return]:
7044*53ee8cc1Swenshuai.xi //
7045*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusWakeupIntFlag(void)7046*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_CbusWakeupIntFlag(void)
7047*53ee8cc1Swenshuai.xi {
7048*53ee8cc1Swenshuai.xi     MS_BOOL bStatusFlag = FALSE;
7049*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7050*53ee8cc1Swenshuai.xi 
7051*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7052*53ee8cc1Swenshuai.xi     {
7053*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7054*53ee8cc1Swenshuai.xi     }
7055*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7056*53ee8cc1Swenshuai.xi     {
7057*53ee8cc1Swenshuai.xi         bStatusFlag = GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WAKE_FLAG);
7058*53ee8cc1Swenshuai.xi     }
7059*53ee8cc1Swenshuai.xi 
7060*53ee8cc1Swenshuai.xi     return bStatusFlag;
7061*53ee8cc1Swenshuai.xi }
7062*53ee8cc1Swenshuai.xi 
7063*53ee8cc1Swenshuai.xi //**************************************************************************
7064*53ee8cc1Swenshuai.xi //  [Function Name]:
7065*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SrcRCPSupportFlag()
7066*53ee8cc1Swenshuai.xi //  [Description]
7067*53ee8cc1Swenshuai.xi //
7068*53ee8cc1Swenshuai.xi //  [Arguments]:
7069*53ee8cc1Swenshuai.xi //
7070*53ee8cc1Swenshuai.xi //  [Return]:
7071*53ee8cc1Swenshuai.xi //
7072*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SrcRCPSupportFlag(void)7073*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SrcRCPSupportFlag(void)
7074*53ee8cc1Swenshuai.xi {
7075*53ee8cc1Swenshuai.xi     MS_BOOL bStatusFlag = FALSE;
7076*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7077*53ee8cc1Swenshuai.xi 
7078*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7079*53ee8cc1Swenshuai.xi     {
7080*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7081*53ee8cc1Swenshuai.xi     }
7082*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7083*53ee8cc1Swenshuai.xi     {
7084*53ee8cc1Swenshuai.xi         bStatusFlag = GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_RCP_FUNCTION_FLAG);
7085*53ee8cc1Swenshuai.xi     }
7086*53ee8cc1Swenshuai.xi 
7087*53ee8cc1Swenshuai.xi     return bStatusFlag;
7088*53ee8cc1Swenshuai.xi }
7089*53ee8cc1Swenshuai.xi 
7090*53ee8cc1Swenshuai.xi //**************************************************************************
7091*53ee8cc1Swenshuai.xi //  [Function Name]:
7092*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SrcRAPSupportFlag()
7093*53ee8cc1Swenshuai.xi //  [Description]
7094*53ee8cc1Swenshuai.xi //
7095*53ee8cc1Swenshuai.xi //  [Arguments]:
7096*53ee8cc1Swenshuai.xi //
7097*53ee8cc1Swenshuai.xi //  [Return]:
7098*53ee8cc1Swenshuai.xi //
7099*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SrcRAPSupportFlag(void)7100*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SrcRAPSupportFlag(void)
7101*53ee8cc1Swenshuai.xi {
7102*53ee8cc1Swenshuai.xi     MS_BOOL bStatusFlag = FALSE;
7103*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7104*53ee8cc1Swenshuai.xi 
7105*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7106*53ee8cc1Swenshuai.xi     {
7107*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7108*53ee8cc1Swenshuai.xi     }
7109*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7110*53ee8cc1Swenshuai.xi     {
7111*53ee8cc1Swenshuai.xi         bStatusFlag = GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_RAP_FUNCTION_FLAG);
7112*53ee8cc1Swenshuai.xi     }
7113*53ee8cc1Swenshuai.xi 
7114*53ee8cc1Swenshuai.xi     return bStatusFlag;
7115*53ee8cc1Swenshuai.xi }
7116*53ee8cc1Swenshuai.xi 
7117*53ee8cc1Swenshuai.xi //**************************************************************************
7118*53ee8cc1Swenshuai.xi //  [Function Name]:
7119*53ee8cc1Swenshuai.xi //                  mdrv_mhl_CbusGetStatusFlag()
7120*53ee8cc1Swenshuai.xi //  [Description]
7121*53ee8cc1Swenshuai.xi //
7122*53ee8cc1Swenshuai.xi //  [Arguments]:
7123*53ee8cc1Swenshuai.xi //
7124*53ee8cc1Swenshuai.xi //  [Return]:
7125*53ee8cc1Swenshuai.xi //
7126*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusGetStatusFlag(MS_U8 ucState)7127*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_CbusGetStatusFlag(MS_U8 ucState)
7128*53ee8cc1Swenshuai.xi {
7129*53ee8cc1Swenshuai.xi     MS_BOOL bStatusFlag = FALSE;
7130*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7131*53ee8cc1Swenshuai.xi 
7132*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7133*53ee8cc1Swenshuai.xi     {
7134*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7135*53ee8cc1Swenshuai.xi     }
7136*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7137*53ee8cc1Swenshuai.xi     {
7138*53ee8cc1Swenshuai.xi         switch(ucState)
7139*53ee8cc1Swenshuai.xi         {
7140*53ee8cc1Swenshuai.xi             case MHL_CBUS_STATUS_FLAG_CABLE_DETECT:
7141*53ee8cc1Swenshuai.xi                 bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG);
7142*53ee8cc1Swenshuai.xi                 break;
7143*53ee8cc1Swenshuai.xi 
7144*53ee8cc1Swenshuai.xi             case MHL_CBUS_STATUS_FLAG_CBUS_CONNECT:
7145*53ee8cc1Swenshuai.xi                 bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG);
7146*53ee8cc1Swenshuai.xi                 break;
7147*53ee8cc1Swenshuai.xi 
7148*53ee8cc1Swenshuai.xi             case MHL_CBUS_STATUS_FLAG_PATH_EN:
7149*53ee8cc1Swenshuai.xi                 break;
7150*53ee8cc1Swenshuai.xi 
7151*53ee8cc1Swenshuai.xi             case MHL_CBUS_STATUS_FLAG_RECEIVE_PATH_EN:
7152*53ee8cc1Swenshuai.xi                 break;
7153*53ee8cc1Swenshuai.xi 
7154*53ee8cc1Swenshuai.xi             case MHL_CBUS_STATUS_FLAG_RECEIVE_MUTED:
7155*53ee8cc1Swenshuai.xi                 break;
7156*53ee8cc1Swenshuai.xi 
7157*53ee8cc1Swenshuai.xi             case MHL_CBUS_STATUS_FLAG_COMMUNICATE_BUSY:
7158*53ee8cc1Swenshuai.xi                 bStatusFlag = GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG);
7159*53ee8cc1Swenshuai.xi                 break;
7160*53ee8cc1Swenshuai.xi 
7161*53ee8cc1Swenshuai.xi             default:
7162*53ee8cc1Swenshuai.xi 
7163*53ee8cc1Swenshuai.xi                 break;
7164*53ee8cc1Swenshuai.xi         };
7165*53ee8cc1Swenshuai.xi     }
7166*53ee8cc1Swenshuai.xi 
7167*53ee8cc1Swenshuai.xi     return bStatusFlag;
7168*53ee8cc1Swenshuai.xi }
7169*53ee8cc1Swenshuai.xi 
7170*53ee8cc1Swenshuai.xi //**************************************************************************
7171*53ee8cc1Swenshuai.xi //  [Function Name]:
7172*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SendRAPCommand
7173*53ee8cc1Swenshuai.xi //  [Description]
7174*53ee8cc1Swenshuai.xi //                  MHL Cbus MSC Send RAP Command
7175*53ee8cc1Swenshuai.xi //  [Arguments]:
7176*53ee8cc1Swenshuai.xi //
7177*53ee8cc1Swenshuai.xi //  [Return]:
7178*53ee8cc1Swenshuai.xi //                  TRUE: success
7179*53ee8cc1Swenshuai.xi //                  FALSE: fail
7180*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendRAPCommand(MS_U8 ucKeyCode)7181*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendRAPCommand(MS_U8 ucKeyCode)
7182*53ee8cc1Swenshuai.xi {
7183*53ee8cc1Swenshuai.xi     MS_BOOL bSendFlag = FALSE;
7184*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7185*53ee8cc1Swenshuai.xi 
7186*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7187*53ee8cc1Swenshuai.xi     {
7188*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7189*53ee8cc1Swenshuai.xi     }
7190*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7191*53ee8cc1Swenshuai.xi     {
7192*53ee8cc1Swenshuai.xi         bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RAP, ucKeyCode, TRUE);
7193*53ee8cc1Swenshuai.xi     }
7194*53ee8cc1Swenshuai.xi 
7195*53ee8cc1Swenshuai.xi     return bSendFlag;
7196*53ee8cc1Swenshuai.xi }
7197*53ee8cc1Swenshuai.xi 
7198*53ee8cc1Swenshuai.xi //**************************************************************************
7199*53ee8cc1Swenshuai.xi //  [Function Name]:
7200*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SendRCPAutoReleaseCmd
7201*53ee8cc1Swenshuai.xi //  [Description]
7202*53ee8cc1Swenshuai.xi //                  MHL Cbus MSC Send RCP Command
7203*53ee8cc1Swenshuai.xi //  [Arguments]:
7204*53ee8cc1Swenshuai.xi //
7205*53ee8cc1Swenshuai.xi //  [Return]:
7206*53ee8cc1Swenshuai.xi //                  TRUE: success
7207*53ee8cc1Swenshuai.xi //                  FALSE: fail
7208*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendRCPAutoReleaseCmd(MS_U8 ucKeyCode)7209*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendRCPAutoReleaseCmd(MS_U8 ucKeyCode)
7210*53ee8cc1Swenshuai.xi {
7211*53ee8cc1Swenshuai.xi     MS_BOOL bSendFlag = FALSE;
7212*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7213*53ee8cc1Swenshuai.xi 
7214*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7215*53ee8cc1Swenshuai.xi     {
7216*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7217*53ee8cc1Swenshuai.xi     }
7218*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7219*53ee8cc1Swenshuai.xi     {
7220*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucPreRCPKeyCode != ucKeyCode) // Key change
7221*53ee8cc1Swenshuai.xi         {
7222*53ee8cc1Swenshuai.xi             if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_RCP_RELEASE_ENABLE_FLAG))
7223*53ee8cc1Swenshuai.xi             {
7224*53ee8cc1Swenshuai.xi                 bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RCP, ucKeyCode, TRUE);
7225*53ee8cc1Swenshuai.xi             }
7226*53ee8cc1Swenshuai.xi         }
7227*53ee8cc1Swenshuai.xi         else
7228*53ee8cc1Swenshuai.xi         {
7229*53ee8cc1Swenshuai.xi             bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RCP, ucKeyCode, TRUE);
7230*53ee8cc1Swenshuai.xi         }
7231*53ee8cc1Swenshuai.xi 
7232*53ee8cc1Swenshuai.xi         if(bSendFlag)
7233*53ee8cc1Swenshuai.xi         {
7234*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucPreRCPKeyCode = ucKeyCode;
7235*53ee8cc1Swenshuai.xi 
7236*53ee8cc1Swenshuai.xi             _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_RCP_AUTO_RELEASE, MHL_CBUS_RCP_RELEASE_TIME);
7237*53ee8cc1Swenshuai.xi 
7238*53ee8cc1Swenshuai.xi             SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_RCP_RELEASE_ENABLE_FLAG);
7239*53ee8cc1Swenshuai.xi         }
7240*53ee8cc1Swenshuai.xi     }
7241*53ee8cc1Swenshuai.xi 
7242*53ee8cc1Swenshuai.xi     return bSendFlag;
7243*53ee8cc1Swenshuai.xi }
7244*53ee8cc1Swenshuai.xi 
7245*53ee8cc1Swenshuai.xi //**************************************************************************
7246*53ee8cc1Swenshuai.xi //  [Function Name]:
7247*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SendUCPCommand
7248*53ee8cc1Swenshuai.xi //  [Description]
7249*53ee8cc1Swenshuai.xi //                  MHL Cbus MSC Send UCP Command
7250*53ee8cc1Swenshuai.xi //  [Arguments]:
7251*53ee8cc1Swenshuai.xi //
7252*53ee8cc1Swenshuai.xi //  [Return]:
7253*53ee8cc1Swenshuai.xi //                  TRUE: success
7254*53ee8cc1Swenshuai.xi //                  FALSE: fail
7255*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendUCPCommand(MS_U8 ucKeyCode)7256*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendUCPCommand(MS_U8 ucKeyCode)
7257*53ee8cc1Swenshuai.xi {
7258*53ee8cc1Swenshuai.xi     MS_BOOL bSendFlag = FALSE;
7259*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7260*53ee8cc1Swenshuai.xi 
7261*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7262*53ee8cc1Swenshuai.xi     {
7263*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7264*53ee8cc1Swenshuai.xi     }
7265*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7266*53ee8cc1Swenshuai.xi     {
7267*53ee8cc1Swenshuai.xi         bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_UCP, ucKeyCode, TRUE);
7268*53ee8cc1Swenshuai.xi     }
7269*53ee8cc1Swenshuai.xi 
7270*53ee8cc1Swenshuai.xi     return bSendFlag;
7271*53ee8cc1Swenshuai.xi }
7272*53ee8cc1Swenshuai.xi 
7273*53ee8cc1Swenshuai.xi //**************************************************************************
7274*53ee8cc1Swenshuai.xi //  [Function Name]:
7275*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SendWriteBurst
7276*53ee8cc1Swenshuai.xi //  [Description]
7277*53ee8cc1Swenshuai.xi //
7278*53ee8cc1Swenshuai.xi //  [Arguments]:
7279*53ee8cc1Swenshuai.xi //
7280*53ee8cc1Swenshuai.xi //  [Return]:
7281*53ee8cc1Swenshuai.xi //                  TRUE: success
7282*53ee8cc1Swenshuai.xi //                  FALSE: fail
7283*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendWriteBurst(MS_U8 ucAddr,MS_U8 ucLength,MS_U8 * ucData)7284*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendWriteBurst(MS_U8 ucAddr, MS_U8 ucLength, MS_U8 *ucData)
7285*53ee8cc1Swenshuai.xi {
7286*53ee8cc1Swenshuai.xi     MS_BOOL bSendFlag = FALSE;
7287*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7288*53ee8cc1Swenshuai.xi 
7289*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7290*53ee8cc1Swenshuai.xi     {
7291*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7292*53ee8cc1Swenshuai.xi     }
7293*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7294*53ee8cc1Swenshuai.xi     {
7295*53ee8cc1Swenshuai.xi         bSendFlag = _mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, ucAddr, ucLength, ucData);
7296*53ee8cc1Swenshuai.xi     }
7297*53ee8cc1Swenshuai.xi 
7298*53ee8cc1Swenshuai.xi     return bSendFlag;
7299*53ee8cc1Swenshuai.xi }
7300*53ee8cc1Swenshuai.xi 
7301*53ee8cc1Swenshuai.xi //**************************************************************************
7302*53ee8cc1Swenshuai.xi //  [Function Name]:
7303*53ee8cc1Swenshuai.xi //                  mdrv_mhl_CbusSendUserWriteBurst
7304*53ee8cc1Swenshuai.xi //  [Description]
7305*53ee8cc1Swenshuai.xi //
7306*53ee8cc1Swenshuai.xi //  [Arguments]:
7307*53ee8cc1Swenshuai.xi //
7308*53ee8cc1Swenshuai.xi //  [Return]:
7309*53ee8cc1Swenshuai.xi //                  TRUE: success
7310*53ee8cc1Swenshuai.xi //                  FALSE: fail
7311*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusSendUserWriteBurst(MS_U8 ucLength,MS_U8 * ucData)7312*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_CbusSendUserWriteBurst(MS_U8 ucLength, MS_U8 *ucData)
7313*53ee8cc1Swenshuai.xi {
7314*53ee8cc1Swenshuai.xi     MS_BOOL bSendFlag = FALSE;
7315*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7316*53ee8cc1Swenshuai.xi 
7317*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7318*53ee8cc1Swenshuai.xi     {
7319*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7320*53ee8cc1Swenshuai.xi     }
7321*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7322*53ee8cc1Swenshuai.xi     {
7323*53ee8cc1Swenshuai.xi         if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_USER_WRITE_BURST_FLAG))
7324*53ee8cc1Swenshuai.xi         {
7325*53ee8cc1Swenshuai.xi             if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_REVEIVE_GRANT)
7326*53ee8cc1Swenshuai.xi             {
7327*53ee8cc1Swenshuai.xi                 if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, ucLength, ucData))
7328*53ee8cc1Swenshuai.xi                 {
7329*53ee8cc1Swenshuai.xi                     CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_USER_WRITE_BURST_FLAG);
7330*53ee8cc1Swenshuai.xi 
7331*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
7332*53ee8cc1Swenshuai.xi 
7333*53ee8cc1Swenshuai.xi                     bSendFlag = TRUE;
7334*53ee8cc1Swenshuai.xi                 }
7335*53ee8cc1Swenshuai.xi             }
7336*53ee8cc1Swenshuai.xi         }
7337*53ee8cc1Swenshuai.xi         else if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_NONE)
7338*53ee8cc1Swenshuai.xi         {
7339*53ee8cc1Swenshuai.xi             SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_USER_WRITE_BURST_FLAG);
7340*53ee8cc1Swenshuai.xi         }
7341*53ee8cc1Swenshuai.xi     }
7342*53ee8cc1Swenshuai.xi 
7343*53ee8cc1Swenshuai.xi     return bSendFlag;
7344*53ee8cc1Swenshuai.xi }
7345*53ee8cc1Swenshuai.xi 
7346*53ee8cc1Swenshuai.xi //**************************************************************************
7347*53ee8cc1Swenshuai.xi //  [Function Name]:
7348*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetDeviceCapability
7349*53ee8cc1Swenshuai.xi //  [Description]
7350*53ee8cc1Swenshuai.xi //
7351*53ee8cc1Swenshuai.xi //  [Arguments]:
7352*53ee8cc1Swenshuai.xi //
7353*53ee8cc1Swenshuai.xi //  [Return]:
7354*53ee8cc1Swenshuai.xi //
7355*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetDeviceCapability(MS_U16 usDevcapMask,MS_U8 * ucDevcap)7356*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetDeviceCapability(MS_U16 usDevcapMask, MS_U8 *ucDevcap)
7357*53ee8cc1Swenshuai.xi {
7358*53ee8cc1Swenshuai.xi     MS_BOOL bDoneFlag = FALSE;
7359*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
7360*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7361*53ee8cc1Swenshuai.xi 
7362*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7363*53ee8cc1Swenshuai.xi     {
7364*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7365*53ee8cc1Swenshuai.xi     }
7366*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7367*53ee8cc1Swenshuai.xi     {
7368*53ee8cc1Swenshuai.xi         if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_DEVCAP_FLAG))
7369*53ee8cc1Swenshuai.xi         {
7370*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usReadDevcapMask = usDevcapMask;
7371*53ee8cc1Swenshuai.xi         }
7372*53ee8cc1Swenshuai.xi 
7373*53ee8cc1Swenshuai.xi         if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_READ_DEVCAP_DONE_FLAG))
7374*53ee8cc1Swenshuai.xi         {
7375*53ee8cc1Swenshuai.xi             if(ucDevcap != NULL)
7376*53ee8cc1Swenshuai.xi             {
7377*53ee8cc1Swenshuai.xi                 for(uctemp = 0; uctemp < MHL_DEVICE_CAPABILITY_SIZE; uctemp++)
7378*53ee8cc1Swenshuai.xi                 {
7379*53ee8cc1Swenshuai.xi                     if(usDevcapMask &BIT(uctemp))
7380*53ee8cc1Swenshuai.xi                     {
7381*53ee8cc1Swenshuai.xi                         ucDevcap[uctemp] = pMHLResourcePrivate->ucSourceDevcapTable[uctemp];
7382*53ee8cc1Swenshuai.xi                     }
7383*53ee8cc1Swenshuai.xi                     else
7384*53ee8cc1Swenshuai.xi                     {
7385*53ee8cc1Swenshuai.xi                         ucDevcap[uctemp] = 0;
7386*53ee8cc1Swenshuai.xi                     }
7387*53ee8cc1Swenshuai.xi                 }
7388*53ee8cc1Swenshuai.xi             }
7389*53ee8cc1Swenshuai.xi 
7390*53ee8cc1Swenshuai.xi             bDoneFlag = TRUE;
7391*53ee8cc1Swenshuai.xi         }
7392*53ee8cc1Swenshuai.xi     }
7393*53ee8cc1Swenshuai.xi 
7394*53ee8cc1Swenshuai.xi     return bDoneFlag;
7395*53ee8cc1Swenshuai.xi }
7396*53ee8cc1Swenshuai.xi 
7397*53ee8cc1Swenshuai.xi //**************************************************************************
7398*53ee8cc1Swenshuai.xi //  [Function Name]:
7399*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetExtendDeviceCapability
7400*53ee8cc1Swenshuai.xi //  [Description]
7401*53ee8cc1Swenshuai.xi //
7402*53ee8cc1Swenshuai.xi //  [Arguments]:
7403*53ee8cc1Swenshuai.xi //
7404*53ee8cc1Swenshuai.xi //  [Return]:
7405*53ee8cc1Swenshuai.xi //
7406*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetExtendDeviceCapability(MS_U16 usExtendDevcapMask,MS_U8 * ucExtendDevcap)7407*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetExtendDeviceCapability(MS_U16 usExtendDevcapMask, MS_U8 *ucExtendDevcap)
7408*53ee8cc1Swenshuai.xi {
7409*53ee8cc1Swenshuai.xi     MS_BOOL bDoneFlag = FALSE;
7410*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
7411*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7412*53ee8cc1Swenshuai.xi 
7413*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7414*53ee8cc1Swenshuai.xi     {
7415*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7416*53ee8cc1Swenshuai.xi     }
7417*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7418*53ee8cc1Swenshuai.xi     {
7419*53ee8cc1Swenshuai.xi         if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_XDEVCAP_FLAG))
7420*53ee8cc1Swenshuai.xi         {
7421*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usReadExtendDevcapMask = usExtendDevcapMask;
7422*53ee8cc1Swenshuai.xi         }
7423*53ee8cc1Swenshuai.xi 
7424*53ee8cc1Swenshuai.xi         if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_READ_XDEVCAP_DONE_FLAG))
7425*53ee8cc1Swenshuai.xi         {
7426*53ee8cc1Swenshuai.xi             if(ucExtendDevcap != NULL)
7427*53ee8cc1Swenshuai.xi             {
7428*53ee8cc1Swenshuai.xi                 for(uctemp = 0; uctemp < MHL_XDEVICE_CAPABILITY_SIZE; uctemp++)
7429*53ee8cc1Swenshuai.xi                 {
7430*53ee8cc1Swenshuai.xi                     if(usExtendDevcapMask &BIT(uctemp))
7431*53ee8cc1Swenshuai.xi                     {
7432*53ee8cc1Swenshuai.xi                         ucExtendDevcap[uctemp] = pMHLResourcePrivate->ucSourceDevcapTable[MHL_DEVICE_CAPABILITY_SIZE +uctemp];
7433*53ee8cc1Swenshuai.xi                     }
7434*53ee8cc1Swenshuai.xi                     else
7435*53ee8cc1Swenshuai.xi                     {
7436*53ee8cc1Swenshuai.xi                         ucExtendDevcap[uctemp] = 0;
7437*53ee8cc1Swenshuai.xi                     }
7438*53ee8cc1Swenshuai.xi                 }
7439*53ee8cc1Swenshuai.xi             }
7440*53ee8cc1Swenshuai.xi 
7441*53ee8cc1Swenshuai.xi             bDoneFlag = TRUE;
7442*53ee8cc1Swenshuai.xi         }
7443*53ee8cc1Swenshuai.xi     }
7444*53ee8cc1Swenshuai.xi 
7445*53ee8cc1Swenshuai.xi     return bDoneFlag;
7446*53ee8cc1Swenshuai.xi }
7447*53ee8cc1Swenshuai.xi 
7448*53ee8cc1Swenshuai.xi //**************************************************************************
7449*53ee8cc1Swenshuai.xi //  [Function Name]:
7450*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetDeviceVenderID
7451*53ee8cc1Swenshuai.xi //  [Description]
7452*53ee8cc1Swenshuai.xi //
7453*53ee8cc1Swenshuai.xi //  [Arguments]:
7454*53ee8cc1Swenshuai.xi //
7455*53ee8cc1Swenshuai.xi //  [Return]:
7456*53ee8cc1Swenshuai.xi //
7457*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetDeviceVenderID(MS_U8 * ucVenderID)7458*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetDeviceVenderID(MS_U8 *ucVenderID)
7459*53ee8cc1Swenshuai.xi {
7460*53ee8cc1Swenshuai.xi     MS_BOOL bDoneFlag = FALSE;
7461*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7462*53ee8cc1Swenshuai.xi 
7463*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7464*53ee8cc1Swenshuai.xi     {
7465*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7466*53ee8cc1Swenshuai.xi     }
7467*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7468*53ee8cc1Swenshuai.xi     {
7469*53ee8cc1Swenshuai.xi         if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_GET_VENDER_ID_DONE_FLAG))
7470*53ee8cc1Swenshuai.xi         {
7471*53ee8cc1Swenshuai.xi             *ucVenderID = pMHLResourcePrivate->ucSourceVenderID;
7472*53ee8cc1Swenshuai.xi 
7473*53ee8cc1Swenshuai.xi             bDoneFlag = TRUE;
7474*53ee8cc1Swenshuai.xi         }
7475*53ee8cc1Swenshuai.xi         else
7476*53ee8cc1Swenshuai.xi         {
7477*53ee8cc1Swenshuai.xi             SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_GET_VENDER_ID_FLAG);
7478*53ee8cc1Swenshuai.xi         }
7479*53ee8cc1Swenshuai.xi     }
7480*53ee8cc1Swenshuai.xi 
7481*53ee8cc1Swenshuai.xi     return bDoneFlag;
7482*53ee8cc1Swenshuai.xi }
7483*53ee8cc1Swenshuai.xi 
7484*53ee8cc1Swenshuai.xi //**************************************************************************
7485*53ee8cc1Swenshuai.xi //  [Function Name]:
7486*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetWriteBurstData
7487*53ee8cc1Swenshuai.xi //  [Description]
7488*53ee8cc1Swenshuai.xi //
7489*53ee8cc1Swenshuai.xi //  [Arguments]:
7490*53ee8cc1Swenshuai.xi //
7491*53ee8cc1Swenshuai.xi //  [Return]:
7492*53ee8cc1Swenshuai.xi //
7493*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetWriteBurstData(MS_U8 * ucData)7494*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetWriteBurstData(MS_U8 *ucData)
7495*53ee8cc1Swenshuai.xi {
7496*53ee8cc1Swenshuai.xi     MS_BOOL bDoneFlag = FALSE;
7497*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
7498*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7499*53ee8cc1Swenshuai.xi 
7500*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7501*53ee8cc1Swenshuai.xi     {
7502*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7503*53ee8cc1Swenshuai.xi     }
7504*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7505*53ee8cc1Swenshuai.xi     {
7506*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucWriteBurstAddress > 0)
7507*53ee8cc1Swenshuai.xi         {
7508*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucWriteBurstAddress = 0;
7509*53ee8cc1Swenshuai.xi 
7510*53ee8cc1Swenshuai.xi             for(uctemp = 0; uctemp < pMHLResourcePrivate->ucWriteBurstLength; uctemp++)
7511*53ee8cc1Swenshuai.xi             {
7512*53ee8cc1Swenshuai.xi                 ucData[uctemp] = pMHLResourcePrivate->ucWriteBurstInformation[uctemp];
7513*53ee8cc1Swenshuai.xi             }
7514*53ee8cc1Swenshuai.xi 
7515*53ee8cc1Swenshuai.xi             bDoneFlag = TRUE;
7516*53ee8cc1Swenshuai.xi         }
7517*53ee8cc1Swenshuai.xi     }
7518*53ee8cc1Swenshuai.xi 
7519*53ee8cc1Swenshuai.xi     return bDoneFlag;
7520*53ee8cc1Swenshuai.xi }
7521*53ee8cc1Swenshuai.xi 
7522*53ee8cc1Swenshuai.xi //**************************************************************************
7523*53ee8cc1Swenshuai.xi //  [Function Name]:
7524*53ee8cc1Swenshuai.xi //                  mdrv_mhl_RegisterCallBackFunctions()
7525*53ee8cc1Swenshuai.xi //  [Description]
7526*53ee8cc1Swenshuai.xi //                  RCP &RAP call back
7527*53ee8cc1Swenshuai.xi //  [Arguments]:
7528*53ee8cc1Swenshuai.xi //
7529*53ee8cc1Swenshuai.xi //  [Return]:
7530*53ee8cc1Swenshuai.xi //
7531*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterCallBackFunctions(MS_BOOL bRCPfunctionFlag,MS_BOOL bRAPfunctionFlag)7532*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterCallBackFunctions(MS_BOOL bRCPfunctionFlag, MS_BOOL bRAPfunctionFlag)
7533*53ee8cc1Swenshuai.xi {
7534*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7535*53ee8cc1Swenshuai.xi 
7536*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7537*53ee8cc1Swenshuai.xi     {
7538*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7539*53ee8cc1Swenshuai.xi     }
7540*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7541*53ee8cc1Swenshuai.xi     {
7542*53ee8cc1Swenshuai.xi         if(bRCPfunctionFlag)
7543*53ee8cc1Swenshuai.xi         {
7544*53ee8cc1Swenshuai.xi             SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RCP_FUNCTION_FLAG);
7545*53ee8cc1Swenshuai.xi         }
7546*53ee8cc1Swenshuai.xi 
7547*53ee8cc1Swenshuai.xi         if(bRAPfunctionFlag)
7548*53ee8cc1Swenshuai.xi         {
7549*53ee8cc1Swenshuai.xi             SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RAP_FUNCTION_FLAG);
7550*53ee8cc1Swenshuai.xi         }
7551*53ee8cc1Swenshuai.xi     }
7552*53ee8cc1Swenshuai.xi }
7553*53ee8cc1Swenshuai.xi 
7554*53ee8cc1Swenshuai.xi //**************************************************************************
7555*53ee8cc1Swenshuai.xi //  [Function Name]:
7556*53ee8cc1Swenshuai.xi //                  mdrv_mhl_RegisterRcpCallBackFunction()
7557*53ee8cc1Swenshuai.xi //  [Description]
7558*53ee8cc1Swenshuai.xi //                  RCP call back
7559*53ee8cc1Swenshuai.xi //  [Arguments]:
7560*53ee8cc1Swenshuai.xi //
7561*53ee8cc1Swenshuai.xi //  [Return]:
7562*53ee8cc1Swenshuai.xi //
7563*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterRcpCallBackFunction(MS_BOOL bRCPfunctionFlag)7564*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterRcpCallBackFunction(MS_BOOL bRCPfunctionFlag)
7565*53ee8cc1Swenshuai.xi {
7566*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7567*53ee8cc1Swenshuai.xi 
7568*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7569*53ee8cc1Swenshuai.xi     {
7570*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7571*53ee8cc1Swenshuai.xi     }
7572*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7573*53ee8cc1Swenshuai.xi     {
7574*53ee8cc1Swenshuai.xi         if(bRCPfunctionFlag)
7575*53ee8cc1Swenshuai.xi         {
7576*53ee8cc1Swenshuai.xi             SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RCP_FUNCTION_FLAG);
7577*53ee8cc1Swenshuai.xi         }
7578*53ee8cc1Swenshuai.xi     }
7579*53ee8cc1Swenshuai.xi }
7580*53ee8cc1Swenshuai.xi 
7581*53ee8cc1Swenshuai.xi //**************************************************************************
7582*53ee8cc1Swenshuai.xi //  [Function Name]:
7583*53ee8cc1Swenshuai.xi //                  mdrv_mhl_RegisterRapCallBackFunction()
7584*53ee8cc1Swenshuai.xi //  [Description]
7585*53ee8cc1Swenshuai.xi //                  RAP call back
7586*53ee8cc1Swenshuai.xi //  [Arguments]:
7587*53ee8cc1Swenshuai.xi //
7588*53ee8cc1Swenshuai.xi //  [Return]:
7589*53ee8cc1Swenshuai.xi //
7590*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterRapCallBackFunction(MS_BOOL bRAPfunctionFlag)7591*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterRapCallBackFunction(MS_BOOL bRAPfunctionFlag)
7592*53ee8cc1Swenshuai.xi {
7593*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7594*53ee8cc1Swenshuai.xi 
7595*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7596*53ee8cc1Swenshuai.xi     {
7597*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7598*53ee8cc1Swenshuai.xi     }
7599*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7600*53ee8cc1Swenshuai.xi     {
7601*53ee8cc1Swenshuai.xi         if(bRAPfunctionFlag)
7602*53ee8cc1Swenshuai.xi         {
7603*53ee8cc1Swenshuai.xi             SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RAP_FUNCTION_FLAG);
7604*53ee8cc1Swenshuai.xi         }
7605*53ee8cc1Swenshuai.xi     }
7606*53ee8cc1Swenshuai.xi }
7607*53ee8cc1Swenshuai.xi 
7608*53ee8cc1Swenshuai.xi //**************************************************************************
7609*53ee8cc1Swenshuai.xi //  [Function Name]:
7610*53ee8cc1Swenshuai.xi //                  mdrv_mhl_RegisterUcpCallBackFunction()
7611*53ee8cc1Swenshuai.xi //  [Description]
7612*53ee8cc1Swenshuai.xi //                  UCP call back
7613*53ee8cc1Swenshuai.xi //  [Arguments]:
7614*53ee8cc1Swenshuai.xi //
7615*53ee8cc1Swenshuai.xi //  [Return]:
7616*53ee8cc1Swenshuai.xi //
7617*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterUcpCallBackFunction(MS_BOOL bUCPfunctionFlag)7618*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterUcpCallBackFunction(MS_BOOL bUCPfunctionFlag)
7619*53ee8cc1Swenshuai.xi {
7620*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7621*53ee8cc1Swenshuai.xi 
7622*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7623*53ee8cc1Swenshuai.xi     {
7624*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7625*53ee8cc1Swenshuai.xi     }
7626*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7627*53ee8cc1Swenshuai.xi     {
7628*53ee8cc1Swenshuai.xi         if(bUCPfunctionFlag)
7629*53ee8cc1Swenshuai.xi         {
7630*53ee8cc1Swenshuai.xi             SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_UCP_FUNCTION_FLAG);
7631*53ee8cc1Swenshuai.xi         }
7632*53ee8cc1Swenshuai.xi     }
7633*53ee8cc1Swenshuai.xi }
7634*53ee8cc1Swenshuai.xi 
7635*53ee8cc1Swenshuai.xi //**************************************************************************
7636*53ee8cc1Swenshuai.xi //  [Function Name]:
7637*53ee8cc1Swenshuai.xi //                  mdrv_mhl_RegisterAttCallBackFunction()
7638*53ee8cc1Swenshuai.xi //  [Description]
7639*53ee8cc1Swenshuai.xi //                  ATT call back
7640*53ee8cc1Swenshuai.xi //  [Arguments]:
7641*53ee8cc1Swenshuai.xi //
7642*53ee8cc1Swenshuai.xi //  [Return]:
7643*53ee8cc1Swenshuai.xi //
7644*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterAttCallBackFunction(MS_BOOL bATTfunctionFlag)7645*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterAttCallBackFunction(MS_BOOL bATTfunctionFlag)
7646*53ee8cc1Swenshuai.xi {
7647*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7648*53ee8cc1Swenshuai.xi 
7649*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7650*53ee8cc1Swenshuai.xi     {
7651*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7652*53ee8cc1Swenshuai.xi     }
7653*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7654*53ee8cc1Swenshuai.xi     {
7655*53ee8cc1Swenshuai.xi         if(bATTfunctionFlag)
7656*53ee8cc1Swenshuai.xi         {
7657*53ee8cc1Swenshuai.xi             SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_ATT_FUNCTION_FLAG);
7658*53ee8cc1Swenshuai.xi         }
7659*53ee8cc1Swenshuai.xi     }
7660*53ee8cc1Swenshuai.xi }
7661*53ee8cc1Swenshuai.xi 
7662*53ee8cc1Swenshuai.xi //**************************************************************************
7663*53ee8cc1Swenshuai.xi //  [Function Name]:
7664*53ee8cc1Swenshuai.xi //                  mdrv_mhl_RegisterRbpCallBackFunction()
7665*53ee8cc1Swenshuai.xi //  [Description]
7666*53ee8cc1Swenshuai.xi //                  RBP call back
7667*53ee8cc1Swenshuai.xi //  [Arguments]:
7668*53ee8cc1Swenshuai.xi //
7669*53ee8cc1Swenshuai.xi //  [Return]:
7670*53ee8cc1Swenshuai.xi //
7671*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterRbpCallBackFunction(MS_BOOL bRBPfunctionFlag)7672*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterRbpCallBackFunction(MS_BOOL bRBPfunctionFlag)
7673*53ee8cc1Swenshuai.xi {
7674*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7675*53ee8cc1Swenshuai.xi 
7676*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7677*53ee8cc1Swenshuai.xi     {
7678*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7679*53ee8cc1Swenshuai.xi     }
7680*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7681*53ee8cc1Swenshuai.xi     {
7682*53ee8cc1Swenshuai.xi         if(bRBPfunctionFlag)
7683*53ee8cc1Swenshuai.xi         {
7684*53ee8cc1Swenshuai.xi             SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RBP_FUNCTION_FLAG);
7685*53ee8cc1Swenshuai.xi         }
7686*53ee8cc1Swenshuai.xi     }
7687*53ee8cc1Swenshuai.xi }
7688*53ee8cc1Swenshuai.xi 
7689*53ee8cc1Swenshuai.xi //**************************************************************************
7690*53ee8cc1Swenshuai.xi //  [Function Name]:
7691*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetConfiguration()
7692*53ee8cc1Swenshuai.xi //  [Description]
7693*53ee8cc1Swenshuai.xi //                  MHL get init config
7694*53ee8cc1Swenshuai.xi //  [Arguments]:
7695*53ee8cc1Swenshuai.xi //
7696*53ee8cc1Swenshuai.xi //  [Return]:
7697*53ee8cc1Swenshuai.xi //
7698*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetConfiguration(void)7699*53ee8cc1Swenshuai.xi stMHL_INITIAL_CONFIG_INFO mdrv_mhl_GetConfiguration(void)
7700*53ee8cc1Swenshuai.xi {
7701*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
7702*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7703*53ee8cc1Swenshuai.xi     stMHL_INITIAL_CONFIG_INFO stInitialConfigInfo;
7704*53ee8cc1Swenshuai.xi 
7705*53ee8cc1Swenshuai.xi     if(!_mdrv_mhl_ResourceGetPrivate((void*)&pMHLResourcePrivate))
7706*53ee8cc1Swenshuai.xi     {
7707*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7708*53ee8cc1Swenshuai.xi     }
7709*53ee8cc1Swenshuai.xi     else
7710*53ee8cc1Swenshuai.xi     {
7711*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_InitRiuBase(pMHLResourcePrivate)) // Get base success
7712*53ee8cc1Swenshuai.xi         {
7713*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL get XC and PM base success \n");
7714*53ee8cc1Swenshuai.xi         }
7715*53ee8cc1Swenshuai.xi 
7716*53ee8cc1Swenshuai.xi         if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_PREVENT_REINITIAL_FLAG))
7717*53ee8cc1Swenshuai.xi         {
7718*53ee8cc1Swenshuai.xi             stInitialConfigInfo.ulReturnValue = UTOPIA_STATUS_SUCCESS;
7719*53ee8cc1Swenshuai.xi             stInitialConfigInfo.ucMHLSupportPath = pMHLResourcePrivate->ucMHLSupportPath;
7720*53ee8cc1Swenshuai.xi 
7721*53ee8cc1Swenshuai.xi             for(uctemp = 0; uctemp < (MHL_DEVICE_CAPABILITY_SIZE +MHL_XDEVICE_CAPABILITY_SIZE); uctemp++)
7722*53ee8cc1Swenshuai.xi             {
7723*53ee8cc1Swenshuai.xi                 stInitialConfigInfo.ucDeviceCapabilityTable[uctemp] = pMHLResourcePrivate->ucDeviceCapabilityTable[uctemp];
7724*53ee8cc1Swenshuai.xi             }
7725*53ee8cc1Swenshuai.xi         }
7726*53ee8cc1Swenshuai.xi     }
7727*53ee8cc1Swenshuai.xi 
7728*53ee8cc1Swenshuai.xi     return stInitialConfigInfo;
7729*53ee8cc1Swenshuai.xi }
7730*53ee8cc1Swenshuai.xi 
7731*53ee8cc1Swenshuai.xi #elif(MHL_USE_UTOPIA_VERSION == MHL_UTOPIA_VERSION_20)
7732*53ee8cc1Swenshuai.xi //**************************************************************************
7733*53ee8cc1Swenshuai.xi //  [Function Name]:
7734*53ee8cc1Swenshuai.xi //                  mdrv_mhl_STREventProc()
7735*53ee8cc1Swenshuai.xi //  [Description]
7736*53ee8cc1Swenshuai.xi //
7737*53ee8cc1Swenshuai.xi //  [Arguments]:
7738*53ee8cc1Swenshuai.xi //
7739*53ee8cc1Swenshuai.xi //  [Return]:
7740*53ee8cc1Swenshuai.xi //
7741*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_STREventProc(void * pModule,EN_POWER_MODE usPowerState)7742*53ee8cc1Swenshuai.xi MS_U32 mdrv_mhl_STREventProc(void* pModule, EN_POWER_MODE usPowerState)
7743*53ee8cc1Swenshuai.xi {
7744*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
7745*53ee8cc1Swenshuai.xi     MS_U32 ulReturnValue = UTOPIA_STATUS_FAIL;
7746*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7747*53ee8cc1Swenshuai.xi 
7748*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
7749*53ee8cc1Swenshuai.xi     {
7750*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
7751*53ee8cc1Swenshuai.xi     }
7752*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
7753*53ee8cc1Swenshuai.xi     {
7754*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7755*53ee8cc1Swenshuai.xi     }
7756*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7757*53ee8cc1Swenshuai.xi     {
7758*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->usPrePowerState != usPowerState)
7759*53ee8cc1Swenshuai.xi         {
7760*53ee8cc1Swenshuai.xi             if(usPowerState == E_POWER_SUSPEND)
7761*53ee8cc1Swenshuai.xi             {
7762*53ee8cc1Swenshuai.xi                 if(GET_MHL_DISPLAY_FLAG(pMHLResourcePrivate->usDisplayIndex, MHL_CBUS_HPD_SET_FLAG))
7763*53ee8cc1Swenshuai.xi                 {
7764*53ee8cc1Swenshuai.xi                     _mdrv_mhl_ForceSendClearHPD(pMHLResourcePrivate);
7765*53ee8cc1Swenshuai.xi                 }
7766*53ee8cc1Swenshuai.xi 
7767*53ee8cc1Swenshuai.xi                 ulReturnValue = UTOPIA_STATUS_SUCCESS;
7768*53ee8cc1Swenshuai.xi             }
7769*53ee8cc1Swenshuai.xi             else if(usPowerState == E_POWER_RESUME)
7770*53ee8cc1Swenshuai.xi             {
7771*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
7772*53ee8cc1Swenshuai.xi                 UtopiaStrWaitCondition("mhl", usPowerState, 0);
7773*53ee8cc1Swenshuai.xi #endif
7774*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucChipCapability = mhal_mhl_initial(pMHLResourcePrivate->ucMHLSupportPath, NULL, NULL, pMHLResourcePrivate->ucDeviceVenderID);
7775*53ee8cc1Swenshuai.xi 
7776*53ee8cc1Swenshuai.xi                 CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_NORMAL_FLAG);
7777*53ee8cc1Swenshuai.xi 
7778*53ee8cc1Swenshuai.xi                 if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG))
7779*53ee8cc1Swenshuai.xi                 {
7780*53ee8cc1Swenshuai.xi                     if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
7781*53ee8cc1Swenshuai.xi                     {
7782*53ee8cc1Swenshuai.xi                         mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, FALSE, &(pMHLResourcePrivate->stSignalStatusInfo));
7783*53ee8cc1Swenshuai.xi 
7784*53ee8cc1Swenshuai.xi                         mhal_mhl_CbusConnectProc(pMHLResourcePrivate->ucMHLSupportPath);
7785*53ee8cc1Swenshuai.xi 
7786*53ee8cc1Swenshuai.xi                         if(pMHLResourcePrivate->ucTMDSClockMode == MHL_PHY_CLOCK_PACKET_PIXEL)
7787*53ee8cc1Swenshuai.xi                         {
7788*53ee8cc1Swenshuai.xi                             mhal_mhl_ClockModeSwitchProc(pMHLResourcePrivate->ucMHLSupportPath, TRUE, &(pMHLResourcePrivate->stSignalStatusInfo));
7789*53ee8cc1Swenshuai.xi                         }
7790*53ee8cc1Swenshuai.xi                     }
7791*53ee8cc1Swenshuai.xi                     else
7792*53ee8cc1Swenshuai.xi                     {
7793*53ee8cc1Swenshuai.xi                         mhal_mhl_CablePlugProc(pMHLResourcePrivate->ucMHLSupportPath, &(pMHLResourcePrivate->stSignalStatusInfo));
7794*53ee8cc1Swenshuai.xi                     }
7795*53ee8cc1Swenshuai.xi                 }
7796*53ee8cc1Swenshuai.xi 
7797*53ee8cc1Swenshuai.xi                 ulReturnValue = UTOPIA_STATUS_SUCCESS;
7798*53ee8cc1Swenshuai.xi             }
7799*53ee8cc1Swenshuai.xi 
7800*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usPrePowerState = usPowerState;
7801*53ee8cc1Swenshuai.xi         }
7802*53ee8cc1Swenshuai.xi     }
7803*53ee8cc1Swenshuai.xi 
7804*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
7805*53ee8cc1Swenshuai.xi 
7806*53ee8cc1Swenshuai.xi     return ulReturnValue;
7807*53ee8cc1Swenshuai.xi }
7808*53ee8cc1Swenshuai.xi 
7809*53ee8cc1Swenshuai.xi //**************************************************************************
7810*53ee8cc1Swenshuai.xi //  [Function Name]:
7811*53ee8cc1Swenshuai.xi //                  mdrv_mhl_MHLSupportPath()
7812*53ee8cc1Swenshuai.xi //  [Description]
7813*53ee8cc1Swenshuai.xi //                  MHL support path
7814*53ee8cc1Swenshuai.xi //  [Arguments]:
7815*53ee8cc1Swenshuai.xi //
7816*53ee8cc1Swenshuai.xi //  [Return]:
7817*53ee8cc1Swenshuai.xi //
7818*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_MHLSupportPath(void * pInstance,MS_U8 ucSelect)7819*53ee8cc1Swenshuai.xi void mdrv_mhl_MHLSupportPath(void* pInstance, MS_U8 ucSelect)
7820*53ee8cc1Swenshuai.xi {
7821*53ee8cc1Swenshuai.xi     void* pModule = NULL;
7822*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
7823*53ee8cc1Swenshuai.xi     MS_BOOL bMHLEfuseFlag = TRUE;
7824*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
7825*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7826*53ee8cc1Swenshuai.xi 
7827*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
7828*53ee8cc1Swenshuai.xi 
7829*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
7830*53ee8cc1Swenshuai.xi     {
7831*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
7832*53ee8cc1Swenshuai.xi     }
7833*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
7834*53ee8cc1Swenshuai.xi     {
7835*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7836*53ee8cc1Swenshuai.xi     }
7837*53ee8cc1Swenshuai.xi     else
7838*53ee8cc1Swenshuai.xi     {
7839*53ee8cc1Swenshuai.xi         // Clear flag
7840*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucInitialIndex != 0xA5)
7841*53ee8cc1Swenshuai.xi         {
7842*53ee8cc1Swenshuai.xi             _mdrv_mhl_ClearCbusFlag(pMHLResourcePrivate, MHL_CLEAR_INITIAL_FLAG);
7843*53ee8cc1Swenshuai.xi 
7844*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucInitialIndex = 0xA5;
7845*53ee8cc1Swenshuai.xi 
7846*53ee8cc1Swenshuai.xi             if(_mdrv_mhl_InitRiuBase(pMHLResourcePrivate)) // Get base success
7847*53ee8cc1Swenshuai.xi             {
7848*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL get XC and PM base success \n");
7849*53ee8cc1Swenshuai.xi 
7850*53ee8cc1Swenshuai.xi                 SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG);
7851*53ee8cc1Swenshuai.xi             }
7852*53ee8cc1Swenshuai.xi         }
7853*53ee8cc1Swenshuai.xi         else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7854*53ee8cc1Swenshuai.xi         {
7855*53ee8cc1Swenshuai.xi             mhal_mhl_SetRegisterBaseAddress(pMHLResourcePrivate->ulRiuBaseAddress, pMHLResourcePrivate->ulPMRiuBaseAddress);
7856*53ee8cc1Swenshuai.xi         }
7857*53ee8cc1Swenshuai.xi 
7858*53ee8cc1Swenshuai.xi         mhal_mhl_MHLSupportPath(ucSelect);
7859*53ee8cc1Swenshuai.xi 
7860*53ee8cc1Swenshuai.xi         bMHLEfuseFlag = MDrv_SYS_Query(E_SYS_QUERY_MHL_SUPPORTED);
7861*53ee8cc1Swenshuai.xi 
7862*53ee8cc1Swenshuai.xi         if(mhal_mhl_CheckEfuseControlFlag(bMHLEfuseFlag))
7863*53ee8cc1Swenshuai.xi         {
7864*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL function not support in this chip ###\r\n");
7865*53ee8cc1Swenshuai.xi         }
7866*53ee8cc1Swenshuai.xi         else
7867*53ee8cc1Swenshuai.xi         {
7868*53ee8cc1Swenshuai.xi             for(uctemp = 0; uctemp < MHL_CBUS_SELECT_MASK ;uctemp++)
7869*53ee8cc1Swenshuai.xi             {
7870*53ee8cc1Swenshuai.xi                 if(ucSelect &BIT(uctemp))
7871*53ee8cc1Swenshuai.xi                 {
7872*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucMHLSupportPath = uctemp;
7873*53ee8cc1Swenshuai.xi 
7874*53ee8cc1Swenshuai.xi                     MDRV_MHL_MSG_INFO("** MHL function support in port %c\r\n", MHL_INPUT_PORT(uctemp));
7875*53ee8cc1Swenshuai.xi                 }
7876*53ee8cc1Swenshuai.xi             }
7877*53ee8cc1Swenshuai.xi         }
7878*53ee8cc1Swenshuai.xi     }
7879*53ee8cc1Swenshuai.xi 
7880*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
7881*53ee8cc1Swenshuai.xi }
7882*53ee8cc1Swenshuai.xi 
7883*53ee8cc1Swenshuai.xi //**************************************************************************
7884*53ee8cc1Swenshuai.xi //  [Function Name]:
7885*53ee8cc1Swenshuai.xi //                  mdrv_mhl_Initial()
7886*53ee8cc1Swenshuai.xi //  [Description]
7887*53ee8cc1Swenshuai.xi //                  MHL init
7888*53ee8cc1Swenshuai.xi //  [Arguments]:
7889*53ee8cc1Swenshuai.xi //                  *edid: MHL EDID data
7890*53ee8cc1Swenshuai.xi //                  *devcap: MHL device capability
7891*53ee8cc1Swenshuai.xi //  [Return]:
7892*53ee8cc1Swenshuai.xi //
7893*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_Initial(void * pInstance,MS_U8 * edid,MS_U8 * DevCap)7894*53ee8cc1Swenshuai.xi void mdrv_mhl_Initial(void* pInstance, MS_U8 *edid, MS_U8 *DevCap)
7895*53ee8cc1Swenshuai.xi {
7896*53ee8cc1Swenshuai.xi     void* pModule = NULL;
7897*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
7898*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
7899*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
7900*53ee8cc1Swenshuai.xi 
7901*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
7902*53ee8cc1Swenshuai.xi 
7903*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
7904*53ee8cc1Swenshuai.xi     {
7905*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
7906*53ee8cc1Swenshuai.xi     }
7907*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
7908*53ee8cc1Swenshuai.xi     {
7909*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
7910*53ee8cc1Swenshuai.xi     }
7911*53ee8cc1Swenshuai.xi     else
7912*53ee8cc1Swenshuai.xi     {
7913*53ee8cc1Swenshuai.xi         // Clear flag
7914*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucInitialIndex != 0xA5)
7915*53ee8cc1Swenshuai.xi         {
7916*53ee8cc1Swenshuai.xi             _mdrv_mhl_ClearCbusFlag(pMHLResourcePrivate, MHL_CLEAR_INITIAL_FLAG);
7917*53ee8cc1Swenshuai.xi 
7918*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucInitialIndex = 0xA5;
7919*53ee8cc1Swenshuai.xi         }
7920*53ee8cc1Swenshuai.xi 
7921*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_InitRiuBase(pMHLResourcePrivate)) // Get base success
7922*53ee8cc1Swenshuai.xi         {
7923*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL get XC and PM base success \n");
7924*53ee8cc1Swenshuai.xi 
7925*53ee8cc1Swenshuai.xi             SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG);
7926*53ee8cc1Swenshuai.xi         }
7927*53ee8cc1Swenshuai.xi 
7928*53ee8cc1Swenshuai.xi         if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
7929*53ee8cc1Swenshuai.xi         {
7930*53ee8cc1Swenshuai.xi             if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_PREVENT_REINITIAL_FLAG))
7931*53ee8cc1Swenshuai.xi             {
7932*53ee8cc1Swenshuai.xi                 // Chip initial
7933*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucChipCapability = mhal_mhl_initial(pMHLResourcePrivate->ucMHLSupportPath, edid, DevCap, pMHLResourcePrivate->ucDeviceVenderID);
7934*53ee8cc1Swenshuai.xi 
7935*53ee8cc1Swenshuai.xi                 SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_PREVENT_REINITIAL_FLAG);
7936*53ee8cc1Swenshuai.xi             }
7937*53ee8cc1Swenshuai.xi             else
7938*53ee8cc1Swenshuai.xi             {
7939*53ee8cc1Swenshuai.xi                 // Load EDID
7940*53ee8cc1Swenshuai.xi                 mhal_mhl_LoadEDID(edid);
7941*53ee8cc1Swenshuai.xi 
7942*53ee8cc1Swenshuai.xi                 // Load vendor ID
7943*53ee8cc1Swenshuai.xi                 mhal_mhl_SetVenderID(pMHLResourcePrivate->ucDeviceVenderID);
7944*53ee8cc1Swenshuai.xi 
7945*53ee8cc1Swenshuai.xi                 // Load DevCap
7946*53ee8cc1Swenshuai.xi                 mhal_mhl_LoadDeviceCapability(DevCap);
7947*53ee8cc1Swenshuai.xi             }
7948*53ee8cc1Swenshuai.xi 
7949*53ee8cc1Swenshuai.xi             // Parsing EDID
7950*53ee8cc1Swenshuai.xi             _mdrv_mhl_ParsingEDIDfor3D(pMHLResourcePrivate, edid);
7951*53ee8cc1Swenshuai.xi 
7952*53ee8cc1Swenshuai.xi             // Check and insert device capability
7953*53ee8cc1Swenshuai.xi             if(DevCap != NULL)
7954*53ee8cc1Swenshuai.xi             {
7955*53ee8cc1Swenshuai.xi                 for(uctemp = 0; uctemp < MHL_DEVICE_CAPABILITY_SIZE; uctemp++)
7956*53ee8cc1Swenshuai.xi                 {
7957*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucDeviceCapabilityTable[uctemp] = DevCap[uctemp];
7958*53ee8cc1Swenshuai.xi                 }
7959*53ee8cc1Swenshuai.xi 
7960*53ee8cc1Swenshuai.xi                 if(_mdrv_mhl_GetEnhanceCbusFlag(pMHLResourcePrivate)) // Chip support MHL 3.0
7961*53ee8cc1Swenshuai.xi                 {
7962*53ee8cc1Swenshuai.xi                     SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG);
7963*53ee8cc1Swenshuai.xi 
7964*53ee8cc1Swenshuai.xi                     for(uctemp = 0; uctemp < MHL_XDEVICE_CAPABILITY_SIZE; uctemp++)
7965*53ee8cc1Swenshuai.xi                     {
7966*53ee8cc1Swenshuai.xi                         pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_DEVICE_CAPABILITY_SIZE +uctemp] = DevCap[MHL_DEVICE_CAPABILITY_SIZE +uctemp];
7967*53ee8cc1Swenshuai.xi                     }
7968*53ee8cc1Swenshuai.xi                 }
7969*53ee8cc1Swenshuai.xi                 else if(DevCap[MHL_CBUS_VERSION] >= 0x30) // Change MHL version to 2.1
7970*53ee8cc1Swenshuai.xi                 {
7971*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_VERSION] = 0x21;
7972*53ee8cc1Swenshuai.xi 
7973*53ee8cc1Swenshuai.xi                     mhal_mhl_LoadDeviceCapability(pMHLResourcePrivate->ucDeviceCapabilityTable);
7974*53ee8cc1Swenshuai.xi 
7975*53ee8cc1Swenshuai.xi                     MDRV_MHL_MSG_INFO("** MHL this chip not supprt MHL 3.0 \r\n");
7976*53ee8cc1Swenshuai.xi                 }
7977*53ee8cc1Swenshuai.xi             }
7978*53ee8cc1Swenshuai.xi 
7979*53ee8cc1Swenshuai.xi             // Attach Cbus ISR
7980*53ee8cc1Swenshuai.xi             if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ISR_ATTACH_FLAG))
7981*53ee8cc1Swenshuai.xi             {
7982*53ee8cc1Swenshuai.xi                 if(GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_INTERRUPT_USE_PM_IRQ_FLAG))
7983*53ee8cc1Swenshuai.xi                 {
7984*53ee8cc1Swenshuai.xi                     MsOS_AttachInterrupt(E_INT_IRQ_PM, _mdrv_mhl_IsrHandler);
7985*53ee8cc1Swenshuai.xi                     MsOS_EnableInterrupt(E_INT_IRQ_PM);
7986*53ee8cc1Swenshuai.xi                 }
7987*53ee8cc1Swenshuai.xi                 else
7988*53ee8cc1Swenshuai.xi                 {
7989*53ee8cc1Swenshuai.xi                     MsOS_AttachInterrupt(E_INT_IRQ_MHL_CBUS_PM, _mdrv_mhl_IsrHandler);
7990*53ee8cc1Swenshuai.xi                     MsOS_EnableInterrupt(E_INT_IRQ_MHL_CBUS_PM);
7991*53ee8cc1Swenshuai.xi                 }
7992*53ee8cc1Swenshuai.xi 
7993*53ee8cc1Swenshuai.xi                 SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ISR_ATTACH_FLAG);
7994*53ee8cc1Swenshuai.xi             }
7995*53ee8cc1Swenshuai.xi 
7996*53ee8cc1Swenshuai.xi             // Attach eCbus ISR
7997*53ee8cc1Swenshuai.xi             if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG))
7998*53ee8cc1Swenshuai.xi             {
7999*53ee8cc1Swenshuai.xi                 if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
8000*53ee8cc1Swenshuai.xi                 {
8001*53ee8cc1Swenshuai.xi                     MsOS_AttachInterrupt(E_INT_IRQ_MHL_ECBUS_INT, _mdrv_mhl_ECbusIsrHandler);
8002*53ee8cc1Swenshuai.xi                     MsOS_EnableInterrupt(E_INT_IRQ_MHL_ECBUS_INT);
8003*53ee8cc1Swenshuai.xi 
8004*53ee8cc1Swenshuai.xi                     SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG);
8005*53ee8cc1Swenshuai.xi                 }
8006*53ee8cc1Swenshuai.xi             }
8007*53ee8cc1Swenshuai.xi 
8008*53ee8cc1Swenshuai.xi             if(GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_SELF_CREATE_TASK_FLAG))
8009*53ee8cc1Swenshuai.xi             {
8010*53ee8cc1Swenshuai.xi                 if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_SELF_CREATE_TASK_FLAG))
8011*53ee8cc1Swenshuai.xi                 {
8012*53ee8cc1Swenshuai.xi                     if(_mdrv_mhl_CreateTask(pMHLResourcePrivate))
8013*53ee8cc1Swenshuai.xi                     {
8014*53ee8cc1Swenshuai.xi                         MDRV_MHL_MSG_INFO("** MHL create polling task by self \r\n");
8015*53ee8cc1Swenshuai.xi 
8016*53ee8cc1Swenshuai.xi                         SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_SELF_CREATE_TASK_FLAG);
8017*53ee8cc1Swenshuai.xi                     }
8018*53ee8cc1Swenshuai.xi                 }
8019*53ee8cc1Swenshuai.xi             }
8020*53ee8cc1Swenshuai.xi         }
8021*53ee8cc1Swenshuai.xi     }
8022*53ee8cc1Swenshuai.xi 
8023*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8024*53ee8cc1Swenshuai.xi }
8025*53ee8cc1Swenshuai.xi 
8026*53ee8cc1Swenshuai.xi //**************************************************************************
8027*53ee8cc1Swenshuai.xi //  [Function Name]:
8028*53ee8cc1Swenshuai.xi //                  mdrv_mhl_Handler()
8029*53ee8cc1Swenshuai.xi //  [Description]
8030*53ee8cc1Swenshuai.xi //                  MHL handler
8031*53ee8cc1Swenshuai.xi //  [Arguments]:
8032*53ee8cc1Swenshuai.xi //
8033*53ee8cc1Swenshuai.xi //  [Return]:
8034*53ee8cc1Swenshuai.xi //
8035*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_Handler(void * pInstance)8036*53ee8cc1Swenshuai.xi MS_U16 mdrv_mhl_Handler(void* pInstance)
8037*53ee8cc1Swenshuai.xi {
8038*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8039*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8040*53ee8cc1Swenshuai.xi     MS_U16 usMSGKeyInfo = 0;
8041*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8042*53ee8cc1Swenshuai.xi 
8043*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8044*53ee8cc1Swenshuai.xi 
8045*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8046*53ee8cc1Swenshuai.xi     {
8047*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8048*53ee8cc1Swenshuai.xi     }
8049*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8050*53ee8cc1Swenshuai.xi     {
8051*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8052*53ee8cc1Swenshuai.xi     }
8053*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8054*53ee8cc1Swenshuai.xi     {
8055*53ee8cc1Swenshuai.xi         if(!GET_MHL_CHIP_FLAG(pMHLResourcePrivate->ucChipCapability, MHL_CHIP_SELF_CREATE_TASK_FLAG))
8056*53ee8cc1Swenshuai.xi         {
8057*53ee8cc1Swenshuai.xi             _mdrv_mhl_PollingEventProc(pMHLResourcePrivate);
8058*53ee8cc1Swenshuai.xi         }
8059*53ee8cc1Swenshuai.xi 
8060*53ee8cc1Swenshuai.xi         if(GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG))
8061*53ee8cc1Swenshuai.xi         {
8062*53ee8cc1Swenshuai.xi             CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_CALLBACK_FUNCTION_FLAG);
8063*53ee8cc1Swenshuai.xi 
8064*53ee8cc1Swenshuai.xi             usMSGKeyInfo = pMHLResourcePrivate->usMSGKeyInfo;
8065*53ee8cc1Swenshuai.xi         }
8066*53ee8cc1Swenshuai.xi     }
8067*53ee8cc1Swenshuai.xi 
8068*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8069*53ee8cc1Swenshuai.xi 
8070*53ee8cc1Swenshuai.xi     return usMSGKeyInfo;
8071*53ee8cc1Swenshuai.xi }
8072*53ee8cc1Swenshuai.xi 
8073*53ee8cc1Swenshuai.xi //**************************************************************************
8074*53ee8cc1Swenshuai.xi //  [Function Name]:
8075*53ee8cc1Swenshuai.xi //                  mdrv_mhl_AutoSwitchHandler()
8076*53ee8cc1Swenshuai.xi //  [Description]
8077*53ee8cc1Swenshuai.xi //
8078*53ee8cc1Swenshuai.xi //  [Arguments]:
8079*53ee8cc1Swenshuai.xi //
8080*53ee8cc1Swenshuai.xi //  [Return]:
8081*53ee8cc1Swenshuai.xi //
8082*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_AutoSwitchHandler(void * pInstance,MS_BOOL bReset,MS_U8 * ucCbusPath)8083*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_AutoSwitchHandler(void* pInstance, MS_BOOL bReset, MS_U8 *ucCbusPath)
8084*53ee8cc1Swenshuai.xi {
8085*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8086*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8087*53ee8cc1Swenshuai.xi     MS_BOOL bAutoSwitchFlag = FALSE;
8088*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8089*53ee8cc1Swenshuai.xi 
8090*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8091*53ee8cc1Swenshuai.xi 
8092*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8093*53ee8cc1Swenshuai.xi     {
8094*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8095*53ee8cc1Swenshuai.xi     }
8096*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8097*53ee8cc1Swenshuai.xi     {
8098*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8099*53ee8cc1Swenshuai.xi     }
8100*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8101*53ee8cc1Swenshuai.xi     {
8102*53ee8cc1Swenshuai.xi         if(bReset)
8103*53ee8cc1Swenshuai.xi         {
8104*53ee8cc1Swenshuai.xi             CLR_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_AUTO_SWITCH_DONE_FLAG);
8105*53ee8cc1Swenshuai.xi             CLR_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG);
8106*53ee8cc1Swenshuai.xi         }
8107*53ee8cc1Swenshuai.xi         else
8108*53ee8cc1Swenshuai.xi         {
8109*53ee8cc1Swenshuai.xi             if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_AUTO_SWITCH_DONE_FLAG))
8110*53ee8cc1Swenshuai.xi             {
8111*53ee8cc1Swenshuai.xi                 CLR_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_AUTO_SWITCH_DONE_FLAG);
8112*53ee8cc1Swenshuai.xi 
8113*53ee8cc1Swenshuai.xi                 _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_AUTO_SWITCH_STOP, MHL_AUTO_SWITCH_STOP_TIME);
8114*53ee8cc1Swenshuai.xi 
8115*53ee8cc1Swenshuai.xi                 SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_STOP_FLAG);
8116*53ee8cc1Swenshuai.xi 
8117*53ee8cc1Swenshuai.xi                 bAutoSwitchFlag = TRUE;
8118*53ee8cc1Swenshuai.xi             }
8119*53ee8cc1Swenshuai.xi             else if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_STOP_FLAG))
8120*53ee8cc1Swenshuai.xi             {
8121*53ee8cc1Swenshuai.xi                 if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG))
8122*53ee8cc1Swenshuai.xi                 {
8123*53ee8cc1Swenshuai.xi                     if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG))
8124*53ee8cc1Swenshuai.xi                     {
8125*53ee8cc1Swenshuai.xi                         SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_AUTO_SWITCH_FLAG);
8126*53ee8cc1Swenshuai.xi                     }
8127*53ee8cc1Swenshuai.xi                 }
8128*53ee8cc1Swenshuai.xi             }
8129*53ee8cc1Swenshuai.xi         }
8130*53ee8cc1Swenshuai.xi     }
8131*53ee8cc1Swenshuai.xi 
8132*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8133*53ee8cc1Swenshuai.xi 
8134*53ee8cc1Swenshuai.xi     return bAutoSwitchFlag;
8135*53ee8cc1Swenshuai.xi }
8136*53ee8cc1Swenshuai.xi 
8137*53ee8cc1Swenshuai.xi //**************************************************************************
8138*53ee8cc1Swenshuai.xi //  [Function Name]:
8139*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SetPowerState()
8140*53ee8cc1Swenshuai.xi //  [Description]
8141*53ee8cc1Swenshuai.xi //
8142*53ee8cc1Swenshuai.xi //  [Arguments]:
8143*53ee8cc1Swenshuai.xi //
8144*53ee8cc1Swenshuai.xi //  [Return]:
8145*53ee8cc1Swenshuai.xi //
8146*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SetPowerState(void * pInstance,EN_POWER_MODE usPowerState)8147*53ee8cc1Swenshuai.xi MS_U32 mdrv_mhl_SetPowerState(void* pInstance, EN_POWER_MODE usPowerState)
8148*53ee8cc1Swenshuai.xi {
8149*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8150*53ee8cc1Swenshuai.xi 
8151*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8152*53ee8cc1Swenshuai.xi 
8153*53ee8cc1Swenshuai.xi     return mdrv_mhl_STREventProc(pModule, usPowerState);
8154*53ee8cc1Swenshuai.xi }
8155*53ee8cc1Swenshuai.xi 
8156*53ee8cc1Swenshuai.xi //**************************************************************************
8157*53ee8cc1Swenshuai.xi //  [Function Name]:
8158*53ee8cc1Swenshuai.xi //                  mdrv_mhl_CbusControl()
8159*53ee8cc1Swenshuai.xi //  [Description]
8160*53ee8cc1Swenshuai.xi //
8161*53ee8cc1Swenshuai.xi //  [Arguments]:
8162*53ee8cc1Swenshuai.xi //
8163*53ee8cc1Swenshuai.xi //  [Return]:
8164*53ee8cc1Swenshuai.xi //
8165*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusControl(void * pInstance,MS_U8 ucState)8166*53ee8cc1Swenshuai.xi void mdrv_mhl_CbusControl(void* pInstance, MS_U8 ucState)
8167*53ee8cc1Swenshuai.xi {
8168*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8169*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8170*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8171*53ee8cc1Swenshuai.xi 
8172*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8173*53ee8cc1Swenshuai.xi 
8174*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8175*53ee8cc1Swenshuai.xi     {
8176*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8177*53ee8cc1Swenshuai.xi     }
8178*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8179*53ee8cc1Swenshuai.xi     {
8180*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8181*53ee8cc1Swenshuai.xi     }
8182*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8183*53ee8cc1Swenshuai.xi     {
8184*53ee8cc1Swenshuai.xi         switch(ucState)
8185*53ee8cc1Swenshuai.xi         {
8186*53ee8cc1Swenshuai.xi             case MHL_CBUS_FORCE_READY_DEVCAP:
8187*53ee8cc1Swenshuai.xi                 SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_DEVCAP_FLAG);
8188*53ee8cc1Swenshuai.xi                 break;
8189*53ee8cc1Swenshuai.xi 
8190*53ee8cc1Swenshuai.xi             case MHL_CBUS_FORCE_RECEIVE_3D_REQ:
8191*53ee8cc1Swenshuai.xi                 SET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_3D_REQ_FLAG);
8192*53ee8cc1Swenshuai.xi                 break;
8193*53ee8cc1Swenshuai.xi 
8194*53ee8cc1Swenshuai.xi             case MHL_CBUS_FORCE_SEND_COMMAND_ENABLE:
8195*53ee8cc1Swenshuai.xi                 SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_FORCE_SEND_COMMAND_FLAG);
8196*53ee8cc1Swenshuai.xi                 break;
8197*53ee8cc1Swenshuai.xi 
8198*53ee8cc1Swenshuai.xi             case MHL_CBUS_FORCE_SEND_COMMAND_DISABLE:
8199*53ee8cc1Swenshuai.xi                 CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_FORCE_SEND_COMMAND_FLAG);
8200*53ee8cc1Swenshuai.xi                 break;
8201*53ee8cc1Swenshuai.xi 
8202*53ee8cc1Swenshuai.xi             case MHL_CBUS_CHECK_CONTEND_ON_ENABLE:
8203*53ee8cc1Swenshuai.xi                 SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CHECK_CONTENT_ENABLE_FLAG);
8204*53ee8cc1Swenshuai.xi                 break;
8205*53ee8cc1Swenshuai.xi 
8206*53ee8cc1Swenshuai.xi             case MHL_CBUS_CHECK_CONTEND_ON_DISABLE:
8207*53ee8cc1Swenshuai.xi                 CLR_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CHECK_CONTENT_ENABLE_FLAG);
8208*53ee8cc1Swenshuai.xi                 break;
8209*53ee8cc1Swenshuai.xi 
8210*53ee8cc1Swenshuai.xi             case MHL_CBUS_ISOLATION_ON:
8211*53ee8cc1Swenshuai.xi                 mhal_mhl_CbusIsolate(pMHLResourcePrivate->ucMHLSupportPath, TRUE);
8212*53ee8cc1Swenshuai.xi                 break;
8213*53ee8cc1Swenshuai.xi 
8214*53ee8cc1Swenshuai.xi             case MHL_CBUS_ISOLATION_OFF:
8215*53ee8cc1Swenshuai.xi                 mhal_mhl_CbusIsolate(pMHLResourcePrivate->ucMHLSupportPath, FALSE);
8216*53ee8cc1Swenshuai.xi                 break;
8217*53ee8cc1Swenshuai.xi 
8218*53ee8cc1Swenshuai.xi             case MHL_CBUS_FLOATING_ON:
8219*53ee8cc1Swenshuai.xi                 mhal_mhl_CbusFloating(TRUE);
8220*53ee8cc1Swenshuai.xi                 break;
8221*53ee8cc1Swenshuai.xi 
8222*53ee8cc1Swenshuai.xi             case MHL_CBUS_FLOATING_OFF:
8223*53ee8cc1Swenshuai.xi                 mhal_mhl_CbusFloating(FALSE);
8224*53ee8cc1Swenshuai.xi                 break;
8225*53ee8cc1Swenshuai.xi 
8226*53ee8cc1Swenshuai.xi             case MHL_VBUS_HW_DETCET:
8227*53ee8cc1Swenshuai.xi                 mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, VBUS_HW_DETECT);
8228*53ee8cc1Swenshuai.xi                 break;
8229*53ee8cc1Swenshuai.xi 
8230*53ee8cc1Swenshuai.xi             case MHL_VBUS_CHARGE_ON:
8231*53ee8cc1Swenshuai.xi                 mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, VBUS_SW_CHARGE);
8232*53ee8cc1Swenshuai.xi                 break;
8233*53ee8cc1Swenshuai.xi 
8234*53ee8cc1Swenshuai.xi             case MHL_VBUS_CHARGE_OFF:
8235*53ee8cc1Swenshuai.xi                 mhal_mhl_VbusCharge(pMHLResourcePrivate->ucMHLSupportPath, VBUS_SW_UNCHARGE);
8236*53ee8cc1Swenshuai.xi                 break;
8237*53ee8cc1Swenshuai.xi 
8238*53ee8cc1Swenshuai.xi             default:
8239*53ee8cc1Swenshuai.xi 
8240*53ee8cc1Swenshuai.xi                 break;
8241*53ee8cc1Swenshuai.xi         };
8242*53ee8cc1Swenshuai.xi     }
8243*53ee8cc1Swenshuai.xi 
8244*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8245*53ee8cc1Swenshuai.xi }
8246*53ee8cc1Swenshuai.xi 
8247*53ee8cc1Swenshuai.xi //**************************************************************************
8248*53ee8cc1Swenshuai.xi //  [Function Name]:
8249*53ee8cc1Swenshuai.xi //                  mdrv_mhl_LoadEDID()
8250*53ee8cc1Swenshuai.xi //  [Description]
8251*53ee8cc1Swenshuai.xi //
8252*53ee8cc1Swenshuai.xi //  [Arguments]:
8253*53ee8cc1Swenshuai.xi //
8254*53ee8cc1Swenshuai.xi //  [Return]:
8255*53ee8cc1Swenshuai.xi //
8256*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_LoadEDID(void * pInstance,MS_U8 * edid)8257*53ee8cc1Swenshuai.xi void mdrv_mhl_LoadEDID(void* pInstance, MS_U8 *edid)
8258*53ee8cc1Swenshuai.xi {
8259*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8260*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8261*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8262*53ee8cc1Swenshuai.xi 
8263*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8264*53ee8cc1Swenshuai.xi 
8265*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8266*53ee8cc1Swenshuai.xi     {
8267*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8268*53ee8cc1Swenshuai.xi     }
8269*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8270*53ee8cc1Swenshuai.xi     {
8271*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8272*53ee8cc1Swenshuai.xi     }
8273*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8274*53ee8cc1Swenshuai.xi     {
8275*53ee8cc1Swenshuai.xi         mhal_mhl_LoadEDID(edid);
8276*53ee8cc1Swenshuai.xi 
8277*53ee8cc1Swenshuai.xi         // Parsing EDID
8278*53ee8cc1Swenshuai.xi         _mdrv_mhl_ParsingEDIDfor3D(pMHLResourcePrivate, edid);
8279*53ee8cc1Swenshuai.xi     }
8280*53ee8cc1Swenshuai.xi 
8281*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8282*53ee8cc1Swenshuai.xi }
8283*53ee8cc1Swenshuai.xi 
8284*53ee8cc1Swenshuai.xi //**************************************************************************
8285*53ee8cc1Swenshuai.xi //  [Function Name]:
8286*53ee8cc1Swenshuai.xi //                  mdrv_mhl_ReadEDID()
8287*53ee8cc1Swenshuai.xi //  [Description]
8288*53ee8cc1Swenshuai.xi //
8289*53ee8cc1Swenshuai.xi //  [Arguments]:
8290*53ee8cc1Swenshuai.xi //
8291*53ee8cc1Swenshuai.xi //  [Return]:
8292*53ee8cc1Swenshuai.xi //
8293*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_ReadEDID(void * pInstance,MS_U16 usSize,MS_U8 * edid)8294*53ee8cc1Swenshuai.xi void mdrv_mhl_ReadEDID(void* pInstance, MS_U16 usSize, MS_U8 *edid)
8295*53ee8cc1Swenshuai.xi {
8296*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8297*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8298*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8299*53ee8cc1Swenshuai.xi 
8300*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8301*53ee8cc1Swenshuai.xi 
8302*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8303*53ee8cc1Swenshuai.xi     {
8304*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8305*53ee8cc1Swenshuai.xi     }
8306*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8307*53ee8cc1Swenshuai.xi     {
8308*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8309*53ee8cc1Swenshuai.xi     }
8310*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8311*53ee8cc1Swenshuai.xi     {
8312*53ee8cc1Swenshuai.xi         if(usSize > 0)
8313*53ee8cc1Swenshuai.xi         {
8314*53ee8cc1Swenshuai.xi             mhal_mhl_ReadEDID(usSize, edid);
8315*53ee8cc1Swenshuai.xi         }
8316*53ee8cc1Swenshuai.xi     }
8317*53ee8cc1Swenshuai.xi 
8318*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8319*53ee8cc1Swenshuai.xi }
8320*53ee8cc1Swenshuai.xi 
8321*53ee8cc1Swenshuai.xi //**************************************************************************
8322*53ee8cc1Swenshuai.xi //  [Function Name]:
8323*53ee8cc1Swenshuai.xi //                  mdrv_mhl_LoadDeviceCapability()
8324*53ee8cc1Swenshuai.xi //  [Description]
8325*53ee8cc1Swenshuai.xi //
8326*53ee8cc1Swenshuai.xi //  [Arguments]:
8327*53ee8cc1Swenshuai.xi //
8328*53ee8cc1Swenshuai.xi //  [Return]:
8329*53ee8cc1Swenshuai.xi //
8330*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_LoadDeviceCapability(void * pInstance,MS_U8 * devcap)8331*53ee8cc1Swenshuai.xi void mdrv_mhl_LoadDeviceCapability(void* pInstance, MS_U8 *devcap)
8332*53ee8cc1Swenshuai.xi {
8333*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8334*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8335*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
8336*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8337*53ee8cc1Swenshuai.xi 
8338*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8339*53ee8cc1Swenshuai.xi 
8340*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8341*53ee8cc1Swenshuai.xi     {
8342*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8343*53ee8cc1Swenshuai.xi     }
8344*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8345*53ee8cc1Swenshuai.xi     {
8346*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8347*53ee8cc1Swenshuai.xi     }
8348*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8349*53ee8cc1Swenshuai.xi     {
8350*53ee8cc1Swenshuai.xi         if(devcap != NULL)
8351*53ee8cc1Swenshuai.xi         {
8352*53ee8cc1Swenshuai.xi             for(uctemp = 0; uctemp < MHL_DEVICE_CAPABILITY_SIZE; uctemp++)
8353*53ee8cc1Swenshuai.xi             {
8354*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucDeviceCapabilityTable[uctemp] = devcap[uctemp];
8355*53ee8cc1Swenshuai.xi             }
8356*53ee8cc1Swenshuai.xi 
8357*53ee8cc1Swenshuai.xi             if(_mdrv_mhl_GetEnhanceCbusFlag(pMHLResourcePrivate)) // Chip support MHL 3.0
8358*53ee8cc1Swenshuai.xi             {
8359*53ee8cc1Swenshuai.xi                 SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG);
8360*53ee8cc1Swenshuai.xi 
8361*53ee8cc1Swenshuai.xi                 for(uctemp = 0; uctemp < MHL_XDEVICE_CAPABILITY_SIZE; uctemp++)
8362*53ee8cc1Swenshuai.xi                 {
8363*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_DEVICE_CAPABILITY_SIZE +uctemp] = devcap[MHL_DEVICE_CAPABILITY_SIZE +uctemp];
8364*53ee8cc1Swenshuai.xi                 }
8365*53ee8cc1Swenshuai.xi             }
8366*53ee8cc1Swenshuai.xi             else if(devcap[MHL_CBUS_VERSION] >= 0x30) // Change MHL version to 2.1
8367*53ee8cc1Swenshuai.xi             {
8368*53ee8cc1Swenshuai.xi                 pMHLResourcePrivate->ucDeviceCapabilityTable[MHL_CBUS_VERSION] = 0x21;
8369*53ee8cc1Swenshuai.xi 
8370*53ee8cc1Swenshuai.xi                 mhal_mhl_LoadDeviceCapability(pMHLResourcePrivate->ucDeviceCapabilityTable);
8371*53ee8cc1Swenshuai.xi 
8372*53ee8cc1Swenshuai.xi                 MDRV_MHL_MSG_INFO("** MHL this chip not supprt MHL 3.0 \r\n");
8373*53ee8cc1Swenshuai.xi             }
8374*53ee8cc1Swenshuai.xi 
8375*53ee8cc1Swenshuai.xi             // Attach eCbus ISR
8376*53ee8cc1Swenshuai.xi             if(!GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG))
8377*53ee8cc1Swenshuai.xi             {
8378*53ee8cc1Swenshuai.xi                 if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_ENHANCE_FLAG))
8379*53ee8cc1Swenshuai.xi                 {
8380*53ee8cc1Swenshuai.xi                     MsOS_AttachInterrupt(E_INT_IRQ_MHL_ECBUS_INT, _mdrv_mhl_ECbusIsrHandler);
8381*53ee8cc1Swenshuai.xi                     MsOS_EnableInterrupt(E_INT_IRQ_MHL_ECBUS_INT);
8382*53ee8cc1Swenshuai.xi 
8383*53ee8cc1Swenshuai.xi                     SET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_ECBUS_ISR_ATTACH_FLAG);
8384*53ee8cc1Swenshuai.xi                 }
8385*53ee8cc1Swenshuai.xi             }
8386*53ee8cc1Swenshuai.xi         }
8387*53ee8cc1Swenshuai.xi     }
8388*53ee8cc1Swenshuai.xi 
8389*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8390*53ee8cc1Swenshuai.xi }
8391*53ee8cc1Swenshuai.xi 
8392*53ee8cc1Swenshuai.xi //**************************************************************************
8393*53ee8cc1Swenshuai.xi //  [Function Name]:
8394*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SetVenderID()
8395*53ee8cc1Swenshuai.xi //  [Description]
8396*53ee8cc1Swenshuai.xi //
8397*53ee8cc1Swenshuai.xi //  [Arguments]:
8398*53ee8cc1Swenshuai.xi //
8399*53ee8cc1Swenshuai.xi //  [Return]:
8400*53ee8cc1Swenshuai.xi //
8401*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SetVenderID(void * pInstance,MS_U8 ucVenderID)8402*53ee8cc1Swenshuai.xi void mdrv_mhl_SetVenderID(void* pInstance, MS_U8 ucVenderID)
8403*53ee8cc1Swenshuai.xi {
8404*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8405*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8406*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8407*53ee8cc1Swenshuai.xi 
8408*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8409*53ee8cc1Swenshuai.xi 
8410*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8411*53ee8cc1Swenshuai.xi     {
8412*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8413*53ee8cc1Swenshuai.xi     }
8414*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8415*53ee8cc1Swenshuai.xi     {
8416*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8417*53ee8cc1Swenshuai.xi     }
8418*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8419*53ee8cc1Swenshuai.xi     {
8420*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->ucDeviceVenderID = ucVenderID;
8421*53ee8cc1Swenshuai.xi 
8422*53ee8cc1Swenshuai.xi         mhal_mhl_SetVenderID(ucVenderID);
8423*53ee8cc1Swenshuai.xi     }
8424*53ee8cc1Swenshuai.xi 
8425*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8426*53ee8cc1Swenshuai.xi }
8427*53ee8cc1Swenshuai.xi 
8428*53ee8cc1Swenshuai.xi //**************************************************************************
8429*53ee8cc1Swenshuai.xi //  [Function Name]:
8430*53ee8cc1Swenshuai.xi //                  mdrv_mhl_InvertCableDetect()
8431*53ee8cc1Swenshuai.xi //  [Description]
8432*53ee8cc1Swenshuai.xi //
8433*53ee8cc1Swenshuai.xi //  [Arguments]:
8434*53ee8cc1Swenshuai.xi //
8435*53ee8cc1Swenshuai.xi //  [Return]:
8436*53ee8cc1Swenshuai.xi //
8437*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_InvertCableDetect(void * pInstance,MS_BOOL bCableDetectInvert)8438*53ee8cc1Swenshuai.xi void mdrv_mhl_InvertCableDetect(void* pInstance, MS_BOOL bCableDetectInvert)
8439*53ee8cc1Swenshuai.xi {
8440*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8441*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8442*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8443*53ee8cc1Swenshuai.xi 
8444*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8445*53ee8cc1Swenshuai.xi 
8446*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8447*53ee8cc1Swenshuai.xi     {
8448*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8449*53ee8cc1Swenshuai.xi     }
8450*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8451*53ee8cc1Swenshuai.xi     {
8452*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8453*53ee8cc1Swenshuai.xi     }
8454*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8455*53ee8cc1Swenshuai.xi     {
8456*53ee8cc1Swenshuai.xi         mhal_mhl_InvertCableDetect(pMHLResourcePrivate->ucMHLSupportPath, bCableDetectInvert);
8457*53ee8cc1Swenshuai.xi     }
8458*53ee8cc1Swenshuai.xi 
8459*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8460*53ee8cc1Swenshuai.xi }
8461*53ee8cc1Swenshuai.xi 
8462*53ee8cc1Swenshuai.xi //**************************************************************************
8463*53ee8cc1Swenshuai.xi //  [Function Name]:
8464*53ee8cc1Swenshuai.xi //                  mdrv_mhl_VbusConfigSetting()
8465*53ee8cc1Swenshuai.xi //  [Description]
8466*53ee8cc1Swenshuai.xi //
8467*53ee8cc1Swenshuai.xi //  [Arguments]:
8468*53ee8cc1Swenshuai.xi //
8469*53ee8cc1Swenshuai.xi //  [Return]:
8470*53ee8cc1Swenshuai.xi //
8471*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_VbusConfigSetting(void * pInstance,MS_U8 ucState)8472*53ee8cc1Swenshuai.xi void mdrv_mhl_VbusConfigSetting(void* pInstance, MS_U8 ucState)
8473*53ee8cc1Swenshuai.xi {
8474*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8475*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8476*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8477*53ee8cc1Swenshuai.xi 
8478*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8479*53ee8cc1Swenshuai.xi 
8480*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8481*53ee8cc1Swenshuai.xi     {
8482*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8483*53ee8cc1Swenshuai.xi     }
8484*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8485*53ee8cc1Swenshuai.xi     {
8486*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8487*53ee8cc1Swenshuai.xi     }
8488*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8489*53ee8cc1Swenshuai.xi     {
8490*53ee8cc1Swenshuai.xi         mhal_mhl_VbusConfigSetting(pMHLResourcePrivate->ucMHLSupportPath, ucState);
8491*53ee8cc1Swenshuai.xi     }
8492*53ee8cc1Swenshuai.xi 
8493*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8494*53ee8cc1Swenshuai.xi }
8495*53ee8cc1Swenshuai.xi 
8496*53ee8cc1Swenshuai.xi //**************************************************************************
8497*53ee8cc1Swenshuai.xi //  [Function Name]:
8498*53ee8cc1Swenshuai.xi //                  mdrv_mhl_AdjustSettingIControl()
8499*53ee8cc1Swenshuai.xi //  [Description]
8500*53ee8cc1Swenshuai.xi //
8501*53ee8cc1Swenshuai.xi //  [Arguments]:
8502*53ee8cc1Swenshuai.xi //
8503*53ee8cc1Swenshuai.xi //  [Return]:
8504*53ee8cc1Swenshuai.xi //
8505*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_AdjustSettingIControl(void * pInstance,MS_U8 ucIControl)8506*53ee8cc1Swenshuai.xi void mdrv_mhl_AdjustSettingIControl(void* pInstance, MS_U8 ucIControl)
8507*53ee8cc1Swenshuai.xi {
8508*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8509*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8510*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8511*53ee8cc1Swenshuai.xi 
8512*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8513*53ee8cc1Swenshuai.xi 
8514*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8515*53ee8cc1Swenshuai.xi     {
8516*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8517*53ee8cc1Swenshuai.xi     }
8518*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8519*53ee8cc1Swenshuai.xi     {
8520*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8521*53ee8cc1Swenshuai.xi     }
8522*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8523*53ee8cc1Swenshuai.xi     {
8524*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stSignalStatusInfo.ucIControlValue = ucIControl;
8525*53ee8cc1Swenshuai.xi     }
8526*53ee8cc1Swenshuai.xi 
8527*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8528*53ee8cc1Swenshuai.xi }
8529*53ee8cc1Swenshuai.xi 
8530*53ee8cc1Swenshuai.xi //**************************************************************************
8531*53ee8cc1Swenshuai.xi //  [Function Name]:
8532*53ee8cc1Swenshuai.xi //                  mdrv_mhl_AdjustImpedanceSetting()
8533*53ee8cc1Swenshuai.xi //  [Description]
8534*53ee8cc1Swenshuai.xi //
8535*53ee8cc1Swenshuai.xi //  [Arguments]:
8536*53ee8cc1Swenshuai.xi //
8537*53ee8cc1Swenshuai.xi //  [Return]:
8538*53ee8cc1Swenshuai.xi //
8539*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_AdjustImpedanceSetting(void * pInstance,MS_U8 ucImpedance)8540*53ee8cc1Swenshuai.xi void mdrv_mhl_AdjustImpedanceSetting(void* pInstance, MS_U8 ucImpedance)
8541*53ee8cc1Swenshuai.xi {
8542*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8543*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8544*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8545*53ee8cc1Swenshuai.xi 
8546*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8547*53ee8cc1Swenshuai.xi 
8548*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8549*53ee8cc1Swenshuai.xi     {
8550*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8551*53ee8cc1Swenshuai.xi     }
8552*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8553*53ee8cc1Swenshuai.xi     {
8554*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8555*53ee8cc1Swenshuai.xi     }
8556*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8557*53ee8cc1Swenshuai.xi     {
8558*53ee8cc1Swenshuai.xi         pMHLResourcePrivate->stSignalStatusInfo.ucImpedanceOffset = ucImpedance;
8559*53ee8cc1Swenshuai.xi     }
8560*53ee8cc1Swenshuai.xi 
8561*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8562*53ee8cc1Swenshuai.xi }
8563*53ee8cc1Swenshuai.xi 
8564*53ee8cc1Swenshuai.xi //**************************************************************************
8565*53ee8cc1Swenshuai.xi //  [Function Name]:
8566*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetCableDetectFlag()
8567*53ee8cc1Swenshuai.xi //  [Description]
8568*53ee8cc1Swenshuai.xi //
8569*53ee8cc1Swenshuai.xi //  [Arguments]:
8570*53ee8cc1Swenshuai.xi //
8571*53ee8cc1Swenshuai.xi //  [Return]:
8572*53ee8cc1Swenshuai.xi //
8573*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetCableDetectFlag(void * pInstance)8574*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetCableDetectFlag(void* pInstance)
8575*53ee8cc1Swenshuai.xi {
8576*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8577*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8578*53ee8cc1Swenshuai.xi     MS_BOOL bStatusFlag = FALSE;
8579*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8580*53ee8cc1Swenshuai.xi 
8581*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8582*53ee8cc1Swenshuai.xi 
8583*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8584*53ee8cc1Swenshuai.xi     {
8585*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8586*53ee8cc1Swenshuai.xi     }
8587*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8588*53ee8cc1Swenshuai.xi     {
8589*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8590*53ee8cc1Swenshuai.xi     }
8591*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8592*53ee8cc1Swenshuai.xi     {
8593*53ee8cc1Swenshuai.xi         bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG);
8594*53ee8cc1Swenshuai.xi     }
8595*53ee8cc1Swenshuai.xi 
8596*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8597*53ee8cc1Swenshuai.xi 
8598*53ee8cc1Swenshuai.xi     return bStatusFlag;
8599*53ee8cc1Swenshuai.xi }
8600*53ee8cc1Swenshuai.xi 
8601*53ee8cc1Swenshuai.xi //**************************************************************************
8602*53ee8cc1Swenshuai.xi //  [Function Name]:
8603*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetCbusConnectFlag()
8604*53ee8cc1Swenshuai.xi //  [Description]
8605*53ee8cc1Swenshuai.xi //
8606*53ee8cc1Swenshuai.xi //  [Arguments]:
8607*53ee8cc1Swenshuai.xi //
8608*53ee8cc1Swenshuai.xi //  [Return]:
8609*53ee8cc1Swenshuai.xi //
8610*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetCbusConnectFlag(void * pInstance)8611*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetCbusConnectFlag(void* pInstance)
8612*53ee8cc1Swenshuai.xi {
8613*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8614*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8615*53ee8cc1Swenshuai.xi     MS_BOOL bStatusFlag = FALSE;
8616*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8617*53ee8cc1Swenshuai.xi 
8618*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8619*53ee8cc1Swenshuai.xi 
8620*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8621*53ee8cc1Swenshuai.xi     {
8622*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8623*53ee8cc1Swenshuai.xi     }
8624*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8625*53ee8cc1Swenshuai.xi     {
8626*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8627*53ee8cc1Swenshuai.xi     }
8628*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8629*53ee8cc1Swenshuai.xi     {
8630*53ee8cc1Swenshuai.xi         bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG);
8631*53ee8cc1Swenshuai.xi     }
8632*53ee8cc1Swenshuai.xi 
8633*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8634*53ee8cc1Swenshuai.xi 
8635*53ee8cc1Swenshuai.xi     return bStatusFlag;
8636*53ee8cc1Swenshuai.xi }
8637*53ee8cc1Swenshuai.xi 
8638*53ee8cc1Swenshuai.xi //**************************************************************************
8639*53ee8cc1Swenshuai.xi //  [Function Name]:
8640*53ee8cc1Swenshuai.xi //                  mdrv_mhl_CbusWakeupIntFlag()
8641*53ee8cc1Swenshuai.xi //  [Description]
8642*53ee8cc1Swenshuai.xi //
8643*53ee8cc1Swenshuai.xi //  [Arguments]:
8644*53ee8cc1Swenshuai.xi //
8645*53ee8cc1Swenshuai.xi //  [Return]:
8646*53ee8cc1Swenshuai.xi //
8647*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusWakeupIntFlag(void * pInstance)8648*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_CbusWakeupIntFlag(void* pInstance)
8649*53ee8cc1Swenshuai.xi {
8650*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8651*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8652*53ee8cc1Swenshuai.xi     MS_BOOL bStatusFlag = FALSE;
8653*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8654*53ee8cc1Swenshuai.xi 
8655*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8656*53ee8cc1Swenshuai.xi 
8657*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8658*53ee8cc1Swenshuai.xi     {
8659*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8660*53ee8cc1Swenshuai.xi     }
8661*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8662*53ee8cc1Swenshuai.xi     {
8663*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8664*53ee8cc1Swenshuai.xi     }
8665*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8666*53ee8cc1Swenshuai.xi     {
8667*53ee8cc1Swenshuai.xi         bStatusFlag = GET_MHL_RECEIVE_FLAG(pMHLResourcePrivate->ulCbusReceiveIndex, MHL_CBUS_RECEIVE_WAKE_FLAG);
8668*53ee8cc1Swenshuai.xi     }
8669*53ee8cc1Swenshuai.xi 
8670*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8671*53ee8cc1Swenshuai.xi 
8672*53ee8cc1Swenshuai.xi     return bStatusFlag;
8673*53ee8cc1Swenshuai.xi }
8674*53ee8cc1Swenshuai.xi 
8675*53ee8cc1Swenshuai.xi //**************************************************************************
8676*53ee8cc1Swenshuai.xi //  [Function Name]:
8677*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SrcRCPSupportFlag()
8678*53ee8cc1Swenshuai.xi //  [Description]
8679*53ee8cc1Swenshuai.xi //
8680*53ee8cc1Swenshuai.xi //  [Arguments]:
8681*53ee8cc1Swenshuai.xi //
8682*53ee8cc1Swenshuai.xi //  [Return]:
8683*53ee8cc1Swenshuai.xi //
8684*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SrcRCPSupportFlag(void * pInstance)8685*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SrcRCPSupportFlag(void* pInstance)
8686*53ee8cc1Swenshuai.xi {
8687*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8688*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8689*53ee8cc1Swenshuai.xi     MS_BOOL bStatusFlag = FALSE;
8690*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8691*53ee8cc1Swenshuai.xi 
8692*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8693*53ee8cc1Swenshuai.xi 
8694*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8695*53ee8cc1Swenshuai.xi     {
8696*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8697*53ee8cc1Swenshuai.xi     }
8698*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8699*53ee8cc1Swenshuai.xi     {
8700*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8701*53ee8cc1Swenshuai.xi     }
8702*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8703*53ee8cc1Swenshuai.xi     {
8704*53ee8cc1Swenshuai.xi         bStatusFlag = GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_RCP_FUNCTION_FLAG);
8705*53ee8cc1Swenshuai.xi     }
8706*53ee8cc1Swenshuai.xi 
8707*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8708*53ee8cc1Swenshuai.xi 
8709*53ee8cc1Swenshuai.xi     return bStatusFlag;
8710*53ee8cc1Swenshuai.xi }
8711*53ee8cc1Swenshuai.xi 
8712*53ee8cc1Swenshuai.xi //**************************************************************************
8713*53ee8cc1Swenshuai.xi //  [Function Name]:
8714*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SrcRAPSupportFlag()
8715*53ee8cc1Swenshuai.xi //  [Description]
8716*53ee8cc1Swenshuai.xi //
8717*53ee8cc1Swenshuai.xi //  [Arguments]:
8718*53ee8cc1Swenshuai.xi //
8719*53ee8cc1Swenshuai.xi //  [Return]:
8720*53ee8cc1Swenshuai.xi //
8721*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SrcRAPSupportFlag(void * pInstance)8722*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SrcRAPSupportFlag(void* pInstance)
8723*53ee8cc1Swenshuai.xi {
8724*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8725*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8726*53ee8cc1Swenshuai.xi     MS_BOOL bStatusFlag = FALSE;
8727*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8728*53ee8cc1Swenshuai.xi 
8729*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8730*53ee8cc1Swenshuai.xi 
8731*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8732*53ee8cc1Swenshuai.xi     {
8733*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8734*53ee8cc1Swenshuai.xi     }
8735*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8736*53ee8cc1Swenshuai.xi     {
8737*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8738*53ee8cc1Swenshuai.xi     }
8739*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8740*53ee8cc1Swenshuai.xi     {
8741*53ee8cc1Swenshuai.xi         bStatusFlag = GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_RAP_FUNCTION_FLAG);
8742*53ee8cc1Swenshuai.xi     }
8743*53ee8cc1Swenshuai.xi 
8744*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8745*53ee8cc1Swenshuai.xi 
8746*53ee8cc1Swenshuai.xi     return bStatusFlag;
8747*53ee8cc1Swenshuai.xi }
8748*53ee8cc1Swenshuai.xi 
8749*53ee8cc1Swenshuai.xi //**************************************************************************
8750*53ee8cc1Swenshuai.xi //  [Function Name]:
8751*53ee8cc1Swenshuai.xi //                  mdrv_mhl_CbusGetStatusFlag()
8752*53ee8cc1Swenshuai.xi //  [Description]
8753*53ee8cc1Swenshuai.xi //
8754*53ee8cc1Swenshuai.xi //  [Arguments]:
8755*53ee8cc1Swenshuai.xi //
8756*53ee8cc1Swenshuai.xi //  [Return]:
8757*53ee8cc1Swenshuai.xi //
8758*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusGetStatusFlag(void * pInstance,MS_U8 ucState)8759*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_CbusGetStatusFlag(void* pInstance, MS_U8 ucState)
8760*53ee8cc1Swenshuai.xi {
8761*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8762*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8763*53ee8cc1Swenshuai.xi     MS_BOOL bStatusFlag = FALSE;
8764*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8765*53ee8cc1Swenshuai.xi 
8766*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8767*53ee8cc1Swenshuai.xi 
8768*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8769*53ee8cc1Swenshuai.xi     {
8770*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8771*53ee8cc1Swenshuai.xi     }
8772*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8773*53ee8cc1Swenshuai.xi     {
8774*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8775*53ee8cc1Swenshuai.xi     }
8776*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8777*53ee8cc1Swenshuai.xi     {
8778*53ee8cc1Swenshuai.xi         switch(ucState)
8779*53ee8cc1Swenshuai.xi         {
8780*53ee8cc1Swenshuai.xi             case MHL_CBUS_STATUS_FLAG_CABLE_DETECT:
8781*53ee8cc1Swenshuai.xi                 bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG);
8782*53ee8cc1Swenshuai.xi                 break;
8783*53ee8cc1Swenshuai.xi 
8784*53ee8cc1Swenshuai.xi             case MHL_CBUS_STATUS_FLAG_CBUS_CONNECT:
8785*53ee8cc1Swenshuai.xi                 bStatusFlag = GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG);
8786*53ee8cc1Swenshuai.xi                 break;
8787*53ee8cc1Swenshuai.xi 
8788*53ee8cc1Swenshuai.xi             case MHL_CBUS_STATUS_FLAG_PATH_EN:
8789*53ee8cc1Swenshuai.xi                 break;
8790*53ee8cc1Swenshuai.xi 
8791*53ee8cc1Swenshuai.xi             case MHL_CBUS_STATUS_FLAG_RECEIVE_PATH_EN:
8792*53ee8cc1Swenshuai.xi                 break;
8793*53ee8cc1Swenshuai.xi 
8794*53ee8cc1Swenshuai.xi             case MHL_CBUS_STATUS_FLAG_RECEIVE_MUTED:
8795*53ee8cc1Swenshuai.xi                 break;
8796*53ee8cc1Swenshuai.xi 
8797*53ee8cc1Swenshuai.xi             case MHL_CBUS_STATUS_FLAG_COMMUNICATE_BUSY:
8798*53ee8cc1Swenshuai.xi                 bStatusFlag = GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_COMMUNICATE_BUSY_FLAG);
8799*53ee8cc1Swenshuai.xi                 break;
8800*53ee8cc1Swenshuai.xi 
8801*53ee8cc1Swenshuai.xi             default:
8802*53ee8cc1Swenshuai.xi 
8803*53ee8cc1Swenshuai.xi                 break;
8804*53ee8cc1Swenshuai.xi         };
8805*53ee8cc1Swenshuai.xi     }
8806*53ee8cc1Swenshuai.xi 
8807*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8808*53ee8cc1Swenshuai.xi 
8809*53ee8cc1Swenshuai.xi     return bStatusFlag;
8810*53ee8cc1Swenshuai.xi }
8811*53ee8cc1Swenshuai.xi 
8812*53ee8cc1Swenshuai.xi //**************************************************************************
8813*53ee8cc1Swenshuai.xi //  [Function Name]:
8814*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SendRAPCommand
8815*53ee8cc1Swenshuai.xi //  [Description]
8816*53ee8cc1Swenshuai.xi //                  MHL Cbus MSC Send RAP Command
8817*53ee8cc1Swenshuai.xi //  [Arguments]:
8818*53ee8cc1Swenshuai.xi //
8819*53ee8cc1Swenshuai.xi //  [Return]:
8820*53ee8cc1Swenshuai.xi //                  TRUE: success
8821*53ee8cc1Swenshuai.xi //                  FALSE: fail
8822*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendRAPCommand(void * pInstance,MS_U8 ucKeyCode)8823*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendRAPCommand(void* pInstance, MS_U8 ucKeyCode)
8824*53ee8cc1Swenshuai.xi {
8825*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8826*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8827*53ee8cc1Swenshuai.xi     MS_BOOL bSendFlag = FALSE;
8828*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8829*53ee8cc1Swenshuai.xi 
8830*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8831*53ee8cc1Swenshuai.xi 
8832*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8833*53ee8cc1Swenshuai.xi     {
8834*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8835*53ee8cc1Swenshuai.xi     }
8836*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8837*53ee8cc1Swenshuai.xi     {
8838*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8839*53ee8cc1Swenshuai.xi     }
8840*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8841*53ee8cc1Swenshuai.xi     {
8842*53ee8cc1Swenshuai.xi         bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RAP, ucKeyCode, TRUE);
8843*53ee8cc1Swenshuai.xi     }
8844*53ee8cc1Swenshuai.xi 
8845*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8846*53ee8cc1Swenshuai.xi 
8847*53ee8cc1Swenshuai.xi     return bSendFlag;
8848*53ee8cc1Swenshuai.xi }
8849*53ee8cc1Swenshuai.xi 
8850*53ee8cc1Swenshuai.xi //**************************************************************************
8851*53ee8cc1Swenshuai.xi //  [Function Name]:
8852*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SendRCPAutoReleaseCmd
8853*53ee8cc1Swenshuai.xi //  [Description]
8854*53ee8cc1Swenshuai.xi //                  MHL Cbus MSC Send RCP Command
8855*53ee8cc1Swenshuai.xi //  [Arguments]:
8856*53ee8cc1Swenshuai.xi //
8857*53ee8cc1Swenshuai.xi //  [Return]:
8858*53ee8cc1Swenshuai.xi //                  TRUE: success
8859*53ee8cc1Swenshuai.xi //                  FALSE: fail
8860*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendRCPAutoReleaseCmd(void * pInstance,MS_U8 ucKeyCode)8861*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendRCPAutoReleaseCmd(void* pInstance, MS_U8 ucKeyCode)
8862*53ee8cc1Swenshuai.xi {
8863*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8864*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8865*53ee8cc1Swenshuai.xi     MS_BOOL bSendFlag = FALSE;
8866*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8867*53ee8cc1Swenshuai.xi 
8868*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8869*53ee8cc1Swenshuai.xi 
8870*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8871*53ee8cc1Swenshuai.xi     {
8872*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8873*53ee8cc1Swenshuai.xi     }
8874*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8875*53ee8cc1Swenshuai.xi     {
8876*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8877*53ee8cc1Swenshuai.xi     }
8878*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8879*53ee8cc1Swenshuai.xi     {
8880*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucPreRCPKeyCode != ucKeyCode) // Key change
8881*53ee8cc1Swenshuai.xi         {
8882*53ee8cc1Swenshuai.xi             if(!GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_RCP_RELEASE_ENABLE_FLAG))
8883*53ee8cc1Swenshuai.xi             {
8884*53ee8cc1Swenshuai.xi                 bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RCP, ucKeyCode, TRUE);
8885*53ee8cc1Swenshuai.xi             }
8886*53ee8cc1Swenshuai.xi         }
8887*53ee8cc1Swenshuai.xi         else
8888*53ee8cc1Swenshuai.xi         {
8889*53ee8cc1Swenshuai.xi             bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_RCP, ucKeyCode, TRUE);
8890*53ee8cc1Swenshuai.xi         }
8891*53ee8cc1Swenshuai.xi 
8892*53ee8cc1Swenshuai.xi         if(bSendFlag)
8893*53ee8cc1Swenshuai.xi         {
8894*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucPreRCPKeyCode = ucKeyCode;
8895*53ee8cc1Swenshuai.xi 
8896*53ee8cc1Swenshuai.xi             _mdrv_mhl_SetCbusTimerEvent(pMHLResourcePrivate, MHL_TIMER_EVENT_RCP_AUTO_RELEASE, MHL_CBUS_RCP_RELEASE_TIME);
8897*53ee8cc1Swenshuai.xi 
8898*53ee8cc1Swenshuai.xi             SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_RCP_RELEASE_ENABLE_FLAG);
8899*53ee8cc1Swenshuai.xi         }
8900*53ee8cc1Swenshuai.xi     }
8901*53ee8cc1Swenshuai.xi 
8902*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8903*53ee8cc1Swenshuai.xi 
8904*53ee8cc1Swenshuai.xi     return bSendFlag;
8905*53ee8cc1Swenshuai.xi }
8906*53ee8cc1Swenshuai.xi 
8907*53ee8cc1Swenshuai.xi //**************************************************************************
8908*53ee8cc1Swenshuai.xi //  [Function Name]:
8909*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SendUCPCommand
8910*53ee8cc1Swenshuai.xi //  [Description]
8911*53ee8cc1Swenshuai.xi //                  MHL Cbus MSC Send UCP Command
8912*53ee8cc1Swenshuai.xi //  [Arguments]:
8913*53ee8cc1Swenshuai.xi //
8914*53ee8cc1Swenshuai.xi //  [Return]:
8915*53ee8cc1Swenshuai.xi //                  TRUE: success
8916*53ee8cc1Swenshuai.xi //                  FALSE: fail
8917*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendUCPCommand(void * pInstance,MS_U8 ucKeyCode)8918*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendUCPCommand(void* pInstance, MS_U8 ucKeyCode)
8919*53ee8cc1Swenshuai.xi {
8920*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8921*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8922*53ee8cc1Swenshuai.xi     MS_BOOL bSendFlag = FALSE;
8923*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8924*53ee8cc1Swenshuai.xi 
8925*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8926*53ee8cc1Swenshuai.xi 
8927*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8928*53ee8cc1Swenshuai.xi     {
8929*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8930*53ee8cc1Swenshuai.xi     }
8931*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8932*53ee8cc1Swenshuai.xi     {
8933*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8934*53ee8cc1Swenshuai.xi     }
8935*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8936*53ee8cc1Swenshuai.xi     {
8937*53ee8cc1Swenshuai.xi         bSendFlag = _mdrv_mhl_CbusSendSubMessage(pMHLResourcePrivate, MSC_MSG_UCP, ucKeyCode, TRUE);
8938*53ee8cc1Swenshuai.xi     }
8939*53ee8cc1Swenshuai.xi 
8940*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8941*53ee8cc1Swenshuai.xi 
8942*53ee8cc1Swenshuai.xi     return bSendFlag;
8943*53ee8cc1Swenshuai.xi }
8944*53ee8cc1Swenshuai.xi 
8945*53ee8cc1Swenshuai.xi //**************************************************************************
8946*53ee8cc1Swenshuai.xi //  [Function Name]:
8947*53ee8cc1Swenshuai.xi //                  mdrv_mhl_SendWriteBurst
8948*53ee8cc1Swenshuai.xi //  [Description]
8949*53ee8cc1Swenshuai.xi //
8950*53ee8cc1Swenshuai.xi //  [Arguments]:
8951*53ee8cc1Swenshuai.xi //
8952*53ee8cc1Swenshuai.xi //  [Return]:
8953*53ee8cc1Swenshuai.xi //                  TRUE: success
8954*53ee8cc1Swenshuai.xi //                  FALSE: fail
8955*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_SendWriteBurst(void * pInstance,MS_U8 ucAddr,MS_U8 ucLength,MS_U8 * ucData)8956*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_SendWriteBurst(void* pInstance, MS_U8 ucAddr, MS_U8 ucLength, MS_U8 *ucData)
8957*53ee8cc1Swenshuai.xi {
8958*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8959*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8960*53ee8cc1Swenshuai.xi     MS_BOOL bSendFlag = FALSE;
8961*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
8962*53ee8cc1Swenshuai.xi 
8963*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
8964*53ee8cc1Swenshuai.xi 
8965*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
8966*53ee8cc1Swenshuai.xi     {
8967*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
8968*53ee8cc1Swenshuai.xi     }
8969*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
8970*53ee8cc1Swenshuai.xi     {
8971*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
8972*53ee8cc1Swenshuai.xi     }
8973*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
8974*53ee8cc1Swenshuai.xi     {
8975*53ee8cc1Swenshuai.xi         bSendFlag = _mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, ucAddr, ucLength, ucData);
8976*53ee8cc1Swenshuai.xi     }
8977*53ee8cc1Swenshuai.xi 
8978*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
8979*53ee8cc1Swenshuai.xi 
8980*53ee8cc1Swenshuai.xi     return bSendFlag;
8981*53ee8cc1Swenshuai.xi }
8982*53ee8cc1Swenshuai.xi 
8983*53ee8cc1Swenshuai.xi //**************************************************************************
8984*53ee8cc1Swenshuai.xi //  [Function Name]:
8985*53ee8cc1Swenshuai.xi //                  mdrv_mhl_CbusSendUserWriteBurst
8986*53ee8cc1Swenshuai.xi //  [Description]
8987*53ee8cc1Swenshuai.xi //
8988*53ee8cc1Swenshuai.xi //  [Arguments]:
8989*53ee8cc1Swenshuai.xi //
8990*53ee8cc1Swenshuai.xi //  [Return]:
8991*53ee8cc1Swenshuai.xi //                  TRUE: success
8992*53ee8cc1Swenshuai.xi //                  FALSE: fail
8993*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_CbusSendUserWriteBurst(void * pInstance,MS_U8 ucLength,MS_U8 * ucData)8994*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_CbusSendUserWriteBurst(void* pInstance, MS_U8 ucLength, MS_U8 *ucData)
8995*53ee8cc1Swenshuai.xi {
8996*53ee8cc1Swenshuai.xi     void* pModule = NULL;
8997*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
8998*53ee8cc1Swenshuai.xi     MS_BOOL bSendFlag = FALSE;
8999*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9000*53ee8cc1Swenshuai.xi 
9001*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
9002*53ee8cc1Swenshuai.xi 
9003*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9004*53ee8cc1Swenshuai.xi     {
9005*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9006*53ee8cc1Swenshuai.xi     }
9007*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9008*53ee8cc1Swenshuai.xi     {
9009*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9010*53ee8cc1Swenshuai.xi     }
9011*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9012*53ee8cc1Swenshuai.xi     {
9013*53ee8cc1Swenshuai.xi         if(GET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_USER_WRITE_BURST_FLAG))
9014*53ee8cc1Swenshuai.xi         {
9015*53ee8cc1Swenshuai.xi             if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_REVEIVE_GRANT)
9016*53ee8cc1Swenshuai.xi             {
9017*53ee8cc1Swenshuai.xi                 if(_mdrv_mhl_CbusSendWriteBurst(pMHLResourcePrivate, 0x40, ucLength, ucData))
9018*53ee8cc1Swenshuai.xi                 {
9019*53ee8cc1Swenshuai.xi                     CLR_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_USER_WRITE_BURST_FLAG);
9020*53ee8cc1Swenshuai.xi 
9021*53ee8cc1Swenshuai.xi                     pMHLResourcePrivate->ucWriteBurstState = MHL_CBUS_WRITE_BURST_SEND_DATA;
9022*53ee8cc1Swenshuai.xi 
9023*53ee8cc1Swenshuai.xi                     bSendFlag = TRUE;
9024*53ee8cc1Swenshuai.xi                 }
9025*53ee8cc1Swenshuai.xi             }
9026*53ee8cc1Swenshuai.xi         }
9027*53ee8cc1Swenshuai.xi         else if(pMHLResourcePrivate->ucWriteBurstState == MHL_CBUS_WRITE_BURST_NONE)
9028*53ee8cc1Swenshuai.xi         {
9029*53ee8cc1Swenshuai.xi             SET_MHL_SEND_FLAG(pMHLResourcePrivate->ulCbusSendIndex, MHL_CBUS_SEND_USER_WRITE_BURST_FLAG);
9030*53ee8cc1Swenshuai.xi         }
9031*53ee8cc1Swenshuai.xi     }
9032*53ee8cc1Swenshuai.xi 
9033*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
9034*53ee8cc1Swenshuai.xi 
9035*53ee8cc1Swenshuai.xi     return bSendFlag;
9036*53ee8cc1Swenshuai.xi }
9037*53ee8cc1Swenshuai.xi 
9038*53ee8cc1Swenshuai.xi //**************************************************************************
9039*53ee8cc1Swenshuai.xi //  [Function Name]:
9040*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetDeviceCapability
9041*53ee8cc1Swenshuai.xi //  [Description]
9042*53ee8cc1Swenshuai.xi //
9043*53ee8cc1Swenshuai.xi //  [Arguments]:
9044*53ee8cc1Swenshuai.xi //
9045*53ee8cc1Swenshuai.xi //  [Return]:
9046*53ee8cc1Swenshuai.xi //
9047*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetDeviceCapability(void * pInstance,MS_U16 usDevcapMask,MS_U8 * ucDevcap)9048*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetDeviceCapability(void* pInstance, MS_U16 usDevcapMask, MS_U8 *ucDevcap)
9049*53ee8cc1Swenshuai.xi {
9050*53ee8cc1Swenshuai.xi     void* pModule = NULL;
9051*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
9052*53ee8cc1Swenshuai.xi     MS_BOOL bDoneFlag = FALSE;
9053*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
9054*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9055*53ee8cc1Swenshuai.xi 
9056*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
9057*53ee8cc1Swenshuai.xi 
9058*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9059*53ee8cc1Swenshuai.xi     {
9060*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9061*53ee8cc1Swenshuai.xi     }
9062*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9063*53ee8cc1Swenshuai.xi     {
9064*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9065*53ee8cc1Swenshuai.xi     }
9066*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9067*53ee8cc1Swenshuai.xi     {
9068*53ee8cc1Swenshuai.xi         if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_DEVCAP_FLAG))
9069*53ee8cc1Swenshuai.xi         {
9070*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usReadDevcapMask = usDevcapMask;
9071*53ee8cc1Swenshuai.xi         }
9072*53ee8cc1Swenshuai.xi 
9073*53ee8cc1Swenshuai.xi         if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_READ_DEVCAP_DONE_FLAG))
9074*53ee8cc1Swenshuai.xi         {
9075*53ee8cc1Swenshuai.xi             if(ucDevcap != NULL)
9076*53ee8cc1Swenshuai.xi             {
9077*53ee8cc1Swenshuai.xi                 for(uctemp = 0; uctemp < MHL_DEVICE_CAPABILITY_SIZE; uctemp++)
9078*53ee8cc1Swenshuai.xi                 {
9079*53ee8cc1Swenshuai.xi                     if(usDevcapMask &BIT(uctemp))
9080*53ee8cc1Swenshuai.xi                     {
9081*53ee8cc1Swenshuai.xi                         ucDevcap[uctemp] = pMHLResourcePrivate->ucSourceDevcapTable[uctemp];
9082*53ee8cc1Swenshuai.xi                     }
9083*53ee8cc1Swenshuai.xi                     else
9084*53ee8cc1Swenshuai.xi                     {
9085*53ee8cc1Swenshuai.xi                         ucDevcap[uctemp] = 0;
9086*53ee8cc1Swenshuai.xi                     }
9087*53ee8cc1Swenshuai.xi                 }
9088*53ee8cc1Swenshuai.xi             }
9089*53ee8cc1Swenshuai.xi 
9090*53ee8cc1Swenshuai.xi             bDoneFlag = TRUE;
9091*53ee8cc1Swenshuai.xi         }
9092*53ee8cc1Swenshuai.xi     }
9093*53ee8cc1Swenshuai.xi 
9094*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
9095*53ee8cc1Swenshuai.xi 
9096*53ee8cc1Swenshuai.xi     return bDoneFlag;
9097*53ee8cc1Swenshuai.xi }
9098*53ee8cc1Swenshuai.xi 
9099*53ee8cc1Swenshuai.xi //**************************************************************************
9100*53ee8cc1Swenshuai.xi //  [Function Name]:
9101*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetExtendDeviceCapability
9102*53ee8cc1Swenshuai.xi //  [Description]
9103*53ee8cc1Swenshuai.xi //
9104*53ee8cc1Swenshuai.xi //  [Arguments]:
9105*53ee8cc1Swenshuai.xi //
9106*53ee8cc1Swenshuai.xi //  [Return]:
9107*53ee8cc1Swenshuai.xi //
9108*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetExtendDeviceCapability(void * pInstance,MS_U16 usExtendDevcapMask,MS_U8 * ucExtendDevcap)9109*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetExtendDeviceCapability(void* pInstance, MS_U16 usExtendDevcapMask, MS_U8 *ucExtendDevcap)
9110*53ee8cc1Swenshuai.xi {
9111*53ee8cc1Swenshuai.xi     void* pModule = NULL;
9112*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
9113*53ee8cc1Swenshuai.xi     MS_BOOL bDoneFlag = FALSE;
9114*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
9115*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9116*53ee8cc1Swenshuai.xi 
9117*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
9118*53ee8cc1Swenshuai.xi 
9119*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9120*53ee8cc1Swenshuai.xi     {
9121*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9122*53ee8cc1Swenshuai.xi     }
9123*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9124*53ee8cc1Swenshuai.xi     {
9125*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9126*53ee8cc1Swenshuai.xi     }
9127*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9128*53ee8cc1Swenshuai.xi     {
9129*53ee8cc1Swenshuai.xi         if(!GET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_READ_XDEVCAP_FLAG))
9130*53ee8cc1Swenshuai.xi         {
9131*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->usReadExtendDevcapMask = usExtendDevcapMask;
9132*53ee8cc1Swenshuai.xi         }
9133*53ee8cc1Swenshuai.xi 
9134*53ee8cc1Swenshuai.xi         if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_READ_XDEVCAP_DONE_FLAG))
9135*53ee8cc1Swenshuai.xi         {
9136*53ee8cc1Swenshuai.xi             if(ucExtendDevcap != NULL)
9137*53ee8cc1Swenshuai.xi             {
9138*53ee8cc1Swenshuai.xi                 for(uctemp = 0; uctemp < MHL_XDEVICE_CAPABILITY_SIZE; uctemp++)
9139*53ee8cc1Swenshuai.xi                 {
9140*53ee8cc1Swenshuai.xi                     if(usExtendDevcapMask &BIT(uctemp))
9141*53ee8cc1Swenshuai.xi                     {
9142*53ee8cc1Swenshuai.xi                         ucExtendDevcap[uctemp] = pMHLResourcePrivate->ucSourceDevcapTable[MHL_DEVICE_CAPABILITY_SIZE +uctemp];
9143*53ee8cc1Swenshuai.xi                     }
9144*53ee8cc1Swenshuai.xi                     else
9145*53ee8cc1Swenshuai.xi                     {
9146*53ee8cc1Swenshuai.xi                         ucExtendDevcap[uctemp] = 0;
9147*53ee8cc1Swenshuai.xi                     }
9148*53ee8cc1Swenshuai.xi                 }
9149*53ee8cc1Swenshuai.xi             }
9150*53ee8cc1Swenshuai.xi 
9151*53ee8cc1Swenshuai.xi             bDoneFlag = TRUE;
9152*53ee8cc1Swenshuai.xi         }
9153*53ee8cc1Swenshuai.xi     }
9154*53ee8cc1Swenshuai.xi 
9155*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
9156*53ee8cc1Swenshuai.xi 
9157*53ee8cc1Swenshuai.xi     return bDoneFlag;
9158*53ee8cc1Swenshuai.xi }
9159*53ee8cc1Swenshuai.xi 
9160*53ee8cc1Swenshuai.xi //**************************************************************************
9161*53ee8cc1Swenshuai.xi //  [Function Name]:
9162*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetDeviceVenderID
9163*53ee8cc1Swenshuai.xi //  [Description]
9164*53ee8cc1Swenshuai.xi //
9165*53ee8cc1Swenshuai.xi //  [Arguments]:
9166*53ee8cc1Swenshuai.xi //
9167*53ee8cc1Swenshuai.xi //  [Return]:
9168*53ee8cc1Swenshuai.xi //
9169*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetDeviceVenderID(void * pInstance,MS_U8 * ucVenderID)9170*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetDeviceVenderID(void* pInstance, MS_U8 *ucVenderID)
9171*53ee8cc1Swenshuai.xi {
9172*53ee8cc1Swenshuai.xi     void* pModule = NULL;
9173*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
9174*53ee8cc1Swenshuai.xi     MS_BOOL bDoneFlag = FALSE;
9175*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9176*53ee8cc1Swenshuai.xi 
9177*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
9178*53ee8cc1Swenshuai.xi 
9179*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9180*53ee8cc1Swenshuai.xi     {
9181*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9182*53ee8cc1Swenshuai.xi     }
9183*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9184*53ee8cc1Swenshuai.xi     {
9185*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9186*53ee8cc1Swenshuai.xi     }
9187*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9188*53ee8cc1Swenshuai.xi     {
9189*53ee8cc1Swenshuai.xi         if(GET_MHL_DONE_FLAG(pMHLResourcePrivate->ucProcDoneIndex, MHL_GET_VENDER_ID_DONE_FLAG))
9190*53ee8cc1Swenshuai.xi         {
9191*53ee8cc1Swenshuai.xi             *ucVenderID = pMHLResourcePrivate->ucSourceVenderID;
9192*53ee8cc1Swenshuai.xi 
9193*53ee8cc1Swenshuai.xi             bDoneFlag = TRUE;
9194*53ee8cc1Swenshuai.xi         }
9195*53ee8cc1Swenshuai.xi         else
9196*53ee8cc1Swenshuai.xi         {
9197*53ee8cc1Swenshuai.xi             SET_MHL_ENABLE_FLAG(pMHLResourcePrivate->ulEnableIndex, MHL_ENABLE_GET_VENDER_ID_FLAG);
9198*53ee8cc1Swenshuai.xi         }
9199*53ee8cc1Swenshuai.xi     }
9200*53ee8cc1Swenshuai.xi 
9201*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
9202*53ee8cc1Swenshuai.xi 
9203*53ee8cc1Swenshuai.xi     return bDoneFlag;
9204*53ee8cc1Swenshuai.xi }
9205*53ee8cc1Swenshuai.xi 
9206*53ee8cc1Swenshuai.xi //**************************************************************************
9207*53ee8cc1Swenshuai.xi //  [Function Name]:
9208*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetWriteBurstData
9209*53ee8cc1Swenshuai.xi //  [Description]
9210*53ee8cc1Swenshuai.xi //
9211*53ee8cc1Swenshuai.xi //  [Arguments]:
9212*53ee8cc1Swenshuai.xi //
9213*53ee8cc1Swenshuai.xi //  [Return]:
9214*53ee8cc1Swenshuai.xi //
9215*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetWriteBurstData(void * pInstance,MS_U8 * ucData)9216*53ee8cc1Swenshuai.xi MS_BOOL mdrv_mhl_GetWriteBurstData(void* pInstance, MS_U8 *ucData)
9217*53ee8cc1Swenshuai.xi {
9218*53ee8cc1Swenshuai.xi     void* pModule = NULL;
9219*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
9220*53ee8cc1Swenshuai.xi     MS_BOOL bDoneFlag = FALSE;
9221*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
9222*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9223*53ee8cc1Swenshuai.xi 
9224*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
9225*53ee8cc1Swenshuai.xi 
9226*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9227*53ee8cc1Swenshuai.xi     {
9228*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9229*53ee8cc1Swenshuai.xi     }
9230*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9231*53ee8cc1Swenshuai.xi     {
9232*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9233*53ee8cc1Swenshuai.xi     }
9234*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9235*53ee8cc1Swenshuai.xi     {
9236*53ee8cc1Swenshuai.xi         if(pMHLResourcePrivate->ucWriteBurstAddress > 0)
9237*53ee8cc1Swenshuai.xi         {
9238*53ee8cc1Swenshuai.xi             pMHLResourcePrivate->ucWriteBurstAddress = 0;
9239*53ee8cc1Swenshuai.xi 
9240*53ee8cc1Swenshuai.xi             for(uctemp = 0; uctemp < pMHLResourcePrivate->ucWriteBurstLength; uctemp++)
9241*53ee8cc1Swenshuai.xi             {
9242*53ee8cc1Swenshuai.xi                 ucData[uctemp] = pMHLResourcePrivate->ucWriteBurstInformation[uctemp];
9243*53ee8cc1Swenshuai.xi             }
9244*53ee8cc1Swenshuai.xi 
9245*53ee8cc1Swenshuai.xi             bDoneFlag = TRUE;
9246*53ee8cc1Swenshuai.xi         }
9247*53ee8cc1Swenshuai.xi     }
9248*53ee8cc1Swenshuai.xi 
9249*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
9250*53ee8cc1Swenshuai.xi 
9251*53ee8cc1Swenshuai.xi     return bDoneFlag;
9252*53ee8cc1Swenshuai.xi }
9253*53ee8cc1Swenshuai.xi 
9254*53ee8cc1Swenshuai.xi //**************************************************************************
9255*53ee8cc1Swenshuai.xi //  [Function Name]:
9256*53ee8cc1Swenshuai.xi //                  mdrv_mhl_RegisterCallBackFunctions()
9257*53ee8cc1Swenshuai.xi //  [Description]
9258*53ee8cc1Swenshuai.xi //                  RCP &RAP call back
9259*53ee8cc1Swenshuai.xi //  [Arguments]:
9260*53ee8cc1Swenshuai.xi //
9261*53ee8cc1Swenshuai.xi //  [Return]:
9262*53ee8cc1Swenshuai.xi //
9263*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterCallBackFunctions(void * pInstance,MS_BOOL bRCPfunctionFlag,MS_BOOL bRAPfunctionFlag)9264*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterCallBackFunctions(void* pInstance, MS_BOOL bRCPfunctionFlag, MS_BOOL bRAPfunctionFlag)
9265*53ee8cc1Swenshuai.xi {
9266*53ee8cc1Swenshuai.xi     void* pModule = NULL;
9267*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
9268*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9269*53ee8cc1Swenshuai.xi 
9270*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
9271*53ee8cc1Swenshuai.xi 
9272*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9273*53ee8cc1Swenshuai.xi     {
9274*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9275*53ee8cc1Swenshuai.xi     }
9276*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9277*53ee8cc1Swenshuai.xi     {
9278*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9279*53ee8cc1Swenshuai.xi     }
9280*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9281*53ee8cc1Swenshuai.xi     {
9282*53ee8cc1Swenshuai.xi         if(bRCPfunctionFlag)
9283*53ee8cc1Swenshuai.xi         {
9284*53ee8cc1Swenshuai.xi             SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RCP_FUNCTION_FLAG);
9285*53ee8cc1Swenshuai.xi         }
9286*53ee8cc1Swenshuai.xi 
9287*53ee8cc1Swenshuai.xi         if(bRAPfunctionFlag)
9288*53ee8cc1Swenshuai.xi         {
9289*53ee8cc1Swenshuai.xi             SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RAP_FUNCTION_FLAG);
9290*53ee8cc1Swenshuai.xi         }
9291*53ee8cc1Swenshuai.xi     }
9292*53ee8cc1Swenshuai.xi 
9293*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
9294*53ee8cc1Swenshuai.xi }
9295*53ee8cc1Swenshuai.xi 
9296*53ee8cc1Swenshuai.xi //**************************************************************************
9297*53ee8cc1Swenshuai.xi //  [Function Name]:
9298*53ee8cc1Swenshuai.xi //                  mdrv_mhl_RegisterRcpCallBackFunction()
9299*53ee8cc1Swenshuai.xi //  [Description]
9300*53ee8cc1Swenshuai.xi //                  RCP call back
9301*53ee8cc1Swenshuai.xi //  [Arguments]:
9302*53ee8cc1Swenshuai.xi //
9303*53ee8cc1Swenshuai.xi //  [Return]:
9304*53ee8cc1Swenshuai.xi //
9305*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterRcpCallBackFunction(void * pInstance,MS_BOOL bRCPfunctionFlag)9306*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterRcpCallBackFunction(void* pInstance, MS_BOOL bRCPfunctionFlag)
9307*53ee8cc1Swenshuai.xi {
9308*53ee8cc1Swenshuai.xi     void* pModule = NULL;
9309*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
9310*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9311*53ee8cc1Swenshuai.xi 
9312*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
9313*53ee8cc1Swenshuai.xi 
9314*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9315*53ee8cc1Swenshuai.xi     {
9316*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9317*53ee8cc1Swenshuai.xi     }
9318*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9319*53ee8cc1Swenshuai.xi     {
9320*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9321*53ee8cc1Swenshuai.xi     }
9322*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9323*53ee8cc1Swenshuai.xi     {
9324*53ee8cc1Swenshuai.xi         if(bRCPfunctionFlag)
9325*53ee8cc1Swenshuai.xi         {
9326*53ee8cc1Swenshuai.xi             SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RCP_FUNCTION_FLAG);
9327*53ee8cc1Swenshuai.xi         }
9328*53ee8cc1Swenshuai.xi     }
9329*53ee8cc1Swenshuai.xi 
9330*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
9331*53ee8cc1Swenshuai.xi }
9332*53ee8cc1Swenshuai.xi 
9333*53ee8cc1Swenshuai.xi //**************************************************************************
9334*53ee8cc1Swenshuai.xi //  [Function Name]:
9335*53ee8cc1Swenshuai.xi //                  mdrv_mhl_RegisterRapCallBackFunction()
9336*53ee8cc1Swenshuai.xi //  [Description]
9337*53ee8cc1Swenshuai.xi //                  RAP call back
9338*53ee8cc1Swenshuai.xi //  [Arguments]:
9339*53ee8cc1Swenshuai.xi //
9340*53ee8cc1Swenshuai.xi //  [Return]:
9341*53ee8cc1Swenshuai.xi //
9342*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterRapCallBackFunction(void * pInstance,MS_BOOL bRAPfunctionFlag)9343*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterRapCallBackFunction(void* pInstance, MS_BOOL bRAPfunctionFlag)
9344*53ee8cc1Swenshuai.xi {
9345*53ee8cc1Swenshuai.xi     void* pModule = NULL;
9346*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
9347*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9348*53ee8cc1Swenshuai.xi 
9349*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
9350*53ee8cc1Swenshuai.xi 
9351*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9352*53ee8cc1Swenshuai.xi     {
9353*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9354*53ee8cc1Swenshuai.xi     }
9355*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9356*53ee8cc1Swenshuai.xi     {
9357*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9358*53ee8cc1Swenshuai.xi     }
9359*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9360*53ee8cc1Swenshuai.xi     {
9361*53ee8cc1Swenshuai.xi         if(bRAPfunctionFlag)
9362*53ee8cc1Swenshuai.xi         {
9363*53ee8cc1Swenshuai.xi             SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RAP_FUNCTION_FLAG);
9364*53ee8cc1Swenshuai.xi         }
9365*53ee8cc1Swenshuai.xi     }
9366*53ee8cc1Swenshuai.xi 
9367*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
9368*53ee8cc1Swenshuai.xi }
9369*53ee8cc1Swenshuai.xi 
9370*53ee8cc1Swenshuai.xi //**************************************************************************
9371*53ee8cc1Swenshuai.xi //  [Function Name]:
9372*53ee8cc1Swenshuai.xi //                  mdrv_mhl_RegisterUcpCallBackFunction()
9373*53ee8cc1Swenshuai.xi //  [Description]
9374*53ee8cc1Swenshuai.xi //                  UCP call back
9375*53ee8cc1Swenshuai.xi //  [Arguments]:
9376*53ee8cc1Swenshuai.xi //
9377*53ee8cc1Swenshuai.xi //  [Return]:
9378*53ee8cc1Swenshuai.xi //
9379*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterUcpCallBackFunction(void * pInstance,MS_BOOL bUCPfunctionFlag)9380*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterUcpCallBackFunction(void* pInstance, MS_BOOL bUCPfunctionFlag)
9381*53ee8cc1Swenshuai.xi {
9382*53ee8cc1Swenshuai.xi     void* pModule = NULL;
9383*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
9384*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9385*53ee8cc1Swenshuai.xi 
9386*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
9387*53ee8cc1Swenshuai.xi 
9388*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9389*53ee8cc1Swenshuai.xi     {
9390*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9391*53ee8cc1Swenshuai.xi     }
9392*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9393*53ee8cc1Swenshuai.xi     {
9394*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9395*53ee8cc1Swenshuai.xi     }
9396*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9397*53ee8cc1Swenshuai.xi     {
9398*53ee8cc1Swenshuai.xi         if(bUCPfunctionFlag)
9399*53ee8cc1Swenshuai.xi         {
9400*53ee8cc1Swenshuai.xi             SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_UCP_FUNCTION_FLAG);
9401*53ee8cc1Swenshuai.xi         }
9402*53ee8cc1Swenshuai.xi     }
9403*53ee8cc1Swenshuai.xi 
9404*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
9405*53ee8cc1Swenshuai.xi }
9406*53ee8cc1Swenshuai.xi 
9407*53ee8cc1Swenshuai.xi //**************************************************************************
9408*53ee8cc1Swenshuai.xi //  [Function Name]:
9409*53ee8cc1Swenshuai.xi //                  mdrv_mhl_RegisterAttCallBackFunction()
9410*53ee8cc1Swenshuai.xi //  [Description]
9411*53ee8cc1Swenshuai.xi //                  ATT call back
9412*53ee8cc1Swenshuai.xi //  [Arguments]:
9413*53ee8cc1Swenshuai.xi //
9414*53ee8cc1Swenshuai.xi //  [Return]:
9415*53ee8cc1Swenshuai.xi //
9416*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterAttCallBackFunction(void * pInstance,MS_BOOL bATTfunctionFlag)9417*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterAttCallBackFunction(void* pInstance, MS_BOOL bATTfunctionFlag)
9418*53ee8cc1Swenshuai.xi {
9419*53ee8cc1Swenshuai.xi     void* pModule = NULL;
9420*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
9421*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9422*53ee8cc1Swenshuai.xi 
9423*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
9424*53ee8cc1Swenshuai.xi 
9425*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9426*53ee8cc1Swenshuai.xi     {
9427*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9428*53ee8cc1Swenshuai.xi     }
9429*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9430*53ee8cc1Swenshuai.xi     {
9431*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9432*53ee8cc1Swenshuai.xi     }
9433*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9434*53ee8cc1Swenshuai.xi     {
9435*53ee8cc1Swenshuai.xi         if(bATTfunctionFlag)
9436*53ee8cc1Swenshuai.xi         {
9437*53ee8cc1Swenshuai.xi             SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_ATT_FUNCTION_FLAG);
9438*53ee8cc1Swenshuai.xi         }
9439*53ee8cc1Swenshuai.xi     }
9440*53ee8cc1Swenshuai.xi 
9441*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
9442*53ee8cc1Swenshuai.xi }
9443*53ee8cc1Swenshuai.xi 
9444*53ee8cc1Swenshuai.xi //**************************************************************************
9445*53ee8cc1Swenshuai.xi //  [Function Name]:
9446*53ee8cc1Swenshuai.xi //                  mdrv_mhl_RegisterRbpCallBackFunction()
9447*53ee8cc1Swenshuai.xi //  [Description]
9448*53ee8cc1Swenshuai.xi //                  RBP call back
9449*53ee8cc1Swenshuai.xi //  [Arguments]:
9450*53ee8cc1Swenshuai.xi //
9451*53ee8cc1Swenshuai.xi //  [Return]:
9452*53ee8cc1Swenshuai.xi //
9453*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_RegisterRbpCallBackFunction(void * pInstance,MS_BOOL bRBPfunctionFlag)9454*53ee8cc1Swenshuai.xi void mdrv_mhl_RegisterRbpCallBackFunction(void* pInstance, MS_BOOL bRBPfunctionFlag)
9455*53ee8cc1Swenshuai.xi {
9456*53ee8cc1Swenshuai.xi     void* pModule = NULL;
9457*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
9458*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9459*53ee8cc1Swenshuai.xi 
9460*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
9461*53ee8cc1Swenshuai.xi 
9462*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9463*53ee8cc1Swenshuai.xi     {
9464*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9465*53ee8cc1Swenshuai.xi     }
9466*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9467*53ee8cc1Swenshuai.xi     {
9468*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9469*53ee8cc1Swenshuai.xi     }
9470*53ee8cc1Swenshuai.xi     else if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_GET_BASE_SUCCESS_FLAG))
9471*53ee8cc1Swenshuai.xi     {
9472*53ee8cc1Swenshuai.xi         if(bRBPfunctionFlag)
9473*53ee8cc1Swenshuai.xi         {
9474*53ee8cc1Swenshuai.xi             SET_MHL_CALLBACK_FLAG(pMHLResourcePrivate->ucCallBackFunctionIndex, MHL_CALLBACK_RBP_FUNCTION_FLAG);
9475*53ee8cc1Swenshuai.xi         }
9476*53ee8cc1Swenshuai.xi     }
9477*53ee8cc1Swenshuai.xi 
9478*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
9479*53ee8cc1Swenshuai.xi }
9480*53ee8cc1Swenshuai.xi 
9481*53ee8cc1Swenshuai.xi //**************************************************************************
9482*53ee8cc1Swenshuai.xi //  [Function Name]:
9483*53ee8cc1Swenshuai.xi //                  mdrv_mhl_GetConfiguration()
9484*53ee8cc1Swenshuai.xi //  [Description]
9485*53ee8cc1Swenshuai.xi //                  MHL get init config
9486*53ee8cc1Swenshuai.xi //  [Arguments]:
9487*53ee8cc1Swenshuai.xi //
9488*53ee8cc1Swenshuai.xi //  [Return]:
9489*53ee8cc1Swenshuai.xi //
9490*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_GetConfiguration(void * pInstance)9491*53ee8cc1Swenshuai.xi stMHL_INITIAL_CONFIG_INFO mdrv_mhl_GetConfiguration(void* pInstance)
9492*53ee8cc1Swenshuai.xi {
9493*53ee8cc1Swenshuai.xi     void* pModule = NULL;
9494*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
9495*53ee8cc1Swenshuai.xi     MS_U8 uctemp = 0;
9496*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9497*53ee8cc1Swenshuai.xi     stMHL_INITIAL_CONFIG_INFO stInitialConfigInfo = {0};
9498*53ee8cc1Swenshuai.xi 
9499*53ee8cc1Swenshuai.xi     stInitialConfigInfo.ulReturnValue = UTOPIA_STATUS_ERR_NOT_AVAIL;
9500*53ee8cc1Swenshuai.xi 
9501*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9502*53ee8cc1Swenshuai.xi     {
9503*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9504*53ee8cc1Swenshuai.xi     }
9505*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9506*53ee8cc1Swenshuai.xi     {
9507*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9508*53ee8cc1Swenshuai.xi     }
9509*53ee8cc1Swenshuai.xi     else
9510*53ee8cc1Swenshuai.xi     {
9511*53ee8cc1Swenshuai.xi         if(_mdrv_mhl_InitRiuBase(pMHLResourcePrivate)) // Get base success
9512*53ee8cc1Swenshuai.xi         {
9513*53ee8cc1Swenshuai.xi             MDRV_MHL_MSG_INFO("** MHL get XC and PM base success \n");
9514*53ee8cc1Swenshuai.xi         }
9515*53ee8cc1Swenshuai.xi 
9516*53ee8cc1Swenshuai.xi         if(GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_PREVENT_REINITIAL_FLAG))
9517*53ee8cc1Swenshuai.xi         {
9518*53ee8cc1Swenshuai.xi             stInitialConfigInfo.ulReturnValue = UTOPIA_STATUS_SUCCESS;
9519*53ee8cc1Swenshuai.xi             stInitialConfigInfo.ucMHLSupportPath = pMHLResourcePrivate->ucMHLSupportPath;
9520*53ee8cc1Swenshuai.xi 
9521*53ee8cc1Swenshuai.xi             for(uctemp = 0; uctemp < (MHL_DEVICE_CAPABILITY_SIZE +MHL_XDEVICE_CAPABILITY_SIZE); uctemp++)
9522*53ee8cc1Swenshuai.xi             {
9523*53ee8cc1Swenshuai.xi                 stInitialConfigInfo.ucDeviceCapabilityTable[uctemp] = pMHLResourcePrivate->ucDeviceCapabilityTable[uctemp];
9524*53ee8cc1Swenshuai.xi             }
9525*53ee8cc1Swenshuai.xi         }
9526*53ee8cc1Swenshuai.xi     }
9527*53ee8cc1Swenshuai.xi 
9528*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
9529*53ee8cc1Swenshuai.xi 
9530*53ee8cc1Swenshuai.xi     return stInitialConfigInfo;
9531*53ee8cc1Swenshuai.xi }
9532*53ee8cc1Swenshuai.xi 
9533*53ee8cc1Swenshuai.xi #ifdef CONFIG_UTOPIA_PROC_DBG_SUPPORT
9534*53ee8cc1Swenshuai.xi //**************************************************************************
9535*53ee8cc1Swenshuai.xi //  [Function Name]:
9536*53ee8cc1Swenshuai.xi //                  mdrv_mhl_MDCMDEchoCommand()
9537*53ee8cc1Swenshuai.xi //  [Description]
9538*53ee8cc1Swenshuai.xi //                  MHL MDCMD echo command function
9539*53ee8cc1Swenshuai.xi //  [Arguments]:
9540*53ee8cc1Swenshuai.xi //
9541*53ee8cc1Swenshuai.xi //  [Return]:
9542*53ee8cc1Swenshuai.xi //
9543*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_MDCMDEchoCommand(void * pInstance,MS_U64 * u64ReqHdl,char * pcCmdLine)9544*53ee8cc1Swenshuai.xi void mdrv_mhl_MDCMDEchoCommand(void* pInstance, MS_U64* u64ReqHdl, char* pcCmdLine)
9545*53ee8cc1Swenshuai.xi {
9546*53ee8cc1Swenshuai.xi     char pch[] = "=,";
9547*53ee8cc1Swenshuai.xi     char* psep;
9548*53ee8cc1Swenshuai.xi 
9549*53ee8cc1Swenshuai.xi     MdbPrint(u64ReqHdl, "LINE:%d, MDBCMD_CMDLINE\n", __LINE__);
9550*53ee8cc1Swenshuai.xi     MdbPrint(u64ReqHdl, "pcCmdLine: %s\n", pcCmdLine);
9551*53ee8cc1Swenshuai.xi 
9552*53ee8cc1Swenshuai.xi     psep = strsep(&pcCmdLine, pch);
9553*53ee8cc1Swenshuai.xi 
9554*53ee8cc1Swenshuai.xi     if(strncmp("MHLOn", psep, 5) == 0)
9555*53ee8cc1Swenshuai.xi     {
9556*53ee8cc1Swenshuai.xi 
9557*53ee8cc1Swenshuai.xi     }
9558*53ee8cc1Swenshuai.xi }
9559*53ee8cc1Swenshuai.xi 
9560*53ee8cc1Swenshuai.xi //**************************************************************************
9561*53ee8cc1Swenshuai.xi //  [Function Name]:
9562*53ee8cc1Swenshuai.xi //                  mdrv_mhl_MDCMDGetInfo()
9563*53ee8cc1Swenshuai.xi //  [Description]
9564*53ee8cc1Swenshuai.xi //                  MHL MDCMD get info function
9565*53ee8cc1Swenshuai.xi //  [Arguments]:
9566*53ee8cc1Swenshuai.xi //
9567*53ee8cc1Swenshuai.xi //  [Return]:
9568*53ee8cc1Swenshuai.xi //
9569*53ee8cc1Swenshuai.xi //**************************************************************************
mdrv_mhl_MDCMDGetInfo(void * pInstance,MS_U64 * u64ReqHdl)9570*53ee8cc1Swenshuai.xi void mdrv_mhl_MDCMDGetInfo(void* pInstance, MS_U64* u64ReqHdl)
9571*53ee8cc1Swenshuai.xi {
9572*53ee8cc1Swenshuai.xi     void* pModule = NULL;
9573*53ee8cc1Swenshuai.xi     void* pMHLResource = NULL;
9574*53ee8cc1Swenshuai.xi     MHL_RESOURCE_PRIVATE *pMHLResourcePrivate = NULL;
9575*53ee8cc1Swenshuai.xi 
9576*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModule, MHL_POOL, &pMHLResource) != UTOPIA_STATUS_SUCCESS)
9577*53ee8cc1Swenshuai.xi     {
9578*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] UtopiaResourceObtainToInstant failed\n", __FUNCTION__, __LINE__);
9579*53ee8cc1Swenshuai.xi     }
9580*53ee8cc1Swenshuai.xi     else if(UtopiaResourceGetPrivate(pMHLResource, (void*)&pMHLResourcePrivate) != UTOPIA_STATUS_SUCCESS)
9581*53ee8cc1Swenshuai.xi     {
9582*53ee8cc1Swenshuai.xi         MDRV_MHL_MSG_ERROR("[%s,%5d] Get MHL resource failed\n", __FUNCTION__, __LINE__);
9583*53ee8cc1Swenshuai.xi     }
9584*53ee8cc1Swenshuai.xi     else
9585*53ee8cc1Swenshuai.xi     {
9586*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "LINE:%d, MDBCMD_GETINFO\n", __LINE__);
9587*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "----------------  Mstar MHL Info -----------------\n");
9588*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "Debug Cbus:\n");
9589*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "Cable detect flag:    %d\n", GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CABLE_PLUG_FLAG));
9590*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "Cbus connect flag:    %d\n", GET_MHL_SYSTEM_FLAG(pMHLResourcePrivate->ulSystemIndex, MHL_SYSTEM_CBUS_CONNECT_FLAG));
9591*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "System index info:  0x%x\n", pMHLResourcePrivate->ulSystemIndex);
9592*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "Timer index info:   0x%x\n", pMHLResourcePrivate->ulTimerIndex);
9593*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "Enable index info:  0x%x\n", pMHLResourcePrivate->ulEnableIndex);
9594*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "Cbus receive info:  0x%x\n", pMHLResourcePrivate->ulCbusReceiveIndex);
9595*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "Cbus send info:     0x%x\n", pMHLResourcePrivate->ulCbusSendIndex);
9596*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "Debug eCbus:\n");
9597*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "eCbus state:          %d\n", pMHLResourcePrivate->ucECbusState);
9598*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "Debug PHY:\n");
9599*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "TMDS clock mode:      %d\n", pMHLResourcePrivate->ucTMDSClockMode);
9600*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "Main link rate:       %d\n", pMHLResourcePrivate->stSignalStatusInfo.ucMainLinkRate);
9601*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "Clock stable flag:    %d\n", pMHLResourcePrivate->stSignalStatusInfo.bClockStableFlag);
9602*53ee8cc1Swenshuai.xi         MdbPrint(u64ReqHdl, "Signal stable flag:   %d\n", pMHLResourcePrivate->stSignalStatusInfo.bSignalStableFlag);
9603*53ee8cc1Swenshuai.xi     }
9604*53ee8cc1Swenshuai.xi 
9605*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pMHLResource);
9606*53ee8cc1Swenshuai.xi }
9607*53ee8cc1Swenshuai.xi 
9608*53ee8cc1Swenshuai.xi #endif
9609*53ee8cc1Swenshuai.xi 
9610*53ee8cc1Swenshuai.xi #endif
9611*53ee8cc1Swenshuai.xi 
9612*53ee8cc1Swenshuai.xi #endif // _MDRV_MHL_C_
9613