xref: /utopia/UTPA2-700.0.x/modules/vdec_lite/drv/mvd_lite/mvd_cc_EX.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 // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi /// @file  drvmvd_cc.h
94*53ee8cc1Swenshuai.xi /// @brief Driver interface for accessing the MPEG Closed Caption decoder.
95*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc.
96*53ee8cc1Swenshuai.xi ///
97*53ee8cc1Swenshuai.xi ///- Providing MPEG Closed Caption decoder command functions for controlling firmware.
98*53ee8cc1Swenshuai.xi ///- MPEG Closed Caption decoder provides Digital 608 & 708 CC Data via accessing Ring Buffer
99*53ee8cc1Swenshuai.xi ///
100*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
101*53ee8cc1Swenshuai.xi 
102*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
103*53ee8cc1Swenshuai.xi //  Include Files
104*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
105*53ee8cc1Swenshuai.xi // Common Definition
106*53ee8cc1Swenshuai.xi #ifdef REDLION_LINUX_KERNEL_ENVI
107*53ee8cc1Swenshuai.xi #include "drvMVD_Common.h"
108*53ee8cc1Swenshuai.xi #else
109*53ee8cc1Swenshuai.xi #include "MsCommon.h"
110*53ee8cc1Swenshuai.xi #endif
111*53ee8cc1Swenshuai.xi #include "drvMVD_EX.h"
112*53ee8cc1Swenshuai.xi 
113*53ee8cc1Swenshuai.xi // Internal Definition
114*53ee8cc1Swenshuai.xi #include "halMVD_EX.h"
115*53ee8cc1Swenshuai.xi #include "drvmvd_cc.h"
116*53ee8cc1Swenshuai.xi #include "mvd4_interface.h" //firmware header
117*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
118*53ee8cc1Swenshuai.xi #include <linux/string.h>
119*53ee8cc1Swenshuai.xi #else
120*53ee8cc1Swenshuai.xi #include <string.h>
121*53ee8cc1Swenshuai.xi #endif
122*53ee8cc1Swenshuai.xi #include "halCHIP.h"
123*53ee8cc1Swenshuai.xi #if (!defined(MSOS_TYPE_NUTTX) && !defined(MSOS_TYPE_OPTEE)) || defined(SUPPORT_X_MODEL_FEATURE)
124*53ee8cc1Swenshuai.xi 
125*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
126*53ee8cc1Swenshuai.xi //  Local Defines
127*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
128*53ee8cc1Swenshuai.xi #define MVDCC_EXHANDLE(y)     y
129*53ee8cc1Swenshuai.xi 
130*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
131*53ee8cc1Swenshuai.xi /* MVD Command register - Command Definitions */
132*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------------
133*53ee8cc1Swenshuai.xi #define CMD_SET_CCBUF_STARTHWADDR       CMD_USER_BUF_START
134*53ee8cc1Swenshuai.xi #define CMD_SET_CCBUF_TOTALSIZE         CMD_USER_BUF_SIZE
135*53ee8cc1Swenshuai.xi #define CMD_SET_CCTYPE_PARSING          CMD_USER_BUF_SIZE
136*53ee8cc1Swenshuai.xi #define CMD_GET_CCBUF_HWADDR            CMD_RD_USER_WP
137*53ee8cc1Swenshuai.xi #define CMD_GET_CCBUF_WRAPCOUNT         CMD_RD_USER_WP
138*53ee8cc1Swenshuai.xi 
139*53ee8cc1Swenshuai.xi #define CMD_SET_CCBUF_SWADDR            CMD_WD_USER_RP
140*53ee8cc1Swenshuai.xi #define CMD_GET_CCBUF_PACKETCOUNT       CMD_RD_CC_PKTCNT
141*53ee8cc1Swenshuai.xi #define CMD_GET_OVERFLOW_STATUS         CMD_RD_CC_OV
142*53ee8cc1Swenshuai.xi 
143*53ee8cc1Swenshuai.xi void MDrv_CC_CM_SetMVDRB_SWAddr(MS_U32 u32Id, MS_U32 u32ReadAddress, MS_U8 u8CC608);
144*53ee8cc1Swenshuai.xi MS_U32 MDrv_CC_CM_GetMVDRB_HWAddr(MS_U32 u32Id, MS_U8 u8CC608);
145*53ee8cc1Swenshuai.xi extern MS_U8 MVD_GetHalIdx(MS_U32 u32Id);
146*53ee8cc1Swenshuai.xi 
147*53ee8cc1Swenshuai.xi //******************************************************************************/
148*53ee8cc1Swenshuai.xi //* Local definition
149*53ee8cc1Swenshuai.xi //******************************************************************************/
150*53ee8cc1Swenshuai.xi #define MVD_READY_TEST_COUNT        10000
151*53ee8cc1Swenshuai.xi #define MVD_CCRB_PACKET_LENGTH      8
152*53ee8cc1Swenshuai.xi 
153*53ee8cc1Swenshuai.xi //******************************************************************************/
154*53ee8cc1Swenshuai.xi //* Declaring Variable
155*53ee8cc1Swenshuai.xi //******************************************************************************/
156*53ee8cc1Swenshuai.xi MS_U32 CCMVD_RINGBUFFER_START_ADR[2];
157*53ee8cc1Swenshuai.xi MS_U32 CCMVD_RINGBUFFER_LEN[2];
158*53ee8cc1Swenshuai.xi 
159*53ee8cc1Swenshuai.xi static MS_U32 volatile u32SW_Address[2], u32HW_Address[2];
160*53ee8cc1Swenshuai.xi static MS_U8 u8ParsingStatus = 0xff;
161*53ee8cc1Swenshuai.xi 
162*53ee8cc1Swenshuai.xi static MS_BOOL bCC708Enable; //fixme
163*53ee8cc1Swenshuai.xi 
164*53ee8cc1Swenshuai.xi // SH@20110111, Fixed the issues that move CC buffer from MIU0 to MIU1
165*53ee8cc1Swenshuai.xi // MIU1: buffer to MVD IP, don't need to add the MIU1's offset(512 Mb), but to CC flow's buffer, need to add up
166*53ee8cc1Swenshuai.xi 
167*53ee8cc1Swenshuai.xi #if defined(CHIP_MONACO)
168*53ee8cc1Swenshuai.xi static MS_U8 u8BufSelMiu = 0xff;
169*53ee8cc1Swenshuai.xi #define MVD_ON_MIU     HAL_MVD_GetFWSelMiu()
170*53ee8cc1Swenshuai.xi #else
171*53ee8cc1Swenshuai.xi static MS_BOOL bBufMiu0 = 0xff;
172*53ee8cc1Swenshuai.xi #define MIU1_BASEADDR   HAL_MVD_GetMiu1BaseAdd()
173*53ee8cc1Swenshuai.xi #define MVD_ON_MIU1     HAL_MVD_GetFWSelMiu1()
174*53ee8cc1Swenshuai.xi #endif
175*53ee8cc1Swenshuai.xi 
176*53ee8cc1Swenshuai.xi #define _IS_MSTAR_CC(x) ((0==(x)) || (1==(x)))
177*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
178*53ee8cc1Swenshuai.xi /// Closed Caption Driver Initialization
179*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
MDrv_CC_Init(MS_U32 u32Id)180*53ee8cc1Swenshuai.xi void MDrv_CC_Init(MS_U32 u32Id)
181*53ee8cc1Swenshuai.xi {
182*53ee8cc1Swenshuai.xi     if (u8ParsingStatus == 0xff)
183*53ee8cc1Swenshuai.xi         u8ParsingStatus = 0x00;
184*53ee8cc1Swenshuai.xi }
185*53ee8cc1Swenshuai.xi 
186*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
187*53ee8cc1Swenshuai.xi /// Set MVD Ring Buffer's Address
188*53ee8cc1Swenshuai.xi /// @param u32StartAddress \b IN Ring Buffer's Address
189*53ee8cc1Swenshuai.xi /// @param u8CC608 \b IN
190*53ee8cc1Swenshuai.xi ///   - # TRUE for CC608 parser
191*53ee8cc1Swenshuai.xi ///   - # FALSE for CC708 parser
192*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
193*53ee8cc1Swenshuai.xi #if defined(CHIP_MONACO)
MDrv_CC_CM_SetMVDRB_HWAddr(MS_U32 u32Id,MS_U32 u32StartAddress,MS_U8 u8CC608)194*53ee8cc1Swenshuai.xi void MDrv_CC_CM_SetMVDRB_HWAddr(MS_U32 u32Id, MS_U32 u32StartAddress, MS_U8 u8CC608)
195*53ee8cc1Swenshuai.xi {
196*53ee8cc1Swenshuai.xi     MS_U8 u8HalIdx = MVD_GetHalIdx(u32Id);
197*53ee8cc1Swenshuai.xi     MS_U32 u32MVDCC_Temp1 = 0;
198*53ee8cc1Swenshuai.xi     MVD_CmdArg mvdcmd;
199*53ee8cc1Swenshuai.xi     MS_U32 u32StartOffset;
200*53ee8cc1Swenshuai.xi     MS_U8  u8MiuSel;
201*53ee8cc1Swenshuai.xi 
202*53ee8cc1Swenshuai.xi     MS_U32 u32Miu1_base = 0;
203*53ee8cc1Swenshuai.xi     MS_U32 u32Miu2_base = 0;
204*53ee8cc1Swenshuai.xi     MS_U32 u32Miu3_base = 0;
205*53ee8cc1Swenshuai.xi 
206*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_1,0,u32Miu1_base);
207*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_2,0,u32Miu2_base);
208*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_3,0,u32Miu3_base);
209*53ee8cc1Swenshuai.xi 
210*53ee8cc1Swenshuai.xi     memset((void *)&mvdcmd, 0, sizeof(MVD_CmdArg));
211*53ee8cc1Swenshuai.xi 
212*53ee8cc1Swenshuai.xi     // SH@20110111, get the first HW buffer to determine the MIU0 or MIU1 for CC buffer. Only once
213*53ee8cc1Swenshuai.xi     if(u8BufSelMiu == 0xff)
214*53ee8cc1Swenshuai.xi     {
215*53ee8cc1Swenshuai.xi         _phy_to_miu_offset(u8MiuSel, u32StartOffset, u32StartAddress);
216*53ee8cc1Swenshuai.xi 
217*53ee8cc1Swenshuai.xi         u8BufSelMiu = u8MiuSel;
218*53ee8cc1Swenshuai.xi     }
219*53ee8cc1Swenshuai.xi 
220*53ee8cc1Swenshuai.xi     if(MVD_ON_MIU == E_CHIP_MIU_0)
221*53ee8cc1Swenshuai.xi     {
222*53ee8cc1Swenshuai.xi         if(u8BufSelMiu == E_CHIP_MIU_0)
223*53ee8cc1Swenshuai.xi         {
224*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress;
225*53ee8cc1Swenshuai.xi         }
226*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_1)
227*53ee8cc1Swenshuai.xi         {
228*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress;
229*53ee8cc1Swenshuai.xi         }
230*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_2)
231*53ee8cc1Swenshuai.xi         {
232*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress;
233*53ee8cc1Swenshuai.xi         }
234*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_3)
235*53ee8cc1Swenshuai.xi         {
236*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress;
237*53ee8cc1Swenshuai.xi         }
238*53ee8cc1Swenshuai.xi     }
239*53ee8cc1Swenshuai.xi     else if(MVD_ON_MIU == E_CHIP_MIU_1)    // SH@20110111, mvd code binary in MIU1
240*53ee8cc1Swenshuai.xi     {
241*53ee8cc1Swenshuai.xi         if(u8BufSelMiu == E_CHIP_MIU_0)
242*53ee8cc1Swenshuai.xi         {
243*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress | u32Miu1_base;
244*53ee8cc1Swenshuai.xi         }
245*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_1)
246*53ee8cc1Swenshuai.xi         {
247*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress;
248*53ee8cc1Swenshuai.xi         }
249*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_2)
250*53ee8cc1Swenshuai.xi         {
251*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress | u32Miu1_base;
252*53ee8cc1Swenshuai.xi         }
253*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_3)
254*53ee8cc1Swenshuai.xi         {
255*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress | u32Miu1_base;
256*53ee8cc1Swenshuai.xi         }
257*53ee8cc1Swenshuai.xi     }
258*53ee8cc1Swenshuai.xi     else if(MVD_ON_MIU == E_CHIP_MIU_2)    // SH@20110111, mvd code binary in MIU1
259*53ee8cc1Swenshuai.xi     {
260*53ee8cc1Swenshuai.xi         if(u8BufSelMiu == E_CHIP_MIU_0)
261*53ee8cc1Swenshuai.xi         {
262*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress | u32Miu2_base;
263*53ee8cc1Swenshuai.xi         }
264*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_1)
265*53ee8cc1Swenshuai.xi         {
266*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress | u32Miu2_base;
267*53ee8cc1Swenshuai.xi         }
268*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_2)
269*53ee8cc1Swenshuai.xi         {
270*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress ;
271*53ee8cc1Swenshuai.xi         }
272*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_3)
273*53ee8cc1Swenshuai.xi         {
274*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress | u32Miu2_base;
275*53ee8cc1Swenshuai.xi         }
276*53ee8cc1Swenshuai.xi     }
277*53ee8cc1Swenshuai.xi     else if(MVD_ON_MIU == E_CHIP_MIU_3)    // SH@20110111, mvd code binary in MIU1
278*53ee8cc1Swenshuai.xi     {
279*53ee8cc1Swenshuai.xi         if(u8BufSelMiu == E_CHIP_MIU_0)
280*53ee8cc1Swenshuai.xi         {
281*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress | u32Miu3_base;
282*53ee8cc1Swenshuai.xi         }
283*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_1)
284*53ee8cc1Swenshuai.xi         {
285*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress | u32Miu3_base;
286*53ee8cc1Swenshuai.xi         }
287*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_2)
288*53ee8cc1Swenshuai.xi         {
289*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress | u32Miu3_base;
290*53ee8cc1Swenshuai.xi         }
291*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_3)
292*53ee8cc1Swenshuai.xi         {
293*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress ;
294*53ee8cc1Swenshuai.xi         }
295*53ee8cc1Swenshuai.xi     }
296*53ee8cc1Swenshuai.xi 
297*53ee8cc1Swenshuai.xi     if(u8BufSelMiu == E_CHIP_MIU_0)
298*53ee8cc1Swenshuai.xi     {
299*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = (u32StartAddress >> 3);
300*53ee8cc1Swenshuai.xi     }
301*53ee8cc1Swenshuai.xi     else if(u8BufSelMiu == E_CHIP_MIU_1)
302*53ee8cc1Swenshuai.xi     {
303*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = u32StartAddress - u32Miu1_base ;
304*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = (u32MVDCC_Temp1 >> 3);
305*53ee8cc1Swenshuai.xi     }
306*53ee8cc1Swenshuai.xi     else if(u8BufSelMiu == E_CHIP_MIU_2)
307*53ee8cc1Swenshuai.xi     {
308*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = u32StartAddress - u32Miu2_base ;
309*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = (u32MVDCC_Temp1 >> 3);
310*53ee8cc1Swenshuai.xi     }
311*53ee8cc1Swenshuai.xi     else if(u8BufSelMiu == E_CHIP_MIU_3)
312*53ee8cc1Swenshuai.xi     {
313*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = u32StartAddress - u32Miu3_base ;
314*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = (u32MVDCC_Temp1 >> 3);
315*53ee8cc1Swenshuai.xi     }
316*53ee8cc1Swenshuai.xi 
317*53ee8cc1Swenshuai.xi 
318*53ee8cc1Swenshuai.xi     mvdcmd.Arg4 = H_DWORD(u32MVDCC_Temp1);
319*53ee8cc1Swenshuai.xi     mvdcmd.Arg3 = (MS_U8)u8CC608;
320*53ee8cc1Swenshuai.xi     mvdcmd.Arg2 = L_DWORD(u32MVDCC_Temp1);
321*53ee8cc1Swenshuai.xi     mvdcmd.Arg1 = H_WORD(u32MVDCC_Temp1);
322*53ee8cc1Swenshuai.xi     mvdcmd.Arg0 = L_WORD(u32MVDCC_Temp1);
323*53ee8cc1Swenshuai.xi     SET_DECNUM(mvdcmd, u8HalIdx);
324*53ee8cc1Swenshuai.xi     if (HAL_MVD_MVDCommand(CMD_SET_CCBUF_STARTHWADDR, &mvdcmd)== TRUE)
325*53ee8cc1Swenshuai.xi     {
326*53ee8cc1Swenshuai.xi         u32SW_Address[u8CC608] = u32StartAddress;
327*53ee8cc1Swenshuai.xi         u32HW_Address[u8CC608] = u32StartAddress;
328*53ee8cc1Swenshuai.xi         MDrv_CC_CM_SetMVDRB_SWAddr(u32Id, u32StartAddress, u8CC608);
329*53ee8cc1Swenshuai.xi     }
330*53ee8cc1Swenshuai.xi     else
331*53ee8cc1Swenshuai.xi     {
332*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("%s: cmd 0x%x fail!!\n", __FUNCTION__, CMD_SET_CCBUF_STARTHWADDR));
333*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("\nF:S-HA"));
334*53ee8cc1Swenshuai.xi     }
335*53ee8cc1Swenshuai.xi }
336*53ee8cc1Swenshuai.xi #else
MDrv_CC_CM_SetMVDRB_HWAddr(MS_U32 u32Id,MS_U32 u32StartAddress,MS_U8 u8CC608)337*53ee8cc1Swenshuai.xi void MDrv_CC_CM_SetMVDRB_HWAddr(MS_U32 u32Id, MS_U32 u32StartAddress, MS_U8 u8CC608)
338*53ee8cc1Swenshuai.xi {
339*53ee8cc1Swenshuai.xi     MS_U8 u8HalIdx = MVD_GetHalIdx(u32Id);
340*53ee8cc1Swenshuai.xi     MS_U32 u32MVDCC_Temp1 = 0;
341*53ee8cc1Swenshuai.xi     MVD_CmdArg mvdcmd;
342*53ee8cc1Swenshuai.xi     memset((void *)&mvdcmd, 0, sizeof(MVD_CmdArg));
343*53ee8cc1Swenshuai.xi 
344*53ee8cc1Swenshuai.xi     // SH@20110111, get the first HW buffer to determine the MIU0 or MIU1 for CC buffer. Only once
345*53ee8cc1Swenshuai.xi     if(bBufMiu0 == 0xff)
346*53ee8cc1Swenshuai.xi     {
347*53ee8cc1Swenshuai.xi         if((u32StartAddress&MIU1_BASEADDR) == MIU1_BASEADDR)
348*53ee8cc1Swenshuai.xi         {
349*53ee8cc1Swenshuai.xi             bBufMiu0 = false;
350*53ee8cc1Swenshuai.xi         }
351*53ee8cc1Swenshuai.xi         else
352*53ee8cc1Swenshuai.xi         {
353*53ee8cc1Swenshuai.xi             bBufMiu0 = true;
354*53ee8cc1Swenshuai.xi         }
355*53ee8cc1Swenshuai.xi     }
356*53ee8cc1Swenshuai.xi 
357*53ee8cc1Swenshuai.xi     if(MVD_ON_MIU1)    // SH@20110111, mvd code binary in MIU1
358*53ee8cc1Swenshuai.xi     {
359*53ee8cc1Swenshuai.xi         if(bBufMiu0) // SH@20110111, if CC buffer in MIU0, enable here
360*53ee8cc1Swenshuai.xi         {
361*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress | MIU1_BASEADDR;
362*53ee8cc1Swenshuai.xi         }
363*53ee8cc1Swenshuai.xi         else // CC buffer in MIU1
364*53ee8cc1Swenshuai.xi         {
365*53ee8cc1Swenshuai.xi             CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress;
366*53ee8cc1Swenshuai.xi         }
367*53ee8cc1Swenshuai.xi     }
368*53ee8cc1Swenshuai.xi     else
369*53ee8cc1Swenshuai.xi     {
370*53ee8cc1Swenshuai.xi         CCMVD_RINGBUFFER_START_ADR[u8CC608] = u32StartAddress;
371*53ee8cc1Swenshuai.xi     }
372*53ee8cc1Swenshuai.xi 
373*53ee8cc1Swenshuai.xi     if(bBufMiu0)
374*53ee8cc1Swenshuai.xi     {
375*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = (u32StartAddress >> 3);
376*53ee8cc1Swenshuai.xi     }
377*53ee8cc1Swenshuai.xi     else // CC buffer in MIU1
378*53ee8cc1Swenshuai.xi     {
379*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = u32StartAddress - MIU1_BASEADDR ;
380*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = (u32MVDCC_Temp1 >> 3);
381*53ee8cc1Swenshuai.xi     }
382*53ee8cc1Swenshuai.xi 
383*53ee8cc1Swenshuai.xi     mvdcmd.Arg4 = H_DWORD(u32MVDCC_Temp1);
384*53ee8cc1Swenshuai.xi     mvdcmd.Arg3 = (MS_U8)u8CC608;
385*53ee8cc1Swenshuai.xi     mvdcmd.Arg2 = L_DWORD(u32MVDCC_Temp1);
386*53ee8cc1Swenshuai.xi     mvdcmd.Arg1 = H_WORD(u32MVDCC_Temp1);
387*53ee8cc1Swenshuai.xi     mvdcmd.Arg0 = L_WORD(u32MVDCC_Temp1);
388*53ee8cc1Swenshuai.xi     SET_DECNUM(mvdcmd, u8HalIdx);
389*53ee8cc1Swenshuai.xi     if (HAL_MVD_MVDCommand(CMD_SET_CCBUF_STARTHWADDR, &mvdcmd)== TRUE)
390*53ee8cc1Swenshuai.xi     {
391*53ee8cc1Swenshuai.xi         u32SW_Address[u8CC608] = u32StartAddress;
392*53ee8cc1Swenshuai.xi         u32HW_Address[u8CC608] = u32StartAddress;
393*53ee8cc1Swenshuai.xi         MDrv_CC_CM_SetMVDRB_SWAddr(u32Id, u32StartAddress, u8CC608);
394*53ee8cc1Swenshuai.xi     }
395*53ee8cc1Swenshuai.xi     else
396*53ee8cc1Swenshuai.xi     {
397*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("%s: cmd 0x%x fail!!\n", __FUNCTION__, CMD_SET_CCBUF_STARTHWADDR));
398*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("\nF:S-HA"));
399*53ee8cc1Swenshuai.xi     }
400*53ee8cc1Swenshuai.xi }
401*53ee8cc1Swenshuai.xi #endif
402*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
403*53ee8cc1Swenshuai.xi /// Set MVD Ring Buffer's SW Address as HW Address
404*53ee8cc1Swenshuai.xi /// @param u8CC608 \b IN
405*53ee8cc1Swenshuai.xi ///   - # TRUE for CC608 parser
406*53ee8cc1Swenshuai.xi ///   - # FALSE for CC708 parser
407*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
MDrv_CC_CM_SyncMVDRB_SWAddr2HWAddr(MS_U32 u32Id,MS_U8 u8CC608)408*53ee8cc1Swenshuai.xi void MDrv_CC_CM_SyncMVDRB_SWAddr2HWAddr(MS_U32 u32Id, MS_U8 u8CC608)
409*53ee8cc1Swenshuai.xi {
410*53ee8cc1Swenshuai.xi     MDrv_CC_CM_SetMVDRB_SWAddr(u32Id, u32HW_Address[u8CC608], u8CC608);
411*53ee8cc1Swenshuai.xi }
412*53ee8cc1Swenshuai.xi 
413*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
414*53ee8cc1Swenshuai.xi /// Set CC Type to MVD CC FW Driver
415*53ee8cc1Swenshuai.xi /// @param u8Operation \b IN Digital Closed Caption Type
416*53ee8cc1Swenshuai.xi /// @param u16BufferSize \b IN buffer size of the given hardware parser
417*53ee8cc1Swenshuai.xi /// @param u8CC608 \b IN
418*53ee8cc1Swenshuai.xi ///   - # TRUE for CC608 parser
419*53ee8cc1Swenshuai.xi ///   - # FALSE for CC708 parser
420*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
MDrv_CC_CM_SetParsingType(MS_U32 u32Id,MS_U8 u8Operation,MS_U16 u16BufferSize,MS_U8 u8CC608)421*53ee8cc1Swenshuai.xi void MDrv_CC_CM_SetParsingType(MS_U32 u32Id, MS_U8 u8Operation, MS_U16 u16BufferSize, MS_U8 u8CC608)
422*53ee8cc1Swenshuai.xi {
423*53ee8cc1Swenshuai.xi     MS_U8 u8HalIdx = MVD_GetHalIdx(u32Id);
424*53ee8cc1Swenshuai.xi     MS_U16 u16MVDCC_Temp1 = 0;
425*53ee8cc1Swenshuai.xi     MVD_CmdArg mvdcmd;
426*53ee8cc1Swenshuai.xi     memset((void *)&mvdcmd, 0, sizeof(MVD_CmdArg));
427*53ee8cc1Swenshuai.xi     CCMVD_RINGBUFFER_LEN[u8CC608] = u16BufferSize;
428*53ee8cc1Swenshuai.xi     u16MVDCC_Temp1 = (u16BufferSize >> 3);
429*53ee8cc1Swenshuai.xi 
430*53ee8cc1Swenshuai.xi     u8ParsingStatus |= u8Operation;
431*53ee8cc1Swenshuai.xi     u8ParsingStatus &= 0x07;
432*53ee8cc1Swenshuai.xi     mvdcmd.Arg1 = H_WORD(u16MVDCC_Temp1);
433*53ee8cc1Swenshuai.xi     mvdcmd.Arg0 = L_WORD(u16MVDCC_Temp1);
434*53ee8cc1Swenshuai.xi     mvdcmd.Arg2 = (MS_U8)(u8ParsingStatus);
435*53ee8cc1Swenshuai.xi     mvdcmd.Arg3 = (MS_U8)u8CC608;
436*53ee8cc1Swenshuai.xi     SET_DECNUM(mvdcmd, u8HalIdx);
437*53ee8cc1Swenshuai.xi     if (HAL_MVD_MVDCommand(CMD_SET_CCTYPE_PARSING, &mvdcmd) != TRUE)
438*53ee8cc1Swenshuai.xi     {
439*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("%s: cmd 0x%x fail!!\n", __FUNCTION__, CMD_SET_CCTYPE_PARSING));
440*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("\nF:SPT"));
441*53ee8cc1Swenshuai.xi     }
442*53ee8cc1Swenshuai.xi     else
443*53ee8cc1Swenshuai.xi     {
444*53ee8cc1Swenshuai.xi         if (u8CC608==0x00)
445*53ee8cc1Swenshuai.xi         {
446*53ee8cc1Swenshuai.xi             bCC708Enable = TRUE;
447*53ee8cc1Swenshuai.xi         }
448*53ee8cc1Swenshuai.xi     }
449*53ee8cc1Swenshuai.xi }
450*53ee8cc1Swenshuai.xi 
451*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
452*53ee8cc1Swenshuai.xi /// Stop MVD CC FW Driver
453*53ee8cc1Swenshuai.xi /// @param u8CC608 \b IN
454*53ee8cc1Swenshuai.xi ///   - # TRUE for CC608 parser
455*53ee8cc1Swenshuai.xi ///   - # FALSE for CC708 parser
456*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
MDrv_CC_CM_DisableParsing(MS_U32 u32Id,MS_U8 u8CC608)457*53ee8cc1Swenshuai.xi void MDrv_CC_CM_DisableParsing(MS_U32 u32Id, MS_U8 u8CC608)
458*53ee8cc1Swenshuai.xi {
459*53ee8cc1Swenshuai.xi     MS_U8 u8HalIdx = MVD_GetHalIdx(u32Id);
460*53ee8cc1Swenshuai.xi     MS_U16 u16MVDCC_Temp1 = 0;
461*53ee8cc1Swenshuai.xi     MVD_CmdArg mvdcmd;
462*53ee8cc1Swenshuai.xi     memset((void *)&mvdcmd, 0, sizeof(MVD_CmdArg));
463*53ee8cc1Swenshuai.xi     u16MVDCC_Temp1 = CCMVD_RINGBUFFER_LEN[u8CC608];
464*53ee8cc1Swenshuai.xi     u16MVDCC_Temp1 = (u16MVDCC_Temp1 >> 3);
465*53ee8cc1Swenshuai.xi 
466*53ee8cc1Swenshuai.xi     mvdcmd.Arg1 = H_WORD(u16MVDCC_Temp1);
467*53ee8cc1Swenshuai.xi     mvdcmd.Arg0 = L_WORD(u16MVDCC_Temp1);
468*53ee8cc1Swenshuai.xi 
469*53ee8cc1Swenshuai.xi     if (u8CC608==0)
470*53ee8cc1Swenshuai.xi     {
471*53ee8cc1Swenshuai.xi         u8ParsingStatus &= ~0x04;
472*53ee8cc1Swenshuai.xi         bCC708Enable = FALSE;
473*53ee8cc1Swenshuai.xi     }
474*53ee8cc1Swenshuai.xi     else
475*53ee8cc1Swenshuai.xi         u8ParsingStatus &= ~0x03;
476*53ee8cc1Swenshuai.xi 
477*53ee8cc1Swenshuai.xi     u8ParsingStatus &= 0x07;
478*53ee8cc1Swenshuai.xi     mvdcmd.Arg3 = (MS_U8)u8CC608;
479*53ee8cc1Swenshuai.xi     mvdcmd.Arg2 = (MS_U8)(u8ParsingStatus);
480*53ee8cc1Swenshuai.xi     SET_DECNUM(mvdcmd, u8HalIdx);
481*53ee8cc1Swenshuai.xi     if (HAL_MVD_MVDCommand(CMD_SET_CCTYPE_PARSING, &mvdcmd) != TRUE)
482*53ee8cc1Swenshuai.xi     {
483*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("%s: cmd 0x%x fail!!\n", __FUNCTION__, CMD_SET_CCTYPE_PARSING));
484*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("\nF:DisP"));
485*53ee8cc1Swenshuai.xi     }
486*53ee8cc1Swenshuai.xi }
487*53ee8cc1Swenshuai.xi 
488*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
489*53ee8cc1Swenshuai.xi /// Get Hardware Pointer of MVD CC Ring Buffer
490*53ee8cc1Swenshuai.xi /// Return value:: The HW Pointer Address of MVD CC Ring Buffer
491*53ee8cc1Swenshuai.xi /// @param u8CC608 \b IN
492*53ee8cc1Swenshuai.xi ///   - # TRUE for CC608 parser
493*53ee8cc1Swenshuai.xi ///   - # FALSE for CC708 parser
494*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
495*53ee8cc1Swenshuai.xi #if defined(CHIP_MONACO)
MDrv_CC_CM_GetMVDRB_HWAddr(MS_U32 u32Id,MS_U8 u8CC608)496*53ee8cc1Swenshuai.xi MS_U32 MDrv_CC_CM_GetMVDRB_HWAddr(MS_U32 u32Id, MS_U8 u8CC608)
497*53ee8cc1Swenshuai.xi {
498*53ee8cc1Swenshuai.xi     MS_U32 u32MVDCC_Temp1 = 0;
499*53ee8cc1Swenshuai.xi     MS_U8 u8HalIdx = MVD_GetHalIdx(u32Id);
500*53ee8cc1Swenshuai.xi     MVD_CmdArg mvdcmd;
501*53ee8cc1Swenshuai.xi     MS_U32 u32Miu1_base = 0;
502*53ee8cc1Swenshuai.xi     MS_U32 u32Miu2_base = 0;
503*53ee8cc1Swenshuai.xi     MS_U32 u32Miu3_base = 0;
504*53ee8cc1Swenshuai.xi 
505*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_1,0,u32Miu1_base);
506*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_2,0,u32Miu2_base);
507*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_3,0,u32Miu3_base);
508*53ee8cc1Swenshuai.xi 
509*53ee8cc1Swenshuai.xi     memset((void *)&mvdcmd, 0, sizeof(MVD_CmdArg));
510*53ee8cc1Swenshuai.xi     mvdcmd.Arg3 = (MS_U8)u8CC608;
511*53ee8cc1Swenshuai.xi     SET_DECNUM(mvdcmd, u8HalIdx);
512*53ee8cc1Swenshuai.xi     if (HAL_MVD_MVDCommand(CMD_GET_CCBUF_HWADDR, &mvdcmd)== TRUE)
513*53ee8cc1Swenshuai.xi     {
514*53ee8cc1Swenshuai.xi         if (_IS_MSTAR_CC(u8CC608))
515*53ee8cc1Swenshuai.xi         {
516*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = COMBU32(mvdcmd.Arg4, mvdcmd.Arg2, mvdcmd.Arg1, mvdcmd.Arg0);
517*53ee8cc1Swenshuai.xi         }
518*53ee8cc1Swenshuai.xi         else //u8CC608 is 2 or 3
519*53ee8cc1Swenshuai.xi         {
520*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = COMBU32(mvdcmd.Arg3, mvdcmd.Arg2, mvdcmd.Arg1, mvdcmd.Arg0);
521*53ee8cc1Swenshuai.xi         }
522*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = (u32MVDCC_Temp1 << 3);
523*53ee8cc1Swenshuai.xi 
524*53ee8cc1Swenshuai.xi         if(u8BufSelMiu == E_CHIP_MIU_0)  // SH@20110111, if CC buffer in MIU0, enable here
525*53ee8cc1Swenshuai.xi         {
526*53ee8cc1Swenshuai.xi             return (u32MVDCC_Temp1);
527*53ee8cc1Swenshuai.xi         }
528*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_1)  // SH@20110111, if CC buffer in MIU0, enable here
529*53ee8cc1Swenshuai.xi         {
530*53ee8cc1Swenshuai.xi             return (u32MVDCC_Temp1|u32Miu1_base);
531*53ee8cc1Swenshuai.xi         }
532*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_2)  // SH@20110111, if CC buffer in MIU0, enable here
533*53ee8cc1Swenshuai.xi         {
534*53ee8cc1Swenshuai.xi             return (u32MVDCC_Temp1|u32Miu2_base);
535*53ee8cc1Swenshuai.xi         }
536*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_3)  // SH@20110111, if CC buffer in MIU0, enable here
537*53ee8cc1Swenshuai.xi         {
538*53ee8cc1Swenshuai.xi             return (u32MVDCC_Temp1|u32Miu3_base);
539*53ee8cc1Swenshuai.xi         }
540*53ee8cc1Swenshuai.xi     }
541*53ee8cc1Swenshuai.xi     else
542*53ee8cc1Swenshuai.xi     {
543*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("%s: cmd 0x%x fail!!\n", __FUNCTION__, CMD_GET_CCBUF_HWADDR));
544*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("\nF:GHAV"));
545*53ee8cc1Swenshuai.xi     }
546*53ee8cc1Swenshuai.xi 
547*53ee8cc1Swenshuai.xi     return 0xffffffff;
548*53ee8cc1Swenshuai.xi }
549*53ee8cc1Swenshuai.xi #else
MDrv_CC_CM_GetMVDRB_HWAddr(MS_U32 u32Id,MS_U8 u8CC608)550*53ee8cc1Swenshuai.xi MS_U32 MDrv_CC_CM_GetMVDRB_HWAddr(MS_U32 u32Id, MS_U8 u8CC608)
551*53ee8cc1Swenshuai.xi {
552*53ee8cc1Swenshuai.xi     MS_U32 u32MVDCC_Temp1 = 0;
553*53ee8cc1Swenshuai.xi     MS_U8 u8HalIdx = MVD_GetHalIdx(u32Id);
554*53ee8cc1Swenshuai.xi     MVD_CmdArg mvdcmd;
555*53ee8cc1Swenshuai.xi     memset((void *)&mvdcmd, 0, sizeof(MVD_CmdArg));
556*53ee8cc1Swenshuai.xi     mvdcmd.Arg3 = (MS_U8)u8CC608;
557*53ee8cc1Swenshuai.xi     SET_DECNUM(mvdcmd, u8HalIdx);
558*53ee8cc1Swenshuai.xi     if (HAL_MVD_MVDCommand(CMD_GET_CCBUF_HWADDR, &mvdcmd)== TRUE)
559*53ee8cc1Swenshuai.xi     {
560*53ee8cc1Swenshuai.xi         if (_IS_MSTAR_CC(u8CC608))
561*53ee8cc1Swenshuai.xi         {
562*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = COMBU32(mvdcmd.Arg4, mvdcmd.Arg2, mvdcmd.Arg1, mvdcmd.Arg0);
563*53ee8cc1Swenshuai.xi         }
564*53ee8cc1Swenshuai.xi         else //u8CC608 is 2 or 3
565*53ee8cc1Swenshuai.xi         {
566*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = COMBU32(mvdcmd.Arg3, mvdcmd.Arg2, mvdcmd.Arg1, mvdcmd.Arg0);
567*53ee8cc1Swenshuai.xi         }
568*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = (u32MVDCC_Temp1 << 3);
569*53ee8cc1Swenshuai.xi         if(bBufMiu0)  // SH@20110111, if CC buffer in MIU0, enable here
570*53ee8cc1Swenshuai.xi         {
571*53ee8cc1Swenshuai.xi             return (u32MVDCC_Temp1);
572*53ee8cc1Swenshuai.xi         }
573*53ee8cc1Swenshuai.xi         else // CC buffer in MIU1
574*53ee8cc1Swenshuai.xi         {
575*53ee8cc1Swenshuai.xi             return (u32MVDCC_Temp1|MIU1_BASEADDR);
576*53ee8cc1Swenshuai.xi         }
577*53ee8cc1Swenshuai.xi     }
578*53ee8cc1Swenshuai.xi     else
579*53ee8cc1Swenshuai.xi     {
580*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("%s: cmd 0x%x fail!!\n", __FUNCTION__, CMD_GET_CCBUF_HWADDR));
581*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("\nF:GHAV"));
582*53ee8cc1Swenshuai.xi     }
583*53ee8cc1Swenshuai.xi 
584*53ee8cc1Swenshuai.xi     return 0xffffffff;
585*53ee8cc1Swenshuai.xi }
586*53ee8cc1Swenshuai.xi #endif
587*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
588*53ee8cc1Swenshuai.xi /// Get Overflow Status of MVD CC FW Driver
589*53ee8cc1Swenshuai.xi /// @param u8CC608 \b IN
590*53ee8cc1Swenshuai.xi ///   - # TRUE for CC608 parser
591*53ee8cc1Swenshuai.xi ///   - # FALSE for CC708 parser
592*53ee8cc1Swenshuai.xi /// Return value:: Overflow Status Flag
593*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
MDrv_CC_CM_GetOverflowStatus(MS_U32 u32Id,MS_U8 u8CC608)594*53ee8cc1Swenshuai.xi MS_U8 MDrv_CC_CM_GetOverflowStatus(MS_U32 u32Id, MS_U8 u8CC608)
595*53ee8cc1Swenshuai.xi {
596*53ee8cc1Swenshuai.xi     MS_U8 u8HalIdx = MVD_GetHalIdx(u32Id);
597*53ee8cc1Swenshuai.xi     MVD_CmdArg mvdcmd;
598*53ee8cc1Swenshuai.xi     memset((void *)&mvdcmd, 0, sizeof(MVD_CmdArg));
599*53ee8cc1Swenshuai.xi     mvdcmd.Arg3 = (MS_U8)u8CC608;
600*53ee8cc1Swenshuai.xi     SET_DECNUM(mvdcmd, u8HalIdx);
601*53ee8cc1Swenshuai.xi     if (HAL_MVD_MVDCommand(CMD_GET_OVERFLOW_STATUS, &mvdcmd) == TRUE)
602*53ee8cc1Swenshuai.xi     {
603*53ee8cc1Swenshuai.xi         if ((mvdcmd.Arg0& 0x01) == 0)
604*53ee8cc1Swenshuai.xi             return (FALSE);
605*53ee8cc1Swenshuai.xi         else
606*53ee8cc1Swenshuai.xi             return (TRUE);
607*53ee8cc1Swenshuai.xi     }
608*53ee8cc1Swenshuai.xi     else
609*53ee8cc1Swenshuai.xi     {
610*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("%s: cmd 0x%x fail!!\n", __FUNCTION__, CMD_GET_OVERFLOW_STATUS));
611*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("\nF:GOV"));
612*53ee8cc1Swenshuai.xi     }
613*53ee8cc1Swenshuai.xi     return (FALSE);
614*53ee8cc1Swenshuai.xi }
615*53ee8cc1Swenshuai.xi 
616*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
617*53ee8cc1Swenshuai.xi /// Set Software Pointer of MVD CC Ring Buffer
618*53ee8cc1Swenshuai.xi /// @param u32ReadAddress \b IN SW Pointer Address
619*53ee8cc1Swenshuai.xi /// @param u8CC608 \b IN
620*53ee8cc1Swenshuai.xi ///   - # TRUE for CC608 parser
621*53ee8cc1Swenshuai.xi ///   - # FALSE for CC708 parser
622*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
623*53ee8cc1Swenshuai.xi #if defined(CHIP_MONACO)
MDrv_CC_CM_SetMVDRB_SWAddr(MS_U32 u32Id,MS_U32 u32ReadAddress,MS_U8 u8CC608)624*53ee8cc1Swenshuai.xi void MDrv_CC_CM_SetMVDRB_SWAddr(MS_U32 u32Id, MS_U32 u32ReadAddress, MS_U8 u8CC608)
625*53ee8cc1Swenshuai.xi {
626*53ee8cc1Swenshuai.xi     MS_U8 u8HalIdx = MVD_GetHalIdx(u32Id);
627*53ee8cc1Swenshuai.xi     MS_U32 u32MVDCC_Temp1 = 0;
628*53ee8cc1Swenshuai.xi     MVD_CmdArg mvdcmd;
629*53ee8cc1Swenshuai.xi     MS_U32 u32Miu1_base = 0;
630*53ee8cc1Swenshuai.xi     MS_U32 u32Miu2_base = 0;
631*53ee8cc1Swenshuai.xi     MS_U32 u32Miu3_base = 0;
632*53ee8cc1Swenshuai.xi 
633*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_1,0,u32Miu1_base);
634*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_2,0,u32Miu2_base);
635*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_3,0,u32Miu3_base);
636*53ee8cc1Swenshuai.xi 
637*53ee8cc1Swenshuai.xi     memset((void *)&mvdcmd, 0, sizeof(MVD_CmdArg));
638*53ee8cc1Swenshuai.xi 
639*53ee8cc1Swenshuai.xi     u32SW_Address[u8CC608] = u32ReadAddress;
640*53ee8cc1Swenshuai.xi 
641*53ee8cc1Swenshuai.xi     if(u8BufSelMiu == E_CHIP_MIU_0)  // SH@20110111, if CC buffer in MIU0, enable here
642*53ee8cc1Swenshuai.xi     {
643*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = (u32ReadAddress >> 3);
644*53ee8cc1Swenshuai.xi     }
645*53ee8cc1Swenshuai.xi     else if(u8BufSelMiu == E_CHIP_MIU_1)  // SH@20110111, if CC buffer in MIU0, enable here
646*53ee8cc1Swenshuai.xi     {
647*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = u32ReadAddress - u32Miu1_base;
648*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = (u32MVDCC_Temp1 >> 3);
649*53ee8cc1Swenshuai.xi     }
650*53ee8cc1Swenshuai.xi     else if(u8BufSelMiu == E_CHIP_MIU_2)  // SH@20110111, if CC buffer in MIU0, enable here
651*53ee8cc1Swenshuai.xi     {
652*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = u32ReadAddress - u32Miu2_base;
653*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = (u32MVDCC_Temp1 >> 3);
654*53ee8cc1Swenshuai.xi     }
655*53ee8cc1Swenshuai.xi     else if(u8BufSelMiu == E_CHIP_MIU_3)  // SH@20110111, if CC buffer in MIU0, enable here
656*53ee8cc1Swenshuai.xi     {
657*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = u32ReadAddress - u32Miu3_base;
658*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = (u32MVDCC_Temp1 >> 3);
659*53ee8cc1Swenshuai.xi     }
660*53ee8cc1Swenshuai.xi 
661*53ee8cc1Swenshuai.xi     mvdcmd.Arg3 = (MS_U8)u8CC608;
662*53ee8cc1Swenshuai.xi     mvdcmd.Arg2 = L_DWORD(u32MVDCC_Temp1);
663*53ee8cc1Swenshuai.xi     mvdcmd.Arg1 = H_WORD(u32MVDCC_Temp1);
664*53ee8cc1Swenshuai.xi     mvdcmd.Arg0 = L_WORD(u32MVDCC_Temp1);
665*53ee8cc1Swenshuai.xi     SET_DECNUM(mvdcmd, u8HalIdx);
666*53ee8cc1Swenshuai.xi     if (HAL_MVD_MVDCommand(CMD_SET_CCBUF_SWADDR, &mvdcmd) != TRUE)
667*53ee8cc1Swenshuai.xi     {
668*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("%s: cmd 0x%x fail!!\n", __FUNCTION__, CMD_SET_CCBUF_SWADDR));
669*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("\nF:SSA"));
670*53ee8cc1Swenshuai.xi     }
671*53ee8cc1Swenshuai.xi }
672*53ee8cc1Swenshuai.xi #else
MDrv_CC_CM_SetMVDRB_SWAddr(MS_U32 u32Id,MS_U32 u32ReadAddress,MS_U8 u8CC608)673*53ee8cc1Swenshuai.xi void MDrv_CC_CM_SetMVDRB_SWAddr(MS_U32 u32Id, MS_U32 u32ReadAddress, MS_U8 u8CC608)
674*53ee8cc1Swenshuai.xi {
675*53ee8cc1Swenshuai.xi     MS_U8 u8HalIdx = MVD_GetHalIdx(u32Id);
676*53ee8cc1Swenshuai.xi     MS_U32 u32MVDCC_Temp1 = 0;
677*53ee8cc1Swenshuai.xi     MVD_CmdArg mvdcmd;
678*53ee8cc1Swenshuai.xi     memset((void *)&mvdcmd, 0, sizeof(MVD_CmdArg));
679*53ee8cc1Swenshuai.xi 
680*53ee8cc1Swenshuai.xi     u32SW_Address[u8CC608] = u32ReadAddress;
681*53ee8cc1Swenshuai.xi 
682*53ee8cc1Swenshuai.xi     if(bBufMiu0)  // SH@20110111, if CC buffer in MIU0, enable here
683*53ee8cc1Swenshuai.xi     {
684*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = (u32ReadAddress >> 3);
685*53ee8cc1Swenshuai.xi     }
686*53ee8cc1Swenshuai.xi     else // CC buffer in MIU1
687*53ee8cc1Swenshuai.xi     {
688*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = u32ReadAddress - MIU1_BASEADDR;
689*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = (u32MVDCC_Temp1 >> 3);
690*53ee8cc1Swenshuai.xi     }
691*53ee8cc1Swenshuai.xi 
692*53ee8cc1Swenshuai.xi     mvdcmd.Arg3 = (MS_U8)u8CC608;
693*53ee8cc1Swenshuai.xi     mvdcmd.Arg2 = L_DWORD(u32MVDCC_Temp1);
694*53ee8cc1Swenshuai.xi     mvdcmd.Arg1 = H_WORD(u32MVDCC_Temp1);
695*53ee8cc1Swenshuai.xi     mvdcmd.Arg0 = L_WORD(u32MVDCC_Temp1);
696*53ee8cc1Swenshuai.xi     SET_DECNUM(mvdcmd, u8HalIdx);
697*53ee8cc1Swenshuai.xi     if (HAL_MVD_MVDCommand(CMD_SET_CCBUF_SWADDR, &mvdcmd) != TRUE)
698*53ee8cc1Swenshuai.xi     {
699*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("%s: cmd 0x%x fail!!\n", __FUNCTION__, CMD_SET_CCBUF_SWADDR));
700*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("\nF:SSA"));
701*53ee8cc1Swenshuai.xi     }
702*53ee8cc1Swenshuai.xi }
703*53ee8cc1Swenshuai.xi #endif
704*53ee8cc1Swenshuai.xi 
705*53ee8cc1Swenshuai.xi #if defined(CHIP_MONACO)
706*53ee8cc1Swenshuai.xi #else
707*53ee8cc1Swenshuai.xi #define __Offset2PA(x)      ((MVD_ON_MIU1)?((x)|MIU1_BASEADDR):(x))
708*53ee8cc1Swenshuai.xi #endif
709*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
710*53ee8cc1Swenshuai.xi /// Get HW Pointer Address of MVD CC FW Driver
711*53ee8cc1Swenshuai.xi /// @param u8CC608 \b IN
712*53ee8cc1Swenshuai.xi ///   - # TRUE for CC608 parser
713*53ee8cc1Swenshuai.xi ///   - # FALSE for CC708 parser
714*53ee8cc1Swenshuai.xi /// Return value:: HW Pointer Address
715*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
716*53ee8cc1Swenshuai.xi 
717*53ee8cc1Swenshuai.xi #if defined(CHIP_MONACO)
MDrv_CC_PM_GetMVDRB_WriteAddr(MS_U32 u32Id,MS_U8 u8CC608)718*53ee8cc1Swenshuai.xi MS_U32 MDrv_CC_PM_GetMVDRB_WriteAddr(MS_U32 u32Id, MS_U8 u8CC608)
719*53ee8cc1Swenshuai.xi {
720*53ee8cc1Swenshuai.xi     MS_U32 u32Miu1_base = 0;
721*53ee8cc1Swenshuai.xi     MS_U32 u32Miu2_base = 0;
722*53ee8cc1Swenshuai.xi     MS_U32 u32Miu3_base = 0;
723*53ee8cc1Swenshuai.xi 
724*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_1,0,u32Miu1_base);
725*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_2,0,u32Miu2_base);
726*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_3,0,u32Miu3_base);
727*53ee8cc1Swenshuai.xi 
728*53ee8cc1Swenshuai.xi     u32HW_Address[u8CC608] = MDrv_CC_CM_GetMVDRB_HWAddr(u32Id, u8CC608);
729*53ee8cc1Swenshuai.xi 
730*53ee8cc1Swenshuai.xi     if(u8BufSelMiu == E_CHIP_MIU_0)  // SH@20110111, if CC buffer in MIU0, enable here
731*53ee8cc1Swenshuai.xi     {
732*53ee8cc1Swenshuai.xi         if(MVD_ON_MIU == E_CHIP_MIU_0)
733*53ee8cc1Swenshuai.xi         {
734*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]);
735*53ee8cc1Swenshuai.xi         }
736*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_1)
737*53ee8cc1Swenshuai.xi         {
738*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]|u32Miu1_base);
739*53ee8cc1Swenshuai.xi         }
740*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_2)
741*53ee8cc1Swenshuai.xi         {
742*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]|u32Miu2_base);
743*53ee8cc1Swenshuai.xi         }
744*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_3)
745*53ee8cc1Swenshuai.xi         {
746*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]|u32Miu3_base);
747*53ee8cc1Swenshuai.xi         }
748*53ee8cc1Swenshuai.xi         else
749*53ee8cc1Swenshuai.xi         {
750*53ee8cc1Swenshuai.xi             return 0;
751*53ee8cc1Swenshuai.xi         }
752*53ee8cc1Swenshuai.xi     }
753*53ee8cc1Swenshuai.xi     else if(u8BufSelMiu == E_CHIP_MIU_1)  // SH@20110111, if CC buffer in MIU0, enable here
754*53ee8cc1Swenshuai.xi     {
755*53ee8cc1Swenshuai.xi         if(MVD_ON_MIU == E_CHIP_MIU_0)
756*53ee8cc1Swenshuai.xi         {
757*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]);
758*53ee8cc1Swenshuai.xi         }
759*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_1)
760*53ee8cc1Swenshuai.xi         {
761*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]);
762*53ee8cc1Swenshuai.xi         }
763*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_2)
764*53ee8cc1Swenshuai.xi         {
765*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]|u32Miu2_base);
766*53ee8cc1Swenshuai.xi         }
767*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_3)
768*53ee8cc1Swenshuai.xi         {
769*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]|u32Miu3_base);
770*53ee8cc1Swenshuai.xi         }
771*53ee8cc1Swenshuai.xi         else
772*53ee8cc1Swenshuai.xi         {
773*53ee8cc1Swenshuai.xi             return 0;
774*53ee8cc1Swenshuai.xi         }
775*53ee8cc1Swenshuai.xi     }
776*53ee8cc1Swenshuai.xi     else if(u8BufSelMiu == E_CHIP_MIU_2)  // SH@20110111, if CC buffer in MIU0, enable here
777*53ee8cc1Swenshuai.xi     {
778*53ee8cc1Swenshuai.xi         if(MVD_ON_MIU == E_CHIP_MIU_0)
779*53ee8cc1Swenshuai.xi         {
780*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]);
781*53ee8cc1Swenshuai.xi         }
782*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_1)
783*53ee8cc1Swenshuai.xi         {
784*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]|u32Miu1_base);
785*53ee8cc1Swenshuai.xi         }
786*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_2)
787*53ee8cc1Swenshuai.xi         {
788*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]);
789*53ee8cc1Swenshuai.xi         }
790*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_3)
791*53ee8cc1Swenshuai.xi         {
792*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]|u32Miu3_base);
793*53ee8cc1Swenshuai.xi         }
794*53ee8cc1Swenshuai.xi         else
795*53ee8cc1Swenshuai.xi         {
796*53ee8cc1Swenshuai.xi             return 0;
797*53ee8cc1Swenshuai.xi         }
798*53ee8cc1Swenshuai.xi     }
799*53ee8cc1Swenshuai.xi     else if(u8BufSelMiu == E_CHIP_MIU_3)  // SH@20110111, if CC buffer in MIU0, enable here
800*53ee8cc1Swenshuai.xi     {
801*53ee8cc1Swenshuai.xi         if(MVD_ON_MIU == E_CHIP_MIU_0)
802*53ee8cc1Swenshuai.xi         {
803*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]);
804*53ee8cc1Swenshuai.xi         }
805*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_1)
806*53ee8cc1Swenshuai.xi         {
807*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]|u32Miu1_base);
808*53ee8cc1Swenshuai.xi         }
809*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_2)
810*53ee8cc1Swenshuai.xi         {
811*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]|u32Miu2_base);
812*53ee8cc1Swenshuai.xi         }
813*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_3)
814*53ee8cc1Swenshuai.xi         {
815*53ee8cc1Swenshuai.xi             return (MS_U32)(u32HW_Address[u8CC608]);
816*53ee8cc1Swenshuai.xi         }
817*53ee8cc1Swenshuai.xi         else
818*53ee8cc1Swenshuai.xi         {
819*53ee8cc1Swenshuai.xi             return 0;
820*53ee8cc1Swenshuai.xi         }
821*53ee8cc1Swenshuai.xi     }
822*53ee8cc1Swenshuai.xi     else
823*53ee8cc1Swenshuai.xi     {
824*53ee8cc1Swenshuai.xi         return 0;
825*53ee8cc1Swenshuai.xi     }
826*53ee8cc1Swenshuai.xi }
827*53ee8cc1Swenshuai.xi #else
MDrv_CC_PM_GetMVDRB_WriteAddr(MS_U32 u32Id,MS_U8 u8CC608)828*53ee8cc1Swenshuai.xi MS_U32 MDrv_CC_PM_GetMVDRB_WriteAddr(MS_U32 u32Id, MS_U8 u8CC608)
829*53ee8cc1Swenshuai.xi {
830*53ee8cc1Swenshuai.xi     u32HW_Address[u8CC608] = MDrv_CC_CM_GetMVDRB_HWAddr(u32Id, u8CC608);
831*53ee8cc1Swenshuai.xi 
832*53ee8cc1Swenshuai.xi     if(bBufMiu0)
833*53ee8cc1Swenshuai.xi     {
834*53ee8cc1Swenshuai.xi         return (MS_U32)__Offset2PA(u32HW_Address[u8CC608]);
835*53ee8cc1Swenshuai.xi     }
836*53ee8cc1Swenshuai.xi     else
837*53ee8cc1Swenshuai.xi     {
838*53ee8cc1Swenshuai.xi         return (MS_U32)(u32HW_Address[u8CC608]);
839*53ee8cc1Swenshuai.xi     }
840*53ee8cc1Swenshuai.xi }
841*53ee8cc1Swenshuai.xi #endif
842*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
843*53ee8cc1Swenshuai.xi /// Get SW Pointer Address of MVD CC FW Driver
844*53ee8cc1Swenshuai.xi /// @param u8CC608 \b IN
845*53ee8cc1Swenshuai.xi ///   - # TRUE for CC608 parser
846*53ee8cc1Swenshuai.xi ///   - # FALSE for CC708 parser
847*53ee8cc1Swenshuai.xi /// Return value:: SW Pointer Address
848*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
849*53ee8cc1Swenshuai.xi 
850*53ee8cc1Swenshuai.xi #if defined(CHIP_MONACO)
MDrv_CC_PM_GetMVDRB_ReadAddr(MS_U32 u32Id,MS_U8 u8CC608)851*53ee8cc1Swenshuai.xi MS_U32 MDrv_CC_PM_GetMVDRB_ReadAddr(MS_U32 u32Id, MS_U8 u8CC608)
852*53ee8cc1Swenshuai.xi {
853*53ee8cc1Swenshuai.xi     MS_U32 u32Miu1_base = 0;
854*53ee8cc1Swenshuai.xi     MS_U32 u32Miu2_base = 0;
855*53ee8cc1Swenshuai.xi     MS_U32 u32Miu3_base = 0;
856*53ee8cc1Swenshuai.xi 
857*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_1,0,u32Miu1_base);
858*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_2,0,u32Miu2_base);
859*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_3,0,u32Miu3_base);
860*53ee8cc1Swenshuai.xi 
861*53ee8cc1Swenshuai.xi     if(u8BufSelMiu == E_CHIP_MIU_0)  // SH@20110111, if CC buffer in MIU0, enable here
862*53ee8cc1Swenshuai.xi     {
863*53ee8cc1Swenshuai.xi         if(MVD_ON_MIU == E_CHIP_MIU_0)
864*53ee8cc1Swenshuai.xi         {
865*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]);
866*53ee8cc1Swenshuai.xi         }
867*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_1)
868*53ee8cc1Swenshuai.xi         {
869*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]|u32Miu1_base);
870*53ee8cc1Swenshuai.xi         }
871*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_2)
872*53ee8cc1Swenshuai.xi         {
873*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]|u32Miu2_base);
874*53ee8cc1Swenshuai.xi         }
875*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_3)
876*53ee8cc1Swenshuai.xi         {
877*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]|u32Miu3_base);
878*53ee8cc1Swenshuai.xi         }
879*53ee8cc1Swenshuai.xi         else
880*53ee8cc1Swenshuai.xi         {
881*53ee8cc1Swenshuai.xi             return 0;
882*53ee8cc1Swenshuai.xi         }
883*53ee8cc1Swenshuai.xi     }
884*53ee8cc1Swenshuai.xi     else if(u8BufSelMiu == E_CHIP_MIU_1)  // SH@20110111, if CC buffer in MIU0, enable here
885*53ee8cc1Swenshuai.xi     {
886*53ee8cc1Swenshuai.xi         if(MVD_ON_MIU == E_CHIP_MIU_0)
887*53ee8cc1Swenshuai.xi         {
888*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]);
889*53ee8cc1Swenshuai.xi         }
890*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_1)
891*53ee8cc1Swenshuai.xi         {
892*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]);
893*53ee8cc1Swenshuai.xi         }
894*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_2)
895*53ee8cc1Swenshuai.xi         {
896*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]|u32Miu2_base);
897*53ee8cc1Swenshuai.xi         }
898*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_3)
899*53ee8cc1Swenshuai.xi         {
900*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]|u32Miu3_base);
901*53ee8cc1Swenshuai.xi         }
902*53ee8cc1Swenshuai.xi         else
903*53ee8cc1Swenshuai.xi         {
904*53ee8cc1Swenshuai.xi             return 0;
905*53ee8cc1Swenshuai.xi         }
906*53ee8cc1Swenshuai.xi     }
907*53ee8cc1Swenshuai.xi     else if(u8BufSelMiu == E_CHIP_MIU_2)  // SH@20110111, if CC buffer in MIU0, enable here
908*53ee8cc1Swenshuai.xi     {
909*53ee8cc1Swenshuai.xi         if(MVD_ON_MIU == E_CHIP_MIU_0)
910*53ee8cc1Swenshuai.xi         {
911*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]);
912*53ee8cc1Swenshuai.xi         }
913*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_1)
914*53ee8cc1Swenshuai.xi         {
915*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]|u32Miu1_base);
916*53ee8cc1Swenshuai.xi         }
917*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_2)
918*53ee8cc1Swenshuai.xi         {
919*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]);
920*53ee8cc1Swenshuai.xi         }
921*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_3)
922*53ee8cc1Swenshuai.xi         {
923*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]|u32Miu3_base);
924*53ee8cc1Swenshuai.xi         }
925*53ee8cc1Swenshuai.xi         else
926*53ee8cc1Swenshuai.xi         {
927*53ee8cc1Swenshuai.xi             return 0;
928*53ee8cc1Swenshuai.xi         }
929*53ee8cc1Swenshuai.xi     }
930*53ee8cc1Swenshuai.xi     else if(u8BufSelMiu == E_CHIP_MIU_3)  // SH@20110111, if CC buffer in MIU0, enable here
931*53ee8cc1Swenshuai.xi     {
932*53ee8cc1Swenshuai.xi         if(MVD_ON_MIU == E_CHIP_MIU_0)
933*53ee8cc1Swenshuai.xi         {
934*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]);
935*53ee8cc1Swenshuai.xi         }
936*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_1)
937*53ee8cc1Swenshuai.xi         {
938*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]|u32Miu1_base);
939*53ee8cc1Swenshuai.xi         }
940*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_2)
941*53ee8cc1Swenshuai.xi         {
942*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]|u32Miu2_base);
943*53ee8cc1Swenshuai.xi         }
944*53ee8cc1Swenshuai.xi         else if(MVD_ON_MIU == E_CHIP_MIU_3)
945*53ee8cc1Swenshuai.xi         {
946*53ee8cc1Swenshuai.xi             return (MS_U32)(u32SW_Address[u8CC608]);
947*53ee8cc1Swenshuai.xi         }
948*53ee8cc1Swenshuai.xi         else
949*53ee8cc1Swenshuai.xi         {
950*53ee8cc1Swenshuai.xi             return 0;
951*53ee8cc1Swenshuai.xi         }
952*53ee8cc1Swenshuai.xi 
953*53ee8cc1Swenshuai.xi     }
954*53ee8cc1Swenshuai.xi     else
955*53ee8cc1Swenshuai.xi     {
956*53ee8cc1Swenshuai.xi         return 0;
957*53ee8cc1Swenshuai.xi     }
958*53ee8cc1Swenshuai.xi }
959*53ee8cc1Swenshuai.xi #else
MDrv_CC_PM_GetMVDRB_ReadAddr(MS_U32 u32Id,MS_U8 u8CC608)960*53ee8cc1Swenshuai.xi MS_U32 MDrv_CC_PM_GetMVDRB_ReadAddr(MS_U32 u32Id, MS_U8 u8CC608)
961*53ee8cc1Swenshuai.xi {
962*53ee8cc1Swenshuai.xi     if(bBufMiu0)
963*53ee8cc1Swenshuai.xi     {
964*53ee8cc1Swenshuai.xi         return (MS_U32)__Offset2PA(u32SW_Address[u8CC608]);
965*53ee8cc1Swenshuai.xi     }
966*53ee8cc1Swenshuai.xi     else
967*53ee8cc1Swenshuai.xi     {
968*53ee8cc1Swenshuai.xi         return (MS_U32)(u32SW_Address[u8CC608]);
969*53ee8cc1Swenshuai.xi     }
970*53ee8cc1Swenshuai.xi }
971*53ee8cc1Swenshuai.xi #endif
972*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
973*53ee8cc1Swenshuai.xi /// Set Software Pointer of MVD CC Ring Buffer to MVD CC FW Driver
974*53ee8cc1Swenshuai.xi /// @param u32EachPacketSize \b IN SW Pointer Address
975*53ee8cc1Swenshuai.xi /// @param u8CC608 \b IN
976*53ee8cc1Swenshuai.xi ///   - # TRUE for CC608 parser
977*53ee8cc1Swenshuai.xi ///   - # FALSE for CC708 parser
978*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
979*53ee8cc1Swenshuai.xi #if defined(CHIP_MONACO)
MDrv_CC_PM_SetMVDRB_ReadAddr(MS_U32 u32Id,MS_U32 u32EachPacketSize,MS_U8 u8CC608)980*53ee8cc1Swenshuai.xi void MDrv_CC_PM_SetMVDRB_ReadAddr(MS_U32 u32Id, MS_U32 u32EachPacketSize, MS_U8 u8CC608)
981*53ee8cc1Swenshuai.xi {
982*53ee8cc1Swenshuai.xi     MS_U32 u32MVDCC_Temp1 = 0;
983*53ee8cc1Swenshuai.xi     MS_U32 u32ParsedDataSize;
984*53ee8cc1Swenshuai.xi     MS_U32 u32Miu1_base = 0;
985*53ee8cc1Swenshuai.xi     MS_U32 u32Miu2_base = 0;
986*53ee8cc1Swenshuai.xi     MS_U32 u32Miu3_base = 0;
987*53ee8cc1Swenshuai.xi 
988*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_1,0,u32Miu1_base);
989*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_2,0,u32Miu2_base);
990*53ee8cc1Swenshuai.xi     _miu_offset_to_phy(E_CHIP_MIU_3,0,u32Miu3_base);
991*53ee8cc1Swenshuai.xi 
992*53ee8cc1Swenshuai.xi     // Get the Parsed Data Size
993*53ee8cc1Swenshuai.xi     if ((u32EachPacketSize % MVD_CCRB_PACKET_LENGTH) != 0)
994*53ee8cc1Swenshuai.xi     {
995*53ee8cc1Swenshuai.xi         u32ParsedDataSize = MVD_CCRB_PACKET_LENGTH * ((u32EachPacketSize / MVD_CCRB_PACKET_LENGTH)+1);
996*53ee8cc1Swenshuai.xi     }
997*53ee8cc1Swenshuai.xi     else
998*53ee8cc1Swenshuai.xi     {
999*53ee8cc1Swenshuai.xi         u32ParsedDataSize = u32EachPacketSize;
1000*53ee8cc1Swenshuai.xi     }
1001*53ee8cc1Swenshuai.xi 
1002*53ee8cc1Swenshuai.xi     // Add the SW Address
1003*53ee8cc1Swenshuai.xi     if(MVD_ON_MIU == E_CHIP_MIU_0)
1004*53ee8cc1Swenshuai.xi     {
1005*53ee8cc1Swenshuai.xi         if(u8BufSelMiu == E_CHIP_MIU_0)  // SH@20110111, if CC buffer in MIU0, enable here
1006*53ee8cc1Swenshuai.xi         {
1007*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] ;//& (MIU1_BASEADDR - 1); // to Phy address
1008*53ee8cc1Swenshuai.xi         }
1009*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_1)  // SH@20110111, if CC buffer in MIU0, enable here
1010*53ee8cc1Swenshuai.xi         {
1011*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] ;//& (MIU1_BASEADDR - 1); // to Phy address
1012*53ee8cc1Swenshuai.xi         }
1013*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_2)  // SH@20110111, if CC buffer in MIU0, enable here
1014*53ee8cc1Swenshuai.xi         {
1015*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] ;//& (MIU1_BASEADDR - 1); // to Phy address
1016*53ee8cc1Swenshuai.xi         }
1017*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_3)  // SH@20110111, if CC buffer in MIU0, enable here
1018*53ee8cc1Swenshuai.xi         {
1019*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] ;//& (MIU1_BASEADDR - 1); // to Phy address
1020*53ee8cc1Swenshuai.xi         }
1021*53ee8cc1Swenshuai.xi     }
1022*53ee8cc1Swenshuai.xi     else if(MVD_ON_MIU == E_CHIP_MIU_1)
1023*53ee8cc1Swenshuai.xi     {
1024*53ee8cc1Swenshuai.xi         if(u8BufSelMiu == E_CHIP_MIU_0)  // SH@20110111, if CC buffer in MIU0, enable here
1025*53ee8cc1Swenshuai.xi         {
1026*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] & (u32Miu1_base - 1); // to Phy address
1027*53ee8cc1Swenshuai.xi         }
1028*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_1)  // SH@20110111, if CC buffer in MIU0, enable here
1029*53ee8cc1Swenshuai.xi         {
1030*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] ;//& (MIU1_BASEADDR - 1); // to Phy address
1031*53ee8cc1Swenshuai.xi         }
1032*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_2)  // SH@20110111, if CC buffer in MIU0, enable here
1033*53ee8cc1Swenshuai.xi         {
1034*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] & (u32Miu1_base - 1); // to Phy address
1035*53ee8cc1Swenshuai.xi         }
1036*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_3)  // SH@20110111, if CC buffer in MIU0, enable here
1037*53ee8cc1Swenshuai.xi         {
1038*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] & (u32Miu1_base - 1); // to Phy address
1039*53ee8cc1Swenshuai.xi         }
1040*53ee8cc1Swenshuai.xi     }
1041*53ee8cc1Swenshuai.xi     else if(MVD_ON_MIU == E_CHIP_MIU_2)
1042*53ee8cc1Swenshuai.xi     {
1043*53ee8cc1Swenshuai.xi         if(u8BufSelMiu == E_CHIP_MIU_0)  // SH@20110111, if CC buffer in MIU0, enable here
1044*53ee8cc1Swenshuai.xi         {
1045*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] & (u32Miu2_base - 1); // to Phy address
1046*53ee8cc1Swenshuai.xi         }
1047*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_1)  // SH@20110111, if CC buffer in MIU0, enable here
1048*53ee8cc1Swenshuai.xi         {
1049*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] & (u32Miu2_base - 1); // to Phy address
1050*53ee8cc1Swenshuai.xi         }
1051*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_2)  // SH@20110111, if CC buffer in MIU0, enable here
1052*53ee8cc1Swenshuai.xi         {
1053*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] ;//& (MIU1_BASEADDR - 1); // to Phy address
1054*53ee8cc1Swenshuai.xi         }
1055*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_3)  // SH@20110111, if CC buffer in MIU0, enable here
1056*53ee8cc1Swenshuai.xi         {
1057*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] & (u32Miu2_base - 1); // to Phy address
1058*53ee8cc1Swenshuai.xi         }
1059*53ee8cc1Swenshuai.xi     }
1060*53ee8cc1Swenshuai.xi     else if(MVD_ON_MIU == E_CHIP_MIU_3)
1061*53ee8cc1Swenshuai.xi     {
1062*53ee8cc1Swenshuai.xi         if(u8BufSelMiu == E_CHIP_MIU_0)  // SH@20110111, if CC buffer in MIU0, enable here
1063*53ee8cc1Swenshuai.xi         {
1064*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] & (u32Miu3_base - 1); // to Phy address
1065*53ee8cc1Swenshuai.xi         }
1066*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_1)  // SH@20110111, if CC buffer in MIU0, enable here
1067*53ee8cc1Swenshuai.xi         {
1068*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] & (u32Miu3_base - 1); // to Phy address
1069*53ee8cc1Swenshuai.xi         }
1070*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_2)  // SH@20110111, if CC buffer in MIU0, enable here
1071*53ee8cc1Swenshuai.xi         {
1072*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] & (u32Miu3_base - 1); // to Phy address
1073*53ee8cc1Swenshuai.xi         }
1074*53ee8cc1Swenshuai.xi         else if(u8BufSelMiu == E_CHIP_MIU_3)  // SH@20110111, if CC buffer in MIU0, enable here
1075*53ee8cc1Swenshuai.xi         {
1076*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] ;//& (MIU1_BASEADDR - 1); // to Phy address
1077*53ee8cc1Swenshuai.xi         }
1078*53ee8cc1Swenshuai.xi     }
1079*53ee8cc1Swenshuai.xi 
1080*53ee8cc1Swenshuai.xi     if ((u32SW_Address[u8CC608] + u32ParsedDataSize) < (u32MVDCC_Temp1 + CCMVD_RINGBUFFER_LEN[u8CC608]))
1081*53ee8cc1Swenshuai.xi     {
1082*53ee8cc1Swenshuai.xi         u32SW_Address[u8CC608] += u32ParsedDataSize;
1083*53ee8cc1Swenshuai.xi     }
1084*53ee8cc1Swenshuai.xi     else
1085*53ee8cc1Swenshuai.xi     {
1086*53ee8cc1Swenshuai.xi         u32SW_Address[u8CC608] = (u32ParsedDataSize + u32SW_Address[u8CC608] - CCMVD_RINGBUFFER_LEN[u8CC608]);
1087*53ee8cc1Swenshuai.xi     }
1088*53ee8cc1Swenshuai.xi 
1089*53ee8cc1Swenshuai.xi #if 0
1090*53ee8cc1Swenshuai.xi     if(u32HW_Address - u32SW_Address >= 512)
1091*53ee8cc1Swenshuai.xi     {
1092*53ee8cc1Swenshuai.xi         MVD_PRINT("Sync:0x%08Lx", u32SW_Address);
1093*53ee8cc1Swenshuai.xi         u32SW_Address = u32HW_Address;
1094*53ee8cc1Swenshuai.xi         MVD_PRINT("-->0x%08Lx\n", u32SW_Address);
1095*53ee8cc1Swenshuai.xi     }
1096*53ee8cc1Swenshuai.xi #endif
1097*53ee8cc1Swenshuai.xi 
1098*53ee8cc1Swenshuai.xi     MDrv_CC_CM_SetMVDRB_SWAddr(u32Id, u32SW_Address[u8CC608], u8CC608);
1099*53ee8cc1Swenshuai.xi }
1100*53ee8cc1Swenshuai.xi #else
MDrv_CC_PM_SetMVDRB_ReadAddr(MS_U32 u32Id,MS_U32 u32EachPacketSize,MS_U8 u8CC608)1101*53ee8cc1Swenshuai.xi void MDrv_CC_PM_SetMVDRB_ReadAddr(MS_U32 u32Id, MS_U32 u32EachPacketSize, MS_U8 u8CC608)
1102*53ee8cc1Swenshuai.xi {
1103*53ee8cc1Swenshuai.xi     MS_U32 u32MVDCC_Temp1 = 0;
1104*53ee8cc1Swenshuai.xi     MS_U32 u32ParsedDataSize;
1105*53ee8cc1Swenshuai.xi 
1106*53ee8cc1Swenshuai.xi     // Get the Parsed Data Size
1107*53ee8cc1Swenshuai.xi     if ((u32EachPacketSize % MVD_CCRB_PACKET_LENGTH) != 0)
1108*53ee8cc1Swenshuai.xi     {
1109*53ee8cc1Swenshuai.xi         u32ParsedDataSize = MVD_CCRB_PACKET_LENGTH * ((u32EachPacketSize / MVD_CCRB_PACKET_LENGTH)+1);
1110*53ee8cc1Swenshuai.xi     }
1111*53ee8cc1Swenshuai.xi     else
1112*53ee8cc1Swenshuai.xi     {
1113*53ee8cc1Swenshuai.xi         u32ParsedDataSize = u32EachPacketSize;
1114*53ee8cc1Swenshuai.xi     }
1115*53ee8cc1Swenshuai.xi 
1116*53ee8cc1Swenshuai.xi     // Add the SW Address
1117*53ee8cc1Swenshuai.xi     if(MVD_ON_MIU1)
1118*53ee8cc1Swenshuai.xi     {
1119*53ee8cc1Swenshuai.xi         if(bBufMiu0)  // SH@20110111, if CC buffer in MIU0, enable here
1120*53ee8cc1Swenshuai.xi         {
1121*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] & (MIU1_BASEADDR - 1); // to Phy address
1122*53ee8cc1Swenshuai.xi         }
1123*53ee8cc1Swenshuai.xi         else // CC buffer in MIU1
1124*53ee8cc1Swenshuai.xi         {
1125*53ee8cc1Swenshuai.xi             u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608] ;//& (MIU1_BASEADDR - 1); // to Phy address
1126*53ee8cc1Swenshuai.xi         }
1127*53ee8cc1Swenshuai.xi     }
1128*53ee8cc1Swenshuai.xi     else
1129*53ee8cc1Swenshuai.xi     {
1130*53ee8cc1Swenshuai.xi         u32MVDCC_Temp1 = CCMVD_RINGBUFFER_START_ADR[u8CC608];
1131*53ee8cc1Swenshuai.xi     }
1132*53ee8cc1Swenshuai.xi 
1133*53ee8cc1Swenshuai.xi     if ((u32SW_Address[u8CC608] + u32ParsedDataSize) < (u32MVDCC_Temp1 + CCMVD_RINGBUFFER_LEN[u8CC608]))
1134*53ee8cc1Swenshuai.xi     {
1135*53ee8cc1Swenshuai.xi         u32SW_Address[u8CC608] += u32ParsedDataSize;
1136*53ee8cc1Swenshuai.xi     }
1137*53ee8cc1Swenshuai.xi     else
1138*53ee8cc1Swenshuai.xi     {
1139*53ee8cc1Swenshuai.xi         u32SW_Address[u8CC608] = (u32ParsedDataSize + u32SW_Address[u8CC608] - CCMVD_RINGBUFFER_LEN[u8CC608]);
1140*53ee8cc1Swenshuai.xi     }
1141*53ee8cc1Swenshuai.xi 
1142*53ee8cc1Swenshuai.xi #if 0
1143*53ee8cc1Swenshuai.xi     if(u32HW_Address - u32SW_Address >= 512)
1144*53ee8cc1Swenshuai.xi     {
1145*53ee8cc1Swenshuai.xi         MVD_PRINT("Sync:0x%08Lx", u32SW_Address);
1146*53ee8cc1Swenshuai.xi         u32SW_Address = u32HW_Address;
1147*53ee8cc1Swenshuai.xi         MVD_PRINT("-->0x%08Lx\n", u32SW_Address);
1148*53ee8cc1Swenshuai.xi     }
1149*53ee8cc1Swenshuai.xi #endif
1150*53ee8cc1Swenshuai.xi 
1151*53ee8cc1Swenshuai.xi     MDrv_CC_CM_SetMVDRB_SWAddr(u32Id, u32SW_Address[u8CC608], u8CC608);
1152*53ee8cc1Swenshuai.xi }
1153*53ee8cc1Swenshuai.xi #endif
MDrv_CC_CM_GetInfo(MS_U32 u32Id,MS_U32 selector,MS_U8 type,MS_U32 * p1,MS_U32 * p2)1154*53ee8cc1Swenshuai.xi void MDrv_CC_CM_GetInfo(MS_U32 u32Id, MS_U32 selector, MS_U8 type, MS_U32 *p1, MS_U32 *p2)
1155*53ee8cc1Swenshuai.xi {
1156*53ee8cc1Swenshuai.xi     // Functionality select
1157*53ee8cc1Swenshuai.xi     switch (selector)
1158*53ee8cc1Swenshuai.xi     {
1159*53ee8cc1Swenshuai.xi         case CC_SELECTOR_708_SW:
1160*53ee8cc1Swenshuai.xi             *p1 = (MS_U32)bCC708Enable;
1161*53ee8cc1Swenshuai.xi             break;
1162*53ee8cc1Swenshuai.xi 
1163*53ee8cc1Swenshuai.xi #if defined( MSOS_TYPE_LINUX )
1164*53ee8cc1Swenshuai.xi         case CC_SELECTOR_CCMVD_RINGBUFFER:
1165*53ee8cc1Swenshuai.xi             *p1 = (MS_U32)CCMVD_RINGBUFFER_START_ADR[type];
1166*53ee8cc1Swenshuai.xi             *p2 = (MS_U32)CCMVD_RINGBUFFER_LEN[type];
1167*53ee8cc1Swenshuai.xi             break;
1168*53ee8cc1Swenshuai.xi #endif
1169*53ee8cc1Swenshuai.xi 
1170*53ee8cc1Swenshuai.xi         default:
1171*53ee8cc1Swenshuai.xi             *p1 = *p2 = 0;
1172*53ee8cc1Swenshuai.xi             break;
1173*53ee8cc1Swenshuai.xi     }
1174*53ee8cc1Swenshuai.xi }
1175*53ee8cc1Swenshuai.xi 
MDrv_CC_CM_Get708Sw(MS_U32 u32Id)1176*53ee8cc1Swenshuai.xi MS_BOOL MDrv_CC_CM_Get708Sw(MS_U32 u32Id)
1177*53ee8cc1Swenshuai.xi {
1178*53ee8cc1Swenshuai.xi     return bCC708Enable;
1179*53ee8cc1Swenshuai.xi }
1180*53ee8cc1Swenshuai.xi 
MDrv_CC_CM_IsMvdRstDone(MS_U32 u32Id,MS_U8 type)1181*53ee8cc1Swenshuai.xi MS_BOOL MDrv_CC_CM_IsMvdRstDone(MS_U32 u32Id, MS_U8 type)
1182*53ee8cc1Swenshuai.xi {
1183*53ee8cc1Swenshuai.xi     MS_BOOL bRet = FALSE;
1184*53ee8cc1Swenshuai.xi     MS_U8 u8HalIdx = MVD_GetHalIdx(u32Id);
1185*53ee8cc1Swenshuai.xi 
1186*53ee8cc1Swenshuai.xi     if(type == E_CC_MVD_TYPE_608)   // CC608
1187*53ee8cc1Swenshuai.xi     {
1188*53ee8cc1Swenshuai.xi         if(!HAL_MVD_IsCmdFinished(u8HalIdx, MVD_HANDSHAKE_RST_CC608))
1189*53ee8cc1Swenshuai.xi         {
1190*53ee8cc1Swenshuai.xi             bRet = TRUE;
1191*53ee8cc1Swenshuai.xi         }
1192*53ee8cc1Swenshuai.xi     }
1193*53ee8cc1Swenshuai.xi     else            // CC708
1194*53ee8cc1Swenshuai.xi     {
1195*53ee8cc1Swenshuai.xi         if(!HAL_MVD_IsCmdFinished(u8HalIdx, MVD_HANDSHAKE_RST_CC708))
1196*53ee8cc1Swenshuai.xi         {
1197*53ee8cc1Swenshuai.xi             bRet = TRUE;
1198*53ee8cc1Swenshuai.xi         }
1199*53ee8cc1Swenshuai.xi     }
1200*53ee8cc1Swenshuai.xi 
1201*53ee8cc1Swenshuai.xi     return bRet;
1202*53ee8cc1Swenshuai.xi }
1203*53ee8cc1Swenshuai.xi 
1204*53ee8cc1Swenshuai.xi 
1205*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
1206*53ee8cc1Swenshuai.xi /// Enhance CC info mode, only support cc608
1207*53ee8cc1Swenshuai.xi /// @param bEnable \b IN
1208*53ee8cc1Swenshuai.xi ///   - # TRUE for enhance to dump the pts/tmp_ref info
1209*53ee8cc1Swenshuai.xi ///   - # FALSE for original
1210*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
MDrv_CC_InfoEnhanceMode(MS_U32 u32Id,MS_BOOL bEnable)1211*53ee8cc1Swenshuai.xi MS_BOOL MDrv_CC_InfoEnhanceMode(MS_U32 u32Id,MS_BOOL bEnable)
1212*53ee8cc1Swenshuai.xi {
1213*53ee8cc1Swenshuai.xi     MS_U8 u8HalIdx = MVD_GetHalIdx(u32Id);
1214*53ee8cc1Swenshuai.xi     MS_U8 u8Type = E_CC_MVD_TYPE_608;
1215*53ee8cc1Swenshuai.xi     MVD_CmdArg mvdcmd;
1216*53ee8cc1Swenshuai.xi     memset((void *)&mvdcmd, 0, sizeof(MVD_CmdArg));
1217*53ee8cc1Swenshuai.xi 
1218*53ee8cc1Swenshuai.xi     mvdcmd.Arg0 = bEnable;
1219*53ee8cc1Swenshuai.xi     mvdcmd.Arg3 = u8Type;
1220*53ee8cc1Swenshuai.xi     SET_DECNUM(mvdcmd, u8HalIdx);
1221*53ee8cc1Swenshuai.xi 
1222*53ee8cc1Swenshuai.xi     if (HAL_MVD_MVDCommand(CMD_EN_CC_INFO_ENHANCE, &mvdcmd) != TRUE)
1223*53ee8cc1Swenshuai.xi     {
1224*53ee8cc1Swenshuai.xi         MVDCC_EXHANDLE(MVD_PRINT("%s: cmd 0x%x fail!!\n", __FUNCTION__, CMD_EN_CC_INFO_ENHANCE));
1225*53ee8cc1Swenshuai.xi         return FALSE;
1226*53ee8cc1Swenshuai.xi     }
1227*53ee8cc1Swenshuai.xi 
1228*53ee8cc1Swenshuai.xi     return TRUE;
1229*53ee8cc1Swenshuai.xi }
1230*53ee8cc1Swenshuai.xi #endif
1231