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) 2010-2012 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 ///////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi
95*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi ///
97*53ee8cc1Swenshuai.xi /// file drvMMFilein.c
98*53ee8cc1Swenshuai.xi /// @brief Multimedia File In (MMFILEIN 2) Driver Interface
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor,Inc.
100*53ee8cc1Swenshuai.xi /// @attention
101*53ee8cc1Swenshuai.xi /// All MMFILEIN DDI are not allowed to use in any interrupt context other than MMFILEIN ISR and Callback
102*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
103*53ee8cc1Swenshuai.xi
104*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
105*53ee8cc1Swenshuai.xi // Include Files
106*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
107*53ee8cc1Swenshuai.xi
108*53ee8cc1Swenshuai.xi // Common Definition
109*53ee8cc1Swenshuai.xi #include "MsVersion.h"
110*53ee8cc1Swenshuai.xi #include "MsCommon.h"
111*53ee8cc1Swenshuai.xi #include "drvMMIO.h"
112*53ee8cc1Swenshuai.xi
113*53ee8cc1Swenshuai.xi // Internal Definition
114*53ee8cc1Swenshuai.xi #include "asmCPU.h"
115*53ee8cc1Swenshuai.xi #include "halMMFilein.h"
116*53ee8cc1Swenshuai.xi #include "drvMMFilein.h"
117*53ee8cc1Swenshuai.xi
118*53ee8cc1Swenshuai.xi #ifdef MMFI_HW_BOX_SERIES
119*53ee8cc1Swenshuai.xi #include "regTSP.h"
120*53ee8cc1Swenshuai.xi #include "halTSP.h"
121*53ee8cc1Swenshuai.xi #endif
122*53ee8cc1Swenshuai.xi
123*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
124*53ee8cc1Swenshuai.xi #include <sys/ioctl.h>
125*53ee8cc1Swenshuai.xi #include <unistd.h>
126*53ee8cc1Swenshuai.xi #include <fcntl.h> // O_RDWR
127*53ee8cc1Swenshuai.xi #endif
128*53ee8cc1Swenshuai.xi
129*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
130*53ee8cc1Swenshuai.xi #include <linux/string.h>
131*53ee8cc1Swenshuai.xi #endif
132*53ee8cc1Swenshuai.xi
133*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
134*53ee8cc1Swenshuai.xi // Driver Compiler Options
135*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
136*53ee8cc1Swenshuai.xi
137*53ee8cc1Swenshuai.xi
138*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
139*53ee8cc1Swenshuai.xi // Local Defines
140*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
141*53ee8cc1Swenshuai.xi #define MMFI_MUTEX_WAIT_TIME 0xFFFFFFFFUL
142*53ee8cc1Swenshuai.xi
143*53ee8cc1Swenshuai.xi #define MMFI_DBGERR(x) {if(_dbglevel >= E_DRVMMFI_DBG_ERR) x; }
144*53ee8cc1Swenshuai.xi #define MMFI_DBGINFO(x) {if(_dbglevel >= E_DRVMMFI_DBG_INFO) x; }
145*53ee8cc1Swenshuai.xi
146*53ee8cc1Swenshuai.xi #define MMFI_ASSERT(_bool) if(!(_bool)) \
147*53ee8cc1Swenshuai.xi { \
148*53ee8cc1Swenshuai.xi if(_dbglevel >= E_DRVMMFI_DBG_INFO) \
149*53ee8cc1Swenshuai.xi { printf("ASSERT ERR\n"); } \
150*53ee8cc1Swenshuai.xi return DRVMMFI_FAIL; \
151*53ee8cc1Swenshuai.xi }
152*53ee8cc1Swenshuai.xi
153*53ee8cc1Swenshuai.xi #define TSP_RES_ALLOC_MMFIPATH_CHECK(PhyMmfiPath) { \
154*53ee8cc1Swenshuai.xi if((_pmmfi_res->_bIsMmfiPathEverAlloc == TRUE) && (_pmmfi_res->_stMmfiPathState[PhyMmfiPath].bUsed == FALSE)) \
155*53ee8cc1Swenshuai.xi { \
156*53ee8cc1Swenshuai.xi printf("[%s][%d]: Mix old & new TSP Path resource allocation scheme !!\n", __FUNCTION__, __LINE__); \
157*53ee8cc1Swenshuai.xi } \
158*53ee8cc1Swenshuai.xi }
159*53ee8cc1Swenshuai.xi
160*53ee8cc1Swenshuai.xi #define _MMFI_ENTRY() if (!MsOS_ObtainMutex(_pmmfi_res->_s32MMFIMutexId, MMFI_MUTEX_WAIT_TIME)) \
161*53ee8cc1Swenshuai.xi { \
162*53ee8cc1Swenshuai.xi return DRVMMFI_FAIL; \
163*53ee8cc1Swenshuai.xi }
164*53ee8cc1Swenshuai.xi
165*53ee8cc1Swenshuai.xi #define _MMFI_RETURN(_ret) do{ \
166*53ee8cc1Swenshuai.xi MsOS_ReleaseMutex(_pmmfi_res->_s32MMFIMutexId); \
167*53ee8cc1Swenshuai.xi return _ret; \
168*53ee8cc1Swenshuai.xi }while(0);
169*53ee8cc1Swenshuai.xi
170*53ee8cc1Swenshuai.xi #define _MMFI_GET_ENGID(x) (x < (MS_U8)MMFI_PIDFLT0_NUM ? 0 : 1);
171*53ee8cc1Swenshuai.xi #define _MMFI_GET_FLTID(x) (x % (MS_U8)MMFI_PIDFLT0_NUM);
172*53ee8cc1Swenshuai.xi #define _MMFI_GET_FLTLISTID(e,f) (e == 0 ? f : ((MS_U8)MMFI_PIDFLT0_NUM+f))
173*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
174*53ee8cc1Swenshuai.xi // Local Structures
175*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
176*53ee8cc1Swenshuai.xi typedef struct _DrvMMFI_State
177*53ee8cc1Swenshuai.xi {
178*53ee8cc1Swenshuai.xi DrvMMFI_FltType FltType[MMFI_PIDFLT0_NUM];
179*53ee8cc1Swenshuai.xi }DRVMMFI_State;
180*53ee8cc1Swenshuai.xi
181*53ee8cc1Swenshuai.xi typedef struct
182*53ee8cc1Swenshuai.xi {
183*53ee8cc1Swenshuai.xi MS_BOOL bUsed;
184*53ee8cc1Swenshuai.xi } DrvMMFI_Path_State;
185*53ee8cc1Swenshuai.xi
186*53ee8cc1Swenshuai.xi typedef struct _MMFI_RESOURCE_PRIVATE
187*53ee8cc1Swenshuai.xi {
188*53ee8cc1Swenshuai.xi MS_S32 _s32MMFIMutexId;
189*53ee8cc1Swenshuai.xi DRVMMFI_State _MMFIState[MMFI_ENGINE_NUM];
190*53ee8cc1Swenshuai.xi
191*53ee8cc1Swenshuai.xi DrvMMFI_Path_State _stMmfiPathState[MMFI_ENGINE_NUM];
192*53ee8cc1Swenshuai.xi MS_BOOL _bIsMmfiPathEverAlloc;
193*53ee8cc1Swenshuai.xi
194*53ee8cc1Swenshuai.xi MS_BOOL _bSWInit;
195*53ee8cc1Swenshuai.xi }MMFI_RESOURCE_PRIVATE;
196*53ee8cc1Swenshuai.xi
197*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
198*53ee8cc1Swenshuai.xi // Global Variables
199*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
200*53ee8cc1Swenshuai.xi #ifndef MMFI_UTOPIA_20
201*53ee8cc1Swenshuai.xi static MMFI_RESOURCE_PRIVATE _mmfi_res = {
202*53ee8cc1Swenshuai.xi ._s32MMFIMutexId = -1,
203*53ee8cc1Swenshuai.xi ._MMFIState = {
204*53ee8cc1Swenshuai.xi {.FltType = {E_DRVMMFI_FLTTYPE_NONE},}
205*53ee8cc1Swenshuai.xi },
206*53ee8cc1Swenshuai.xi
207*53ee8cc1Swenshuai.xi ._stMmfiPathState = {[0 ... (MMFI_ENGINE_NUM-1)] = {FALSE}},
208*53ee8cc1Swenshuai.xi ._bIsMmfiPathEverAlloc = FALSE,
209*53ee8cc1Swenshuai.xi
210*53ee8cc1Swenshuai.xi ._bSWInit = FALSE,
211*53ee8cc1Swenshuai.xi };
212*53ee8cc1Swenshuai.xi
213*53ee8cc1Swenshuai.xi static MMFI_RESOURCE_PRIVATE* _pmmfi_res = &_mmfi_res;
214*53ee8cc1Swenshuai.xi #else
215*53ee8cc1Swenshuai.xi static MMFI_RESOURCE_PRIVATE* _pmmfi_res = NULL;
216*53ee8cc1Swenshuai.xi #endif
217*53ee8cc1Swenshuai.xi
218*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
219*53ee8cc1Swenshuai.xi // Local Variables
220*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
221*53ee8cc1Swenshuai.xi DrvMMFI_DbgLevel _dbglevel = E_DRVMMFI_DBG_Release;
222*53ee8cc1Swenshuai.xi static MS_BOOL _bBankInit = FALSE;
223*53ee8cc1Swenshuai.xi static MS_U16 _u16MMFIMobfKey[MMFI_ENGINE_NUM] = {[0 ... (MMFI_ENGINE_NUM-1)] = 0};
224*53ee8cc1Swenshuai.xi
225*53ee8cc1Swenshuai.xi
226*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
227*53ee8cc1Swenshuai.xi // Local Functions
228*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
229*53ee8cc1Swenshuai.xi
_MMFI_InitResource(MMFI_RESOURCE_PRIVATE * presource)230*53ee8cc1Swenshuai.xi static MS_BOOL _MMFI_InitResource(MMFI_RESOURCE_PRIVATE* presource)
231*53ee8cc1Swenshuai.xi {
232*53ee8cc1Swenshuai.xi MS_U32 u32ii, u32jj;
233*53ee8cc1Swenshuai.xi
234*53ee8cc1Swenshuai.xi if(presource == NULL)
235*53ee8cc1Swenshuai.xi return FALSE;
236*53ee8cc1Swenshuai.xi
237*53ee8cc1Swenshuai.xi presource->_s32MMFIMutexId = -1;
238*53ee8cc1Swenshuai.xi
239*53ee8cc1Swenshuai.xi for(u32jj = 0; u32jj < MMFI_ENGINE_NUM; u32jj++)
240*53ee8cc1Swenshuai.xi {
241*53ee8cc1Swenshuai.xi for(u32ii = 0; u32ii < MMFI_PIDFLT0_NUM; u32ii++)
242*53ee8cc1Swenshuai.xi {
243*53ee8cc1Swenshuai.xi
244*53ee8cc1Swenshuai.xi presource->_MMFIState[u32jj].FltType[u32ii] = E_DRVMMFI_FLTTYPE_NONE;
245*53ee8cc1Swenshuai.xi }
246*53ee8cc1Swenshuai.xi }
247*53ee8cc1Swenshuai.xi
248*53ee8cc1Swenshuai.xi for(u32ii = 0; u32ii < MMFI_ENGINE_NUM; u32ii++)
249*53ee8cc1Swenshuai.xi {
250*53ee8cc1Swenshuai.xi presource->_stMmfiPathState[u32ii].bUsed = FALSE;
251*53ee8cc1Swenshuai.xi }
252*53ee8cc1Swenshuai.xi
253*53ee8cc1Swenshuai.xi presource->_bIsMmfiPathEverAlloc = FALSE;
254*53ee8cc1Swenshuai.xi
255*53ee8cc1Swenshuai.xi presource->_bSWInit = FALSE;
256*53ee8cc1Swenshuai.xi
257*53ee8cc1Swenshuai.xi return TRUE;
258*53ee8cc1Swenshuai.xi }
259*53ee8cc1Swenshuai.xi
_MMFI_Path_Alloc(MS_U32 * pu32PathId)260*53ee8cc1Swenshuai.xi static MMFI_Result _MMFI_Path_Alloc(MS_U32 *pu32PathId)
261*53ee8cc1Swenshuai.xi {
262*53ee8cc1Swenshuai.xi DrvMMFI_Path eMmfiPath = E_DRVMMFI_PATH0;
263*53ee8cc1Swenshuai.xi
264*53ee8cc1Swenshuai.xi *pu32PathId = (MS_U32)-1;
265*53ee8cc1Swenshuai.xi for(eMmfiPath = 0; eMmfiPath < MMFI_ENGINE_NUM; eMmfiPath++)
266*53ee8cc1Swenshuai.xi {
267*53ee8cc1Swenshuai.xi if(_pmmfi_res->_stMmfiPathState[eMmfiPath].bUsed == FALSE)
268*53ee8cc1Swenshuai.xi {
269*53ee8cc1Swenshuai.xi _pmmfi_res->_stMmfiPathState[eMmfiPath].bUsed = TRUE;
270*53ee8cc1Swenshuai.xi *pu32PathId = (MS_U32)eMmfiPath;
271*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
272*53ee8cc1Swenshuai.xi }
273*53ee8cc1Swenshuai.xi }
274*53ee8cc1Swenshuai.xi
275*53ee8cc1Swenshuai.xi return DRVMMFI_FAIL;
276*53ee8cc1Swenshuai.xi }
277*53ee8cc1Swenshuai.xi
_MMFI_Path_Free(DrvMMFI_Path epath)278*53ee8cc1Swenshuai.xi static MMFI_Result _MMFI_Path_Free(DrvMMFI_Path epath)
279*53ee8cc1Swenshuai.xi {
280*53ee8cc1Swenshuai.xi if(_pmmfi_res->_stMmfiPathState[epath].bUsed == FALSE)
281*53ee8cc1Swenshuai.xi return DRVMMFI_FAIL;
282*53ee8cc1Swenshuai.xi
283*53ee8cc1Swenshuai.xi _pmmfi_res->_stMmfiPathState[epath].bUsed = FALSE;
284*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
285*53ee8cc1Swenshuai.xi }
286*53ee8cc1Swenshuai.xi
287*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
288*53ee8cc1Swenshuai.xi /// Initialize lib resource API
289*53ee8cc1Swenshuai.xi /// @param pResMemAddr \b IN: Pointer to store resource memory address
290*53ee8cc1Swenshuai.xi /// @return MMFI_Result
291*53ee8cc1Swenshuai.xi /// @note
292*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_InitLibResource(void * pResMemAddr)293*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_InitLibResource(void* pResMemAddr)
294*53ee8cc1Swenshuai.xi {
295*53ee8cc1Swenshuai.xi MS_VIRT virtBank;
296*53ee8cc1Swenshuai.xi MS_PHY u32BankSize;
297*53ee8cc1Swenshuai.xi MMFI_ASSERT(pResMemAddr != 0);
298*53ee8cc1Swenshuai.xi
299*53ee8cc1Swenshuai.xi _pmmfi_res = (MMFI_RESOURCE_PRIVATE*)pResMemAddr;
300*53ee8cc1Swenshuai.xi
301*53ee8cc1Swenshuai.xi if(_pmmfi_res->_bSWInit != TRUE)
302*53ee8cc1Swenshuai.xi {
303*53ee8cc1Swenshuai.xi if(_MMFI_InitResource(_pmmfi_res) == FALSE)
304*53ee8cc1Swenshuai.xi return DRVMMFI_FAIL;
305*53ee8cc1Swenshuai.xi }
306*53ee8cc1Swenshuai.xi
307*53ee8cc1Swenshuai.xi // For multi-process use case. (different process should set the value of bank again)
308*53ee8cc1Swenshuai.xi if(_bBankInit == FALSE)
309*53ee8cc1Swenshuai.xi {
310*53ee8cc1Swenshuai.xi if (FALSE == MDrv_MMIO_GetBASE(&virtBank, &u32BankSize, MS_MODULE_MMFILEIN))
311*53ee8cc1Swenshuai.xi {
312*53ee8cc1Swenshuai.xi MMFI_DBGERR(printf("MDrv_MMIO_GetBASE failed\n"));
313*53ee8cc1Swenshuai.xi return DRVMMFI_FAIL;
314*53ee8cc1Swenshuai.xi }
315*53ee8cc1Swenshuai.xi MMFI_DBGINFO((printf("MMFI Base Bank 0x%x\n", (unsigned int)virtBank)));
316*53ee8cc1Swenshuai.xi HAL_MMFI_SetBank(virtBank);
317*53ee8cc1Swenshuai.xi _bBankInit = TRUE;
318*53ee8cc1Swenshuai.xi }
319*53ee8cc1Swenshuai.xi
320*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
321*53ee8cc1Swenshuai.xi }
322*53ee8cc1Swenshuai.xi
323*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
324*53ee8cc1Swenshuai.xi /// Initialize MMFilein driver
325*53ee8cc1Swenshuai.xi /// @return MMFI_Result
326*53ee8cc1Swenshuai.xi /// @note
327*53ee8cc1Swenshuai.xi /// It should be called before calling any other MMFilein DDI functions.
328*53ee8cc1Swenshuai.xi /// Driver task is in @ref E_TASK_PRI_SYS level.
329*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_Init(void)330*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_Init(void)
331*53ee8cc1Swenshuai.xi {
332*53ee8cc1Swenshuai.xi MS_VIRT virtBank;
333*53ee8cc1Swenshuai.xi MS_PHY u32BankSize;
334*53ee8cc1Swenshuai.xi MS_U8 u8ii, u8jj;
335*53ee8cc1Swenshuai.xi
336*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
337*53ee8cc1Swenshuai.xi
338*53ee8cc1Swenshuai.xi if (FALSE == MDrv_MMIO_GetBASE(&virtBank, &u32BankSize, MS_MODULE_MMFILEIN))
339*53ee8cc1Swenshuai.xi {
340*53ee8cc1Swenshuai.xi MMFI_DBGERR(printf("MDrv_MMIO_GetBASE failed\n"));
341*53ee8cc1Swenshuai.xi return DRVMMFI_FAIL;
342*53ee8cc1Swenshuai.xi }
343*53ee8cc1Swenshuai.xi MMFI_DBGINFO((printf("MMFI Base Bank 0x%x\n", (unsigned int)virtBank)));
344*53ee8cc1Swenshuai.xi HAL_MMFI_SetBank(virtBank);
345*53ee8cc1Swenshuai.xi
346*53ee8cc1Swenshuai.xi if(_pmmfi_res->_bSWInit)
347*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
348*53ee8cc1Swenshuai.xi
349*53ee8cc1Swenshuai.xi _pmmfi_res->_s32MMFIMutexId = MsOS_CreateMutex(E_MSOS_FIFO, "Mutex_MMFI", MSOS_PROCESS_SHARED);
350*53ee8cc1Swenshuai.xi if(_pmmfi_res->_s32MMFIMutexId == -1)
351*53ee8cc1Swenshuai.xi {
352*53ee8cc1Swenshuai.xi MMFI_DBGERR(printf("MsOS_CreateMutex failed\n"));
353*53ee8cc1Swenshuai.xi return DRVMMFI_FAIL;
354*53ee8cc1Swenshuai.xi }
355*53ee8cc1Swenshuai.xi
356*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
357*53ee8cc1Swenshuai.xi
358*53ee8cc1Swenshuai.xi HAL_MMFI_Reset_All();
359*53ee8cc1Swenshuai.xi
360*53ee8cc1Swenshuai.xi for(u8jj = 0; u8jj < (MS_U8)MMFI_ENGINE_NUM; u8jj++)
361*53ee8cc1Swenshuai.xi {
362*53ee8cc1Swenshuai.xi for(u8ii = 0; u8ii < (MS_U8)MMFI_PIDFLT0_NUM; u8ii++)
363*53ee8cc1Swenshuai.xi {
364*53ee8cc1Swenshuai.xi _pmmfi_res->_MMFIState[u8jj].FltType[u8ii] = E_DRVMMFI_FLTTYPE_NONE;
365*53ee8cc1Swenshuai.xi HAL_MMFI_PidFlt_Reset(u8jj, u8ii);
366*53ee8cc1Swenshuai.xi }
367*53ee8cc1Swenshuai.xi HAL_MMFI_Set_FileinTimer(u8jj, 0x0A);
368*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable(u8ii, MMFI_CFG_ALT_TS_SIZE, TRUE);
369*53ee8cc1Swenshuai.xi }
370*53ee8cc1Swenshuai.xi
371*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable(0, MMFI_CFG_RADDR_READ, TRUE);
372*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable(1, MMFI_CFG_RADDR_READ, TRUE);
373*53ee8cc1Swenshuai.xi
374*53ee8cc1Swenshuai.xi _pmmfi_res->_bSWInit = TRUE;
375*53ee8cc1Swenshuai.xi
376*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
377*53ee8cc1Swenshuai.xi }
378*53ee8cc1Swenshuai.xi
379*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
380*53ee8cc1Swenshuai.xi /// Close MMFilein
381*53ee8cc1Swenshuai.xi /// @return MMFI_Result
382*53ee8cc1Swenshuai.xi /// @note
383*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_Exit(void)384*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_Exit(void)
385*53ee8cc1Swenshuai.xi {
386*53ee8cc1Swenshuai.xi MS_U8 u8ii, u8jj;
387*53ee8cc1Swenshuai.xi
388*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
389*53ee8cc1Swenshuai.xi
390*53ee8cc1Swenshuai.xi if(_pmmfi_res->_bSWInit == FALSE)
391*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
392*53ee8cc1Swenshuai.xi
393*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
394*53ee8cc1Swenshuai.xi
395*53ee8cc1Swenshuai.xi for(u8jj = 0; u8jj < (MS_U8)MMFI_ENGINE_NUM; u8jj++)
396*53ee8cc1Swenshuai.xi {
397*53ee8cc1Swenshuai.xi for(u8ii = 0; u8ii < (MS_U8)MMFI_PIDFLT0_NUM; u8ii++)
398*53ee8cc1Swenshuai.xi {
399*53ee8cc1Swenshuai.xi _pmmfi_res->_MMFIState[u8jj].FltType[u8ii] = E_DRVMMFI_FLTTYPE_NONE;
400*53ee8cc1Swenshuai.xi HAL_MMFI_PidFlt_Reset(u8jj, u8ii);
401*53ee8cc1Swenshuai.xi }
402*53ee8cc1Swenshuai.xi }
403*53ee8cc1Swenshuai.xi
404*53ee8cc1Swenshuai.xi MsOS_ReleaseMutex(_pmmfi_res->_s32MMFIMutexId);
405*53ee8cc1Swenshuai.xi MsOS_DeleteMutex(_pmmfi_res->_s32MMFIMutexId);
406*53ee8cc1Swenshuai.xi _pmmfi_res->_s32MMFIMutexId = -1;
407*53ee8cc1Swenshuai.xi
408*53ee8cc1Swenshuai.xi _pmmfi_res->_bSWInit = FALSE;
409*53ee8cc1Swenshuai.xi
410*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
411*53ee8cc1Swenshuai.xi }
412*53ee8cc1Swenshuai.xi
413*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
414*53ee8cc1Swenshuai.xi /// Get MM File-in HW interrupt status
415*53ee8cc1Swenshuai.xi /// @param pu32status \b OUT: pointer of storing HW interrupt status value
416*53ee8cc1Swenshuai.xi /// @return MMFI_Result
417*53ee8cc1Swenshuai.xi /// @note
418*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_Get_HWIntStatus(MS_U32 * pu32status)419*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_Get_HWIntStatus(MS_U32* pu32status)
420*53ee8cc1Swenshuai.xi {
421*53ee8cc1Swenshuai.xi *pu32status = HAL_MMFI_HWInt_Status();
422*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
423*53ee8cc1Swenshuai.xi }
424*53ee8cc1Swenshuai.xi
425*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
426*53ee8cc1Swenshuai.xi /// Set debug level of MMFilein
427*53ee8cc1Swenshuai.xi /// @param DbgLevel \b IN: Debug Level Value
428*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_SetDbgLevel(DrvMMFI_DbgLevel DbgLevel)429*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_SetDbgLevel(DrvMMFI_DbgLevel DbgLevel)
430*53ee8cc1Swenshuai.xi {
431*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
432*53ee8cc1Swenshuai.xi
433*53ee8cc1Swenshuai.xi _dbglevel = DbgLevel;
434*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
435*53ee8cc1Swenshuai.xi }
436*53ee8cc1Swenshuai.xi
437*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
438*53ee8cc1Swenshuai.xi /// Set Audio path to be MMFI
439*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable Flag
440*53ee8cc1Swenshuai.xi /// @return MMFI_Result
441*53ee8cc1Swenshuai.xi /// @note
442*53ee8cc1Swenshuai.xi /// Not support in MMFI2
443*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_AudPath_Enable(MS_BOOL bEnable)444*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_AudPath_Enable(MS_BOOL bEnable)
445*53ee8cc1Swenshuai.xi {
446*53ee8cc1Swenshuai.xi return DRVMMFI_NOTSUPPORT;
447*53ee8cc1Swenshuai.xi }
448*53ee8cc1Swenshuai.xi
449*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
450*53ee8cc1Swenshuai.xi /// Set MM File-in Timer
451*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
452*53ee8cc1Swenshuai.xi /// @param u8timer \b IN: Filein Timer
453*53ee8cc1Swenshuai.xi /// @return MMFI_Result
454*53ee8cc1Swenshuai.xi /// @note
455*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_SetTimer(DrvMMFI_Path epath,MS_U8 u8timer)456*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_SetTimer(DrvMMFI_Path epath, MS_U8 u8timer)
457*53ee8cc1Swenshuai.xi {
458*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
459*53ee8cc1Swenshuai.xi
460*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
461*53ee8cc1Swenshuai.xi
462*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
463*53ee8cc1Swenshuai.xi HAL_MMFI_Set_FileinTimer((MS_U8)epath, u8timer);
464*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
465*53ee8cc1Swenshuai.xi }
466*53ee8cc1Swenshuai.xi
467*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
468*53ee8cc1Swenshuai.xi /// Enable File-in Byte Timer
469*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
470*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable flag
471*53ee8cc1Swenshuai.xi /// @return MMFI_Result
472*53ee8cc1Swenshuai.xi /// @note
473*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_ByteTimer_En(DrvMMFI_Path epath,MS_BOOL bEnable)474*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_ByteTimer_En(DrvMMFI_Path epath, MS_BOOL bEnable)
475*53ee8cc1Swenshuai.xi {
476*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
477*53ee8cc1Swenshuai.xi
478*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
479*53ee8cc1Swenshuai.xi
480*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
481*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable((MS_U8)epath, MMFI_CFG_BYTETIMER_EN, TRUE);
482*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
483*53ee8cc1Swenshuai.xi }
484*53ee8cc1Swenshuai.xi
485*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
486*53ee8cc1Swenshuai.xi /// Allocate MMFI Path Id
487*53ee8cc1Swenshuai.xi /// @param pu32PathId \b OUT: pointer of Path ID for return
488*53ee8cc1Swenshuai.xi /// @return MMFI_Result
489*53ee8cc1Swenshuai.xi /// @note
490*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_Path_Alloc(MS_U32 * pu32PathId)491*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_Path_Alloc(MS_U32 *pu32PathId)
492*53ee8cc1Swenshuai.xi {
493*53ee8cc1Swenshuai.xi MMFI_Result eRet = DRVMMFI_FAIL;
494*53ee8cc1Swenshuai.xi
495*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
496*53ee8cc1Swenshuai.xi
497*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
498*53ee8cc1Swenshuai.xi
499*53ee8cc1Swenshuai.xi eRet = _MMFI_Path_Alloc(pu32PathId);
500*53ee8cc1Swenshuai.xi
501*53ee8cc1Swenshuai.xi if(eRet == DRVMMFI_OK)
502*53ee8cc1Swenshuai.xi {
503*53ee8cc1Swenshuai.xi _pmmfi_res->_bIsMmfiPathEverAlloc = TRUE;
504*53ee8cc1Swenshuai.xi }
505*53ee8cc1Swenshuai.xi
506*53ee8cc1Swenshuai.xi _MMFI_RETURN(eRet);
507*53ee8cc1Swenshuai.xi }
508*53ee8cc1Swenshuai.xi
509*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
510*53ee8cc1Swenshuai.xi /// Free MMFI Path Id
511*53ee8cc1Swenshuai.xi /// @param ePathId \b IN: Path ID
512*53ee8cc1Swenshuai.xi /// @return MMFI_Result
513*53ee8cc1Swenshuai.xi /// @note
514*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_Path_Free(DrvMMFI_Path epath)515*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_Path_Free(DrvMMFI_Path epath)
516*53ee8cc1Swenshuai.xi {
517*53ee8cc1Swenshuai.xi MMFI_Result eRet = DRVMMFI_FAIL;
518*53ee8cc1Swenshuai.xi
519*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
520*53ee8cc1Swenshuai.xi
521*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
522*53ee8cc1Swenshuai.xi
523*53ee8cc1Swenshuai.xi eRet = _MMFI_Path_Free(epath);
524*53ee8cc1Swenshuai.xi
525*53ee8cc1Swenshuai.xi _MMFI_RETURN(eRet);
526*53ee8cc1Swenshuai.xi }
527*53ee8cc1Swenshuai.xi
528*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
529*53ee8cc1Swenshuai.xi /// Allocate MMFI PID filter
530*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
531*53ee8cc1Swenshuai.xi /// @param DrvMMFI_FltType \b IN: PID filter type
532*53ee8cc1Swenshuai.xi /// @param pu8PidFltId \b OUT: pointer of PID filter ID for return
533*53ee8cc1Swenshuai.xi /// @return MMFI_Result
534*53ee8cc1Swenshuai.xi /// @note
535*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_PidFlt_Alloc(DrvMMFI_Path epath,DrvMMFI_FltType eFilterType,MS_U8 * pu8PidFltId)536*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_PidFlt_Alloc(DrvMMFI_Path epath, DrvMMFI_FltType eFilterType, MS_U8 *pu8PidFltId)
537*53ee8cc1Swenshuai.xi {
538*53ee8cc1Swenshuai.xi MS_U8 u8ii, u8jj;
539*53ee8cc1Swenshuai.xi *pu8PidFltId = 0xFF;
540*53ee8cc1Swenshuai.xi
541*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
542*53ee8cc1Swenshuai.xi MMFI_ASSERT((eFilterType > E_DRVMMFI_FLTTYPE_NONE) && (eFilterType < E_DRVMMFI_FLTTYPE_MAX));
543*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
544*53ee8cc1Swenshuai.xi
545*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
546*53ee8cc1Swenshuai.xi u8jj = (MS_U8)epath;
547*53ee8cc1Swenshuai.xi for(u8ii = 0; u8ii < (MS_U8)MMFI_PIDFLT0_NUM; u8ii++)
548*53ee8cc1Swenshuai.xi {
549*53ee8cc1Swenshuai.xi if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_NONE)
550*53ee8cc1Swenshuai.xi {
551*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("Allocate PID Filter %d\n", (int)u8ii));
552*53ee8cc1Swenshuai.xi _pmmfi_res->_MMFIState[u8jj].FltType[u8ii] = eFilterType;
553*53ee8cc1Swenshuai.xi *pu8PidFltId = _MMFI_GET_FLTLISTID(u8jj, u8ii);
554*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
555*53ee8cc1Swenshuai.xi }
556*53ee8cc1Swenshuai.xi }
557*53ee8cc1Swenshuai.xi
558*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_FAIL);
559*53ee8cc1Swenshuai.xi
560*53ee8cc1Swenshuai.xi }
561*53ee8cc1Swenshuai.xi
562*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
563*53ee8cc1Swenshuai.xi /// Free MMFI PID filter
564*53ee8cc1Swenshuai.xi /// @param u8PidFltId \b IN: PID filter ID
565*53ee8cc1Swenshuai.xi /// @return MMFI_Result
566*53ee8cc1Swenshuai.xi /// @note
567*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_PidFlt_Free(MS_U8 u8PidFltId)568*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_PidFlt_Free(MS_U8 u8PidFltId)
569*53ee8cc1Swenshuai.xi {
570*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
571*53ee8cc1Swenshuai.xi MMFI_ASSERT(u8PidFltId < MMFI_PIDFLT_NUM_ALL);
572*53ee8cc1Swenshuai.xi
573*53ee8cc1Swenshuai.xi MS_U8 u8jj = _MMFI_GET_ENGID(u8PidFltId);
574*53ee8cc1Swenshuai.xi MS_U8 u8ii = _MMFI_GET_FLTID(u8PidFltId);
575*53ee8cc1Swenshuai.xi
576*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(u8jj);
577*53ee8cc1Swenshuai.xi
578*53ee8cc1Swenshuai.xi if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_NONE)
579*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
580*53ee8cc1Swenshuai.xi
581*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
582*53ee8cc1Swenshuai.xi
583*53ee8cc1Swenshuai.xi if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] < E_DRVMMFI_FLTTYPE_MAX)
584*53ee8cc1Swenshuai.xi {
585*53ee8cc1Swenshuai.xi _pmmfi_res->_MMFIState[u8jj].FltType[u8ii] = E_DRVMMFI_FLTTYPE_NONE;
586*53ee8cc1Swenshuai.xi HAL_MMFI_PidFlt_Reset(u8ii, u8jj);
587*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
588*53ee8cc1Swenshuai.xi }
589*53ee8cc1Swenshuai.xi
590*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_INVALID_PARAM);
591*53ee8cc1Swenshuai.xi }
592*53ee8cc1Swenshuai.xi
593*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
594*53ee8cc1Swenshuai.xi /// Enable PID filter
595*53ee8cc1Swenshuai.xi /// @param u8PidFltId \b IN: PID filter ID
596*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable Flag
597*53ee8cc1Swenshuai.xi /// @return MMFI_Result
598*53ee8cc1Swenshuai.xi /// @note
599*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_PidFlt_Enable(MS_U8 u8PidFltId,MS_BOOL bEnable)600*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_PidFlt_Enable(MS_U8 u8PidFltId, MS_BOOL bEnable)
601*53ee8cc1Swenshuai.xi {
602*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
603*53ee8cc1Swenshuai.xi MMFI_ASSERT(u8PidFltId < MMFI_PIDFLT_NUM_ALL);
604*53ee8cc1Swenshuai.xi
605*53ee8cc1Swenshuai.xi MS_U32 u32type = 0;
606*53ee8cc1Swenshuai.xi MS_U8 u8jj = _MMFI_GET_ENGID(u8PidFltId);
607*53ee8cc1Swenshuai.xi MS_U8 u8ii = _MMFI_GET_FLTID(u8PidFltId);
608*53ee8cc1Swenshuai.xi
609*53ee8cc1Swenshuai.xi MMFI_ASSERT(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] > E_DRVMMFI_FLTTYPE_NONE);
610*53ee8cc1Swenshuai.xi
611*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(u8jj);
612*53ee8cc1Swenshuai.xi
613*53ee8cc1Swenshuai.xi if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_AUD)
614*53ee8cc1Swenshuai.xi u32type = MMFI_PIDFLT_AFIFO_EN;
615*53ee8cc1Swenshuai.xi else if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_AUDB)
616*53ee8cc1Swenshuai.xi u32type = MMFI_PIDFLT_AFIFOB_EN;
617*53ee8cc1Swenshuai.xi #ifdef MMFI2_EXTRA_AUFIFO
618*53ee8cc1Swenshuai.xi else if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_AUDC)
619*53ee8cc1Swenshuai.xi u32type = MMFI_PIDFLT_AFIFOC_EN;
620*53ee8cc1Swenshuai.xi else if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_AUDD)
621*53ee8cc1Swenshuai.xi u32type = MMFI_PIDFLT_AFIFOD_EN;
622*53ee8cc1Swenshuai.xi #endif
623*53ee8cc1Swenshuai.xi else if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_VD3D)
624*53ee8cc1Swenshuai.xi u32type = MMFI_PIDFLT_V3DFIFO_EN;
625*53ee8cc1Swenshuai.xi else if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_VD)
626*53ee8cc1Swenshuai.xi u32type = MMFI_PIDFLT_VFIFO_EN;
627*53ee8cc1Swenshuai.xi #ifdef MMFI_HW_BOX_SERIES
628*53ee8cc1Swenshuai.xi else if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_AUDE)
629*53ee8cc1Swenshuai.xi u32type = MMFI_PIDFLT_AFIFOE_EN;
630*53ee8cc1Swenshuai.xi else if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_AUDF)
631*53ee8cc1Swenshuai.xi u32type = MMFI_PIDFLT_AFIFOF_EN;
632*53ee8cc1Swenshuai.xi else if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_VD3)
633*53ee8cc1Swenshuai.xi u32type = MMFI_PIDFLT_VFIFO3_EN;
634*53ee8cc1Swenshuai.xi else if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_VD4)
635*53ee8cc1Swenshuai.xi u32type = MMFI_PIDFLT_VFIFO4_EN;
636*53ee8cc1Swenshuai.xi else if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_VD5)
637*53ee8cc1Swenshuai.xi u32type = MMFI_PIDFLT_VFIFO5_EN;
638*53ee8cc1Swenshuai.xi else if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_VD6)
639*53ee8cc1Swenshuai.xi u32type = MMFI_PIDFLT_VFIFO6_EN;
640*53ee8cc1Swenshuai.xi else if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_VD7)
641*53ee8cc1Swenshuai.xi u32type = MMFI_PIDFLT_VFIFO7_EN;
642*53ee8cc1Swenshuai.xi else if(_pmmfi_res->_MMFIState[u8jj].FltType[u8ii] == E_DRVMMFI_FLTTYPE_VD8)
643*53ee8cc1Swenshuai.xi u32type = MMFI_PIDFLT_VFIFO8_EN;
644*53ee8cc1Swenshuai.xi #endif
645*53ee8cc1Swenshuai.xi
646*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
647*53ee8cc1Swenshuai.xi HAL_MMFI_PidFlt_Enable(u8jj, u8ii, u32type, bEnable);
648*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_INVALID_PARAM);
649*53ee8cc1Swenshuai.xi }
650*53ee8cc1Swenshuai.xi
651*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
652*53ee8cc1Swenshuai.xi /// Set PID to PID filter
653*53ee8cc1Swenshuai.xi /// @param u8PidFltId \b IN: PID filter ID
654*53ee8cc1Swenshuai.xi /// @param u16Pid \b IN: Enable Flag
655*53ee8cc1Swenshuai.xi /// @return MMFI_Result
656*53ee8cc1Swenshuai.xi /// @note
657*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_PidFlt_SetPid(MS_U8 u8PidFltId,MS_U16 u16Pid)658*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_PidFlt_SetPid(MS_U8 u8PidFltId, MS_U16 u16Pid)
659*53ee8cc1Swenshuai.xi {
660*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
661*53ee8cc1Swenshuai.xi MMFI_ASSERT(u8PidFltId < MMFI_PIDFLT_NUM_ALL);
662*53ee8cc1Swenshuai.xi
663*53ee8cc1Swenshuai.xi MS_U8 u8jj = _MMFI_GET_ENGID(u8PidFltId);
664*53ee8cc1Swenshuai.xi MS_U8 u8ii = _MMFI_GET_FLTID(u8PidFltId);
665*53ee8cc1Swenshuai.xi
666*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(u8jj);
667*53ee8cc1Swenshuai.xi
668*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
669*53ee8cc1Swenshuai.xi HAL_MMFI_PidFlt_SetPid(u8jj, u8ii, u16Pid);
670*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
671*53ee8cc1Swenshuai.xi }
672*53ee8cc1Swenshuai.xi
673*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
674*53ee8cc1Swenshuai.xi /// Command Queue Reset
675*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
676*53ee8cc1Swenshuai.xi /// @return MMFI_Result
677*53ee8cc1Swenshuai.xi /// @note
678*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_CmdQ_Reset(DrvMMFI_Path epath)679*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_CmdQ_Reset(DrvMMFI_Path epath)
680*53ee8cc1Swenshuai.xi {
681*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
682*53ee8cc1Swenshuai.xi
683*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
684*53ee8cc1Swenshuai.xi
685*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
686*53ee8cc1Swenshuai.xi if(epath == E_DRVMMFI_PATH0)
687*53ee8cc1Swenshuai.xi HAL_MMFI_Reset_SubItem(MMFI_RST_CMDQ0);
688*53ee8cc1Swenshuai.xi else if(epath == E_DRVMMFI_PATH1)
689*53ee8cc1Swenshuai.xi HAL_MMFI_Reset_SubItem(MMFI_RST_CMDQ1);
690*53ee8cc1Swenshuai.xi else
691*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_INVALID_PARAM);
692*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
693*53ee8cc1Swenshuai.xi }
694*53ee8cc1Swenshuai.xi
695*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
696*53ee8cc1Swenshuai.xi /// Get Command Queue Write Level value
697*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
698*53ee8cc1Swenshuai.xi /// @param pu8FifoLevel \b OUT: pointer of Command Queue Write Level value for return
699*53ee8cc1Swenshuai.xi /// @return MMFI_Result
700*53ee8cc1Swenshuai.xi /// @note
701*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_CmdQFifo_Status(DrvMMFI_Path epath,MS_U8 * pu8FifoLevel)702*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_CmdQFifo_Status(DrvMMFI_Path epath, MS_U8 *pu8FifoLevel)
703*53ee8cc1Swenshuai.xi {
704*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
705*53ee8cc1Swenshuai.xi
706*53ee8cc1Swenshuai.xi *pu8FifoLevel = (MS_U8)HAL_MMFI_CmdQ_FIFO_Get_WRLevel((MS_U8)epath);
707*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
708*53ee8cc1Swenshuai.xi }
709*53ee8cc1Swenshuai.xi
710*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
711*53ee8cc1Swenshuai.xi /// Get Command Queue Empty Slot value
712*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
713*53ee8cc1Swenshuai.xi /// @param pu32EmptySlot \b OUT: pointer of Command Queue Empty Slot value for return
714*53ee8cc1Swenshuai.xi /// @return MMFI_Result
715*53ee8cc1Swenshuai.xi /// @note
716*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_CmdQ_GetSlot(DrvMMFI_Path epath,MS_U32 * pu32EmptySlot)717*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_CmdQ_GetSlot(DrvMMFI_Path epath, MS_U32 *pu32EmptySlot)
718*53ee8cc1Swenshuai.xi {
719*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
720*53ee8cc1Swenshuai.xi
721*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
722*53ee8cc1Swenshuai.xi
723*53ee8cc1Swenshuai.xi *pu32EmptySlot = 0;
724*53ee8cc1Swenshuai.xi *pu32EmptySlot = MMFI_CMDQ_SIZE - ((MS_U32)HAL_MMFI_CmdQ_FIFO_Get_WRCnt((MS_U8)epath) & 0xFFFFUL);
725*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
726*53ee8cc1Swenshuai.xi }
727*53ee8cc1Swenshuai.xi
728*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
729*53ee8cc1Swenshuai.xi /// Set Playback timestamp
730*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
731*53ee8cc1Swenshuai.xi /// @param u8PidFltId \b IN: LPCR32 value
732*53ee8cc1Swenshuai.xi /// @return MMFI_Result
733*53ee8cc1Swenshuai.xi /// @note
734*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_SetPlaybackTimeStamp(DrvMMFI_Path epath,MS_U32 u32lpcr2)735*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_SetPlaybackTimeStamp(DrvMMFI_Path epath, MS_U32 u32lpcr2)
736*53ee8cc1Swenshuai.xi {
737*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
738*53ee8cc1Swenshuai.xi
739*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
740*53ee8cc1Swenshuai.xi
741*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
742*53ee8cc1Swenshuai.xi HAL_MMFI_LPcr2_Set((MS_U8)epath, u32lpcr2);
743*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
744*53ee8cc1Swenshuai.xi }
745*53ee8cc1Swenshuai.xi
746*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
747*53ee8cc1Swenshuai.xi /// Get playback timestamp
748*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
749*53ee8cc1Swenshuai.xi /// @param pu32lpcr2 \b OUT: pointer of LPCR32 value for return
750*53ee8cc1Swenshuai.xi /// @return MMFI_Result
751*53ee8cc1Swenshuai.xi /// @note
752*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_GetPlaybackTimeStamp(DrvMMFI_Path epath,MS_U32 * pu32lpcr2)753*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_GetPlaybackTimeStamp(DrvMMFI_Path epath, MS_U32 *pu32lpcr2)
754*53ee8cc1Swenshuai.xi {
755*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
756*53ee8cc1Swenshuai.xi MMFI_ASSERT((pu32lpcr2 != 0));
757*53ee8cc1Swenshuai.xi
758*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
759*53ee8cc1Swenshuai.xi
760*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
761*53ee8cc1Swenshuai.xi *pu32lpcr2 = HAL_MMFI_LPcr2_Get((MS_U8)epath);
762*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
763*53ee8cc1Swenshuai.xi }
764*53ee8cc1Swenshuai.xi
765*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
766*53ee8cc1Swenshuai.xi /// Get File-in timestamp value
767*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
768*53ee8cc1Swenshuai.xi /// @param pu32TSLen \b OUT: pointer of Timestamp value for return
769*53ee8cc1Swenshuai.xi /// @return MMFI_Result
770*53ee8cc1Swenshuai.xi /// @note
771*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_GetFileInTimeStamp(DrvMMFI_Path epath,MS_U32 * pu32TSLen)772*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_GetFileInTimeStamp(DrvMMFI_Path epath, MS_U32* pu32TSLen)
773*53ee8cc1Swenshuai.xi {
774*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
775*53ee8cc1Swenshuai.xi
776*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
777*53ee8cc1Swenshuai.xi
778*53ee8cc1Swenshuai.xi *pu32TSLen = 0;
779*53ee8cc1Swenshuai.xi *pu32TSLen = HAL_MMFI_TimeStamp_Get((MS_U8)epath);
780*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
781*53ee8cc1Swenshuai.xi }
782*53ee8cc1Swenshuai.xi
783*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
784*53ee8cc1Swenshuai.xi /// Set File-in Read Start Address
785*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
786*53ee8cc1Swenshuai.xi /// @param phyStreamAddr \b IN: MIU Physical Address of File-in Read Start Address.
787*53ee8cc1Swenshuai.xi /// @return MMFI_Result
788*53ee8cc1Swenshuai.xi /// @note
789*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_SetAddr(DrvMMFI_Path epath,MS_PHY phyStreamAddr)790*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_SetAddr(DrvMMFI_Path epath, MS_PHY phyStreamAddr)
791*53ee8cc1Swenshuai.xi {
792*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
793*53ee8cc1Swenshuai.xi
794*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
795*53ee8cc1Swenshuai.xi
796*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
797*53ee8cc1Swenshuai.xi #ifdef MMFI_HW_BOX_SERIES
798*53ee8cc1Swenshuai.xi HAL_TSP_FQ_MMFI_MIU_Sel(E_TSP_HAL_MIU_SEL_MMFI, (MS_U8)epath, phyStreamAddr);
799*53ee8cc1Swenshuai.xi #endif
800*53ee8cc1Swenshuai.xi HAL_MMFI_Set_Filein_ReadAddr((MS_U8)epath, phyStreamAddr);
801*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
802*53ee8cc1Swenshuai.xi }
803*53ee8cc1Swenshuai.xi
804*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
805*53ee8cc1Swenshuai.xi /// Set File-in Read Size
806*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
807*53ee8cc1Swenshuai.xi /// @param u32StreamSize \b IN: File-in Read Size.
808*53ee8cc1Swenshuai.xi /// @return MMFI_Result
809*53ee8cc1Swenshuai.xi // @note u32StreamSize must be larger than 16
810*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_SetSize(DrvMMFI_Path epath,MS_U32 u32StreamSize)811*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_SetSize(DrvMMFI_Path epath, MS_U32 u32StreamSize)
812*53ee8cc1Swenshuai.xi {
813*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
814*53ee8cc1Swenshuai.xi
815*53ee8cc1Swenshuai.xi if(u32StreamSize <= 16UL) //HW limitation
816*53ee8cc1Swenshuai.xi {
817*53ee8cc1Swenshuai.xi printf("[%s] MMFI size must large 16 bytes\n", __FUNCTION__);
818*53ee8cc1Swenshuai.xi return DRVMMFI_FAIL;
819*53ee8cc1Swenshuai.xi }
820*53ee8cc1Swenshuai.xi
821*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
822*53ee8cc1Swenshuai.xi
823*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
824*53ee8cc1Swenshuai.xi HAL_MMFI_Set_Filein_ReadLen((MS_U8)epath, u32StreamSize);
825*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
826*53ee8cc1Swenshuai.xi }
827*53ee8cc1Swenshuai.xi
828*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
829*53ee8cc1Swenshuai.xi /// Set packet size to MMFilein file
830*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
831*53ee8cc1Swenshuai.xi /// @param PacketMode \b IN: Mode of MMFilein packet mode (192, 204, 188)
832*53ee8cc1Swenshuai.xi /// @return TSP_Result
833*53ee8cc1Swenshuai.xi /// @note
834*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_SetPacketMode(DrvMMFI_Path epath,DrvMMFI_PacketMode PacketMode)835*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_SetPacketMode(DrvMMFI_Path epath, DrvMMFI_PacketMode PacketMode)
836*53ee8cc1Swenshuai.xi {
837*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
838*53ee8cc1Swenshuai.xi
839*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
840*53ee8cc1Swenshuai.xi
841*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
842*53ee8cc1Swenshuai.xi switch (PacketMode)
843*53ee8cc1Swenshuai.xi {
844*53ee8cc1Swenshuai.xi case E_DRVMMFI_PKTMODE_188:
845*53ee8cc1Swenshuai.xi HAL_MMFI_PktChkSize_Set((MS_U8)epath, 0xBB);
846*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable((MS_U8)epath, MMFI_CFG_ALT_TS_SIZE, TRUE);
847*53ee8cc1Swenshuai.xi break;
848*53ee8cc1Swenshuai.xi case E_DRVMMFI_PKTMODE_192:
849*53ee8cc1Swenshuai.xi HAL_MMFI_PktChkSize_Set((MS_U8)epath, 0xBF);
850*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable((MS_U8)epath, MMFI_CFG_ALT_TS_SIZE, TRUE);
851*53ee8cc1Swenshuai.xi break;
852*53ee8cc1Swenshuai.xi case E_DRVMMFI_PKTMODE_204:
853*53ee8cc1Swenshuai.xi HAL_MMFI_PktChkSize_Set((MS_U8)epath, 0xCB);
854*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable((MS_U8)epath, MMFI_CFG_ALT_TS_SIZE, TRUE);
855*53ee8cc1Swenshuai.xi break;
856*53ee8cc1Swenshuai.xi default:
857*53ee8cc1Swenshuai.xi break;
858*53ee8cc1Swenshuai.xi }
859*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
860*53ee8cc1Swenshuai.xi }
861*53ee8cc1Swenshuai.xi
862*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
863*53ee8cc1Swenshuai.xi /// Set File-in time stamp clock source
864*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
865*53ee8cc1Swenshuai.xi /// @param u32Clksrc \b IN: clock source
866*53ee8cc1Swenshuai.xi /// @return MMFI_Result
867*53ee8cc1Swenshuai.xi /// @note
868*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_SetTimeStampClk(DrvMMFI_Path ePath,MS_U32 u32ClkSrc)869*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_SetTimeStampClk(DrvMMFI_Path ePath, MS_U32 u32ClkSrc)
870*53ee8cc1Swenshuai.xi {
871*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
872*53ee8cc1Swenshuai.xi
873*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(ePath);
874*53ee8cc1Swenshuai.xi
875*53ee8cc1Swenshuai.xi HAL_MMFI_TimeStampClk_Set((MS_U8)ePath, u32ClkSrc);
876*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
877*53ee8cc1Swenshuai.xi }
878*53ee8cc1Swenshuai.xi
879*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
880*53ee8cc1Swenshuai.xi /// Get File-in HW read address
881*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
882*53ee8cc1Swenshuai.xi /// @param pphyReadAddr \b OUT: pointer to store read address of file
883*53ee8cc1Swenshuai.xi /// @return MMFI_Result
884*53ee8cc1Swenshuai.xi /// @note
885*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_GetReadAddr(DrvMMFI_Path epath,MS_PHY * pphyReadAddr)886*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_GetReadAddr(DrvMMFI_Path epath, MS_PHY* pphyReadAddr)
887*53ee8cc1Swenshuai.xi {
888*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
889*53ee8cc1Swenshuai.xi
890*53ee8cc1Swenshuai.xi *pphyReadAddr = HAL_MMFI_Get_Filein_WriteAddr((MS_U8)epath);
891*53ee8cc1Swenshuai.xi
892*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
893*53ee8cc1Swenshuai.xi }
894*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
895*53ee8cc1Swenshuai.xi /// Enable/Disable File-in 192 Mode
896*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
897*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable Flag
898*53ee8cc1Swenshuai.xi /// @return MMFI_Result
899*53ee8cc1Swenshuai.xi /// @note
900*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_192Mode_En(DrvMMFI_Path epath,MS_BOOL bEnable)901*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_192Mode_En(DrvMMFI_Path epath, MS_BOOL bEnable)
902*53ee8cc1Swenshuai.xi {
903*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
904*53ee8cc1Swenshuai.xi
905*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
906*53ee8cc1Swenshuai.xi
907*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
908*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable((MS_U8)epath, MMFI_CFG_PKT192_EN, bEnable);
909*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
910*53ee8cc1Swenshuai.xi
911*53ee8cc1Swenshuai.xi }
912*53ee8cc1Swenshuai.xi
913*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
914*53ee8cc1Swenshuai.xi /// Enable/Disable File-in 192 Block Scheme
915*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
916*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable Flag
917*53ee8cc1Swenshuai.xi /// @return MMFI_Result
918*53ee8cc1Swenshuai.xi /// @note
919*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_192BlockScheme_En(DrvMMFI_Path epath,MS_BOOL bEnable)920*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_192BlockScheme_En(DrvMMFI_Path epath, MS_BOOL bEnable)
921*53ee8cc1Swenshuai.xi {
922*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
923*53ee8cc1Swenshuai.xi
924*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
925*53ee8cc1Swenshuai.xi
926*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
927*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable((MS_U8)epath, MMFI_CFG_PKT192_BLK_DISABLE, !bEnable);
928*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
929*53ee8cc1Swenshuai.xi }
930*53ee8cc1Swenshuai.xi
931*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
932*53ee8cc1Swenshuai.xi /// Enable/Disable Drop duplicate packets
933*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
934*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable Flag
935*53ee8cc1Swenshuai.xi /// @return MMFI_Result
936*53ee8cc1Swenshuai.xi /// @note
937*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_DupPktSkip(DrvMMFI_Path epath,MS_BOOL bEnable)938*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_DupPktSkip(DrvMMFI_Path epath, MS_BOOL bEnable)
939*53ee8cc1Swenshuai.xi {
940*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
941*53ee8cc1Swenshuai.xi
942*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
943*53ee8cc1Swenshuai.xi
944*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
945*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable((MS_U8)epath, MMFI_CFG_DUP_PKT_SKIP, bEnable);
946*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
947*53ee8cc1Swenshuai.xi }
948*53ee8cc1Swenshuai.xi
949*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
950*53ee8cc1Swenshuai.xi /// Enable/Disable Skip TEL packet
951*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
952*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable Flag
953*53ee8cc1Swenshuai.xi /// @return MMFI_Result
954*53ee8cc1Swenshuai.xi /// @note
955*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_TEI_SkipPktf(DrvMMFI_Path epath,MS_BOOL bEnable)956*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_TEI_SkipPktf(DrvMMFI_Path epath, MS_BOOL bEnable)
957*53ee8cc1Swenshuai.xi {
958*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
959*53ee8cc1Swenshuai.xi
960*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
961*53ee8cc1Swenshuai.xi
962*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
963*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable((MS_U8)epath, MMFI_CFG_TEI_SKIP, bEnable);
964*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
965*53ee8cc1Swenshuai.xi }
966*53ee8cc1Swenshuai.xi
967*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
968*53ee8cc1Swenshuai.xi /// Clear PID filter byte counter
969*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
970*53ee8cc1Swenshuai.xi /// @return MMFI_Result
971*53ee8cc1Swenshuai.xi /// @note
972*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_Clr_Pidflt_ByteCnt(DrvMMFI_Path epath)973*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_Clr_Pidflt_ByteCnt(DrvMMFI_Path epath)
974*53ee8cc1Swenshuai.xi {
975*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
976*53ee8cc1Swenshuai.xi
977*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
978*53ee8cc1Swenshuai.xi
979*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
980*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable((MS_U8)epath, MMFI_CFG_CLR_PIDFLT_BYTE_CNT, TRUE);
981*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable((MS_U8)epath, MMFI_CFG_CLR_PIDFLT_BYTE_CNT, FALSE);
982*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
983*53ee8cc1Swenshuai.xi }
984*53ee8cc1Swenshuai.xi
985*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
986*53ee8cc1Swenshuai.xi /// Enable/Disable TS Data Endian Swap
987*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
988*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable Flag
989*53ee8cc1Swenshuai.xi /// @return MMFI_Result
990*53ee8cc1Swenshuai.xi /// @note
991*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_TSDataEndian_Swap(DrvMMFI_Path epath,MS_BOOL bEnable)992*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_TSDataEndian_Swap(DrvMMFI_Path epath, MS_BOOL bEnable)
993*53ee8cc1Swenshuai.xi {
994*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
995*53ee8cc1Swenshuai.xi
996*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
997*53ee8cc1Swenshuai.xi
998*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
999*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable((MS_U8)epath, MMFI_CFG_MEM_TS_DATA_ENDIAN, bEnable);
1000*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
1001*53ee8cc1Swenshuai.xi }
1002*53ee8cc1Swenshuai.xi
1003*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1004*53ee8cc1Swenshuai.xi /// Enable/Disable TS Order Swap
1005*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
1006*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable Flag
1007*53ee8cc1Swenshuai.xi /// @return MMFI_Result
1008*53ee8cc1Swenshuai.xi /// @note
1009*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_TSOrder_Swap(DrvMMFI_Path epath,MS_BOOL bEnable)1010*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_TSOrder_Swap(DrvMMFI_Path epath, MS_BOOL bEnable)
1011*53ee8cc1Swenshuai.xi {
1012*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
1013*53ee8cc1Swenshuai.xi
1014*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
1015*53ee8cc1Swenshuai.xi
1016*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
1017*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable((MS_U8)epath, MMFI_CFG_MEM_TS_ORDER, bEnable);
1018*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
1019*53ee8cc1Swenshuai.xi }
1020*53ee8cc1Swenshuai.xi
MDrv_MMFI_GetCap(DrvMMFI_Cap eCap,void * pOutput)1021*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_GetCap(DrvMMFI_Cap eCap, void* pOutput)
1022*53ee8cc1Swenshuai.xi {
1023*53ee8cc1Swenshuai.xi *((MS_U32*)pOutput) = 0;
1024*53ee8cc1Swenshuai.xi
1025*53ee8cc1Swenshuai.xi switch (eCap)
1026*53ee8cc1Swenshuai.xi {
1027*53ee8cc1Swenshuai.xi case E_DRVMMFI_CAP_RESOURCE_SIZE:
1028*53ee8cc1Swenshuai.xi *((MS_U32*)pOutput) = (MS_U32)sizeof(MMFI_RESOURCE_PRIVATE);
1029*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
1030*53ee8cc1Swenshuai.xi case E_DRVMMFI_CAP_FILTER0_NUM:
1031*53ee8cc1Swenshuai.xi *((MS_U32*)pOutput) = MMFI_PIDFLT0_NUM;
1032*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
1033*53ee8cc1Swenshuai.xi case E_DRVMMFI_CAP_FILTER1_NUM:
1034*53ee8cc1Swenshuai.xi *((MS_U32*)pOutput) = MMFI_PIDFLT1_NUM;
1035*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
1036*53ee8cc1Swenshuai.xi case E_DRVMMFI_CAP_FILTER_ALL_NUM:
1037*53ee8cc1Swenshuai.xi *((MS_U32*)pOutput) = MMFI_PIDFLT_NUM_ALL;
1038*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
1039*53ee8cc1Swenshuai.xi default:
1040*53ee8cc1Swenshuai.xi return DRVMMFI_INVALID_PARAM;
1041*53ee8cc1Swenshuai.xi }
1042*53ee8cc1Swenshuai.xi }
1043*53ee8cc1Swenshuai.xi
1044*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1045*53ee8cc1Swenshuai.xi /// Get Command queue state
1046*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
1047*53ee8cc1Swenshuai.xi /// @param peFileinState \b OUT: Pointer of Filein state to return
1048*53ee8cc1Swenshuai.xi /// @return MMFI_Result
1049*53ee8cc1Swenshuai.xi /// @note
1050*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_GetState(DrvMMFI_Path epath,DrvMMFI_FileinState * peFileinState)1051*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_GetState(DrvMMFI_Path epath, DrvMMFI_FileinState *peFileinState)
1052*53ee8cc1Swenshuai.xi {
1053*53ee8cc1Swenshuai.xi MS_U16 u16state = 0xFF, u16cmdcnt = 0;
1054*53ee8cc1Swenshuai.xi
1055*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
1056*53ee8cc1Swenshuai.xi
1057*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
1058*53ee8cc1Swenshuai.xi
1059*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
1060*53ee8cc1Swenshuai.xi
1061*53ee8cc1Swenshuai.xi u16state = HAL_MMFI_Get_Filein_Ctrl((MS_U8)epath);
1062*53ee8cc1Swenshuai.xi u16cmdcnt = HAL_MMFI_CmdQ_FIFO_Get_WRCnt((MS_U8)epath);
1063*53ee8cc1Swenshuai.xi
1064*53ee8cc1Swenshuai.xi if((u16state & MMFI_FILEIN_CTRL_START) || u16cmdcnt)
1065*53ee8cc1Swenshuai.xi *peFileinState = E_DRVMMFI_STATE_BUSY;
1066*53ee8cc1Swenshuai.xi else
1067*53ee8cc1Swenshuai.xi *peFileinState = E_DRVMMFI_STATE_IDLE;
1068*53ee8cc1Swenshuai.xi
1069*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
1070*53ee8cc1Swenshuai.xi }
1071*53ee8cc1Swenshuai.xi
1072*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1073*53ee8cc1Swenshuai.xi /// Get Command queue interrupt state
1074*53ee8cc1Swenshuai.xi /// @param peFileinState \b OUT: Pointer of Filein state to return
1075*53ee8cc1Swenshuai.xi /// @return MMFI_Result
1076*53ee8cc1Swenshuai.xi /// @note
1077*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_ChkStatus(DrvMMFI_Status * pStatus)1078*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_ChkStatus(DrvMMFI_Status* pStatus)
1079*53ee8cc1Swenshuai.xi {
1080*53ee8cc1Swenshuai.xi MS_U16 u32temp = 0;
1081*53ee8cc1Swenshuai.xi
1082*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
1083*53ee8cc1Swenshuai.xi
1084*53ee8cc1Swenshuai.xi u32temp = HAL_MMFI_HWInt_Status();
1085*53ee8cc1Swenshuai.xi
1086*53ee8cc1Swenshuai.xi *pStatus = E_DRVMMFI_STATUS_UNKNOWN;
1087*53ee8cc1Swenshuai.xi if(u32temp & MMFI_HWINT_STS_FILEIN_DONE0)
1088*53ee8cc1Swenshuai.xi *pStatus |= E_DRVMMFI_STATUS_FILEINDONE0;
1089*53ee8cc1Swenshuai.xi if(u32temp & MMFI_HWINT_STS_AUAUB_ERR0)
1090*53ee8cc1Swenshuai.xi *pStatus |= E_DRVMMFI_STATUS_AU_PKTERR0;
1091*53ee8cc1Swenshuai.xi if(u32temp & MMFI_HWINT_STS_VD3D_ERR0)
1092*53ee8cc1Swenshuai.xi *pStatus |= E_DRVMMFI_STATUS_VD_PKTERR0;
1093*53ee8cc1Swenshuai.xi if(u32temp & MMFI_HWINT_STS_FILEIN_DONE1)
1094*53ee8cc1Swenshuai.xi *pStatus |= E_DRVMMFI_STATUS_FILEINDONE1;
1095*53ee8cc1Swenshuai.xi if(u32temp & MMFI_HWINT_STS_AUAUB_ERR1)
1096*53ee8cc1Swenshuai.xi *pStatus |= E_DRVMMFI_STATUS_AU_PKTERR1;
1097*53ee8cc1Swenshuai.xi if(u32temp & MMFI_HWINT_STS_VD3D_ERR1)
1098*53ee8cc1Swenshuai.xi *pStatus |= E_DRVMMFI_STATUS_VD_PKTERR1;
1099*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
1100*53ee8cc1Swenshuai.xi }
1101*53ee8cc1Swenshuai.xi
1102*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1103*53ee8cc1Swenshuai.xi /// Clear Command queue interrupt state
1104*53ee8cc1Swenshuai.xi /// @param u32int \b OUT: Interrupt bit to clear
1105*53ee8cc1Swenshuai.xi /// @return MMFI_Result
1106*53ee8cc1Swenshuai.xi /// @note
1107*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_ClearHWInt(MS_U32 u32int)1108*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_ClearHWInt(MS_U32 u32int)
1109*53ee8cc1Swenshuai.xi {
1110*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
1111*53ee8cc1Swenshuai.xi
1112*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
1113*53ee8cc1Swenshuai.xi HAL_MMFI_HWInt_Clear((MS_U16)u32int);
1114*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
1115*53ee8cc1Swenshuai.xi }
1116*53ee8cc1Swenshuai.xi
1117*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1118*53ee8cc1Swenshuai.xi /// Get TS Header information
1119*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
1120*53ee8cc1Swenshuai.xi /// @param pheader \b OUT: Poniter to store TS Header information
1121*53ee8cc1Swenshuai.xi /// @return MMFI_Result
1122*53ee8cc1Swenshuai.xi /// @note
1123*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_Get_TsHeader(DrvMMFI_Path epath,DrvPIDFLT_HEADER * pheader)1124*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_Get_TsHeader(DrvMMFI_Path epath, DrvPIDFLT_HEADER *pheader)
1125*53ee8cc1Swenshuai.xi {
1126*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
1127*53ee8cc1Swenshuai.xi
1128*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
1129*53ee8cc1Swenshuai.xi
1130*53ee8cc1Swenshuai.xi HAL_MMFI_Get_TsHeaderInfo((MS_U8)epath, (MS_U32*)pheader);
1131*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
1132*53ee8cc1Swenshuai.xi }
1133*53ee8cc1Swenshuai.xi
1134*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1135*53ee8cc1Swenshuai.xi /// Control Filein to Start
1136*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
1137*53ee8cc1Swenshuai.xi /// @return MMFI_Result
1138*53ee8cc1Swenshuai.xi /// @note
1139*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_Start(DrvMMFI_Path epath)1140*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_Start(DrvMMFI_Path epath)
1141*53ee8cc1Swenshuai.xi {
1142*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
1143*53ee8cc1Swenshuai.xi
1144*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
1145*53ee8cc1Swenshuai.xi
1146*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
1147*53ee8cc1Swenshuai.xi
1148*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable((MS_U8)epath, MMFI_CFG_BYTETIMER_EN, TRUE);
1149*53ee8cc1Swenshuai.xi HAL_MMFI_MOBF_Set_FileinKey((MS_U8)epath, _u16MMFIMobfKey[epath]);
1150*53ee8cc1Swenshuai.xi HAL_MMFI_Set_Filein_Ctrl((MS_U8)epath, MMFI_FILEIN_CTRL_START, TRUE);
1151*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
1152*53ee8cc1Swenshuai.xi }
1153*53ee8cc1Swenshuai.xi
1154*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1155*53ee8cc1Swenshuai.xi /// Control Filein to Abort
1156*53ee8cc1Swenshuai.xi /// @param epath \b IN: MM Filein Path
1157*53ee8cc1Swenshuai.xi /// @return MMFI_Result
1158*53ee8cc1Swenshuai.xi /// @note
1159*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_Abort(DrvMMFI_Path epath)1160*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_Abort(DrvMMFI_Path epath)
1161*53ee8cc1Swenshuai.xi {
1162*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
1163*53ee8cc1Swenshuai.xi
1164*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
1165*53ee8cc1Swenshuai.xi
1166*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
1167*53ee8cc1Swenshuai.xi HAL_MMFI_Set_Filein_Ctrl((MS_U8)epath, MMFI_FILEIN_CTRL_ABORT, TRUE);
1168*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
1169*53ee8cc1Swenshuai.xi }
1170*53ee8cc1Swenshuai.xi
1171*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1172*53ee8cc1Swenshuai.xi /// Enable/Disable MM Filein Path
1173*53ee8cc1Swenshuai.xi /// @param eFileinMode \b IN: File-in Mode
1174*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable Flag
1175*53ee8cc1Swenshuai.xi /// @return MMFI_Result
1176*53ee8cc1Swenshuai.xi /// @note
1177*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_File_ModeEnable(DrvMMFI_FileinMode fileinmode,MS_BOOL bEnable)1178*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_File_ModeEnable(DrvMMFI_FileinMode fileinmode, MS_BOOL bEnable)
1179*53ee8cc1Swenshuai.xi {
1180*53ee8cc1Swenshuai.xi #ifdef MMFI_HW_BOX_SERIES
1181*53ee8cc1Swenshuai.xi MS_U16 u16cfg3 = 0;
1182*53ee8cc1Swenshuai.xi #endif
1183*53ee8cc1Swenshuai.xi #ifdef MMFI2_EXTRA_AUFIFO
1184*53ee8cc1Swenshuai.xi MS_U16 u16cfg2 = 0;
1185*53ee8cc1Swenshuai.xi #endif
1186*53ee8cc1Swenshuai.xi MS_U32 u32cfg = 0UL;
1187*53ee8cc1Swenshuai.xi MS_U8 u8EngID = ((fileinmode & E_DRVMMFI_MODE_MMFI1_MASK) ? 1: 0);
1188*53ee8cc1Swenshuai.xi
1189*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
1190*53ee8cc1Swenshuai.xi
1191*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(u8EngID);
1192*53ee8cc1Swenshuai.xi
1193*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
1194*53ee8cc1Swenshuai.xi
1195*53ee8cc1Swenshuai.xi fileinmode &= (~E_DRVMMFI_MODE_MMFI1_MASK);
1196*53ee8cc1Swenshuai.xi
1197*53ee8cc1Swenshuai.xi if(bEnable == FALSE)
1198*53ee8cc1Swenshuai.xi {
1199*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Set(u8EngID, (HAL_MMFI_Cfg_Get(u8EngID) & ~MMFI_CFG_FILEIN_MODE_MASK));
1200*53ee8cc1Swenshuai.xi
1201*53ee8cc1Swenshuai.xi #ifdef MMFI2_EXTRA_AUFIFO
1202*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg2_Set(u8EngID, (HAL_MMFI_Cfg2_Get(u8EngID) & ~MMFI_CFG2_FILEIN_MODE_MASK));
1203*53ee8cc1Swenshuai.xi #endif
1204*53ee8cc1Swenshuai.xi }
1205*53ee8cc1Swenshuai.xi else
1206*53ee8cc1Swenshuai.xi {
1207*53ee8cc1Swenshuai.xi switch (fileinmode)
1208*53ee8cc1Swenshuai.xi {
1209*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_APID_BYPASS:
1210*53ee8cc1Swenshuai.xi u32cfg = MMFI_CFG_APID_BYPASS;
1211*53ee8cc1Swenshuai.xi break;
1212*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_APIDB_BYPASS:
1213*53ee8cc1Swenshuai.xi u32cfg = MMFI_CFG_APIDB_BYPASS;
1214*53ee8cc1Swenshuai.xi break;
1215*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_VDPID_BYPASS:
1216*53ee8cc1Swenshuai.xi u32cfg = MMFI_CFG_VPID_BYPASS;
1217*53ee8cc1Swenshuai.xi break;
1218*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_V3DPID_BYPASS:
1219*53ee8cc1Swenshuai.xi u32cfg = MMFI_CFG_VPID3D_BYPASS;
1220*53ee8cc1Swenshuai.xi break;
1221*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_PS_AU:
1222*53ee8cc1Swenshuai.xi u32cfg = MMFI_CFG_PS_AUD_EN;
1223*53ee8cc1Swenshuai.xi break;
1224*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_PS_AUB:
1225*53ee8cc1Swenshuai.xi u32cfg = MMFI_CFG_PS_AUDB_EN;
1226*53ee8cc1Swenshuai.xi break;
1227*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_PS_VD:
1228*53ee8cc1Swenshuai.xi u32cfg = MMFI_CFG_PS_VD_EN;
1229*53ee8cc1Swenshuai.xi break;
1230*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_PS_V3D:
1231*53ee8cc1Swenshuai.xi u32cfg = MMFI_CFG_PS_V3D_EN;
1232*53ee8cc1Swenshuai.xi break;
1233*53ee8cc1Swenshuai.xi #ifdef MMFI2_EXTRA_AUFIFO
1234*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_PS_AUC:
1235*53ee8cc1Swenshuai.xi u16cfg2 = MMFI_CFG2_MMFI_PS_AUDC_EN;
1236*53ee8cc1Swenshuai.xi break;
1237*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_PS_AUD:
1238*53ee8cc1Swenshuai.xi u16cfg2 = MMFI_CFG2_MMFI_PS_AUDD_EN;
1239*53ee8cc1Swenshuai.xi break;
1240*53ee8cc1Swenshuai.xi #endif
1241*53ee8cc1Swenshuai.xi #ifdef MMFI_HW_BOX_SERIES
1242*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_PS_AUE:
1243*53ee8cc1Swenshuai.xi u16cfg2 = MMFI_CFG2_MMFI_PS_AUDE_EN;
1244*53ee8cc1Swenshuai.xi break;
1245*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_PS_AUF:
1246*53ee8cc1Swenshuai.xi u16cfg2 = MMFI_CFG2_MMFI_PS_AUDF_EN;
1247*53ee8cc1Swenshuai.xi break;
1248*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_PS_VD3:
1249*53ee8cc1Swenshuai.xi u16cfg2 = MMFI_CFG2_MMFI_PS_VD3_EN;
1250*53ee8cc1Swenshuai.xi u16cfg3 = MMFI_CFG3_MMFI_PS_VD3_EN;
1251*53ee8cc1Swenshuai.xi break;
1252*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_PS_VD4:
1253*53ee8cc1Swenshuai.xi u16cfg2 = MMFI_CFG2_MMFI_PS_VD4_EN;
1254*53ee8cc1Swenshuai.xi u16cfg3 = MMFI_CFG3_MMFI_PS_VD4_EN;
1255*53ee8cc1Swenshuai.xi break;
1256*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_PS_VD5:
1257*53ee8cc1Swenshuai.xi u16cfg2 = MMFI_CFG2_MMFI_PS_VD5_EN;
1258*53ee8cc1Swenshuai.xi break;
1259*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_PS_VD6:
1260*53ee8cc1Swenshuai.xi u16cfg2 = MMFI_CFG2_MMFI_PS_VD6_EN;
1261*53ee8cc1Swenshuai.xi break;
1262*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_PS_VD7:
1263*53ee8cc1Swenshuai.xi u16cfg2 = MMFI_CFG2_MMFI_PS_VD7_EN;
1264*53ee8cc1Swenshuai.xi break;
1265*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_PS_VD8:
1266*53ee8cc1Swenshuai.xi u16cfg2 = MMFI_CFG2_MMFI_PS_VD8_EN;
1267*53ee8cc1Swenshuai.xi break;
1268*53ee8cc1Swenshuai.xi #endif
1269*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_NO_BYPASS_TS:
1270*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_NO_BYPASS_AU:
1271*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_NO_BYPASS_V3D:
1272*53ee8cc1Swenshuai.xi case E_DRVMMFI_MODE_NO_BYPASS_VD:
1273*53ee8cc1Swenshuai.xi break;
1274*53ee8cc1Swenshuai.xi default:
1275*53ee8cc1Swenshuai.xi MMFI_DBGERR(printf("MDrv_MMFI_File_ModeEnable, Bad fileinmode!\n"));
1276*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_FAIL);
1277*53ee8cc1Swenshuai.xi }
1278*53ee8cc1Swenshuai.xi
1279*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Set(u8EngID, (HAL_MMFI_Cfg_Get(u8EngID) & ~MMFI_CFG_FILEIN_MODE_MASK) | u32cfg);
1280*53ee8cc1Swenshuai.xi
1281*53ee8cc1Swenshuai.xi #ifdef MMFI2_EXTRA_AUFIFO
1282*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg2_Set(u8EngID, (HAL_MMFI_Cfg2_Get(u8EngID) & ~MMFI_CFG2_FILEIN_MODE_MASK) | u16cfg2);
1283*53ee8cc1Swenshuai.xi #endif
1284*53ee8cc1Swenshuai.xi
1285*53ee8cc1Swenshuai.xi #ifdef MMFI_HW_BOX_SERIES
1286*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg3_Set(u8EngID, (HAL_MMFI_Cfg3_Get(u8EngID) & ~MMFI_CFG3_FILEIN_MODE_MASK) | u16cfg3);
1287*53ee8cc1Swenshuai.xi #endif
1288*53ee8cc1Swenshuai.xi }
1289*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
1290*53ee8cc1Swenshuai.xi }
1291*53ee8cc1Swenshuai.xi
MDrv_MMFI_ResetAll(void)1292*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_ResetAll(void)
1293*53ee8cc1Swenshuai.xi {
1294*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
1295*53ee8cc1Swenshuai.xi
1296*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
1297*53ee8cc1Swenshuai.xi HAL_MMFI_Reset_All();
1298*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
1299*53ee8cc1Swenshuai.xi }
1300*53ee8cc1Swenshuai.xi
1301*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1302*53ee8cc1Swenshuai.xi /// Enable remove duplicate A/V packets
1303*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable or Disable
1304*53ee8cc1Swenshuai.xi /// @return TSP_Result
1305*53ee8cc1Swenshuai.xi /// @note
1306*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_RemoveDupAVPkt(MS_BOOL bEnable)1307*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_RemoveDupAVPkt(MS_BOOL bEnable)
1308*53ee8cc1Swenshuai.xi {
1309*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
1310*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable(0, MMFI_CFG_DUP_PKT_SKIP, bEnable);
1311*53ee8cc1Swenshuai.xi HAL_MMFI_Cfg_Enable(1, MMFI_CFG_DUP_PKT_SKIP, bEnable);
1312*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
1313*53ee8cc1Swenshuai.xi }
1314*53ee8cc1Swenshuai.xi
1315*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1316*53ee8cc1Swenshuai.xi /// Set Video 3D path to be MMFI
1317*53ee8cc1Swenshuai.xi /// @param bEnable \b IN: Enable Flag
1318*53ee8cc1Swenshuai.xi /// @return MMFI_Result
1319*53ee8cc1Swenshuai.xi /// @note
1320*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_VD3DPath_Enable(MS_BOOL bEnable)1321*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_VD3DPath_Enable(MS_BOOL bEnable)
1322*53ee8cc1Swenshuai.xi {
1323*53ee8cc1Swenshuai.xi return DRVMMFI_NOTSUPPORT;
1324*53ee8cc1Swenshuai.xi }
1325*53ee8cc1Swenshuai.xi
1326*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1327*53ee8cc1Swenshuai.xi /// Set MOBF filein key
1328*53ee8cc1Swenshuai.xi /// @param eFileinMode \b IN: File-in Mode
1329*53ee8cc1Swenshuai.xi /// @param u32Key \b IN: MOBF key value
1330*53ee8cc1Swenshuai.xi /// @return MMFI_Result
1331*53ee8cc1Swenshuai.xi /// @note
1332*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_Set_MOBF_FileinKey(DrvMMFI_Path epath,MS_U32 u32Key)1333*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_Set_MOBF_FileinKey(DrvMMFI_Path epath, MS_U32 u32Key)
1334*53ee8cc1Swenshuai.xi {
1335*53ee8cc1Swenshuai.xi MMFI_DBGINFO(printf("[%d]%s\n", __LINE__, __FUNCTION__));
1336*53ee8cc1Swenshuai.xi
1337*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
1338*53ee8cc1Swenshuai.xi
1339*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
1340*53ee8cc1Swenshuai.xi HAL_MMFI_MOBF_Set_FileinKey((MS_U8)epath, (MS_U16)u32Key);
1341*53ee8cc1Swenshuai.xi _u16MMFIMobfKey[epath] = (MS_U16)u32Key;
1342*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
1343*53ee8cc1Swenshuai.xi }
1344*53ee8cc1Swenshuai.xi
1345*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1346*53ee8cc1Swenshuai.xi /// Enable/Disable MOBF decrypt mode
1347*53ee8cc1Swenshuai.xi /// @param benable \b IN: Enable flag
1348*53ee8cc1Swenshuai.xi /// @return TSP_Result
1349*53ee8cc1Swenshuai.xi /// @note
1350*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_MMFI_MOBF_FileIn_Enable(DrvMMFI_Path epath,MS_BOOL benable)1351*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_MOBF_FileIn_Enable(DrvMMFI_Path epath, MS_BOOL benable)
1352*53ee8cc1Swenshuai.xi {
1353*53ee8cc1Swenshuai.xi TSP_RES_ALLOC_MMFIPATH_CHECK(epath);
1354*53ee8cc1Swenshuai.xi
1355*53ee8cc1Swenshuai.xi _MMFI_ENTRY();
1356*53ee8cc1Swenshuai.xi HAL_MMFI_Set_Filein_Ctrl((MS_U8)epath, MMFI_FILEIN_CTRL_MOBF_EN, benable);
1357*53ee8cc1Swenshuai.xi _MMFI_RETURN(DRVMMFI_OK);
1358*53ee8cc1Swenshuai.xi }
1359*53ee8cc1Swenshuai.xi
MDrv_MMFI_MOBF_FileIn_SetLevel(DrvMMFI_Path epath,MS_U8 u8level)1360*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_MOBF_FileIn_SetLevel(DrvMMFI_Path epath, MS_U8 u8level)
1361*53ee8cc1Swenshuai.xi {
1362*53ee8cc1Swenshuai.xi return DRVMMFI_NOTSUPPORT;
1363*53ee8cc1Swenshuai.xi }
1364*53ee8cc1Swenshuai.xi
1365*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
1366*53ee8cc1Swenshuai.xi
MDrv_MMFI_Suspend(void)1367*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_Suspend(void)
1368*53ee8cc1Swenshuai.xi {
1369*53ee8cc1Swenshuai.xi HAL_MMFI_SaveRegs();
1370*53ee8cc1Swenshuai.xi
1371*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
1372*53ee8cc1Swenshuai.xi }
1373*53ee8cc1Swenshuai.xi
MDrv_MMFI_Resume(void)1374*53ee8cc1Swenshuai.xi MMFI_Result MDrv_MMFI_Resume(void)
1375*53ee8cc1Swenshuai.xi {
1376*53ee8cc1Swenshuai.xi HAL_MMFI_Reset_All();
1377*53ee8cc1Swenshuai.xi
1378*53ee8cc1Swenshuai.xi HAL_MMFI_RestoreRegs();
1379*53ee8cc1Swenshuai.xi
1380*53ee8cc1Swenshuai.xi return DRVMMFI_OK;
1381*53ee8cc1Swenshuai.xi }
1382*53ee8cc1Swenshuai.xi
1383*53ee8cc1Swenshuai.xi #endif //MSOS_TYPE_LINUX_KERNEL
1384*53ee8cc1Swenshuai.xi
1385*53ee8cc1Swenshuai.xi
1386