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