xref: /utopia/UTPA2-700.0.x/modules/dmx/drv/tso2/drvTSO.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2011-2013 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    drvTSO.c
98*53ee8cc1Swenshuai.xi /// @brief  TS I/O Driver Interface
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor,Inc.
100*53ee8cc1Swenshuai.xi /// @attention
101*53ee8cc1Swenshuai.xi /// All TSO DDI are not allowed to use in any interrupt context other than TSO 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 "MsCommon.h"
110*53ee8cc1Swenshuai.xi #include "MsVersion.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 "regTSO.h"
116*53ee8cc1Swenshuai.xi #include "halTSO.h"
117*53ee8cc1Swenshuai.xi #include "drvTSO.h"
118*53ee8cc1Swenshuai.xi 
119*53ee8cc1Swenshuai.xi #include "ULog.h"
120*53ee8cc1Swenshuai.xi 
121*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
122*53ee8cc1Swenshuai.xi     #include <sys/ioctl.h>
123*53ee8cc1Swenshuai.xi     #include <unistd.h>
124*53ee8cc1Swenshuai.xi     #include <fcntl.h> // O_RDWR
125*53ee8cc1Swenshuai.xi #endif
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
128*53ee8cc1Swenshuai.xi #include <linux/string.h>
129*53ee8cc1Swenshuai.xi #endif
130*53ee8cc1Swenshuai.xi 
131*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
132*53ee8cc1Swenshuai.xi //  Driver Compiler Options
133*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
134*53ee8cc1Swenshuai.xi 
135*53ee8cc1Swenshuai.xi 
136*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
137*53ee8cc1Swenshuai.xi //  Local Defines
138*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
139*53ee8cc1Swenshuai.xi #define TSO_MUTEX_WAIT_TIME                            0xFFFFFFFFUL
140*53ee8cc1Swenshuai.xi 
141*53ee8cc1Swenshuai.xi #define TSO_DBGERR(x)                                  {if(_tsodbglevel >= E_DRVTSO_DBG_ERR) x;  }
142*53ee8cc1Swenshuai.xi #define TSO_DBGINFO(x)                                 {if(_tsodbglevel >= E_DRVTSO_DBG_INFO) x;  }
143*53ee8cc1Swenshuai.xi 
144*53ee8cc1Swenshuai.xi #define TSO_ASSERT(_bool)                               if(!(_bool))   \
145*53ee8cc1Swenshuai.xi                                                         {               \
146*53ee8cc1Swenshuai.xi                                                             if(_tsodbglevel >= E_DRVTSO_DBG_INFO)    \
147*53ee8cc1Swenshuai.xi                                                               {  ULOGD("TSO", "ASSERT ERR\n");  }           \
148*53ee8cc1Swenshuai.xi                                                             return DRVTSO_FAIL;                    \
149*53ee8cc1Swenshuai.xi                                                         }
150*53ee8cc1Swenshuai.xi 
151*53ee8cc1Swenshuai.xi #define _TSO_ENTRY()                                    if (!MsOS_ObtainMutex(_ptso_res->_s32TSOMutexId, TSO_MUTEX_WAIT_TIME))      \
152*53ee8cc1Swenshuai.xi                                                         {               \
153*53ee8cc1Swenshuai.xi                                                             return DRVTSO_FAIL;                                           \
154*53ee8cc1Swenshuai.xi                                                         }
155*53ee8cc1Swenshuai.xi 
156*53ee8cc1Swenshuai.xi #define _TSO_RETURN(_ret)                               do{                                                                \
157*53ee8cc1Swenshuai.xi                                                             MsOS_ReleaseMutex(_ptso_res->_s32TSOMutexId);         \
158*53ee8cc1Swenshuai.xi                                                             return _ret;                                                   \
159*53ee8cc1Swenshuai.xi                                                         }while(0);
160*53ee8cc1Swenshuai.xi 
161*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
162*53ee8cc1Swenshuai.xi //  Local Structures
163*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
164*53ee8cc1Swenshuai.xi 
165*53ee8cc1Swenshuai.xi typedef struct _TSO_RESOURCE_PRIVATE
166*53ee8cc1Swenshuai.xi {
167*53ee8cc1Swenshuai.xi     MS_S32                       _s32TSOMutexId;
168*53ee8cc1Swenshuai.xi 
169*53ee8cc1Swenshuai.xi     DrvTSO_FltState              _FltState[TSO_ENGINE_NUM][TSO_PIDFLT_NUM];
170*53ee8cc1Swenshuai.xi     MS_U32                       _u32FltChSrc[TSO_ENGINE_NUM][TSO_PIDFLT_NUM];
171*53ee8cc1Swenshuai.xi     MS_U16                       _u16FltPid[TSO_ENGINE_NUM][TSO_PIDFLT_NUM];
172*53ee8cc1Swenshuai.xi 
173*53ee8cc1Swenshuai.xi     DrvTSO_FltState              _RepFltState[TSO_ENGINE_NUM][TSO_REP_PIDFLT_NUM];
174*53ee8cc1Swenshuai.xi     MS_U16                       _u16RepFltOrgPid[TSO_ENGINE_NUM][TSO_REP_PIDFLT_NUM];
175*53ee8cc1Swenshuai.xi     MS_U16                       _u16RepFltNewPid[TSO_ENGINE_NUM][TSO_REP_PIDFLT_NUM];
176*53ee8cc1Swenshuai.xi     MS_U16                       _u16RepFltChSrc[TSO_ENGINE_NUM][TSO_REP_PIDFLT_NUM];
177*53ee8cc1Swenshuai.xi 
178*53ee8cc1Swenshuai.xi     MS_BOOL                      _bSWInit;
179*53ee8cc1Swenshuai.xi }TSO_RESOURCE_PRIVATE;
180*53ee8cc1Swenshuai.xi 
181*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
182*53ee8cc1Swenshuai.xi //  Global Variables
183*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
184*53ee8cc1Swenshuai.xi #ifndef TSO_UTOPIA_20
185*53ee8cc1Swenshuai.xi static TSO_RESOURCE_PRIVATE _tso_res = {
186*53ee8cc1Swenshuai.xi     ._s32TSOMutexId                        = -1,
187*53ee8cc1Swenshuai.xi     ._bSWInit                              = FALSE,
188*53ee8cc1Swenshuai.xi };
189*53ee8cc1Swenshuai.xi 
190*53ee8cc1Swenshuai.xi static TSO_RESOURCE_PRIVATE*    _ptso_res = &_tso_res;
191*53ee8cc1Swenshuai.xi #else
192*53ee8cc1Swenshuai.xi static TSO_RESOURCE_PRIVATE*    _ptso_res = NULL;
193*53ee8cc1Swenshuai.xi #endif
194*53ee8cc1Swenshuai.xi 
195*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
196*53ee8cc1Swenshuai.xi //  Local Variables
197*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
198*53ee8cc1Swenshuai.xi static DrvTSO_DbgLevel                     _tsodbglevel = E_DRVTSO_DBG_Release;
199*53ee8cc1Swenshuai.xi static MS_BOOL                             _bBankInit   = FALSE;
200*53ee8cc1Swenshuai.xi 
201*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
202*53ee8cc1Swenshuai.xi //  Local Functions
203*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
_TSO_InitResource(TSO_RESOURCE_PRIVATE * presource)204*53ee8cc1Swenshuai.xi static MS_BOOL _TSO_InitResource(TSO_RESOURCE_PRIVATE* presource)
205*53ee8cc1Swenshuai.xi {
206*53ee8cc1Swenshuai.xi     if(presource == NULL)
207*53ee8cc1Swenshuai.xi     {
208*53ee8cc1Swenshuai.xi         return FALSE;
209*53ee8cc1Swenshuai.xi     }
210*53ee8cc1Swenshuai.xi 
211*53ee8cc1Swenshuai.xi     presource->_s32TSOMutexId = -1;
212*53ee8cc1Swenshuai.xi     presource->_bSWInit       = FALSE;
213*53ee8cc1Swenshuai.xi 
214*53ee8cc1Swenshuai.xi     return TRUE;
215*53ee8cc1Swenshuai.xi }
216*53ee8cc1Swenshuai.xi 
_TSO_TSIF2ChID(DrvTSO_If eIf)217*53ee8cc1Swenshuai.xi static MS_U8 _TSO_TSIF2ChID(DrvTSO_If eIf)
218*53ee8cc1Swenshuai.xi {
219*53ee8cc1Swenshuai.xi     switch(eIf)
220*53ee8cc1Swenshuai.xi     {
221*53ee8cc1Swenshuai.xi         case E_DRVTSO_IF_LIVE0:
222*53ee8cc1Swenshuai.xi             return HAL_TSO_TSIF_LIVE1;
223*53ee8cc1Swenshuai.xi         case E_DRVTSO_IF_LIVE1:
224*53ee8cc1Swenshuai.xi             return HAL_TSO_TSIF_LIVE2;
225*53ee8cc1Swenshuai.xi         case E_DRVTSO_IF_LIVE2:
226*53ee8cc1Swenshuai.xi             return HAL_TSO_TSIF_LIVE3;
227*53ee8cc1Swenshuai.xi     #if (defined(TSP_VERSION) && (TSP_VERSION == TSP_VER_4_0))
228*53ee8cc1Swenshuai.xi         case E_DRVTSO_IF_LIVE3:
229*53ee8cc1Swenshuai.xi             return HAL_TSO_TSIF_LIVE4;
230*53ee8cc1Swenshuai.xi         case E_DRVTSO_IF_LIVE4:
231*53ee8cc1Swenshuai.xi             return HAL_TSO_TSIF_LIVE5;
232*53ee8cc1Swenshuai.xi         case E_DRVTSO_IF_LIVE5:
233*53ee8cc1Swenshuai.xi             return HAL_TSO_TSIF_LIVE6;
234*53ee8cc1Swenshuai.xi     #endif
235*53ee8cc1Swenshuai.xi         case E_DRVTSO_IF_FILE0:
236*53ee8cc1Swenshuai.xi             return HAL_TSO_TSIF_FILE1;
237*53ee8cc1Swenshuai.xi         case E_DRVTSO_IF_FILE1:
238*53ee8cc1Swenshuai.xi             return HAL_TSO_TSIF_FILE2;
239*53ee8cc1Swenshuai.xi #ifdef TSO_PVR_SUPPORT
240*53ee8cc1Swenshuai.xi         case E_DRVTSO_IF_MMT0:
241*53ee8cc1Swenshuai.xi             return HAL_TSO_TSIF_LIVE_MMT;
242*53ee8cc1Swenshuai.xi #endif
243*53ee8cc1Swenshuai.xi         default:
244*53ee8cc1Swenshuai.xi             return 0xFF;
245*53ee8cc1Swenshuai.xi     }
246*53ee8cc1Swenshuai.xi }
247*53ee8cc1Swenshuai.xi 
248*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
249*53ee8cc1Swenshuai.xi //  Function and Variable
250*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
251*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
252*53ee8cc1Swenshuai.xi /// Initialize lib resource API
253*53ee8cc1Swenshuai.xi /// @param pResMemAddr                \b IN: Pointer to store resource memory address
254*53ee8cc1Swenshuai.xi /// @return MMFI_Result
255*53ee8cc1Swenshuai.xi /// @note
256*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_InitLibResource(void * pResMemAddr)257*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_InitLibResource(void* pResMemAddr)
258*53ee8cc1Swenshuai.xi {
259*53ee8cc1Swenshuai.xi     MS_VIRT virtBank;
260*53ee8cc1Swenshuai.xi     MS_PHY u32BankSize;
261*53ee8cc1Swenshuai.xi 
262*53ee8cc1Swenshuai.xi     if(pResMemAddr == 0)
263*53ee8cc1Swenshuai.xi         return DRVTSO_FAIL;
264*53ee8cc1Swenshuai.xi 
265*53ee8cc1Swenshuai.xi     _ptso_res = (TSO_RESOURCE_PRIVATE*)pResMemAddr;
266*53ee8cc1Swenshuai.xi 
267*53ee8cc1Swenshuai.xi     if(_ptso_res->_bSWInit != TRUE)
268*53ee8cc1Swenshuai.xi     {
269*53ee8cc1Swenshuai.xi         if(_TSO_InitResource(_ptso_res) == FALSE)
270*53ee8cc1Swenshuai.xi             return DRVTSO_FAIL;
271*53ee8cc1Swenshuai.xi     }
272*53ee8cc1Swenshuai.xi 
273*53ee8cc1Swenshuai.xi     // For multi-process use case. (different process should set the value of bank again)
274*53ee8cc1Swenshuai.xi     if(_bBankInit == FALSE)
275*53ee8cc1Swenshuai.xi     {
276*53ee8cc1Swenshuai.xi         if (FALSE == MDrv_MMIO_GetBASE(&virtBank, &u32BankSize, MS_MODULE_TSO))
277*53ee8cc1Swenshuai.xi         {
278*53ee8cc1Swenshuai.xi             TSO_DBGERR(ULOGE("TSO", "MDrv_TSO_GetBASE failed\n"));
279*53ee8cc1Swenshuai.xi             return DRVTSO_FAIL;
280*53ee8cc1Swenshuai.xi         }
281*53ee8cc1Swenshuai.xi         TSO_DBGINFO((ULOGD("TSO", "TSO Base Bank 0x%08x\n", (unsigned int)virtBank)));
282*53ee8cc1Swenshuai.xi         HAL_TSO_SetBank(virtBank);
283*53ee8cc1Swenshuai.xi         _bBankInit = TRUE;
284*53ee8cc1Swenshuai.xi     }
285*53ee8cc1Swenshuai.xi 
286*53ee8cc1Swenshuai.xi     return DRVTSO_OK;
287*53ee8cc1Swenshuai.xi }
288*53ee8cc1Swenshuai.xi 
289*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
290*53ee8cc1Swenshuai.xi /// Initialize TSO driver
291*53ee8cc1Swenshuai.xi /// @return TSO_Result
292*53ee8cc1Swenshuai.xi /// @note
293*53ee8cc1Swenshuai.xi /// It should be called before calling any other TSO DDI functions.
294*53ee8cc1Swenshuai.xi /// Driver task is in @ref E_TASK_PRI_SYS level.
295*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Init(void)296*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Init(void)
297*53ee8cc1Swenshuai.xi {
298*53ee8cc1Swenshuai.xi     MS_VIRT virtBank;
299*53ee8cc1Swenshuai.xi     MS_PHY u32BankSize;
300*53ee8cc1Swenshuai.xi     MS_U16 u16ii;
301*53ee8cc1Swenshuai.xi     MS_U8  u8jj;
302*53ee8cc1Swenshuai.xi 
303*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
304*53ee8cc1Swenshuai.xi 
305*53ee8cc1Swenshuai.xi     if (FALSE == MDrv_MMIO_GetBASE(&virtBank, &u32BankSize, MS_MODULE_TSO))
306*53ee8cc1Swenshuai.xi     {
307*53ee8cc1Swenshuai.xi         TSO_DBGERR(ULOGE("TSO", "MDrv_TSO_GetBASE failed\n"));
308*53ee8cc1Swenshuai.xi         return DRVTSO_FAIL;
309*53ee8cc1Swenshuai.xi     }
310*53ee8cc1Swenshuai.xi     TSO_DBGINFO((ULOGD("TSO", "TSO Base Bank 0x%08x\n", (unsigned int)virtBank)));
311*53ee8cc1Swenshuai.xi     HAL_TSO_SetBank(virtBank);
312*53ee8cc1Swenshuai.xi 
313*53ee8cc1Swenshuai.xi     _ptso_res->_s32TSOMutexId = MsOS_CreateMutex(E_MSOS_FIFO, "Mutex TSO", MSOS_PROCESS_SHARED);
314*53ee8cc1Swenshuai.xi     if(_ptso_res->_s32TSOMutexId == -1)
315*53ee8cc1Swenshuai.xi     {
316*53ee8cc1Swenshuai.xi         TSO_DBGERR(ULOGE("TSO", "MsOS_CreateMutex failed\n"));
317*53ee8cc1Swenshuai.xi         return DRVTSO_FAIL;
318*53ee8cc1Swenshuai.xi     }
319*53ee8cc1Swenshuai.xi 
320*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
321*53ee8cc1Swenshuai.xi 
322*53ee8cc1Swenshuai.xi     HAL_TSO_PowerCtrl(TRUE);
323*53ee8cc1Swenshuai.xi 
324*53ee8cc1Swenshuai.xi     HAL_TSO_Init();
325*53ee8cc1Swenshuai.xi 
326*53ee8cc1Swenshuai.xi     for(u8jj = 0; u8jj < (MS_U8)TSO_ENGINE_NUM; u8jj++)
327*53ee8cc1Swenshuai.xi     {
328*53ee8cc1Swenshuai.xi         HAL_TSO_Reset_All(u8jj);
329*53ee8cc1Swenshuai.xi         HAL_TSO_Set_SVQRX_PktMode(u8jj, TSO_SVQ_RX_CFG_MODE_CIPL);
330*53ee8cc1Swenshuai.xi         HAL_TSO_Set_SVQRX_ArbitorMode(u8jj, TSO_SVQ_RX_CFG_ARBMODE_RUNROBIN, NULL);
331*53ee8cc1Swenshuai.xi 
332*53ee8cc1Swenshuai.xi         for(u16ii = 0; u16ii < (MS_U16)TSO_PIDFLT_NUM; u16ii++)
333*53ee8cc1Swenshuai.xi         {
334*53ee8cc1Swenshuai.xi             HAL_TSO_Flt_SetInputSrc(u8jj, u16ii, 0);
335*53ee8cc1Swenshuai.xi             HAL_TSO_Flt_SetPid(u8jj, u16ii, TSO_PID_NULL);
336*53ee8cc1Swenshuai.xi             _ptso_res->_FltState[u8jj][u16ii] = E_DRVTSO_FLT_STATE_FREE;
337*53ee8cc1Swenshuai.xi             _ptso_res->_u32FltChSrc[u8jj][u16ii] = 0;
338*53ee8cc1Swenshuai.xi             _ptso_res->_u16FltPid[u8jj][u16ii] = TSO_PID_NULL;
339*53ee8cc1Swenshuai.xi         }
340*53ee8cc1Swenshuai.xi 
341*53ee8cc1Swenshuai.xi         for(u16ii = 0; u16ii < (MS_U16)TSO_REP_PIDFLT_NUM; u16ii++)
342*53ee8cc1Swenshuai.xi         {
343*53ee8cc1Swenshuai.xi             _ptso_res->_RepFltState[u8jj][u16ii] = E_DRVTSO_FLT_STATE_FREE;
344*53ee8cc1Swenshuai.xi             _ptso_res->_u16RepFltOrgPid[u8jj][u16ii] = TSO_PID_NULL;
345*53ee8cc1Swenshuai.xi             _ptso_res->_u16RepFltNewPid[u8jj][u16ii] = TSO_PID_NULL;
346*53ee8cc1Swenshuai.xi             _ptso_res->_u16RepFltChSrc[u8jj][u16ii] = 0;
347*53ee8cc1Swenshuai.xi         }
348*53ee8cc1Swenshuai.xi 
349*53ee8cc1Swenshuai.xi         for(u16ii = 0; u16ii < (MS_U16)TSO_FILE_IF_NUM; u16ii++)
350*53ee8cc1Swenshuai.xi         {
351*53ee8cc1Swenshuai.xi             HAL_TSO_Filein_Rate(u8jj, (MS_U8)u16ii, 0x0A);
352*53ee8cc1Swenshuai.xi         }
353*53ee8cc1Swenshuai.xi     }
354*53ee8cc1Swenshuai.xi 
355*53ee8cc1Swenshuai.xi     _ptso_res->_bSWInit = TRUE;
356*53ee8cc1Swenshuai.xi 
357*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
358*53ee8cc1Swenshuai.xi 
359*53ee8cc1Swenshuai.xi }
360*53ee8cc1Swenshuai.xi 
361*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
362*53ee8cc1Swenshuai.xi /// Close TSO driver
363*53ee8cc1Swenshuai.xi /// @return TSO_Result
364*53ee8cc1Swenshuai.xi /// @note
365*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Exit(void)366*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Exit(void)
367*53ee8cc1Swenshuai.xi {
368*53ee8cc1Swenshuai.xi     MS_U8 u8ii, u8jj;
369*53ee8cc1Swenshuai.xi     MS_U8 u8TsIf[TSO_TSIF_NUM] = {HAL_TSO_TSIF_LIVE1, HAL_TSO_TSIF_LIVE2, HAL_TSO_TSIF_LIVE3};
370*53ee8cc1Swenshuai.xi     MS_BOOL bFlag = FALSE;
371*53ee8cc1Swenshuai.xi     MS_U16 u16Data = 0;
372*53ee8cc1Swenshuai.xi 
373*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
374*53ee8cc1Swenshuai.xi 
375*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
376*53ee8cc1Swenshuai.xi 
377*53ee8cc1Swenshuai.xi     for(u8jj = 0; u8jj < TSO_ENGINE_NUM; u8jj++)
378*53ee8cc1Swenshuai.xi     {
379*53ee8cc1Swenshuai.xi         HAL_TSO_Cfg1_Enable(u8jj, (TSO_CFG1_TSO_OUT_EN|TSO_CFG1_TSO_TSIF1_EN|TSO_CFG1_TSO_TSIF5_EN|TSO_CFG1_TSO_TSIF6_EN), FALSE);
380*53ee8cc1Swenshuai.xi 
381*53ee8cc1Swenshuai.xi         for(u8ii = 0; u8ii < TSO_TSIF_NUM; u8ii++)
382*53ee8cc1Swenshuai.xi         {
383*53ee8cc1Swenshuai.xi             HAL_TSO_Set_InClk(u8jj, u8TsIf[u8ii], 0, FALSE, FALSE);
384*53ee8cc1Swenshuai.xi         }
385*53ee8cc1Swenshuai.xi         HAL_TSO_OutClk(u8jj, &u16Data, &bFlag, &bFlag, TRUE);
386*53ee8cc1Swenshuai.xi     }
387*53ee8cc1Swenshuai.xi 
388*53ee8cc1Swenshuai.xi     MsOS_ReleaseMutex(_ptso_res->_s32TSOMutexId);
389*53ee8cc1Swenshuai.xi     MsOS_DeleteMutex(_ptso_res->_s32TSOMutexId);
390*53ee8cc1Swenshuai.xi 
391*53ee8cc1Swenshuai.xi     _ptso_res->_s32TSOMutexId = -1;
392*53ee8cc1Swenshuai.xi     _ptso_res->_bSWInit       = FALSE;
393*53ee8cc1Swenshuai.xi 
394*53ee8cc1Swenshuai.xi     HAL_TSO_PowerCtrl(FALSE);
395*53ee8cc1Swenshuai.xi 
396*53ee8cc1Swenshuai.xi     return DRVTSO_OK;
397*53ee8cc1Swenshuai.xi }
398*53ee8cc1Swenshuai.xi 
399*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
400*53ee8cc1Swenshuai.xi /// Get TSO HW interrupt status
401*53ee8cc1Swenshuai.xi /// @param  u8Eng                               \b IN: TSO engine ID
402*53ee8cc1Swenshuai.xi /// @param  pu16status                        \b OUT: pointer of storing HW interrupt status value
403*53ee8cc1Swenshuai.xi /// @return TSO_Result
404*53ee8cc1Swenshuai.xi /// @note
405*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Get_HWIntStatus(MS_U8 u8Eng,MS_U16 * pu16status)406*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Get_HWIntStatus(MS_U8 u8Eng, MS_U16* pu16status)
407*53ee8cc1Swenshuai.xi {
408*53ee8cc1Swenshuai.xi     *pu16status = HAL_TSO_HWInt_Status(u8Eng);
409*53ee8cc1Swenshuai.xi     return DRVTSO_OK;
410*53ee8cc1Swenshuai.xi }
411*53ee8cc1Swenshuai.xi 
412*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
413*53ee8cc1Swenshuai.xi /// Set debug level of TSO
414*53ee8cc1Swenshuai.xi /// @param  DbgLevel                     \b IN: Debug Level Value
415*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_SetDbgLevel(DrvTSO_DbgLevel DbgLevel)416*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_SetDbgLevel(DrvTSO_DbgLevel DbgLevel)
417*53ee8cc1Swenshuai.xi {
418*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
419*53ee8cc1Swenshuai.xi 
420*53ee8cc1Swenshuai.xi     _tsodbglevel = DbgLevel;
421*53ee8cc1Swenshuai.xi     return DRVTSO_OK;
422*53ee8cc1Swenshuai.xi }
423*53ee8cc1Swenshuai.xi 
424*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
425*53ee8cc1Swenshuai.xi /// Set TSO operation mode
426*53ee8cc1Swenshuai.xi /// @param  u8Eng                               \b IN: TSO engine ID
427*53ee8cc1Swenshuai.xi /// @param  TSOCtrlMode                         \b IN: Ctrol mode
428*53ee8cc1Swenshuai.xi /// @param  bClkInv                             \b IN: TSO_IN_Clk Invert
429*53ee8cc1Swenshuai.xi /// @param  bParallel                           \b IN: TSO_IN_Interface paralleled
430*53ee8cc1Swenshuai.xi /// @return TSO_Result
431*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_SetOperateMode(MS_U8 u8Eng,DrvTSO_CtrlMode TSOCtrlMode,MS_BOOL bBypassAll,MS_BOOL bEnable)432*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_SetOperateMode(MS_U8 u8Eng, DrvTSO_CtrlMode TSOCtrlMode, MS_BOOL bBypassAll, MS_BOOL bEnable)
433*53ee8cc1Swenshuai.xi {
434*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
435*53ee8cc1Swenshuai.xi     TSO_ASSERT((u8Eng < TSO_ENGINE_NUM));
436*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
437*53ee8cc1Swenshuai.xi 
438*53ee8cc1Swenshuai.xi     MS_U8  u8TsIf = HAL_TSO_TSIF_LIVE1;
439*53ee8cc1Swenshuai.xi     MS_U16 u16ValidCount = 0xBB;
440*53ee8cc1Swenshuai.xi     MS_U16 u16InValidCount = 0x0;
441*53ee8cc1Swenshuai.xi 
442*53ee8cc1Swenshuai.xi     switch(TSOCtrlMode)
443*53ee8cc1Swenshuai.xi     {
444*53ee8cc1Swenshuai.xi         case E_DRVTSO_CTRL_MODE_TS0:
445*53ee8cc1Swenshuai.xi             u8TsIf = HAL_TSO_TSIF_LIVE1;
446*53ee8cc1Swenshuai.xi             HAL_TSO_PktChkSize_Set(u8Eng, HAL_TSO_TSIF_LIVE1, 0xBB);
447*53ee8cc1Swenshuai.xi             break;
448*53ee8cc1Swenshuai.xi         case E_DRVTSO_CTRL_MODE_TS1:
449*53ee8cc1Swenshuai.xi             u8TsIf = HAL_TSO_TSIF_LIVE2;
450*53ee8cc1Swenshuai.xi             HAL_TSO_PktChkSize_Set(u8Eng, HAL_TSO_TSIF_LIVE2, 0xBB);
451*53ee8cc1Swenshuai.xi             HAL_TSO_Filein_Enable(u8Eng, 0, FALSE);
452*53ee8cc1Swenshuai.xi             break;
453*53ee8cc1Swenshuai.xi         case E_DRVTSO_CTRL_MODE_TS2:
454*53ee8cc1Swenshuai.xi             u8TsIf = HAL_TSO_TSIF_LIVE3;
455*53ee8cc1Swenshuai.xi             HAL_TSO_PktChkSize_Set(u8Eng, HAL_TSO_TSIF_LIVE3, 0xBB);
456*53ee8cc1Swenshuai.xi             HAL_TSO_Filein_Enable(u8Eng, 1, FALSE);
457*53ee8cc1Swenshuai.xi             break;
458*53ee8cc1Swenshuai.xi     #if (defined(TSP_VERSION) && (TSP_VERSION == TSP_VER_4_0))
459*53ee8cc1Swenshuai.xi         case E_DRVTSO_CTRL_MODE_TS3:
460*53ee8cc1Swenshuai.xi             u8TsIf = HAL_TSO_TSIF_LIVE4;
461*53ee8cc1Swenshuai.xi             HAL_TSO_PktChkSize_Set(u8Eng, HAL_TSO_TSIF_LIVE4, 0xBB);
462*53ee8cc1Swenshuai.xi             break;
463*53ee8cc1Swenshuai.xi     #endif
464*53ee8cc1Swenshuai.xi         case E_DRVTSO_CTRL_MODE_MEM:
465*53ee8cc1Swenshuai.xi             u8TsIf = HAL_TSO_TSIF_FILE1;
466*53ee8cc1Swenshuai.xi             HAL_TSO_Filein_PktChkSize_Set(u8Eng, 0, 0xBB);
467*53ee8cc1Swenshuai.xi             HAL_TSO_Filein_Enable(u8Eng, 0, TRUE);
468*53ee8cc1Swenshuai.xi             break;
469*53ee8cc1Swenshuai.xi 
470*53ee8cc1Swenshuai.xi         case E_DRVTSO_CTRL_MODE_MEM1:
471*53ee8cc1Swenshuai.xi             u8TsIf = HAL_TSO_TSIF_FILE2;
472*53ee8cc1Swenshuai.xi             HAL_TSO_Filein_PktChkSize_Set(u8Eng, 1, 0xBB);
473*53ee8cc1Swenshuai.xi             HAL_TSO_Filein_Enable(u8Eng, 1, TRUE);
474*53ee8cc1Swenshuai.xi             break;
475*53ee8cc1Swenshuai.xi 
476*53ee8cc1Swenshuai.xi #ifdef TSO_PVR_SUPPORT
477*53ee8cc1Swenshuai.xi         case E_DRVTSO_CTRL_MODE_MMT:
478*53ee8cc1Swenshuai.xi             u8TsIf = HAL_TSO_TSIF_LIVE_MMT;
479*53ee8cc1Swenshuai.xi             HAL_TSO_PVR_Src(HAL_TSO_PVR_MMT);
480*53ee8cc1Swenshuai.xi             break;
481*53ee8cc1Swenshuai.xi #endif
482*53ee8cc1Swenshuai.xi 
483*53ee8cc1Swenshuai.xi         default:
484*53ee8cc1Swenshuai.xi             ULOGE("TSO", "Not supported TSOCtrlMode = %d! \n", TSOCtrlMode);
485*53ee8cc1Swenshuai.xi             _TSO_RETURN(DRVTSO_INVALID_PARAM);
486*53ee8cc1Swenshuai.xi     }
487*53ee8cc1Swenshuai.xi 
488*53ee8cc1Swenshuai.xi     if(TSOCtrlMode != E_DRVTSO_CTRL_MODE_MMT)
489*53ee8cc1Swenshuai.xi     {
490*53ee8cc1Swenshuai.xi         HAL_TSO_RW_ValidBlock_Count(0, TRUE, &u16ValidCount);
491*53ee8cc1Swenshuai.xi         HAL_TSO_RW_InvalidBlock_Count(0, TRUE, &u16InValidCount);
492*53ee8cc1Swenshuai.xi         HAL_TSO_Cfg4_Enable(u8Eng, TSO_CFG4_ENABLE_SYS_TIMESTAMP, bEnable);
493*53ee8cc1Swenshuai.xi 
494*53ee8cc1Swenshuai.xi         HAL_TSO_ChIf_Cfg(u8Eng, u8TsIf, TSO_CHCFG_PIDFLT_REC_ALL|TSO_CHCFG_PIDFLT_REC_NULL, bBypassAll); //PID bypass mode
495*53ee8cc1Swenshuai.xi 
496*53ee8cc1Swenshuai.xi         HAL_TSO_Cfg1_Enable(u8Eng, TSO_CFG1_TSO_OUT_EN, bEnable);
497*53ee8cc1Swenshuai.xi     }
498*53ee8cc1Swenshuai.xi 
499*53ee8cc1Swenshuai.xi     HAL_TSO_ChIf_Enable(u8Eng, u8TsIf, bEnable);
500*53ee8cc1Swenshuai.xi 
501*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
502*53ee8cc1Swenshuai.xi }
503*53ee8cc1Swenshuai.xi 
504*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
505*53ee8cc1Swenshuai.xi /// Set TSIF Input enable
506*53ee8cc1Swenshuai.xi /// @param  u8Eng                                \b IN: TSO engine ID
507*53ee8cc1Swenshuai.xi /// @param  eIf                                    \b IN: TSO TS interface
508*53ee8cc1Swenshuai.xi /// @param  bEnable                              \b IN: TRUE is enabled; FALSE is disabled
509*53ee8cc1Swenshuai.xi /// @return TSO_Result
510*53ee8cc1Swenshuai.xi /// @note
511*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Ch_InputEnable(MS_U8 u8Eng,DrvTSO_If eIf,MS_BOOL bEnable)512*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Ch_InputEnable(MS_U8 u8Eng, DrvTSO_If eIf, MS_BOOL bEnable)
513*53ee8cc1Swenshuai.xi {
514*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
515*53ee8cc1Swenshuai.xi 
516*53ee8cc1Swenshuai.xi     MS_U8 u8ChId = 0;
517*53ee8cc1Swenshuai.xi 
518*53ee8cc1Swenshuai.xi     if((u8ChId = _TSO_TSIF2ChID(eIf)) == 0xFF)
519*53ee8cc1Swenshuai.xi     {
520*53ee8cc1Swenshuai.xi         return DRVTSO_INVALID_PARAM;
521*53ee8cc1Swenshuai.xi     }
522*53ee8cc1Swenshuai.xi 
523*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
524*53ee8cc1Swenshuai.xi     HAL_TSO_ChIf_Enable(u8Eng, u8ChId, bEnable);
525*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
526*53ee8cc1Swenshuai.xi }
527*53ee8cc1Swenshuai.xi 
528*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
529*53ee8cc1Swenshuai.xi /// Set TSO Output enable
530*53ee8cc1Swenshuai.xi /// @param  u8Eng                                \b IN: TSO engine ID
531*53ee8cc1Swenshuai.xi /// @param  bEnable                              \b IN: TRUE is enabled; FALSE is disabled
532*53ee8cc1Swenshuai.xi /// @return TSO_Result
533*53ee8cc1Swenshuai.xi /// @note
534*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_OutputEnable(MS_U8 u8Eng,MS_BOOL bEnable)535*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_OutputEnable(MS_U8 u8Eng, MS_BOOL bEnable)
536*53ee8cc1Swenshuai.xi {
537*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
538*53ee8cc1Swenshuai.xi 
539*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
540*53ee8cc1Swenshuai.xi     HAL_TSO_Cfg4_Enable(u8Eng, TSO_CFG4_ENABLE_SYS_TIMESTAMP, bEnable);
541*53ee8cc1Swenshuai.xi     HAL_TSO_Cfg1_Enable(u8Eng, TSO_CFG1_TSO_OUT_EN, bEnable);
542*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
543*53ee8cc1Swenshuai.xi }
544*53ee8cc1Swenshuai.xi 
545*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
546*53ee8cc1Swenshuai.xi /// Set TSO File-in Byte Timer
547*53ee8cc1Swenshuai.xi /// @param  u8Eng                                \b IN: TSO engine ID
548*53ee8cc1Swenshuai.xi /// @param  u8FileEng                            \b IN: Filein Engine
549*53ee8cc1Swenshuai.xi /// @param  u16timer                            \b IN: Timer value
550*53ee8cc1Swenshuai.xi /// @return TSO_Result
551*53ee8cc1Swenshuai.xi /// @note
552*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Filein_Rate(MS_U8 u8FileEng,MS_U16 u16timer)553*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Filein_Rate(MS_U8 u8FileEng, MS_U16 u16timer)
554*53ee8cc1Swenshuai.xi {
555*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
556*53ee8cc1Swenshuai.xi 
557*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
558*53ee8cc1Swenshuai.xi 
559*53ee8cc1Swenshuai.xi     HAL_TSO_Filein_Rate(0, u8FileEng, u16timer);
560*53ee8cc1Swenshuai.xi     HAL_TSO_FileinTimer_Enable(0, u8FileEng, (u16timer != 0));
561*53ee8cc1Swenshuai.xi 
562*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
563*53ee8cc1Swenshuai.xi }
564*53ee8cc1Swenshuai.xi 
565*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
566*53ee8cc1Swenshuai.xi /// Set TSO Out Clock
567*53ee8cc1Swenshuai.xi /// @param  u8Eng                                         \b IN: TSO engine ID
568*53ee8cc1Swenshuai.xi /// @param  eOutClk                                       \b IN: TSO out clock select
569*53ee8cc1Swenshuai.xi /// @param  eOutClkSrc                                   \b IN: TSO out clock source select
570*53ee8cc1Swenshuai.xi /// @param  u16DivNum                                  \b IN: If select DMPLLDIV source, setting Divide number
571*53ee8cc1Swenshuai.xi /// @param  bClkInv                                        \b IN: If Out Clock invert
572*53ee8cc1Swenshuai.xi /// @return TSO_Result
573*53ee8cc1Swenshuai.xi /// @note
574*53ee8cc1Swenshuai.xi /// Out Clk 5.4M,
575*53ee8cc1Swenshuai.xi ///         eOutClkSrc = E_DRVTSO_OUTCLK_DIV2N
576*53ee8cc1Swenshuai.xi ///         eOutClkSrc = E_DRVTSO_OUTCLKSRC_172M_2N
577*53ee8cc1Swenshuai.xi ///         u16DivNum = 15
578*53ee8cc1Swenshuai.xi /// Out Clk 6.17M,
579*53ee8cc1Swenshuai.xi ///         eOutClkSrc = E_DRVTSO_OUTCLK_DIV2N
580*53ee8cc1Swenshuai.xi ///         eOutClkSrc = E_DRVTSO_OUTCLKSRC_172M_2N
581*53ee8cc1Swenshuai.xi ///         u16DivNum = 13
582*53ee8cc1Swenshuai.xi /// Out Clk 6.64M,
583*53ee8cc1Swenshuai.xi ///         eOutClkSrc = E_DRVTSO_OUTCLK_DIV2N
584*53ee8cc1Swenshuai.xi ///         eOutClkSrc = E_DRVTSO_OUTCLKSRC_172M_2N
585*53ee8cc1Swenshuai.xi ///         u16DivNum = 12
586*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_SetOutClk(MS_U8 u8Eng,DrvTSO_OutClk eOutClk,DrvTSO_OutClkSrc eOutClkSrc,MS_U16 u16DivNum,MS_BOOL bClkInv)587*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_SetOutClk(MS_U8 u8Eng, DrvTSO_OutClk eOutClk, DrvTSO_OutClkSrc eOutClkSrc, MS_U16 u16DivNum, MS_BOOL bClkInv)
588*53ee8cc1Swenshuai.xi {
589*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
590*53ee8cc1Swenshuai.xi 
591*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
592*53ee8cc1Swenshuai.xi 
593*53ee8cc1Swenshuai.xi #if (defined(TSP_VERSION) && (TSP_VERSION == TSP_VER_4_0))
594*53ee8cc1Swenshuai.xi     if(eOutClk == E_DRVTSO_OUTCLK_DIVN)
595*53ee8cc1Swenshuai.xi     {
596*53ee8cc1Swenshuai.xi         TSO_DBGERR(ULOGE("TSO", "[%d]%s TSO not support selected clk. \n", __LINE__, __FUNCTION__));
597*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_NOT_SUPPORT);
598*53ee8cc1Swenshuai.xi     }
599*53ee8cc1Swenshuai.xi #endif
600*53ee8cc1Swenshuai.xi 
601*53ee8cc1Swenshuai.xi     MS_U16 u16OutClkSrc = E_DRVTSO_OUTCLKSRC_172M_2N;
602*53ee8cc1Swenshuai.xi     HalTSOOutClk stTsoOutClk = {0xFFFF, 0xFFFF, 0, 0xFFFF, bClkInv, TRUE};
603*53ee8cc1Swenshuai.xi 
604*53ee8cc1Swenshuai.xi     //ULOGD("TSO", "[%s] eOutClk %x, eOutClkSrc %x, u16DivNum %x\n", __FUNCTION__, eOutClk,  eOutClkSrc, u16DivNum);
605*53ee8cc1Swenshuai.xi 
606*53ee8cc1Swenshuai.xi     switch(eOutClkSrc)
607*53ee8cc1Swenshuai.xi     {
608*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLKSRC_172M_2N:
609*53ee8cc1Swenshuai.xi             u16OutClkSrc = HAL_TSO_OUT_DIV_SEL_172M_2N;
610*53ee8cc1Swenshuai.xi             break;
611*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLKSRC_288M_2N:
612*53ee8cc1Swenshuai.xi             u16OutClkSrc = HAL_TSO_OUT_DIV_SEL_288M_2N;
613*53ee8cc1Swenshuai.xi             break;
614*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLKSRC_216M_N:
615*53ee8cc1Swenshuai.xi             u16OutClkSrc = HAL_TSO_OUT_DIV_SEL_216M_N;
616*53ee8cc1Swenshuai.xi             break;
617*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLKSRC_P_TS0IN:
618*53ee8cc1Swenshuai.xi             u16OutClkSrc = HAL_PRE_TSO_OUT_SEL_TS0IN;
619*53ee8cc1Swenshuai.xi             break;
620*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLKSRC_P_TS1IN:
621*53ee8cc1Swenshuai.xi             u16OutClkSrc = HAL_PRE_TSO_OUT_SEL_TS1IN;
622*53ee8cc1Swenshuai.xi             break;
623*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLKSRC_P_TS2IN:
624*53ee8cc1Swenshuai.xi             u16OutClkSrc = HAL_PRE_TSO_OUT_SEL_TS2IN;
625*53ee8cc1Swenshuai.xi             break;
626*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLKSRC_P_TS3IN:
627*53ee8cc1Swenshuai.xi             u16OutClkSrc = HAL_PRE_TSO_OUT_SEL_TS3IN;
628*53ee8cc1Swenshuai.xi             break;
629*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLKSRC_P_TS4IN:
630*53ee8cc1Swenshuai.xi             u16OutClkSrc = HAL_PRE_TSO_OUT_SEL_TS4IN;
631*53ee8cc1Swenshuai.xi             break;
632*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLKSRC_P_TS5IN:
633*53ee8cc1Swenshuai.xi             u16OutClkSrc = HAL_PRE_TSO_OUT_SEL_TS5IN;
634*53ee8cc1Swenshuai.xi             break;
635*53ee8cc1Swenshuai.xi     #if (defined(TSP_VERSION) && (TSP_VERSION == TSP_VER_4_0))
636*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLKSRC_P_TS6IN:
637*53ee8cc1Swenshuai.xi             u16OutClkSrc = HAL_PRE_TSO_OUT_SEL_TS6IN;
638*53ee8cc1Swenshuai.xi             break;
639*53ee8cc1Swenshuai.xi     #endif
640*53ee8cc1Swenshuai.xi         default:
641*53ee8cc1Swenshuai.xi             break;
642*53ee8cc1Swenshuai.xi     }
643*53ee8cc1Swenshuai.xi 
644*53ee8cc1Swenshuai.xi     stTsoOutClk.bClkInvert = bClkInv;
645*53ee8cc1Swenshuai.xi     switch(eOutClk)
646*53ee8cc1Swenshuai.xi     {
647*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLK_DIV2N:
648*53ee8cc1Swenshuai.xi             stTsoOutClk.u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_DIV2N;
649*53ee8cc1Swenshuai.xi             stTsoOutClk.u16OutDivSrc = u16OutClkSrc;
650*53ee8cc1Swenshuai.xi             stTsoOutClk.u16OutDivNum = u16DivNum;
651*53ee8cc1Swenshuai.xi             break;
652*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLK_DIVN:
653*53ee8cc1Swenshuai.xi             stTsoOutClk.u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_DIV;
654*53ee8cc1Swenshuai.xi             stTsoOutClk.u16OutDivSrc = u16OutClkSrc;
655*53ee8cc1Swenshuai.xi             stTsoOutClk.u16OutDivNum = u16DivNum;
656*53ee8cc1Swenshuai.xi             break;
657*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLK_62M:
658*53ee8cc1Swenshuai.xi             stTsoOutClk.u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_62MHz;
659*53ee8cc1Swenshuai.xi             break;
660*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLK_54M:
661*53ee8cc1Swenshuai.xi             stTsoOutClk.u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_54MHz;
662*53ee8cc1Swenshuai.xi             break;
663*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLK_PTSOOUT:
664*53ee8cc1Swenshuai.xi             stTsoOutClk.u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT;
665*53ee8cc1Swenshuai.xi             stTsoOutClk.u16PreTsoOutClk = u16OutClkSrc;
666*53ee8cc1Swenshuai.xi             break;
667*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLK_PTSOOUT_DIV8:
668*53ee8cc1Swenshuai.xi             stTsoOutClk.u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT_DIV8;
669*53ee8cc1Swenshuai.xi             stTsoOutClk.u16PreTsoOutClk = u16OutClkSrc;
670*53ee8cc1Swenshuai.xi             break;
671*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLK_Dmd:
672*53ee8cc1Swenshuai.xi             stTsoOutClk.u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_FROM_DEMOD;
673*53ee8cc1Swenshuai.xi             break;
674*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLK_27M:
675*53ee8cc1Swenshuai.xi             stTsoOutClk.u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_27MHz;
676*53ee8cc1Swenshuai.xi             break;
677*53ee8cc1Swenshuai.xi     #if (defined(TSP_VERSION) && (TSP_VERSION == TSP_VER_4_0))
678*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLK_86M:
679*53ee8cc1Swenshuai.xi             stTsoOutClk.u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_86MHz;
680*53ee8cc1Swenshuai.xi             break;
681*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLK_108M:
682*53ee8cc1Swenshuai.xi             stTsoOutClk.u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_108MHz;
683*53ee8cc1Swenshuai.xi             break;
684*53ee8cc1Swenshuai.xi         case E_DRVTSO_OUTCLK_123M:
685*53ee8cc1Swenshuai.xi             stTsoOutClk.u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_123MHz;
686*53ee8cc1Swenshuai.xi             break;
687*53ee8cc1Swenshuai.xi     #endif
688*53ee8cc1Swenshuai.xi         default:
689*53ee8cc1Swenshuai.xi             _TSO_RETURN(DRVTSO_INVALID_PARAM);
690*53ee8cc1Swenshuai.xi     }
691*53ee8cc1Swenshuai.xi 
692*53ee8cc1Swenshuai.xi     //ULOGD("TSO", "[%s] u16OutClk %x, u16PreTsoOutClk %x\n", __FUNCTION__, stTsoOutClk.u16OutClk,  stTsoOutClk.u16PreTsoOutClk );
693*53ee8cc1Swenshuai.xi 
694*53ee8cc1Swenshuai.xi     HAL_TSO_OutputClk(u8Eng, &stTsoOutClk, TRUE);
695*53ee8cc1Swenshuai.xi 
696*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
697*53ee8cc1Swenshuai.xi }
698*53ee8cc1Swenshuai.xi 
699*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
700*53ee8cc1Swenshuai.xi /// Get TSO Out Clock
701*53ee8cc1Swenshuai.xi /// @param  u8Eng                                         \b IN: TSO engine ID
702*53ee8cc1Swenshuai.xi /// @param  eOutClk                                       \b IN: TSO out clock select
703*53ee8cc1Swenshuai.xi /// @param  eOutClkSrc                                   \b IN: TSO out clock source select
704*53ee8cc1Swenshuai.xi /// @param  u16DivNum                                  \b IN: If select DMPLLDIV source, setting Divide number
705*53ee8cc1Swenshuai.xi /// @param  bClkInv                                        \b IN: If Out Clock invert
706*53ee8cc1Swenshuai.xi /// @return TSO_Result
707*53ee8cc1Swenshuai.xi /// @note
708*53ee8cc1Swenshuai.xi /// Out Clk 5.4M,
709*53ee8cc1Swenshuai.xi ///         eOutClkSrc = E_DRVTSO_OUTCLK_DIV2N
710*53ee8cc1Swenshuai.xi ///         eOutClkSrc = E_DRVTSO_OUTCLKSRC_172M_2N
711*53ee8cc1Swenshuai.xi ///         u16DivNum = 15
712*53ee8cc1Swenshuai.xi /// Out Clk 6.17M,
713*53ee8cc1Swenshuai.xi ///         eOutClkSrc = E_DRVTSO_OUTCLK_DIV2N
714*53ee8cc1Swenshuai.xi ///         eOutClkSrc = E_DRVTSO_OUTCLKSRC_172M_2N
715*53ee8cc1Swenshuai.xi ///         u16DivNum = 13
716*53ee8cc1Swenshuai.xi /// Out Clk 6.64M,
717*53ee8cc1Swenshuai.xi ///         eOutClkSrc = E_DRVTSO_OUTCLK_DIV2N
718*53ee8cc1Swenshuai.xi ///         eOutClkSrc = E_DRVTSO_OUTCLKSRC_172M_2N
719*53ee8cc1Swenshuai.xi ///         u16DivNum = 12
720*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_GetOutClk(MS_U8 u8Eng,DrvTSO_OutClk * peOutClk,DrvTSO_OutClkSrc * peOutClkSrc,MS_U16 * pu16DivNum,MS_BOOL * pbClkInv)721*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_GetOutClk(MS_U8 u8Eng, DrvTSO_OutClk* peOutClk, DrvTSO_OutClkSrc* peOutClkSrc, MS_U16* pu16DivNum, MS_BOOL* pbClkInv)
722*53ee8cc1Swenshuai.xi {
723*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
724*53ee8cc1Swenshuai.xi 
725*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
726*53ee8cc1Swenshuai.xi 
727*53ee8cc1Swenshuai.xi     HalTSOOutClk stTsoOutClk = {0xFFFF, 0xFFFF, 0, 0xFFFF, FALSE, TRUE};
728*53ee8cc1Swenshuai.xi 
729*53ee8cc1Swenshuai.xi     //ULOGD("TSO", "[%s] eOutClk %x, eOutClkSrc %x, u16DivNum %x\n", __FUNCTION__, eOutClk,  eOutClkSrc, u16DivNum);
730*53ee8cc1Swenshuai.xi 
731*53ee8cc1Swenshuai.xi     HAL_TSO_OutputClk(u8Eng, &stTsoOutClk, FALSE);
732*53ee8cc1Swenshuai.xi     *pbClkInv = stTsoOutClk.bClkInvert;
733*53ee8cc1Swenshuai.xi 
734*53ee8cc1Swenshuai.xi     switch(stTsoOutClk.u16OutClk)
735*53ee8cc1Swenshuai.xi     {
736*53ee8cc1Swenshuai.xi         case HAL_TSO_OUT_SEL_TSO_OUT_DIV2N:
737*53ee8cc1Swenshuai.xi             *peOutClk = E_DRVTSO_OUTCLK_DIV2N;
738*53ee8cc1Swenshuai.xi             *peOutClkSrc = E_DRVTSO_OUTCLKSRC_172M_2N;
739*53ee8cc1Swenshuai.xi             *pu16DivNum = stTsoOutClk.u16OutDivNum;
740*53ee8cc1Swenshuai.xi             break;
741*53ee8cc1Swenshuai.xi         case HAL_TSO_OUT_SEL_TSO_OUT_DIV:
742*53ee8cc1Swenshuai.xi             *peOutClk = E_DRVTSO_OUTCLK_DIVN;
743*53ee8cc1Swenshuai.xi             *peOutClkSrc = E_DRVTSO_OUTCLKSRC_216M_N;
744*53ee8cc1Swenshuai.xi             *pu16DivNum = stTsoOutClk.u16OutDivNum;
745*53ee8cc1Swenshuai.xi             break;
746*53ee8cc1Swenshuai.xi         case HAL_TSO_OUT_SEL_TSO_OUT_62MHz:
747*53ee8cc1Swenshuai.xi             *peOutClk = E_DRVTSO_OUTCLK_62M;
748*53ee8cc1Swenshuai.xi             break;
749*53ee8cc1Swenshuai.xi         case HAL_TSO_OUT_SEL_TSO_OUT_54MHz:
750*53ee8cc1Swenshuai.xi             *peOutClk = E_DRVTSO_OUTCLK_54M;
751*53ee8cc1Swenshuai.xi             break;
752*53ee8cc1Swenshuai.xi         case HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT:
753*53ee8cc1Swenshuai.xi             *peOutClk = E_DRVTSO_OUTCLK_PTSOOUT;
754*53ee8cc1Swenshuai.xi             break;
755*53ee8cc1Swenshuai.xi         case HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT_DIV8:
756*53ee8cc1Swenshuai.xi             *peOutClk = E_DRVTSO_OUTCLK_PTSOOUT_DIV8;
757*53ee8cc1Swenshuai.xi             break;
758*53ee8cc1Swenshuai.xi         case HAL_TSO_OUT_SEL_TSO_OUT_FROM_DEMOD:
759*53ee8cc1Swenshuai.xi             *peOutClk = E_DRVTSO_OUTCLK_Dmd;
760*53ee8cc1Swenshuai.xi             break;
761*53ee8cc1Swenshuai.xi         case HAL_TSO_OUT_SEL_TSO_OUT_27MHz:
762*53ee8cc1Swenshuai.xi             *peOutClk = E_DRVTSO_OUTCLK_27M;
763*53ee8cc1Swenshuai.xi             break;
764*53ee8cc1Swenshuai.xi         default:
765*53ee8cc1Swenshuai.xi             *peOutClk = 0xFF;
766*53ee8cc1Swenshuai.xi             break;
767*53ee8cc1Swenshuai.xi     }
768*53ee8cc1Swenshuai.xi 
769*53ee8cc1Swenshuai.xi     *peOutClkSrc = 0xFF;
770*53ee8cc1Swenshuai.xi     if((stTsoOutClk.u16OutClk == HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT) || (stTsoOutClk.u16OutClk == HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT_DIV8))
771*53ee8cc1Swenshuai.xi     {
772*53ee8cc1Swenshuai.xi         switch(stTsoOutClk.u16PreTsoOutClk)
773*53ee8cc1Swenshuai.xi         {
774*53ee8cc1Swenshuai.xi             case HAL_PRE_TSO_OUT_SEL_TS0IN:
775*53ee8cc1Swenshuai.xi                 *peOutClkSrc = E_DRVTSO_OUTCLKSRC_P_TS0IN;
776*53ee8cc1Swenshuai.xi                 break;
777*53ee8cc1Swenshuai.xi             case HAL_PRE_TSO_OUT_SEL_TS1IN:
778*53ee8cc1Swenshuai.xi                 *peOutClkSrc = E_DRVTSO_OUTCLKSRC_P_TS1IN;
779*53ee8cc1Swenshuai.xi                 break;
780*53ee8cc1Swenshuai.xi             case HAL_PRE_TSO_OUT_SEL_TS2IN:
781*53ee8cc1Swenshuai.xi                 *peOutClkSrc = E_DRVTSO_OUTCLKSRC_P_TS2IN;
782*53ee8cc1Swenshuai.xi                 break;
783*53ee8cc1Swenshuai.xi             case HAL_PRE_TSO_OUT_SEL_TS3IN:
784*53ee8cc1Swenshuai.xi                 *peOutClkSrc = E_DRVTSO_OUTCLKSRC_P_TS3IN;
785*53ee8cc1Swenshuai.xi                 break;
786*53ee8cc1Swenshuai.xi             case HAL_PRE_TSO_OUT_SEL_TS4IN:
787*53ee8cc1Swenshuai.xi                 *peOutClkSrc = E_DRVTSO_OUTCLKSRC_P_TS4IN;
788*53ee8cc1Swenshuai.xi                 break;
789*53ee8cc1Swenshuai.xi             case HAL_PRE_TSO_OUT_SEL_TS5IN:
790*53ee8cc1Swenshuai.xi                 *peOutClkSrc = E_DRVTSO_OUTCLKSRC_P_TS5IN;
791*53ee8cc1Swenshuai.xi                 break;
792*53ee8cc1Swenshuai.xi             default:
793*53ee8cc1Swenshuai.xi                 break;
794*53ee8cc1Swenshuai.xi         }
795*53ee8cc1Swenshuai.xi     }
796*53ee8cc1Swenshuai.xi 
797*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
798*53ee8cc1Swenshuai.xi }
799*53ee8cc1Swenshuai.xi 
800*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
801*53ee8cc1Swenshuai.xi /// Get TSO Interface status
802*53ee8cc1Swenshuai.xi /// @param  u8Eng                                  \b IN: TSO engine ID
803*53ee8cc1Swenshuai.xi /// @param  eIf                                \b IN: TSO input IF, enum item of DrvTSO_If
804*53ee8cc1Swenshuai.xi /// @param  pIfSet                                 \b OUT: Pointer to store TSO interface status
805*53ee8cc1Swenshuai.xi /// @param  pbBypassAll                           \b OUT: Pointer to store bypass mode status of TSO Channel interface
806*53ee8cc1Swenshuai.xi /// @param  pbEnable                               \b OUT: Pointer to store enable status of TSO Channel interface
807*53ee8cc1Swenshuai.xi /// @return TSO_Result
808*53ee8cc1Swenshuai.xi /// @note
809*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_GetTSIFStatus(MS_U8 u8Eng,DrvTSO_If eIf,DrvTSO_If_Set * pIfSet,MS_BOOL * pbBypassAll,MS_BOOL * pbEnable)810*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_GetTSIFStatus(MS_U8 u8Eng, DrvTSO_If eIf, DrvTSO_If_Set* pIfSet, MS_BOOL* pbBypassAll, MS_BOOL* pbEnable)
811*53ee8cc1Swenshuai.xi {
812*53ee8cc1Swenshuai.xi     MS_U8 u8Id = 0;
813*53ee8cc1Swenshuai.xi     MS_U16 u16Data = 0;
814*53ee8cc1Swenshuai.xi 
815*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d][%s]\n", __LINE__, __FUNCTION__));
816*53ee8cc1Swenshuai.xi 
817*53ee8cc1Swenshuai.xi     if((eIf == E_DRVTSO_IF_FILE0) || (eIf == E_DRVTSO_IF_FILE1))
818*53ee8cc1Swenshuai.xi     {
819*53ee8cc1Swenshuai.xi         pIfSet->ePad = E_DRVTSO_MEM;
820*53ee8cc1Swenshuai.xi         pIfSet->bClkInv = FALSE;
821*53ee8cc1Swenshuai.xi         pIfSet->bExtSync = FALSE;
822*53ee8cc1Swenshuai.xi         pIfSet->bParallel = FALSE;
823*53ee8cc1Swenshuai.xi         return DRVTSO_OK;
824*53ee8cc1Swenshuai.xi     }
825*53ee8cc1Swenshuai.xi 
826*53ee8cc1Swenshuai.xi     if((u8Id = _TSO_TSIF2ChID(eIf)) == 0xFF)
827*53ee8cc1Swenshuai.xi     {
828*53ee8cc1Swenshuai.xi         return DRVTSO_INVALID_PARAM;
829*53ee8cc1Swenshuai.xi     }
830*53ee8cc1Swenshuai.xi 
831*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
832*53ee8cc1Swenshuai.xi 
833*53ee8cc1Swenshuai.xi     HAL_TSO_GetInputTSIF_Status(u8Eng, u8Id, &u16Data, &(pIfSet->bClkInv), &(pIfSet->bExtSync), &(pIfSet->bParallel));
834*53ee8cc1Swenshuai.xi 
835*53ee8cc1Swenshuai.xi     switch(u16Data)
836*53ee8cc1Swenshuai.xi     {
837*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_TS0:
838*53ee8cc1Swenshuai.xi             pIfSet->ePad = E_DRVTSO_PAD_EXT_INPUT0;
839*53ee8cc1Swenshuai.xi             break;
840*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_TS1:
841*53ee8cc1Swenshuai.xi             pIfSet->ePad = E_DRVTSO_PAD_EXT_INPUT1;
842*53ee8cc1Swenshuai.xi             break;
843*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_TS2:
844*53ee8cc1Swenshuai.xi             pIfSet->ePad = E_DRVTSO_PAD_EXT_INPUT2;
845*53ee8cc1Swenshuai.xi             break;
846*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_TS3:
847*53ee8cc1Swenshuai.xi             pIfSet->ePad = E_DRVTSO_PAD_EXT_INPUT3;
848*53ee8cc1Swenshuai.xi             break;
849*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_TS4:
850*53ee8cc1Swenshuai.xi             pIfSet->ePad = E_DRVTSO_PAD_EXT_INPUT4;
851*53ee8cc1Swenshuai.xi             break;
852*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_TS5:
853*53ee8cc1Swenshuai.xi             pIfSet->ePad = E_DRVTSO_PAD_EXT_INPUT5;
854*53ee8cc1Swenshuai.xi             break;
855*53ee8cc1Swenshuai.xi     #if (defined(TSP_VERSION) && (TSP_VERSION == TSP_VER_4_0))
856*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_TS6:
857*53ee8cc1Swenshuai.xi             pIfSet->ePad = E_DRVTSO_PAD_EXT_INPUT6;
858*53ee8cc1Swenshuai.xi             break;
859*53ee8cc1Swenshuai.xi     #endif
860*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_TSDEMOD0:
861*53ee8cc1Swenshuai.xi             pIfSet->ePad = E_DRVTSO_PAD_DEMOD;
862*53ee8cc1Swenshuai.xi             break;
863*53ee8cc1Swenshuai.xi         default:
864*53ee8cc1Swenshuai.xi             pIfSet->ePad = HAL_TSOIN_MUX_MEM;
865*53ee8cc1Swenshuai.xi             break;
866*53ee8cc1Swenshuai.xi     }
867*53ee8cc1Swenshuai.xi 
868*53ee8cc1Swenshuai.xi     HAL_TSO_Get_ChIf_Cfg(u8Eng, u8Id, &u16Data, pbEnable);
869*53ee8cc1Swenshuai.xi 
870*53ee8cc1Swenshuai.xi     *pbBypassAll = ((u16Data & TSO_CHCFG_PIDFLT_REC_ALL) == TSO_CHCFG_PIDFLT_REC_ALL);
871*53ee8cc1Swenshuai.xi 
872*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
873*53ee8cc1Swenshuai.xi }
874*53ee8cc1Swenshuai.xi 
875*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
876*53ee8cc1Swenshuai.xi /// Allocate TSO PID filter
877*53ee8cc1Swenshuai.xi /// @param  u8Eng                                  \b IN: TSO engine ID
878*53ee8cc1Swenshuai.xi /// @param  pu16PidFltId                         \b OUT: pointer of PID filter ID for return
879*53ee8cc1Swenshuai.xi /// @return TSO_Result
880*53ee8cc1Swenshuai.xi /// @note
881*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_PidFlt_Alloc(MS_U8 u8Eng,MS_U16 * pu16PidFltId)882*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_PidFlt_Alloc(MS_U8 u8Eng, MS_U16 *pu16PidFltId)
883*53ee8cc1Swenshuai.xi {
884*53ee8cc1Swenshuai.xi     MS_U16 u16ii;
885*53ee8cc1Swenshuai.xi     *pu16PidFltId = 0xFF;
886*53ee8cc1Swenshuai.xi 
887*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
888*53ee8cc1Swenshuai.xi 
889*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
890*53ee8cc1Swenshuai.xi     for(u16ii = 0; u16ii < TSO_PIDFLT_NUM; u16ii++)
891*53ee8cc1Swenshuai.xi     {
892*53ee8cc1Swenshuai.xi         if(_ptso_res->_FltState[u8Eng][u16ii] == E_DRVTSO_FLT_STATE_FREE)
893*53ee8cc1Swenshuai.xi         {
894*53ee8cc1Swenshuai.xi             TSO_DBGERR(ULOGE("TSO", "Allocate PID Filter %d\n", u16ii));
895*53ee8cc1Swenshuai.xi             _ptso_res->_FltState[u8Eng][u16ii] = E_DRVTSO_FLT_STATE_ALLOC;
896*53ee8cc1Swenshuai.xi             *pu16PidFltId = u16ii;
897*53ee8cc1Swenshuai.xi             _TSO_RETURN(DRVTSO_OK);
898*53ee8cc1Swenshuai.xi         }
899*53ee8cc1Swenshuai.xi     }
900*53ee8cc1Swenshuai.xi 
901*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_FAIL);
902*53ee8cc1Swenshuai.xi }
903*53ee8cc1Swenshuai.xi 
904*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
905*53ee8cc1Swenshuai.xi /// Free TSO PID filter
906*53ee8cc1Swenshuai.xi /// @param u16PidFltId                           \b IN: PID filter ID
907*53ee8cc1Swenshuai.xi /// @return TSO_Result
908*53ee8cc1Swenshuai.xi /// @note
909*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_PidFlt_Free(MS_U8 u8Eng,MS_U16 u16PidFltId)910*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_PidFlt_Free(MS_U8 u8Eng, MS_U16 u16PidFltId)
911*53ee8cc1Swenshuai.xi {
912*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
913*53ee8cc1Swenshuai.xi 
914*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
915*53ee8cc1Swenshuai.xi 
916*53ee8cc1Swenshuai.xi     if(_ptso_res->_FltState[u8Eng][u16PidFltId] == E_DRVTSO_FLT_STATE_FREE)
917*53ee8cc1Swenshuai.xi     {
918*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_OK);
919*53ee8cc1Swenshuai.xi     }
920*53ee8cc1Swenshuai.xi 
921*53ee8cc1Swenshuai.xi     HAL_TSO_Flt_SetPid(u8Eng, u16PidFltId, TSO_PID_NULL);
922*53ee8cc1Swenshuai.xi     HAL_TSO_Flt_SetInputSrc(u8Eng, u16PidFltId, 0);
923*53ee8cc1Swenshuai.xi 
924*53ee8cc1Swenshuai.xi     //reset resource parameters
925*53ee8cc1Swenshuai.xi     _ptso_res->_u16FltPid[u8Eng][u16PidFltId] = TSO_PID_NULL;
926*53ee8cc1Swenshuai.xi     _ptso_res->_u32FltChSrc[u8Eng][u16PidFltId] = 0;
927*53ee8cc1Swenshuai.xi     _ptso_res->_FltState[u8Eng][u16PidFltId] = E_DRVTSO_FLT_STATE_FREE;
928*53ee8cc1Swenshuai.xi 
929*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
930*53ee8cc1Swenshuai.xi }
931*53ee8cc1Swenshuai.xi 
932*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
933*53ee8cc1Swenshuai.xi /// Set PID to PID filter
934*53ee8cc1Swenshuai.xi /// @param  u8Eng                                \b IN: TSO engine ID
935*53ee8cc1Swenshuai.xi /// @param  u16PidFltId                       \b IN: PID filter ID
936*53ee8cc1Swenshuai.xi /// @param  u16Pid                             \b IN: Enable Flag
937*53ee8cc1Swenshuai.xi /// @return TSO_Result
938*53ee8cc1Swenshuai.xi /// @note
939*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_PidFlt_SetPid(MS_U8 u8Eng,MS_U16 u16PidFltId,MS_U16 u16Pid)940*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_PidFlt_SetPid(MS_U8 u8Eng, MS_U16 u16PidFltId, MS_U16 u16Pid)
941*53ee8cc1Swenshuai.xi {
942*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
943*53ee8cc1Swenshuai.xi 
944*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
945*53ee8cc1Swenshuai.xi 
946*53ee8cc1Swenshuai.xi     if(_ptso_res->_FltState[u8Eng][u16PidFltId] != E_DRVTSO_FLT_STATE_ALLOC)
947*53ee8cc1Swenshuai.xi     {
948*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_FAIL);
949*53ee8cc1Swenshuai.xi     }
950*53ee8cc1Swenshuai.xi 
951*53ee8cc1Swenshuai.xi     HAL_TSO_Flt_SetPid(u8Eng, u16PidFltId, u16Pid);
952*53ee8cc1Swenshuai.xi     _ptso_res->_u16FltPid[u8Eng][u16PidFltId] = u16Pid;
953*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
954*53ee8cc1Swenshuai.xi }
955*53ee8cc1Swenshuai.xi 
956*53ee8cc1Swenshuai.xi #if (defined(TSP_VERSION) && (TSP_VERSION == TSP_VER_4_0))
957*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
958*53ee8cc1Swenshuai.xi /// Set Channel source to PID filter
959*53ee8cc1Swenshuai.xi /// @param  u8Eng                                \b IN: TSO engine ID
960*53ee8cc1Swenshuai.xi /// @param  u16PidFltId                         \b IN: PID filter ID
961*53ee8cc1Swenshuai.xi /// @param  u8Sid                                \b IN: Service ID
962*53ee8cc1Swenshuai.xi /// @return TSO_Result
963*53ee8cc1Swenshuai.xi /// @note
964*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_PidFlt_SetSid(MS_U8 u8Eng,MS_U16 u16PidFltId,MS_U8 u8Sid)965*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_PidFlt_SetSid(MS_U8 u8Eng, MS_U16 u16PidFltId, MS_U8 u8Sid)
966*53ee8cc1Swenshuai.xi {
967*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
968*53ee8cc1Swenshuai.xi 
969*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
970*53ee8cc1Swenshuai.xi 
971*53ee8cc1Swenshuai.xi     if(_ptso_res->_FltState[u8Eng][u16PidFltId] != E_DRVTSO_FLT_STATE_ALLOC)
972*53ee8cc1Swenshuai.xi     {
973*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_FAIL);
974*53ee8cc1Swenshuai.xi     }
975*53ee8cc1Swenshuai.xi 
976*53ee8cc1Swenshuai.xi     HAL_TSO_Flt_SetSid(u8Eng, u16PidFltId, u8Sid);
977*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
978*53ee8cc1Swenshuai.xi }
979*53ee8cc1Swenshuai.xi #endif
980*53ee8cc1Swenshuai.xi 
981*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
982*53ee8cc1Swenshuai.xi /// Set Channel source to PID filter
983*53ee8cc1Swenshuai.xi /// @param  u8Eng                                \b IN: TSO engine ID
984*53ee8cc1Swenshuai.xi /// @param  u16PidFltId                       \b IN: PID filter ID
985*53ee8cc1Swenshuai.xi /// @param  eIf                                  \b IN: PID filter source from which TSIF
986*53ee8cc1Swenshuai.xi /// @return TSO_Result
987*53ee8cc1Swenshuai.xi /// @note
988*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_PidFlt_SetChSrc(MS_U8 u8Eng,MS_U16 u16PidFltId,DrvTSO_If eIf)989*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_PidFlt_SetChSrc(MS_U8 u8Eng, MS_U16 u16PidFltId, DrvTSO_If eIf)
990*53ee8cc1Swenshuai.xi {
991*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
992*53ee8cc1Swenshuai.xi 
993*53ee8cc1Swenshuai.xi     MS_U16 u16ChSrc = 0;
994*53ee8cc1Swenshuai.xi 
995*53ee8cc1Swenshuai.xi     if((u16ChSrc = (MS_U16)_TSO_TSIF2ChID(eIf)) == 0xFF)
996*53ee8cc1Swenshuai.xi     {
997*53ee8cc1Swenshuai.xi         return DRVTSO_FAIL;
998*53ee8cc1Swenshuai.xi     }
999*53ee8cc1Swenshuai.xi 
1000*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1001*53ee8cc1Swenshuai.xi 
1002*53ee8cc1Swenshuai.xi     if(_ptso_res->_FltState[u8Eng][u16PidFltId] != E_DRVTSO_FLT_STATE_ALLOC)
1003*53ee8cc1Swenshuai.xi     {
1004*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_FAIL);
1005*53ee8cc1Swenshuai.xi     }
1006*53ee8cc1Swenshuai.xi 
1007*53ee8cc1Swenshuai.xi     HAL_TSO_Flt_SetInputSrc(u8Eng, u16PidFltId, u16ChSrc);
1008*53ee8cc1Swenshuai.xi     _ptso_res->_u32FltChSrc[u8Eng][u16PidFltId] = u16ChSrc;
1009*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1010*53ee8cc1Swenshuai.xi }
1011*53ee8cc1Swenshuai.xi 
1012*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1013*53ee8cc1Swenshuai.xi /// Allocate TSO Replace PID filter
1014*53ee8cc1Swenshuai.xi /// @param  u8Eng                                 \b IN: TSO engine ID
1015*53ee8cc1Swenshuai.xi /// @param  pu16PidFltId                         \b OUT: pointer of PID filter ID for return
1016*53ee8cc1Swenshuai.xi /// @return TSO_Result
1017*53ee8cc1Swenshuai.xi /// @note
1018*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_RepPidFlt_Alloc(MS_U8 u8Eng,MS_U16 * pu16PidFltId)1019*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_RepPidFlt_Alloc(MS_U8 u8Eng, MS_U16 *pu16PidFltId)
1020*53ee8cc1Swenshuai.xi {
1021*53ee8cc1Swenshuai.xi     MS_U16 u16ii;
1022*53ee8cc1Swenshuai.xi     *pu16PidFltId = 0xFF;
1023*53ee8cc1Swenshuai.xi 
1024*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1025*53ee8cc1Swenshuai.xi 
1026*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1027*53ee8cc1Swenshuai.xi     for(u16ii = 0; u16ii < TSO_REP_PIDFLT_NUM; u16ii++)
1028*53ee8cc1Swenshuai.xi     {
1029*53ee8cc1Swenshuai.xi         if(_ptso_res->_RepFltState[u8Eng][u16ii] == E_DRVTSO_FLT_STATE_FREE)
1030*53ee8cc1Swenshuai.xi         {
1031*53ee8cc1Swenshuai.xi             TSO_DBGERR(ULOGE("TSO", "Allocate PID Filter %d\n", u16ii));
1032*53ee8cc1Swenshuai.xi             _ptso_res->_RepFltState[u8Eng][u16ii] = E_DRVTSO_FLT_STATE_ALLOC;
1033*53ee8cc1Swenshuai.xi             *pu16PidFltId = u16ii;
1034*53ee8cc1Swenshuai.xi             _TSO_RETURN(DRVTSO_OK);
1035*53ee8cc1Swenshuai.xi         }
1036*53ee8cc1Swenshuai.xi     }
1037*53ee8cc1Swenshuai.xi 
1038*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_FAIL);
1039*53ee8cc1Swenshuai.xi }
1040*53ee8cc1Swenshuai.xi 
1041*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1042*53ee8cc1Swenshuai.xi /// Set Original PID and new PID to replace PID filter
1043*53ee8cc1Swenshuai.xi /// @param  u8Eng                                \b IN: TSO engine ID
1044*53ee8cc1Swenshuai.xi /// @param  u16PidFltId                       \b IN: PID filter ID
1045*53ee8cc1Swenshuai.xi /// @param  eIf                                  \b IN: PID filter source from which TSIF
1046*53ee8cc1Swenshuai.xi /// @param  u16OrgPid                        \b IN: Original PID
1047*53ee8cc1Swenshuai.xi /// @param  u16NewPid                       \b IN: New PID
1048*53ee8cc1Swenshuai.xi /// @return TSO_Result
1049*53ee8cc1Swenshuai.xi /// @note
1050*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_RepPidFlt_Set(MS_U8 u8Eng,MS_U16 u16PidFltId,DrvTSO_If eIf,MS_U16 u16OrgPid,MS_U16 u16NewPid)1051*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_RepPidFlt_Set(MS_U8 u8Eng, MS_U16 u16PidFltId, DrvTSO_If eIf, MS_U16 u16OrgPid, MS_U16 u16NewPid)
1052*53ee8cc1Swenshuai.xi {
1053*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1054*53ee8cc1Swenshuai.xi 
1055*53ee8cc1Swenshuai.xi     MS_U8 u8ChSrc = 0;
1056*53ee8cc1Swenshuai.xi     if((u8ChSrc = _TSO_TSIF2ChID(eIf)) == 0xFF)
1057*53ee8cc1Swenshuai.xi     {
1058*53ee8cc1Swenshuai.xi         return DRVTSO_INVALID_PARAM;
1059*53ee8cc1Swenshuai.xi     }
1060*53ee8cc1Swenshuai.xi 
1061*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1062*53ee8cc1Swenshuai.xi 
1063*53ee8cc1Swenshuai.xi     if(_ptso_res->_RepFltState[u8Eng][u16PidFltId] != E_DRVTSO_FLT_STATE_ALLOC)
1064*53ee8cc1Swenshuai.xi     {
1065*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_FAIL);
1066*53ee8cc1Swenshuai.xi     }
1067*53ee8cc1Swenshuai.xi 
1068*53ee8cc1Swenshuai.xi     if(HAL_TSO_ReplaceFlt_SetPktPid(u8Eng, u16PidFltId, u8ChSrc, u16OrgPid, u16NewPid) == FALSE)
1069*53ee8cc1Swenshuai.xi     {
1070*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_FAIL);
1071*53ee8cc1Swenshuai.xi     }
1072*53ee8cc1Swenshuai.xi 
1073*53ee8cc1Swenshuai.xi     _ptso_res->_u16RepFltOrgPid[u8Eng][u16PidFltId] = u16OrgPid;
1074*53ee8cc1Swenshuai.xi     _ptso_res->_u16RepFltNewPid[u8Eng][u16PidFltId] = u16NewPid;
1075*53ee8cc1Swenshuai.xi     _ptso_res->_u16RepFltChSrc[u8Eng][u16PidFltId] = (MS_U16)u8ChSrc;
1076*53ee8cc1Swenshuai.xi 
1077*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1078*53ee8cc1Swenshuai.xi }
1079*53ee8cc1Swenshuai.xi 
1080*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1081*53ee8cc1Swenshuai.xi /// Replace PID filter enable
1082*53ee8cc1Swenshuai.xi /// @param  u8Eng                                 \b IN: TSO engine ID
1083*53ee8cc1Swenshuai.xi /// @param  u16PidFltId                          \b IN: PID filter ID
1084*53ee8cc1Swenshuai.xi /// @param  bEnable                              \b IN: TRUE is enabled; FALSE is disabled
1085*53ee8cc1Swenshuai.xi /// @return TSO_Result
1086*53ee8cc1Swenshuai.xi /// @note
1087*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_RepPidFlt_Enable(MS_U8 u8Eng,MS_U16 u16PidFltId,MS_BOOL bEnable)1088*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_RepPidFlt_Enable(MS_U8 u8Eng, MS_U16 u16PidFltId, MS_BOOL bEnable)
1089*53ee8cc1Swenshuai.xi {
1090*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1091*53ee8cc1Swenshuai.xi 
1092*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1093*53ee8cc1Swenshuai.xi 
1094*53ee8cc1Swenshuai.xi     if(_ptso_res->_RepFltState[u8Eng][u16PidFltId] != E_DRVTSO_FLT_STATE_ALLOC)
1095*53ee8cc1Swenshuai.xi     {
1096*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_FAIL);
1097*53ee8cc1Swenshuai.xi     }
1098*53ee8cc1Swenshuai.xi 
1099*53ee8cc1Swenshuai.xi     if(HAL_TSO_ReplaceFlt_Enable(u8Eng, u16PidFltId, bEnable) == TRUE)
1100*53ee8cc1Swenshuai.xi     {
1101*53ee8cc1Swenshuai.xi         _ptso_res->_RepFltState[u8Eng][u16PidFltId] = E_DRVTSO_FLT_STATE_ENABLE;
1102*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_OK);
1103*53ee8cc1Swenshuai.xi     }
1104*53ee8cc1Swenshuai.xi     else
1105*53ee8cc1Swenshuai.xi     {
1106*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_FAIL);
1107*53ee8cc1Swenshuai.xi     }
1108*53ee8cc1Swenshuai.xi }
1109*53ee8cc1Swenshuai.xi 
1110*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1111*53ee8cc1Swenshuai.xi /// Free TSO Replace PID filter
1112*53ee8cc1Swenshuai.xi /// @param u16PidFltId                           \b IN: PID filter ID
1113*53ee8cc1Swenshuai.xi /// @return TSO_Result
1114*53ee8cc1Swenshuai.xi /// @note
1115*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_RepPidFlt_Free(MS_U8 u8Eng,MS_U16 u16PidFltId)1116*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_RepPidFlt_Free(MS_U8 u8Eng, MS_U16 u16PidFltId)
1117*53ee8cc1Swenshuai.xi {
1118*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1119*53ee8cc1Swenshuai.xi 
1120*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1121*53ee8cc1Swenshuai.xi 
1122*53ee8cc1Swenshuai.xi     if(_ptso_res->_RepFltState[u8Eng][u16PidFltId] == E_DRVTSO_FLT_STATE_FREE)
1123*53ee8cc1Swenshuai.xi     {
1124*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_OK);
1125*53ee8cc1Swenshuai.xi     }
1126*53ee8cc1Swenshuai.xi 
1127*53ee8cc1Swenshuai.xi     if(_ptso_res->_RepFltState[u8Eng][u16PidFltId] == E_DRVTSO_FLT_STATE_ENABLE)
1128*53ee8cc1Swenshuai.xi     {
1129*53ee8cc1Swenshuai.xi         if(HAL_TSO_ReplaceFlt_Enable(u8Eng, u16PidFltId, FALSE) == FALSE)
1130*53ee8cc1Swenshuai.xi         {
1131*53ee8cc1Swenshuai.xi             _TSO_RETURN(DRVTSO_FAIL);
1132*53ee8cc1Swenshuai.xi         }
1133*53ee8cc1Swenshuai.xi         _ptso_res->_RepFltState[u8Eng][u16PidFltId] = E_DRVTSO_FLT_STATE_ALLOC;
1134*53ee8cc1Swenshuai.xi     }
1135*53ee8cc1Swenshuai.xi     if(HAL_TSO_ReplaceFlt_SetPktPid(u8Eng, u16PidFltId, 0, TSO_PID_NULL, TSO_PID_NULL) == FALSE)
1136*53ee8cc1Swenshuai.xi     {
1137*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_FAIL);
1138*53ee8cc1Swenshuai.xi     }
1139*53ee8cc1Swenshuai.xi 
1140*53ee8cc1Swenshuai.xi     //reset resource parameters
1141*53ee8cc1Swenshuai.xi     _ptso_res->_u16RepFltOrgPid[u8Eng][u16PidFltId] = TSO_PID_NULL;
1142*53ee8cc1Swenshuai.xi     _ptso_res->_u16RepFltNewPid[u8Eng][u16PidFltId] = TSO_PID_NULL;
1143*53ee8cc1Swenshuai.xi     _ptso_res->_u16RepFltChSrc[u8Eng][u16PidFltId] = 0;
1144*53ee8cc1Swenshuai.xi     _ptso_res->_RepFltState[u8Eng][u16PidFltId] = E_DRVTSO_FLT_STATE_FREE;
1145*53ee8cc1Swenshuai.xi 
1146*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1147*53ee8cc1Swenshuai.xi }
1148*53ee8cc1Swenshuai.xi 
1149*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1150*53ee8cc1Swenshuai.xi /// Command Queue Reset
1151*53ee8cc1Swenshuai.xi /// @param  u8FileEng                            \b IN: Finein Engine
1152*53ee8cc1Swenshuai.xi /// @return TSO_Result
1153*53ee8cc1Swenshuai.xi /// @note
1154*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Filein_CmdQ_Reset(MS_U8 u8FileEng)1155*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Filein_CmdQ_Reset(MS_U8 u8FileEng)
1156*53ee8cc1Swenshuai.xi {
1157*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1158*53ee8cc1Swenshuai.xi 
1159*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1160*53ee8cc1Swenshuai.xi     HAL_TSO_CmdQ_Reset(0, u8FileEng);
1161*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1162*53ee8cc1Swenshuai.xi }
1163*53ee8cc1Swenshuai.xi 
1164*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1165*53ee8cc1Swenshuai.xi /// Get Command Queue Write Level value
1166*53ee8cc1Swenshuai.xi /// @param  u8FileEng                            \b IN: Finein Engine
1167*53ee8cc1Swenshuai.xi /// @param  pu8FifoLevel                       \b OUT: pointer of Command Queue Write Level value for return
1168*53ee8cc1Swenshuai.xi /// @return TSO_Result
1169*53ee8cc1Swenshuai.xi /// @note
1170*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Filein_CmdQFifo_Status(MS_U8 u8FileEng,MS_U8 * pu8FifoLevel)1171*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Filein_CmdQFifo_Status(MS_U8 u8FileEng, MS_U8 *pu8FifoLevel)
1172*53ee8cc1Swenshuai.xi {
1173*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1174*53ee8cc1Swenshuai.xi 
1175*53ee8cc1Swenshuai.xi     *pu8FifoLevel = HAL_TSO_CmdQ_FIFO_Get_WRLevel(0, u8FileEng);
1176*53ee8cc1Swenshuai.xi     return DRVTSO_OK;
1177*53ee8cc1Swenshuai.xi }
1178*53ee8cc1Swenshuai.xi 
1179*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1180*53ee8cc1Swenshuai.xi /// Get Command Queue Empty Slot value
1181*53ee8cc1Swenshuai.xi /// @param  u8FileEng                                \b IN: Finein Engine
1182*53ee8cc1Swenshuai.xi /// @param  pu32EmptySlot                       \b OUT: pointer of Command Queue Empty Slot value for return
1183*53ee8cc1Swenshuai.xi /// @return TSO_Result
1184*53ee8cc1Swenshuai.xi /// @note
1185*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Filein_CmdQ_GetSlot(MS_U8 u8FileEng,MS_U32 * pu32EmptySlot)1186*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Filein_CmdQ_GetSlot(MS_U8 u8FileEng, MS_U32 *pu32EmptySlot)
1187*53ee8cc1Swenshuai.xi {
1188*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1189*53ee8cc1Swenshuai.xi 
1190*53ee8cc1Swenshuai.xi     *pu32EmptySlot = 0;
1191*53ee8cc1Swenshuai.xi     *pu32EmptySlot = (MS_U32)((TSO_CMDQ_SIZE - HAL_TSO_CmdQ_FIFO_Get_WRCnt(0, u8FileEng)) & 0xFFFF);
1192*53ee8cc1Swenshuai.xi     return DRVTSO_OK;
1193*53ee8cc1Swenshuai.xi }
1194*53ee8cc1Swenshuai.xi 
1195*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1196*53ee8cc1Swenshuai.xi /// Set playback timestamp
1197*53ee8cc1Swenshuai.xi /// @param  u8FileEng                                \b IN: Finein Engine
1198*53ee8cc1Swenshuai.xi /// @param  u32timestamp                        \b IN: timestamp value
1199*53ee8cc1Swenshuai.xi /// @return TSO_Result
1200*53ee8cc1Swenshuai.xi /// @note
1201*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_SetPlaybackTimeStamp(MS_U8 u8FileEng,MS_U32 u32timestamp)1202*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_SetPlaybackTimeStamp(MS_U8 u8FileEng, MS_U32 u32timestamp)
1203*53ee8cc1Swenshuai.xi {
1204*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1205*53ee8cc1Swenshuai.xi 
1206*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1207*53ee8cc1Swenshuai.xi     HAL_TSO_LPcr2_Set(0, u8FileEng, u32timestamp);
1208*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1209*53ee8cc1Swenshuai.xi }
1210*53ee8cc1Swenshuai.xi 
1211*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1212*53ee8cc1Swenshuai.xi /// Get playback timestamp
1213*53ee8cc1Swenshuai.xi /// @param  u8Eng                                    \b IN: TSO engine ID
1214*53ee8cc1Swenshuai.xi /// @param  u8FileEng                                \b IN: Finein Engine
1215*53ee8cc1Swenshuai.xi /// @param pu32timestamp                        \b OUT: pointer of timestamp value for return
1216*53ee8cc1Swenshuai.xi /// @return MMFI_Result
1217*53ee8cc1Swenshuai.xi /// @note
1218*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_GetPlaybackTimeStamp(MS_U8 u8FileEng,MS_U32 * pu32timestamp)1219*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_GetPlaybackTimeStamp(MS_U8 u8FileEng, MS_U32 *pu32timestamp)
1220*53ee8cc1Swenshuai.xi {
1221*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1222*53ee8cc1Swenshuai.xi     TSO_ASSERT((pu32timestamp != 0));
1223*53ee8cc1Swenshuai.xi 
1224*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1225*53ee8cc1Swenshuai.xi     *pu32timestamp = HAL_TSO_LPcr2_Get(0, u8FileEng);
1226*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1227*53ee8cc1Swenshuai.xi }
1228*53ee8cc1Swenshuai.xi 
1229*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1230*53ee8cc1Swenshuai.xi /// Get File-in timestamp value
1231*53ee8cc1Swenshuai.xi /// @param  u8FileEng                                \b IN: Finein Engine
1232*53ee8cc1Swenshuai.xi /// @param  pu32Timestamp                       \b OUT: pointer of Timestamp value for return
1233*53ee8cc1Swenshuai.xi /// @return TSO_Result
1234*53ee8cc1Swenshuai.xi /// @note
1235*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_GetFileInTimeStamp(MS_U8 u8FileEng,MS_U32 * pu32Timestamp)1236*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_GetFileInTimeStamp(MS_U8 u8FileEng, MS_U32* pu32Timestamp)
1237*53ee8cc1Swenshuai.xi {
1238*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1239*53ee8cc1Swenshuai.xi     TSO_ASSERT((pu32Timestamp != 0));
1240*53ee8cc1Swenshuai.xi 
1241*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1242*53ee8cc1Swenshuai.xi     *pu32Timestamp = HAL_TSO_TimeStamp_Get(0, u8FileEng);
1243*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1244*53ee8cc1Swenshuai.xi }
1245*53ee8cc1Swenshuai.xi 
1246*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1247*53ee8cc1Swenshuai.xi /// Get TSO File-in read address
1248*53ee8cc1Swenshuai.xi /// @param  u8FileEng                                \b IN: Finein Engine
1249*53ee8cc1Swenshuai.xi /// @param  pphyReadAddr                        \b OUT: Pointer to store file-in current reand pointer
1250*53ee8cc1Swenshuai.xi /// @return TSP_Result
1251*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Filein_GetReadAddr(MS_U8 u8FileEng,MS_PHY * pphyReadAddr)1252*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Filein_GetReadAddr(MS_U8 u8FileEng, MS_PHY *pphyReadAddr)
1253*53ee8cc1Swenshuai.xi {
1254*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1255*53ee8cc1Swenshuai.xi     TSO_ASSERT((pphyReadAddr != 0));
1256*53ee8cc1Swenshuai.xi 
1257*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1258*53ee8cc1Swenshuai.xi     *pphyReadAddr = HAL_TSO_Get_Filein_ReadAddr(0, u8FileEng);
1259*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1260*53ee8cc1Swenshuai.xi }
1261*53ee8cc1Swenshuai.xi 
1262*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1263*53ee8cc1Swenshuai.xi /// Set File-in Read Start Address
1264*53ee8cc1Swenshuai.xi /// @param  u8FileEng                                  \b IN: Finein Engine
1265*53ee8cc1Swenshuai.xi /// @param  phyStreamAddr                       \b IN: MIU Physical Address of File-in Read Start Address.
1266*53ee8cc1Swenshuai.xi /// @return TSO_Result
1267*53ee8cc1Swenshuai.xi /// @note
1268*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Filein_SetAddr(MS_U8 u8FileEng,MS_PHY phyStreamAddr)1269*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Filein_SetAddr(MS_U8 u8FileEng, MS_PHY phyStreamAddr)
1270*53ee8cc1Swenshuai.xi {
1271*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1272*53ee8cc1Swenshuai.xi 
1273*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1274*53ee8cc1Swenshuai.xi     HAL_TSO_Set_Filein_ReadAddr(0, u8FileEng, phyStreamAddr);
1275*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1276*53ee8cc1Swenshuai.xi }
1277*53ee8cc1Swenshuai.xi 
1278*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1279*53ee8cc1Swenshuai.xi /// Set File-in Packet Mode
1280*53ee8cc1Swenshuai.xi /// @param  u8FileEng                                \b IN: Finein Engine
1281*53ee8cc1Swenshuai.xi /// @param  ePktMode                                \b IN: Select packet mode
1282*53ee8cc1Swenshuai.xi /// @return TSO_Result
1283*53ee8cc1Swenshuai.xi /// @note
1284*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_SetPacketMode(MS_U8 u8FileEng,DrvTSO_PacketMode ePktMode)1285*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_SetPacketMode(MS_U8 u8FileEng, DrvTSO_PacketMode ePktMode)
1286*53ee8cc1Swenshuai.xi {
1287*53ee8cc1Swenshuai.xi     //MS_U16 u16OutPktSize = 0xBB;
1288*53ee8cc1Swenshuai.xi     MS_U16 u16ValidCount = 0xBB;
1289*53ee8cc1Swenshuai.xi     MS_U16 u16InValidCount = 0x0;
1290*53ee8cc1Swenshuai.xi     MS_U8 u8Size = 0;
1291*53ee8cc1Swenshuai.xi 
1292*53ee8cc1Swenshuai.xi     switch (ePktMode)
1293*53ee8cc1Swenshuai.xi     {
1294*53ee8cc1Swenshuai.xi         case E_DRVTSO_PKTMODE_188:
1295*53ee8cc1Swenshuai.xi             u8Size = 0xBB;
1296*53ee8cc1Swenshuai.xi             break;
1297*53ee8cc1Swenshuai.xi         case E_DRVTSO_PKTMODE_192:
1298*53ee8cc1Swenshuai.xi             u8Size = 0xBF;
1299*53ee8cc1Swenshuai.xi             break;
1300*53ee8cc1Swenshuai.xi         case E_DRVTSO_PKTMODE_204:
1301*53ee8cc1Swenshuai.xi             u8Size = 0xCB;
1302*53ee8cc1Swenshuai.xi             break;
1303*53ee8cc1Swenshuai.xi         default:
1304*53ee8cc1Swenshuai.xi             return DRVTSO_INVALID_PARAM;
1305*53ee8cc1Swenshuai.xi     }
1306*53ee8cc1Swenshuai.xi 
1307*53ee8cc1Swenshuai.xi     u16ValidCount = (MS_U16)u8Size;
1308*53ee8cc1Swenshuai.xi 
1309*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1310*53ee8cc1Swenshuai.xi 
1311*53ee8cc1Swenshuai.xi     HAL_TSO_Filein_PktChkSize_Set(0, u8FileEng, u8Size);
1312*53ee8cc1Swenshuai.xi     HAL_TSO_RW_ValidBlock_Count(0, TRUE, &u16ValidCount);
1313*53ee8cc1Swenshuai.xi     HAL_TSO_RW_InvalidBlock_Count(0, TRUE, &u16InValidCount);
1314*53ee8cc1Swenshuai.xi     ///HAL_TSO_RW_OutputPktSize(0, TRUE, &u16OutPktSize);
1315*53ee8cc1Swenshuai.xi 
1316*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1317*53ee8cc1Swenshuai.xi 
1318*53ee8cc1Swenshuai.xi }
1319*53ee8cc1Swenshuai.xi 
1320*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1321*53ee8cc1Swenshuai.xi /// Set File-in Read Size
1322*53ee8cc1Swenshuai.xi /// @param  u8FileEng                                \b IN: Finein Engine
1323*53ee8cc1Swenshuai.xi /// @param  u32StreamSize                        \b IN: File-in Read Size.
1324*53ee8cc1Swenshuai.xi /// @return TSO_Result
1325*53ee8cc1Swenshuai.xi //   @note u32StreamSize must be larger than 16
1326*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Filein_SetSize(MS_U8 u8FileEng,MS_U32 u32StreamSize)1327*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Filein_SetSize(MS_U8 u8FileEng, MS_U32 u32StreamSize)
1328*53ee8cc1Swenshuai.xi {
1329*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1330*53ee8cc1Swenshuai.xi 
1331*53ee8cc1Swenshuai.xi     if(u32StreamSize <= 16) //HW limitation
1332*53ee8cc1Swenshuai.xi         return DRVTSO_FAIL;
1333*53ee8cc1Swenshuai.xi 
1334*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1335*53ee8cc1Swenshuai.xi     HAL_TSO_Set_Filein_ReadLen(0, u8FileEng, u32StreamSize);
1336*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1337*53ee8cc1Swenshuai.xi }
1338*53ee8cc1Swenshuai.xi 
1339*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1340*53ee8cc1Swenshuai.xi /// Set Input packet size
1341*53ee8cc1Swenshuai.xi /// @param  u8Eng                            \b IN: TSO engine ID
1342*53ee8cc1Swenshuai.xi /// @param  eIf                                   \b IN: Enum of Input TSO IF
1343*53ee8cc1Swenshuai.xi /// @param  u16InPktSize                   \b IN: Input packet size (192, 204, 188)
1344*53ee8cc1Swenshuai.xi /// @return TSO_Result
1345*53ee8cc1Swenshuai.xi /// @note
1346*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Set_InputPktSize(MS_U8 u8Eng,DrvTSO_If eIf,MS_U16 u16InPktSize)1347*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Set_InputPktSize(MS_U8 u8Eng, DrvTSO_If eIf, MS_U16 u16InPktSize)
1348*53ee8cc1Swenshuai.xi {
1349*53ee8cc1Swenshuai.xi     MS_U8  u8Id = 0;
1350*53ee8cc1Swenshuai.xi     MS_U16 u16ValidCount = u16InPktSize - 1;
1351*53ee8cc1Swenshuai.xi     MS_U16 u16InValidCount = 0x0;
1352*53ee8cc1Swenshuai.xi 
1353*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1354*53ee8cc1Swenshuai.xi 
1355*53ee8cc1Swenshuai.xi     if((u8Id = _TSO_TSIF2ChID(eIf)) == 0xFF)
1356*53ee8cc1Swenshuai.xi     {
1357*53ee8cc1Swenshuai.xi         return DRVTSO_INVALID_PARAM;
1358*53ee8cc1Swenshuai.xi     }
1359*53ee8cc1Swenshuai.xi 
1360*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1361*53ee8cc1Swenshuai.xi 
1362*53ee8cc1Swenshuai.xi     if(eIf >= E_DRVTSO_IF_FILE0)
1363*53ee8cc1Swenshuai.xi     {
1364*53ee8cc1Swenshuai.xi         u8Id = (MS_U8)(eIf - E_DRVTSO_IF_FILE0);
1365*53ee8cc1Swenshuai.xi         HAL_TSO_Filein_PktChkSize_Set(u8Eng, u8Id, u16InPktSize-1);
1366*53ee8cc1Swenshuai.xi     }
1367*53ee8cc1Swenshuai.xi     else
1368*53ee8cc1Swenshuai.xi     {
1369*53ee8cc1Swenshuai.xi         HAL_TSO_PktChkSize_Set(u8Eng, u8Id, u16InPktSize-1);
1370*53ee8cc1Swenshuai.xi     }
1371*53ee8cc1Swenshuai.xi     HAL_TSO_RW_ValidBlock_Count(0, TRUE, &u16ValidCount);
1372*53ee8cc1Swenshuai.xi     HAL_TSO_RW_InvalidBlock_Count(0, TRUE, &u16InValidCount);
1373*53ee8cc1Swenshuai.xi 
1374*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1375*53ee8cc1Swenshuai.xi }
1376*53ee8cc1Swenshuai.xi 
1377*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1378*53ee8cc1Swenshuai.xi /// Set/Get output packet size
1379*53ee8cc1Swenshuai.xi /// @param  u8Eng                            \b IN: TSO engine ID
1380*53ee8cc1Swenshuai.xi /// @param  u16OutPktSize                 \b IN: Output packet size (192, 204, 188)
1381*53ee8cc1Swenshuai.xi /// @return TSO_Result
1382*53ee8cc1Swenshuai.xi /// @note
1383*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_OutputPktSize(MS_U8 u8Eng,MS_U16 * pu16OutPktSize,MS_BOOL bSet)1384*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_OutputPktSize(MS_U8 u8Eng, MS_U16* pu16OutPktSize, MS_BOOL bSet)
1385*53ee8cc1Swenshuai.xi {
1386*53ee8cc1Swenshuai.xi     MS_U16 u16PktMode = HAL_TSO_SVQRX_MODE_CIP;
1387*53ee8cc1Swenshuai.xi     MS_U16 u16OutSize = *pu16OutPktSize-1;
1388*53ee8cc1Swenshuai.xi 
1389*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1390*53ee8cc1Swenshuai.xi 
1391*53ee8cc1Swenshuai.xi     if(bSet == TRUE)
1392*53ee8cc1Swenshuai.xi     {
1393*53ee8cc1Swenshuai.xi         switch(*pu16OutPktSize)
1394*53ee8cc1Swenshuai.xi         {
1395*53ee8cc1Swenshuai.xi             case 188:
1396*53ee8cc1Swenshuai.xi                 u16PktMode = HAL_TSO_SVQRX_MODE_CIP;
1397*53ee8cc1Swenshuai.xi                 break;
1398*53ee8cc1Swenshuai.xi             case 192:
1399*53ee8cc1Swenshuai.xi                 u16PktMode = HAL_TSO_SVQRX_MODE_192;
1400*53ee8cc1Swenshuai.xi                 break;
1401*53ee8cc1Swenshuai.xi             case 200:
1402*53ee8cc1Swenshuai.xi                 u16PktMode = HAL_TSO_SVQRX_MODE_OPENCABLE;
1403*53ee8cc1Swenshuai.xi                 break;
1404*53ee8cc1Swenshuai.xi             default:
1405*53ee8cc1Swenshuai.xi                 return DRVTSO_INVALID_PARAM;
1406*53ee8cc1Swenshuai.xi         }
1407*53ee8cc1Swenshuai.xi         _TSO_ENTRY();
1408*53ee8cc1Swenshuai.xi         HAL_TSO_Set_SVQRX_PktMode(u8Eng, u16PktMode);
1409*53ee8cc1Swenshuai.xi         HAL_TSO_RW_OutputPktSize(u8Eng, TRUE, &u16OutSize);
1410*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_OK);
1411*53ee8cc1Swenshuai.xi     }
1412*53ee8cc1Swenshuai.xi     else
1413*53ee8cc1Swenshuai.xi     {
1414*53ee8cc1Swenshuai.xi         HAL_TSO_RW_OutputPktSize(u8Eng, FALSE, &u16OutSize);
1415*53ee8cc1Swenshuai.xi         *pu16OutPktSize = u16OutSize + 1;
1416*53ee8cc1Swenshuai.xi         return DRVTSO_OK;
1417*53ee8cc1Swenshuai.xi     }
1418*53ee8cc1Swenshuai.xi }
1419*53ee8cc1Swenshuai.xi 
1420*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1421*53ee8cc1Swenshuai.xi /// TSO configuration
1422*53ee8cc1Swenshuai.xi /// @param  u32TsoEng                      \b IN: TSO engine ID
1423*53ee8cc1Swenshuai.xi /// @param eCfgCmd                         \b IN: Configure command.
1424*53ee8cc1Swenshuai.xi /// @param pu32CmdData0                    \b IN/OUT: General data parameter depend on eCfgCmd.
1425*53ee8cc1Swenshuai.xi /// @param bSet                            \b IN: TRUE: (set), FALSE: (get)
1426*53ee8cc1Swenshuai.xi /// @return TSO_Result
1427*53ee8cc1Swenshuai.xi /// @note
1428*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Configure(DrvTSO_Cfg * pstTsoCfg)1429*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Configure(DrvTSO_Cfg* pstTsoCfg)
1430*53ee8cc1Swenshuai.xi {
1431*53ee8cc1Swenshuai.xi     TSO_DBGERR(printf("[%d]%s\n", __LINE__, __FUNCTION__));
1432*53ee8cc1Swenshuai.xi 
1433*53ee8cc1Swenshuai.xi     TSO_Result eRes = DRVTSO_OK;
1434*53ee8cc1Swenshuai.xi     MS_U16 u16OpifValue = (MS_U16)pstTsoCfg->u32CmdData0;
1435*53ee8cc1Swenshuai.xi 
1436*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1437*53ee8cc1Swenshuai.xi 
1438*53ee8cc1Swenshuai.xi     switch(pstTsoCfg->eCfgCmd)
1439*53ee8cc1Swenshuai.xi     {
1440*53ee8cc1Swenshuai.xi         case E_DRVTSO_CFG_OPIF:
1441*53ee8cc1Swenshuai.xi             HAL_TSO_RW_OutputPktSize((MS_U8)pstTsoCfg->u32TsoEng, pstTsoCfg->bSet, &u16OpifValue);
1442*53ee8cc1Swenshuai.xi             break;
1443*53ee8cc1Swenshuai.xi         default:
1444*53ee8cc1Swenshuai.xi             printf("Not supported TSO configure Cmd = 0x%x! \n", pstTsoCfg->eCfgCmd);
1445*53ee8cc1Swenshuai.xi             eRes = DRVTSO_INVALID_PARAM;
1446*53ee8cc1Swenshuai.xi             break;
1447*53ee8cc1Swenshuai.xi     }
1448*53ee8cc1Swenshuai.xi 
1449*53ee8cc1Swenshuai.xi     if(pstTsoCfg->bSet == FALSE)
1450*53ee8cc1Swenshuai.xi     {
1451*53ee8cc1Swenshuai.xi         switch(pstTsoCfg->eCfgCmd)
1452*53ee8cc1Swenshuai.xi         {
1453*53ee8cc1Swenshuai.xi             case E_DRVTSO_CFG_OPIF:
1454*53ee8cc1Swenshuai.xi                 pstTsoCfg->u32CmdData0 = ((MS_U32)u16OpifValue) & 0xFFFFUL;
1455*53ee8cc1Swenshuai.xi                 break;
1456*53ee8cc1Swenshuai.xi             default:
1457*53ee8cc1Swenshuai.xi                 eRes = DRVTSO_INVALID_PARAM;
1458*53ee8cc1Swenshuai.xi                 break;
1459*53ee8cc1Swenshuai.xi         }
1460*53ee8cc1Swenshuai.xi     }
1461*53ee8cc1Swenshuai.xi 
1462*53ee8cc1Swenshuai.xi     _TSO_RETURN(eRes);
1463*53ee8cc1Swenshuai.xi 
1464*53ee8cc1Swenshuai.xi }
1465*53ee8cc1Swenshuai.xi 
1466*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1467*53ee8cc1Swenshuai.xi /// Enable/Disable File-in 192 Mode
1468*53ee8cc1Swenshuai.xi /// @param  u8FileEng                       \b IN: Finein Engine
1469*53ee8cc1Swenshuai.xi /// @param  bEnable                         \b IN: Enable Flag
1470*53ee8cc1Swenshuai.xi /// @return TSO_Result
1471*53ee8cc1Swenshuai.xi /// @note
1472*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Filein_192Mode_En(MS_U8 u8FileEng,MS_BOOL bEnable)1473*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Filein_192Mode_En(MS_U8 u8FileEng, MS_BOOL bEnable)
1474*53ee8cc1Swenshuai.xi {
1475*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1476*53ee8cc1Swenshuai.xi 
1477*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1478*53ee8cc1Swenshuai.xi     HAL_TSO_Filein_192Mode_Enable(0, u8FileEng, bEnable);
1479*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1480*53ee8cc1Swenshuai.xi }
1481*53ee8cc1Swenshuai.xi 
1482*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1483*53ee8cc1Swenshuai.xi /// Enable/Disable File-in 192 Block Scheme
1484*53ee8cc1Swenshuai.xi /// @param  u8FileEng                       \b IN: Finein Engine
1485*53ee8cc1Swenshuai.xi /// @param  bEnable                         \b IN: Enable Flag
1486*53ee8cc1Swenshuai.xi /// @return TSO_Result
1487*53ee8cc1Swenshuai.xi /// @note
1488*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Filein_192BlockScheme_En(MS_U8 u8FileEng,MS_BOOL bEnable)1489*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Filein_192BlockScheme_En(MS_U8 u8FileEng, MS_BOOL bEnable)
1490*53ee8cc1Swenshuai.xi {
1491*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1492*53ee8cc1Swenshuai.xi 
1493*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1494*53ee8cc1Swenshuai.xi     HAL_TSO_Filein_192BlockMode_Enable(0, u8FileEng, bEnable);
1495*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1496*53ee8cc1Swenshuai.xi }
1497*53ee8cc1Swenshuai.xi 
1498*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1499*53ee8cc1Swenshuai.xi /// Enable/Disable Skip TEL packet
1500*53ee8cc1Swenshuai.xi /// @param  u8Eng                            \b IN: TSO engine ID
1501*53ee8cc1Swenshuai.xi /// @param  eIf                                 \b IN: TSO IF
1502*53ee8cc1Swenshuai.xi /// @param  bEnable                         \b IN: Enable Flag
1503*53ee8cc1Swenshuai.xi /// @return TSO_Result
1504*53ee8cc1Swenshuai.xi /// @note
1505*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_TEI_SkipPkt(MS_U8 u8Eng,DrvTSO_If eIf,MS_BOOL bEnable)1506*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_TEI_SkipPkt(MS_U8 u8Eng, DrvTSO_If eIf, MS_BOOL bEnable)
1507*53ee8cc1Swenshuai.xi {
1508*53ee8cc1Swenshuai.xi     MS_U8 u8If = 0;
1509*53ee8cc1Swenshuai.xi 
1510*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1511*53ee8cc1Swenshuai.xi 
1512*53ee8cc1Swenshuai.xi     if((u8If = _TSO_TSIF2ChID(eIf)) == 0xFF)
1513*53ee8cc1Swenshuai.xi     {
1514*53ee8cc1Swenshuai.xi         return DRVTSO_INVALID_PARAM;
1515*53ee8cc1Swenshuai.xi     }
1516*53ee8cc1Swenshuai.xi 
1517*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1518*53ee8cc1Swenshuai.xi     HAL_TSO_ChIf_Cfg(u8Eng, u8If, TSO_CHCFG_SKIP_TEI_PKT, bEnable);
1519*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1520*53ee8cc1Swenshuai.xi }
1521*53ee8cc1Swenshuai.xi 
1522*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1523*53ee8cc1Swenshuai.xi /// Clear PID filter byte counter
1524*53ee8cc1Swenshuai.xi /// @param  u8Eng                            \b IN: TSO engine ID
1525*53ee8cc1Swenshuai.xi /// @return TSO_Result
1526*53ee8cc1Swenshuai.xi /// @note
1527*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Clr_ByteCnt(MS_U8 u8Eng,DrvTSO_If eIf)1528*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Clr_ByteCnt(MS_U8 u8Eng, DrvTSO_If eIf)
1529*53ee8cc1Swenshuai.xi {
1530*53ee8cc1Swenshuai.xi     MS_U8 u8If = 0;
1531*53ee8cc1Swenshuai.xi 
1532*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1533*53ee8cc1Swenshuai.xi 
1534*53ee8cc1Swenshuai.xi     if((u8If = _TSO_TSIF2ChID(eIf)) == 0xFF)
1535*53ee8cc1Swenshuai.xi     {
1536*53ee8cc1Swenshuai.xi         return DRVTSO_INVALID_PARAM;
1537*53ee8cc1Swenshuai.xi     }
1538*53ee8cc1Swenshuai.xi 
1539*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1540*53ee8cc1Swenshuai.xi     HAL_TSO_ChIf_ClrByteCnt(u8Eng, u8If);
1541*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1542*53ee8cc1Swenshuai.xi }
1543*53ee8cc1Swenshuai.xi 
1544*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1545*53ee8cc1Swenshuai.xi /// Get TSO Hardware capability
1546*53ee8cc1Swenshuai.xi /// @param  eCap                                 \b IN: Capability item to get
1547*53ee8cc1Swenshuai.xi /// @param  pOutput                             \b IN: Pointer to store getting result
1548*53ee8cc1Swenshuai.xi /// @return TSO_Result
1549*53ee8cc1Swenshuai.xi /// @note
1550*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_GetCap(DrvTSO_Cap eCap,void * pOutput)1551*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_GetCap(DrvTSO_Cap eCap, void* pOutput)
1552*53ee8cc1Swenshuai.xi {
1553*53ee8cc1Swenshuai.xi     *((MS_U32*)pOutput) = 0;
1554*53ee8cc1Swenshuai.xi 
1555*53ee8cc1Swenshuai.xi     switch (eCap)
1556*53ee8cc1Swenshuai.xi     {
1557*53ee8cc1Swenshuai.xi         case E_DRVTSO_CAP_FILTER_NUM:
1558*53ee8cc1Swenshuai.xi             *((MS_U32*)pOutput) = TSO_PIDFLT_NUM_ALL;
1559*53ee8cc1Swenshuai.xi             break;
1560*53ee8cc1Swenshuai.xi         case E_DRVTSO_CAP_RESOURCE_SIZE:
1561*53ee8cc1Swenshuai.xi             *((MS_U32*)pOutput) = (MS_U32)sizeof(TSO_RESOURCE_PRIVATE);
1562*53ee8cc1Swenshuai.xi             break;
1563*53ee8cc1Swenshuai.xi         case E_DRVTSO_CAP_ENGINE_NUM:
1564*53ee8cc1Swenshuai.xi             *((MS_U32*)pOutput) = TSO_ENGINE_NUM;
1565*53ee8cc1Swenshuai.xi             break;
1566*53ee8cc1Swenshuai.xi         case E_DRVTSO_CAP_ENGINE_TSIF_NUM:
1567*53ee8cc1Swenshuai.xi             *((MS_U32*)pOutput) = TSO_TSIF_NUM;
1568*53ee8cc1Swenshuai.xi             break;
1569*53ee8cc1Swenshuai.xi         default:
1570*53ee8cc1Swenshuai.xi             return DRVTSO_INVALID_PARAM;
1571*53ee8cc1Swenshuai.xi     }
1572*53ee8cc1Swenshuai.xi 
1573*53ee8cc1Swenshuai.xi     return DRVTSO_OK;
1574*53ee8cc1Swenshuai.xi }
1575*53ee8cc1Swenshuai.xi 
1576*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1577*53ee8cc1Swenshuai.xi /// Get Command queue state
1578*53ee8cc1Swenshuai.xi /// @param  u8FileEng                            \b IN: File engine ID
1579*53ee8cc1Swenshuai.xi /// @param  peFileinState                       \b OUT: Pointer of Filein state to return
1580*53ee8cc1Swenshuai.xi /// @return MMFI_Result
1581*53ee8cc1Swenshuai.xi /// @note
1582*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Filein_GetState(MS_U8 u8FileEng,DrvTSO_FileinState * peFileinState)1583*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Filein_GetState(MS_U8 u8FileEng, DrvTSO_FileinState *peFileinState)
1584*53ee8cc1Swenshuai.xi {
1585*53ee8cc1Swenshuai.xi     MS_U16 u16state = 0xFF, u16cmdcnt = 0;
1586*53ee8cc1Swenshuai.xi 
1587*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1588*53ee8cc1Swenshuai.xi 
1589*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1590*53ee8cc1Swenshuai.xi 
1591*53ee8cc1Swenshuai.xi     u16state = HAL_TSO_Get_Filein_Ctrl(0, u8FileEng);
1592*53ee8cc1Swenshuai.xi     u16cmdcnt = HAL_TSO_CmdQ_FIFO_Get_WRCnt(0, u8FileEng);
1593*53ee8cc1Swenshuai.xi 
1594*53ee8cc1Swenshuai.xi     if((u16state & TSO_FILEIN_RSTART) || u16cmdcnt)
1595*53ee8cc1Swenshuai.xi         *peFileinState = E_DRVTSO_STATE_BUSY;
1596*53ee8cc1Swenshuai.xi     else
1597*53ee8cc1Swenshuai.xi         *peFileinState = E_DRVTSO_STATE_IDLE;
1598*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1599*53ee8cc1Swenshuai.xi }
1600*53ee8cc1Swenshuai.xi 
1601*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1602*53ee8cc1Swenshuai.xi /// Get Command queue interrupt state
1603*53ee8cc1Swenshuai.xi /// @param  u8Eng                                 \b IN: TSO engine ID
1604*53ee8cc1Swenshuai.xi /// @param  u8FileEng                             \b IN: Filein engine
1605*53ee8cc1Swenshuai.xi /// @param  pStatus                               \b OUT: Pointer of Filein status to return
1606*53ee8cc1Swenshuai.xi /// @return TSO_Result
1607*53ee8cc1Swenshuai.xi /// @note
1608*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Filein_ChkStatus(MS_U8 u8Eng,MS_U8 u8FileEng,DrvTSO_Status * pStatus)1609*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Filein_ChkStatus(MS_U8 u8Eng, MS_U8 u8FileEng, DrvTSO_Status* pStatus)
1610*53ee8cc1Swenshuai.xi {
1611*53ee8cc1Swenshuai.xi     MS_U16 u32temp = 0;
1612*53ee8cc1Swenshuai.xi 
1613*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1614*53ee8cc1Swenshuai.xi 
1615*53ee8cc1Swenshuai.xi     u32temp = HAL_TSO_HWInt_Status(u8Eng);
1616*53ee8cc1Swenshuai.xi 
1617*53ee8cc1Swenshuai.xi     *pStatus = E_DRVTSO_STATUS_UNKNOWN;
1618*53ee8cc1Swenshuai.xi 
1619*53ee8cc1Swenshuai.xi     if(u8FileEng == 0)
1620*53ee8cc1Swenshuai.xi     {
1621*53ee8cc1Swenshuai.xi         if(u32temp & TSO_INT_DMA_DONE)
1622*53ee8cc1Swenshuai.xi             *pStatus |= E_DRVTSO_STATUS_FILEINDONE;
1623*53ee8cc1Swenshuai.xi     }
1624*53ee8cc1Swenshuai.xi     else if(u8FileEng == 1)
1625*53ee8cc1Swenshuai.xi     {
1626*53ee8cc1Swenshuai.xi         if(u32temp & TSO_INT_DMA_DONE1)
1627*53ee8cc1Swenshuai.xi             *pStatus |= E_DRVTSO_STATUS_FILEINDONE;
1628*53ee8cc1Swenshuai.xi     }
1629*53ee8cc1Swenshuai.xi 
1630*53ee8cc1Swenshuai.xi     return DRVTSO_OK;
1631*53ee8cc1Swenshuai.xi }
1632*53ee8cc1Swenshuai.xi 
1633*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1634*53ee8cc1Swenshuai.xi /// Clear Command queue interrupt state
1635*53ee8cc1Swenshuai.xi /// @param  u8Eng                                 \b IN: TSO engine ID
1636*53ee8cc1Swenshuai.xi /// @param  u16int                                 \b OUT: Interrupt bit to clear
1637*53ee8cc1Swenshuai.xi /// @return MMFI_Result
1638*53ee8cc1Swenshuai.xi /// @note
1639*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Filein_ClearHWInt(MS_U8 u8Eng,MS_U16 u16int)1640*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Filein_ClearHWInt(MS_U8 u8Eng, MS_U16 u16int)
1641*53ee8cc1Swenshuai.xi {
1642*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1643*53ee8cc1Swenshuai.xi 
1644*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1645*53ee8cc1Swenshuai.xi     HAL_TSO_HWInt_Clear(u8Eng, u16int);
1646*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1647*53ee8cc1Swenshuai.xi }
1648*53ee8cc1Swenshuai.xi 
1649*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1650*53ee8cc1Swenshuai.xi /// Control Filein to Start
1651*53ee8cc1Swenshuai.xi /// @param  u8FileEng                             \b IN: Filein engine
1652*53ee8cc1Swenshuai.xi /// @return TSO_Result
1653*53ee8cc1Swenshuai.xi /// @note
1654*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Filein_Start(MS_U8 u8FileEng)1655*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Filein_Start(MS_U8 u8FileEng)
1656*53ee8cc1Swenshuai.xi {
1657*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1658*53ee8cc1Swenshuai.xi 
1659*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1660*53ee8cc1Swenshuai.xi 
1661*53ee8cc1Swenshuai.xi     //HAL_TSO_FileinTimer_Enable(0, u8FileEng, TRUE);
1662*53ee8cc1Swenshuai.xi 
1663*53ee8cc1Swenshuai.xi     //valid cfg parameters
1664*53ee8cc1Swenshuai.xi     HAL_TSO_Cfg1_Enable(0, TSO_CFG1_PKT_PARAM_LD, TRUE);
1665*53ee8cc1Swenshuai.xi     HAL_TSO_Cfg1_Enable(0, TSO_CFG1_PKT_PARAM_LD, FALSE);
1666*53ee8cc1Swenshuai.xi 
1667*53ee8cc1Swenshuai.xi     HAL_TSO_Set_Filein_Ctrl(0, u8FileEng, TSO_FILEIN_RSTART);
1668*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1669*53ee8cc1Swenshuai.xi }
1670*53ee8cc1Swenshuai.xi 
1671*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1672*53ee8cc1Swenshuai.xi /// Control Filein to Stop
1673*53ee8cc1Swenshuai.xi /// @param  u8FileEng                             \b IN: Filein engine
1674*53ee8cc1Swenshuai.xi /// @return TSO_Result
1675*53ee8cc1Swenshuai.xi /// @note
1676*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Filein_Stop(MS_U8 u8FileEng)1677*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Filein_Stop(MS_U8 u8FileEng)
1678*53ee8cc1Swenshuai.xi {
1679*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1680*53ee8cc1Swenshuai.xi 
1681*53ee8cc1Swenshuai.xi     MS_U8 u8TsIf = ((u8FileEng == 0)?HAL_TSO_TSIF_FILE1 : HAL_TSO_TSIF_FILE2);
1682*53ee8cc1Swenshuai.xi 
1683*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1684*53ee8cc1Swenshuai.xi 
1685*53ee8cc1Swenshuai.xi     HAL_TSO_ChIf_Enable(0, u8TsIf, FALSE);
1686*53ee8cc1Swenshuai.xi     HAL_TSO_Cfg1_Enable(0, TSO_CFG1_TSO_OUT_EN, FALSE);
1687*53ee8cc1Swenshuai.xi 
1688*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1689*53ee8cc1Swenshuai.xi }
1690*53ee8cc1Swenshuai.xi 
1691*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1692*53ee8cc1Swenshuai.xi /// Control Filein to Abort
1693*53ee8cc1Swenshuai.xi /// @param  u8FileEng                             \b IN: Filein engine
1694*53ee8cc1Swenshuai.xi /// @return TSO_Result
1695*53ee8cc1Swenshuai.xi /// @note
1696*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_Filein_Abort(MS_U8 u8FileEng)1697*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Filein_Abort(MS_U8 u8FileEng)
1698*53ee8cc1Swenshuai.xi {
1699*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1700*53ee8cc1Swenshuai.xi 
1701*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1702*53ee8cc1Swenshuai.xi     HAL_TSO_Set_Filein_Ctrl(0, u8FileEng, TSO_FILEIN_ABORT);
1703*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1704*53ee8cc1Swenshuai.xi }
1705*53ee8cc1Swenshuai.xi 
MDrv_TSO_ResetAll(MS_U8 u8Eng)1706*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_ResetAll(MS_U8 u8Eng)
1707*53ee8cc1Swenshuai.xi {
1708*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1709*53ee8cc1Swenshuai.xi 
1710*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1711*53ee8cc1Swenshuai.xi     HAL_TSO_Reset_All(u8Eng);
1712*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1713*53ee8cc1Swenshuai.xi }
1714*53ee8cc1Swenshuai.xi 
MDrv_TSO_SelPad(MS_U8 u8Eng,DrvTSO_If eIf,DrvTSO_If_Set * pIfSet)1715*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_SelPad(MS_U8 u8Eng, DrvTSO_If eIf, DrvTSO_If_Set* pIfSet)
1716*53ee8cc1Swenshuai.xi {
1717*53ee8cc1Swenshuai.xi     MS_U8 u8ChId = 0;
1718*53ee8cc1Swenshuai.xi     MS_U16 u16Pad = 0, u16clk = 0;
1719*53ee8cc1Swenshuai.xi #if (defined(TSP_VERSION) && (TSP_VERSION == TSP_VER_4_0))
1720*53ee8cc1Swenshuai.xi     MS_BOOL bIs3Wire = FALSE;
1721*53ee8cc1Swenshuai.xi #endif
1722*53ee8cc1Swenshuai.xi 
1723*53ee8cc1Swenshuai.xi     if((u8ChId = _TSO_TSIF2ChID(eIf)) == 0xFF)
1724*53ee8cc1Swenshuai.xi     {
1725*53ee8cc1Swenshuai.xi         return DRVTSO_INVALID_PARAM;
1726*53ee8cc1Swenshuai.xi     }
1727*53ee8cc1Swenshuai.xi 
1728*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%s] eIf %d, ePad %x\n", __FUNCTION__, (int)eIf, (int)pIfSet->ePad));
1729*53ee8cc1Swenshuai.xi 
1730*53ee8cc1Swenshuai.xi     switch(pIfSet->ePad)
1731*53ee8cc1Swenshuai.xi     {
1732*53ee8cc1Swenshuai.xi         case E_DRVTSO_PAD_EXT_INPUT0:
1733*53ee8cc1Swenshuai.xi             u16Pad = HAL_TSOIN_MUX_TS0;
1734*53ee8cc1Swenshuai.xi             u16clk = TSO_CLKIN_TS0;
1735*53ee8cc1Swenshuai.xi             break;
1736*53ee8cc1Swenshuai.xi         case E_DRVTSO_PAD_EXT_INPUT1:
1737*53ee8cc1Swenshuai.xi             u16Pad = HAL_TSOIN_MUX_TS1;
1738*53ee8cc1Swenshuai.xi             u16clk = TSO_CLKIN_TS1;
1739*53ee8cc1Swenshuai.xi             break;
1740*53ee8cc1Swenshuai.xi         case E_DRVTSO_PAD_EXT_INPUT2:
1741*53ee8cc1Swenshuai.xi             u16Pad = HAL_TSOIN_MUX_TS2;
1742*53ee8cc1Swenshuai.xi             u16clk = TSO_CLKIN_TS2;
1743*53ee8cc1Swenshuai.xi             break;
1744*53ee8cc1Swenshuai.xi         case E_DRVTSO_PAD_EXT_INPUT3:
1745*53ee8cc1Swenshuai.xi             u16Pad = HAL_TSOIN_MUX_TS3;
1746*53ee8cc1Swenshuai.xi             u16clk = TSO_CLKIN_TS3;
1747*53ee8cc1Swenshuai.xi             break;
1748*53ee8cc1Swenshuai.xi         case E_DRVTSO_PAD_EXT_INPUT4:
1749*53ee8cc1Swenshuai.xi             u16Pad = HAL_TSOIN_MUX_TS4;
1750*53ee8cc1Swenshuai.xi             u16clk = TSO_CLKIN_TS4;
1751*53ee8cc1Swenshuai.xi             break;
1752*53ee8cc1Swenshuai.xi         #ifdef TSO_CLKIN_TS5
1753*53ee8cc1Swenshuai.xi         case E_DRVTSO_PAD_EXT_INPUT5:
1754*53ee8cc1Swenshuai.xi             u16Pad = HAL_TSOIN_MUX_TS5;
1755*53ee8cc1Swenshuai.xi             u16clk = TSO_CLKIN_TS5;
1756*53ee8cc1Swenshuai.xi             break;
1757*53ee8cc1Swenshuai.xi         #endif
1758*53ee8cc1Swenshuai.xi         case E_DRVTSO_PAD_DEMOD:
1759*53ee8cc1Swenshuai.xi             u16Pad = HAL_TSOIN_MUX_TSDEMOD0;
1760*53ee8cc1Swenshuai.xi             u16clk = TSO_CLKIN_DMD;
1761*53ee8cc1Swenshuai.xi             break;
1762*53ee8cc1Swenshuai.xi     #if (defined(TSP_VERSION) && (TSP_VERSION == TSP_VER_4_0))
1763*53ee8cc1Swenshuai.xi         case E_DRVTSO_PAD_EXT_INPUT0_3WIRE:
1764*53ee8cc1Swenshuai.xi             HAL_TSO_3WirePadMapping(0, &u16Pad, &u16clk);
1765*53ee8cc1Swenshuai.xi             bIs3Wire = TRUE;
1766*53ee8cc1Swenshuai.xi             break;
1767*53ee8cc1Swenshuai.xi         case E_DRVTSO_PAD_EXT_INPUT1_3WIRE:
1768*53ee8cc1Swenshuai.xi             HAL_TSO_3WirePadMapping(1, &u16Pad, &u16clk);
1769*53ee8cc1Swenshuai.xi             bIs3Wire = TRUE;
1770*53ee8cc1Swenshuai.xi             break;
1771*53ee8cc1Swenshuai.xi         case E_DRVTSO_PAD_EXT_INPUT2_3WIRE:
1772*53ee8cc1Swenshuai.xi             HAL_TSO_3WirePadMapping(2, &u16Pad, &u16clk);
1773*53ee8cc1Swenshuai.xi             bIs3Wire = TRUE;
1774*53ee8cc1Swenshuai.xi             break;
1775*53ee8cc1Swenshuai.xi         case E_DRVTSO_PAD_EXT_INPUT3_3WIRE:
1776*53ee8cc1Swenshuai.xi             HAL_TSO_3WirePadMapping(3, &u16Pad, &u16clk);
1777*53ee8cc1Swenshuai.xi             bIs3Wire = TRUE;
1778*53ee8cc1Swenshuai.xi             break;
1779*53ee8cc1Swenshuai.xi         case E_DRVTSO_PAD_EXT_INPUT4_3WIRE:
1780*53ee8cc1Swenshuai.xi             HAL_TSO_3WirePadMapping(4, &u16Pad, &u16clk);
1781*53ee8cc1Swenshuai.xi             bIs3Wire = TRUE;
1782*53ee8cc1Swenshuai.xi             break;
1783*53ee8cc1Swenshuai.xi         case E_DRVTSO_PAD_EXT_INPUT5_3WIRE:
1784*53ee8cc1Swenshuai.xi             HAL_TSO_3WirePadMapping(5, &u16Pad, &u16clk);
1785*53ee8cc1Swenshuai.xi             bIs3Wire = TRUE;
1786*53ee8cc1Swenshuai.xi             break;
1787*53ee8cc1Swenshuai.xi         case E_DRVTSO_PAD_EXT_INPUT6_3WIRE:
1788*53ee8cc1Swenshuai.xi             HAL_TSO_3WirePadMapping(6, &u16Pad, &u16clk);
1789*53ee8cc1Swenshuai.xi             bIs3Wire = TRUE;
1790*53ee8cc1Swenshuai.xi             break;
1791*53ee8cc1Swenshuai.xi     #endif
1792*53ee8cc1Swenshuai.xi         default:
1793*53ee8cc1Swenshuai.xi             return DRVTSO_INVALID_PARAM;
1794*53ee8cc1Swenshuai.xi     }
1795*53ee8cc1Swenshuai.xi 
1796*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1797*53ee8cc1Swenshuai.xi 
1798*53ee8cc1Swenshuai.xi     if(HAL_TSO_SelPad(u8Eng, u8ChId, u16Pad, pIfSet->bParallel) == FALSE)
1799*53ee8cc1Swenshuai.xi     {
1800*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_FAIL);
1801*53ee8cc1Swenshuai.xi     }
1802*53ee8cc1Swenshuai.xi     if(HAL_TSO_Set_InClk(u8Eng, u8ChId, u16clk, pIfSet->bClkInv, TRUE) == FALSE)
1803*53ee8cc1Swenshuai.xi     {
1804*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_FAIL);
1805*53ee8cc1Swenshuai.xi     }
1806*53ee8cc1Swenshuai.xi 
1807*53ee8cc1Swenshuai.xi #if (defined(TSP_VERSION) && (TSP_VERSION == TSP_VER_4_0))
1808*53ee8cc1Swenshuai.xi     if(bIs3Wire)
1809*53ee8cc1Swenshuai.xi     {
1810*53ee8cc1Swenshuai.xi         HAL_TSO_Livein_3Wire(u8Eng, u8ChId, TRUE);
1811*53ee8cc1Swenshuai.xi     }
1812*53ee8cc1Swenshuai.xi     else
1813*53ee8cc1Swenshuai.xi     {
1814*53ee8cc1Swenshuai.xi         HAL_TSO_Livein_3Wire(u8Eng, u8ChId, FALSE);
1815*53ee8cc1Swenshuai.xi     }
1816*53ee8cc1Swenshuai.xi #endif
1817*53ee8cc1Swenshuai.xi 
1818*53ee8cc1Swenshuai.xi     HAL_TSO_ChIf_Cfg(u8Eng, u8ChId, (TSO_CHCFG_TS_SIN_C0 | TSO_CHCFG_TS_SIN_C1), (pIfSet->bParallel == FALSE));
1819*53ee8cc1Swenshuai.xi     HAL_TSO_ChIf_Cfg(u8Eng, u8ChId, TSO_CHCFG_P_SEL, pIfSet->bParallel);
1820*53ee8cc1Swenshuai.xi     HAL_TSO_ChIf_Cfg(u8Eng, u8ChId, TSO_CHCFG_EXT_SYNC_SEL, pIfSet->bExtSync);
1821*53ee8cc1Swenshuai.xi 
1822*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1823*53ee8cc1Swenshuai.xi }
1824*53ee8cc1Swenshuai.xi 
1825*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1826*53ee8cc1Swenshuai.xi /// Set/Get  TSO output pad
1827*53ee8cc1Swenshuai.xi /// @param  u8Eng                                \b IN: TSO engine ID
1828*53ee8cc1Swenshuai.xi /// @param  eOutPad                             \b IN: Output pad
1829*53ee8cc1Swenshuai.xi /// @param  bSet                                  \b IN: TRUE is setting output pad; FALSE is getting output pad
1830*53ee8cc1Swenshuai.xi /// @return TSO_Result
1831*53ee8cc1Swenshuai.xi /// @note
1832*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_TSO_OutputPad(MS_U8 u8Eng,DrvTSO_PadOut * peOutPad,MS_BOOL bSet)1833*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_OutputPad(MS_U8 u8Eng, DrvTSO_PadOut* peOutPad, MS_BOOL bSet)
1834*53ee8cc1Swenshuai.xi {
1835*53ee8cc1Swenshuai.xi     MS_U16 u16pad = (MS_U16)(*peOutPad);
1836*53ee8cc1Swenshuai.xi 
1837*53ee8cc1Swenshuai.xi     TSO_DBGERR(ULOGE("TSO", "[%d]%s\n", __LINE__, __FUNCTION__));
1838*53ee8cc1Swenshuai.xi 
1839*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1840*53ee8cc1Swenshuai.xi 
1841*53ee8cc1Swenshuai.xi     if(HAL_TSO_OutPad(u8Eng, &u16pad, bSet) == TRUE)
1842*53ee8cc1Swenshuai.xi     {
1843*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_OK);
1844*53ee8cc1Swenshuai.xi     }
1845*53ee8cc1Swenshuai.xi     else
1846*53ee8cc1Swenshuai.xi     {
1847*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_FAIL);
1848*53ee8cc1Swenshuai.xi     }
1849*53ee8cc1Swenshuai.xi }
1850*53ee8cc1Swenshuai.xi 
MDrv_TSO_Set_SVQBuf(MS_U8 u8Eng,MS_PHY phyBufAddr,MS_U32 u32Size)1851*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Set_SVQBuf(MS_U8 u8Eng, MS_PHY phyBufAddr, MS_U32 u32Size)
1852*53ee8cc1Swenshuai.xi {
1853*53ee8cc1Swenshuai.xi     MS_PHY phyBufStart = phyBufAddr;
1854*53ee8cc1Swenshuai.xi     MS_U32 u32VQSize = ((u32Size >> TSO_MIU_BUS) / TSO_TSIF_NUM) << TSO_MIU_BUS;
1855*53ee8cc1Swenshuai.xi     MS_U8  u8ii, u8ChId;
1856*53ee8cc1Swenshuai.xi 
1857*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1858*53ee8cc1Swenshuai.xi 
1859*53ee8cc1Swenshuai.xi     //TSO LIVE-IN
1860*53ee8cc1Swenshuai.xi     for(u8ii = 0; u8ii < TSO_TSIF_NUM; u8ii++)
1861*53ee8cc1Swenshuai.xi     {
1862*53ee8cc1Swenshuai.xi         u8ChId = _TSO_TSIF2ChID(u8ii);
1863*53ee8cc1Swenshuai.xi         HAL_TSO_SVQBuf_Set(u8Eng, u8ChId, phyBufStart, u32VQSize);
1864*53ee8cc1Swenshuai.xi         HAL_TSO_SVQ_TX_Reset(u8Eng, u8ChId);
1865*53ee8cc1Swenshuai.xi         phyBufStart += u32VQSize;
1866*53ee8cc1Swenshuai.xi     }
1867*53ee8cc1Swenshuai.xi 
1868*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1869*53ee8cc1Swenshuai.xi }
1870*53ee8cc1Swenshuai.xi 
MDrv_TSO_Set_SVQ_LocalSysTimestamp(MS_U8 u8Eng,MS_U32 u32timestamp)1871*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Set_SVQ_LocalSysTimestamp(MS_U8 u8Eng, MS_U32 u32timestamp)
1872*53ee8cc1Swenshuai.xi {
1873*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1874*53ee8cc1Swenshuai.xi     HAL_TSO_Set_SVQ_LocalSysTimestamp(u8Eng, u32timestamp);
1875*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1876*53ee8cc1Swenshuai.xi }
1877*53ee8cc1Swenshuai.xi 
MDrv_TSO_LocalStreamId(MS_U8 u8Eng,DrvTSO_If eIf,MS_U8 * pu8Id,MS_BOOL bSet)1878*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_LocalStreamId(MS_U8 u8Eng, DrvTSO_If eIf, MS_U8 *pu8Id, MS_BOOL bSet)
1879*53ee8cc1Swenshuai.xi {
1880*53ee8cc1Swenshuai.xi     MS_U8 u8ChId = 0;
1881*53ee8cc1Swenshuai.xi 
1882*53ee8cc1Swenshuai.xi     if((u8ChId = _TSO_TSIF2ChID(eIf)) == 0xFF)
1883*53ee8cc1Swenshuai.xi     {
1884*53ee8cc1Swenshuai.xi         return DRVTSO_INVALID_PARAM;
1885*53ee8cc1Swenshuai.xi     }
1886*53ee8cc1Swenshuai.xi 
1887*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1888*53ee8cc1Swenshuai.xi 
1889*53ee8cc1Swenshuai.xi     if(HAL_TSO_LocalStreamID(u8Eng, u8ChId, pu8Id, bSet) == FALSE)
1890*53ee8cc1Swenshuai.xi     {
1891*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_FAIL);
1892*53ee8cc1Swenshuai.xi     }
1893*53ee8cc1Swenshuai.xi     else
1894*53ee8cc1Swenshuai.xi     {
1895*53ee8cc1Swenshuai.xi         _TSO_RETURN(DRVTSO_OK);
1896*53ee8cc1Swenshuai.xi     }
1897*53ee8cc1Swenshuai.xi }
1898*53ee8cc1Swenshuai.xi 
1899*53ee8cc1Swenshuai.xi #if (defined(TSP_VERSION) && (TSP_VERSION == TSP_VER_4_0))
MDrv_TSO_TsioMode_En(MS_U8 u8Eng,MS_BOOL bEnable)1900*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_TsioMode_En(MS_U8 u8Eng, MS_BOOL bEnable)
1901*53ee8cc1Swenshuai.xi {
1902*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1903*53ee8cc1Swenshuai.xi     HAL_TSO_TsioMode_En(bEnable);
1904*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1905*53ee8cc1Swenshuai.xi }
1906*53ee8cc1Swenshuai.xi #endif
1907*53ee8cc1Swenshuai.xi 
MDrv_TSO_Check_IsSVQTxBusy(MS_U8 u8Eng,DrvTSO_If eIf)1908*53ee8cc1Swenshuai.xi MS_BOOL MDrv_TSO_Check_IsSVQTxBusy(MS_U8 u8Eng, DrvTSO_If eIf)
1909*53ee8cc1Swenshuai.xi {
1910*53ee8cc1Swenshuai.xi     MS_U8  u8ChId = _TSO_TSIF2ChID(eIf);
1911*53ee8cc1Swenshuai.xi     MS_U16 u16Status = 0;
1912*53ee8cc1Swenshuai.xi 
1913*53ee8cc1Swenshuai.xi     HAL_TSO_Get_SVQ_Status(u8Eng, u8ChId, &u16Status);
1914*53ee8cc1Swenshuai.xi 
1915*53ee8cc1Swenshuai.xi     if((u16Status & TSO_SVQ_STS_BUSY) == TSO_SVQ_STS_BUSY)
1916*53ee8cc1Swenshuai.xi         return TRUE;
1917*53ee8cc1Swenshuai.xi     else
1918*53ee8cc1Swenshuai.xi         return FALSE;
1919*53ee8cc1Swenshuai.xi }
1920*53ee8cc1Swenshuai.xi 
MDrv_TSO_Check_IsSVQTxEmpty(MS_U8 u8Eng,DrvTSO_If eIf)1921*53ee8cc1Swenshuai.xi MS_BOOL MDrv_TSO_Check_IsSVQTxEmpty(MS_U8 u8Eng, DrvTSO_If eIf)
1922*53ee8cc1Swenshuai.xi {
1923*53ee8cc1Swenshuai.xi     MS_U8  u8ChId = _TSO_TSIF2ChID(eIf);
1924*53ee8cc1Swenshuai.xi     MS_U16 u16Status = 0;
1925*53ee8cc1Swenshuai.xi 
1926*53ee8cc1Swenshuai.xi     HAL_TSO_Get_SVQ_Status(u8Eng, u8ChId, &u16Status);
1927*53ee8cc1Swenshuai.xi 
1928*53ee8cc1Swenshuai.xi     if((u16Status & TSO_SVQ_STS_EMPTY) == TSO_SVQ_STS_EMPTY)
1929*53ee8cc1Swenshuai.xi         return TRUE;
1930*53ee8cc1Swenshuai.xi     else
1931*53ee8cc1Swenshuai.xi         return FALSE;
1932*53ee8cc1Swenshuai.xi }
1933*53ee8cc1Swenshuai.xi 
1934*53ee8cc1Swenshuai.xi #ifdef TSO_PVR_SUPPORT
MDrv_TSO_PVR_SelSrc(MS_U8 u8PVRId,DrvTSO_PvrSrc ePvrSrc)1935*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_PVR_SelSrc(MS_U8 u8PVRId, DrvTSO_PvrSrc ePvrSrc)
1936*53ee8cc1Swenshuai.xi {
1937*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1938*53ee8cc1Swenshuai.xi     if(ePvrSrc == E_DRVTSO_PVR_SRC_SVQ)
1939*53ee8cc1Swenshuai.xi     {
1940*53ee8cc1Swenshuai.xi         HAL_TSO_PVR_Src(HAL_TSO_PVR_SVQ);
1941*53ee8cc1Swenshuai.xi     }
1942*53ee8cc1Swenshuai.xi     else if(ePvrSrc == E_DRVTSO_PVR_SRC_MMT)
1943*53ee8cc1Swenshuai.xi     {
1944*53ee8cc1Swenshuai.xi         HAL_TSO_PVR_Src(HAL_TSO_PVR_MMT);
1945*53ee8cc1Swenshuai.xi     }
1946*53ee8cc1Swenshuai.xi     else
1947*53ee8cc1Swenshuai.xi     {
1948*53ee8cc1Swenshuai.xi         HAL_TSO_PVR_Src(HAL_TSO_PVR_SVQ);
1949*53ee8cc1Swenshuai.xi     }
1950*53ee8cc1Swenshuai.xi 
1951*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1952*53ee8cc1Swenshuai.xi 
1953*53ee8cc1Swenshuai.xi }
1954*53ee8cc1Swenshuai.xi 
MDrv_TSO_PVR_SetBuf(MS_U8 u8PVRId,MS_PHY phyBufStart0,MS_PHY phyBufStart1,MS_U32 u32BufSize0,MS_U32 u32BufSize1)1955*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_PVR_SetBuf(MS_U8 u8PVRId, MS_PHY phyBufStart0, MS_PHY phyBufStart1, MS_U32 u32BufSize0, MS_U32 u32BufSize1)
1956*53ee8cc1Swenshuai.xi {
1957*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1958*53ee8cc1Swenshuai.xi     HAL_TSO_PVR_SetBuffer(u8PVRId, phyBufStart0, phyBufStart1, u32BufSize0, u32BufSize1);
1959*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1960*53ee8cc1Swenshuai.xi }
1961*53ee8cc1Swenshuai.xi 
MDrv_TSO_PVR_SetRecordStampClk(MS_U8 u8PVRId,MS_U32 u32Clk)1962*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_PVR_SetRecordStampClk(MS_U8 u8PVRId, MS_U32 u32Clk)
1963*53ee8cc1Swenshuai.xi {
1964*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1965*53ee8cc1Swenshuai.xi     HAL_TSO_SetPVRTimeStampClk(u8PVRId, u32Clk);
1966*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1967*53ee8cc1Swenshuai.xi }
1968*53ee8cc1Swenshuai.xi 
MDrv_TSO_PVR_SetPacketMode(MS_U8 u8PVRId,MS_BOOL bSet)1969*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_PVR_SetPacketMode(MS_U8 u8PVRId, MS_BOOL bSet)
1970*53ee8cc1Swenshuai.xi {
1971*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1972*53ee8cc1Swenshuai.xi     HAL_TSO_PVR_PacketMode(u8PVRId, bSet);
1973*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1974*53ee8cc1Swenshuai.xi }
1975*53ee8cc1Swenshuai.xi 
MDrv_TSO_PVR_TimeStampSetRecordStamp(MS_U8 u8PVRId,MS_U32 u32Stamp)1976*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_PVR_TimeStampSetRecordStamp(MS_U8 u8PVRId, MS_U32 u32Stamp)
1977*53ee8cc1Swenshuai.xi {
1978*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1979*53ee8cc1Swenshuai.xi     HAL_TSO_SetPVRTimeStamp(u8PVRId, u32Stamp);
1980*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1981*53ee8cc1Swenshuai.xi }
1982*53ee8cc1Swenshuai.xi 
MDrv_TSO_PVR_TimeStampGetRecordStamp(MS_U8 u8PVRId,MS_U32 * pu32Stamp)1983*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_PVR_TimeStampGetRecordStamp(MS_U8 u8PVRId, MS_U32* pu32Stamp)
1984*53ee8cc1Swenshuai.xi {
1985*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1986*53ee8cc1Swenshuai.xi     *pu32Stamp = HAL_TSO_GetPVRTimeStamp(u8PVRId);
1987*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1988*53ee8cc1Swenshuai.xi }
1989*53ee8cc1Swenshuai.xi 
MDrv_TSO_PVR_Start(MS_U8 u8PVRId,DrvTSO_RecMode eRecMode,MS_BOOL bStart)1990*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_PVR_Start(MS_U8 u8PVRId, DrvTSO_RecMode eRecMode, MS_BOOL bStart)
1991*53ee8cc1Swenshuai.xi {
1992*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
1993*53ee8cc1Swenshuai.xi     HAL_TSO_PVR_Enable(u8PVRId, bStart);
1994*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
1995*53ee8cc1Swenshuai.xi }
1996*53ee8cc1Swenshuai.xi 
MDrv_TSO_PVR_GetWriteAddr(MS_U8 u8PVRId,MS_PHY * pphy2WriteAddr)1997*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_PVR_GetWriteAddr(MS_U8 u8PVRId, MS_PHY *pphy2WriteAddr)
1998*53ee8cc1Swenshuai.xi {
1999*53ee8cc1Swenshuai.xi     _TSO_ENTRY();
2000*53ee8cc1Swenshuai.xi     *pphy2WriteAddr = HAL_TSO_PVR_GetBufWrite(u8PVRId);
2001*53ee8cc1Swenshuai.xi     _TSO_RETURN(DRVTSO_OK);
2002*53ee8cc1Swenshuai.xi }
2003*53ee8cc1Swenshuai.xi 
2004*53ee8cc1Swenshuai.xi #endif  //TSO_PVR_SUPPORT
2005*53ee8cc1Swenshuai.xi 
2006*53ee8cc1Swenshuai.xi 
2007*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
MDrv_TSO_Suspend(void)2008*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Suspend(void)
2009*53ee8cc1Swenshuai.xi {
2010*53ee8cc1Swenshuai.xi     HAL_TSO_SaveRegs();
2011*53ee8cc1Swenshuai.xi     HAL_TSO_PowerCtrl(FALSE);
2012*53ee8cc1Swenshuai.xi 
2013*53ee8cc1Swenshuai.xi     return DRVTSO_OK;
2014*53ee8cc1Swenshuai.xi }
2015*53ee8cc1Swenshuai.xi 
MDrv_TSO_Resume(void)2016*53ee8cc1Swenshuai.xi TSO_Result MDrv_TSO_Resume(void)
2017*53ee8cc1Swenshuai.xi {
2018*53ee8cc1Swenshuai.xi     MS_U16 u16ii, u16jj;
2019*53ee8cc1Swenshuai.xi 
2020*53ee8cc1Swenshuai.xi     HAL_TSO_Reset_All(0);
2021*53ee8cc1Swenshuai.xi 
2022*53ee8cc1Swenshuai.xi     HAL_TSO_RestoreRegs();
2023*53ee8cc1Swenshuai.xi 
2024*53ee8cc1Swenshuai.xi     //restart filter
2025*53ee8cc1Swenshuai.xi     for(u16ii = 0; u16ii < TSO_ENGINE_NUM; u16ii++)
2026*53ee8cc1Swenshuai.xi     {
2027*53ee8cc1Swenshuai.xi         for(u16jj = 0; u16jj < TSO_PIDFLT_NUM; u16jj++)
2028*53ee8cc1Swenshuai.xi         {
2029*53ee8cc1Swenshuai.xi             if(_ptso_res->_FltState[u16ii][u16jj] == E_DRVTSO_FLT_STATE_ALLOC)
2030*53ee8cc1Swenshuai.xi             {
2031*53ee8cc1Swenshuai.xi                 HAL_TSO_Flt_SetPid((MS_U8)u16ii, u16jj, _ptso_res->_u16FltPid[u16ii][u16jj]);
2032*53ee8cc1Swenshuai.xi                 HAL_TSO_Flt_SetInputSrc((MS_U8)u16ii, u16jj, _ptso_res->_u32FltChSrc[u16ii][u16jj]);
2033*53ee8cc1Swenshuai.xi             }
2034*53ee8cc1Swenshuai.xi         }
2035*53ee8cc1Swenshuai.xi     }
2036*53ee8cc1Swenshuai.xi 
2037*53ee8cc1Swenshuai.xi     return DRVTSO_OK;
2038*53ee8cc1Swenshuai.xi }
2039*53ee8cc1Swenshuai.xi #endif  //MSOS_TYPE_LINUX_KERNEL
2040*53ee8cc1Swenshuai.xi 
2041