xref: /utopia/UTPA2-700.0.x/modules/dmx/hal/k7u/tsp/halTSP.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2*53ee8cc1Swenshuai.xi //
3*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
4*53ee8cc1Swenshuai.xi // All rights reserved.
5*53ee8cc1Swenshuai.xi //
6*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
7*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
8*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
9*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
10*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
11*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
12*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
13*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
14*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
17*53ee8cc1Swenshuai.xi 
18*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
19*53ee8cc1Swenshuai.xi // file   halPVR.c
20*53ee8cc1Swenshuai.xi // @brief  PVR HAL
21*53ee8cc1Swenshuai.xi // @author MStar Semiconductor,Inc.
22*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
23*53ee8cc1Swenshuai.xi #include "MsCommon.h"
24*53ee8cc1Swenshuai.xi #include "halCHIP.h"
25*53ee8cc1Swenshuai.xi #include "regTSP.h"
26*53ee8cc1Swenshuai.xi #include "halTSP.h"
27*53ee8cc1Swenshuai.xi #include "drvSYS.h"
28*53ee8cc1Swenshuai.xi 
29*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_CLKM
30*53ee8cc1Swenshuai.xi     #include "drvCLKM.h"
31*53ee8cc1Swenshuai.xi #endif
32*53ee8cc1Swenshuai.xi 
33*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
34*53ee8cc1Swenshuai.xi     #include <linux/string.h>
35*53ee8cc1Swenshuai.xi #else
36*53ee8cc1Swenshuai.xi     #include <string.h>
37*53ee8cc1Swenshuai.xi #endif
38*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
39*53ee8cc1Swenshuai.xi //  Driver Compiler Option
40*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
41*53ee8cc1Swenshuai.xi #define FPGA_TEST   1
42*53ee8cc1Swenshuai.xi 
43*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
44*53ee8cc1Swenshuai.xi //  TSP Hardware Abstraction Layer
45*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
46*53ee8cc1Swenshuai.xi static MS_VIRT                  _u32RegBase               = 0;
47*53ee8cc1Swenshuai.xi 
48*53ee8cc1Swenshuai.xi static REG_Ctrl                 *_RegCtrl                 = NULL;    // TSP 0/1
49*53ee8cc1Swenshuai.xi static REG_TSP_MULTI_Ctrl       *_RegTspMultiCtrl         = NULL;    // TSP_MULTI
50*53ee8cc1Swenshuai.xi static REG_TSP_MULTI_SYNC_Ctrl  *_RegTspMultiSyncCtrl     = NULL;    // TSP_MULTI_SYNC_0 (0 ~ 3)
51*53ee8cc1Swenshuai.xi static REG_TSP_MULTI_SYNC_Ctrl  *_RegTspMultiSyncCtrl_1   = NULL;    // TSP_MULTI_SYNC_1 (4 ~ 6)
52*53ee8cc1Swenshuai.xi static REG_TSP_SRC_Ctrl         *_RegTspSrcCtrl           = NULL;    // TSP_SRC
53*53ee8cc1Swenshuai.xi static REG_PATH_ENG_Ctrl        *_RegPathCtrl             = NULL;    // Path
54*53ee8cc1Swenshuai.xi static REG_FILE_ENG_Ctrl        *_RegFile0Ctrl            = NULL;    // File #0
55*53ee8cc1Swenshuai.xi static REG_FILE_ENG_Ctrl        *_RegFile1Ctrl            = NULL;    // File #1
56*53ee8cc1Swenshuai.xi static REG_OTHER_Ctrl           *_RegOtherCtrl            = NULL;    // Other/resample
57*53ee8cc1Swenshuai.xi static REG_TOP_Ctrl             *_RegTopCtrl              = NULL;    // Top
58*53ee8cc1Swenshuai.xi static REG_AV_ENG_Ctrl          *_RegAudioCtrl            = NULL;    // Audio
59*53ee8cc1Swenshuai.xi static REG_AV_ENG_Ctrl          *_RegVideoCtrl            = NULL;    // Video
60*53ee8cc1Swenshuai.xi static REG_PVR_ENG_Ctrl         *_RegPvrCtrl              = NULL;    // PVR (1~8)
61*53ee8cc1Swenshuai.xi static REG_PVR_ENG_Ctrl         *_RegPvrCtrl_1            = NULL;    // PVR (9~10)
62*53ee8cc1Swenshuai.xi static REG_STC_ENG_Ctrl         *_RegStcCtrl              = NULL;    // STC
63*53ee8cc1Swenshuai.xi static REG_PCR_ENG_Ctrl         *_RegPcrCtrl              = NULL;    // PCR
64*53ee8cc1Swenshuai.xi static REG_SPS_ENG_Ctrl         *_RegSpsCtrl              = NULL;    // SPS (1~8)
65*53ee8cc1Swenshuai.xi static REG_SPS_ENG_Ctrl         *_RegSpsCtrl_1            = NULL;    // SPS (9~10)
66*53ee8cc1Swenshuai.xi static REG_SPD_ENG_Ctrl         *_RegSpdCtrl              = NULL;    // SPD
67*53ee8cc1Swenshuai.xi 
68*53ee8cc1Swenshuai.xi 
69*53ee8cc1Swenshuai.xi // @F_TODO These parameters need to be combined with global variables in Utopia 2.0
70*53ee8cc1Swenshuai.xi static MS_U32               _u32PidFltReg[(TSP_PIDFLT_NUM * sizeof(REG_PidFlt))];
71*53ee8cc1Swenshuai.xi static MS_U32               _u32PidDstReg[(TSP_PIDFLT_NUM * sizeof(REG_PidFlt))];
72*53ee8cc1Swenshuai.xi static MS_U32               _u32PidDst2Reg[(TSP_PIDFLT_NUM * sizeof(REG_PidFlt))];
73*53ee8cc1Swenshuai.xi static MS_U32               _u32SecReg[(TSP_SECFLT_NUM * ((sizeof(REG_SecFlt) - sizeof(((REG_SecFlt*)0)->_x54))/sizeof(TSP32)))];
74*53ee8cc1Swenshuai.xi 
75*53ee8cc1Swenshuai.xi 
76*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
77*53ee8cc1Swenshuai.xi //  Local Functions
78*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
79*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_HCMD_BufRst(MS_U32 u32Value);
80*53ee8cc1Swenshuai.xi 
_delay(MS_U32 usec)81*53ee8cc1Swenshuai.xi static void _delay(MS_U32 usec)
82*53ee8cc1Swenshuai.xi {
83*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs_Poll(usec);
84*53ee8cc1Swenshuai.xi }
85*53ee8cc1Swenshuai.xi 
REG32_R(REG32 * reg)86*53ee8cc1Swenshuai.xi static MS_U32 REG32_R(REG32 *reg)
87*53ee8cc1Swenshuai.xi {
88*53ee8cc1Swenshuai.xi     MS_U32              value = 0;
89*53ee8cc1Swenshuai.xi     value  = (reg)->low;
90*53ee8cc1Swenshuai.xi     value |= (reg)->high << 16;
91*53ee8cc1Swenshuai.xi     return value;
92*53ee8cc1Swenshuai.xi }
93*53ee8cc1Swenshuai.xi 
94*53ee8cc1Swenshuai.xi 
REG16_R(REG16 * reg)95*53ee8cc1Swenshuai.xi static MS_U16 REG16_R(REG16 *reg)
96*53ee8cc1Swenshuai.xi {
97*53ee8cc1Swenshuai.xi     MS_U16              value = 0;
98*53ee8cc1Swenshuai.xi     value = (reg)->data;
99*53ee8cc1Swenshuai.xi     return value;
100*53ee8cc1Swenshuai.xi }
101*53ee8cc1Swenshuai.xi 
102*53ee8cc1Swenshuai.xi static MS_BOOL _u32RegDump = 0;
103*53ee8cc1Swenshuai.xi static void _REG32_DUMP(REG32 * reg, MS_U32 value );
104*53ee8cc1Swenshuai.xi static void _REG16_DUMP(REG16 * reg, MS_U16 value);
105*53ee8cc1Swenshuai.xi 
106*53ee8cc1Swenshuai.xi #define REG32_W(reg, value)     { (reg)->low = ((value) & 0x0000FFFF);      \
107*53ee8cc1Swenshuai.xi                                   (reg)->high = ((value) >> 16);            \
108*53ee8cc1Swenshuai.xi                                 if(_u32RegDump){_REG32_DUMP(reg, value);}}
109*53ee8cc1Swenshuai.xi 
110*53ee8cc1Swenshuai.xi #define REG16_W(reg, value)     {(reg)->data = ((value) & 0x0000FFFF);      \
111*53ee8cc1Swenshuai.xi                                 if(_u32RegDump){_REG16_DUMP(reg, value);}}
112*53ee8cc1Swenshuai.xi 
113*53ee8cc1Swenshuai.xi 
114*53ee8cc1Swenshuai.xi #define _AND_(flag, bit)            ((flag) &   (bit) )
115*53ee8cc1Swenshuai.xi 
116*53ee8cc1Swenshuai.xi #define _SET_(flag, bit)            ((flag) |   (bit) )
117*53ee8cc1Swenshuai.xi #define _CLR_(flag, bit)            ((flag) & (~(bit)))
118*53ee8cc1Swenshuai.xi 
119*53ee8cc1Swenshuai.xi #define REG16_SET(reg, value)    REG16_W(reg, _SET_(REG16_R(reg), value))
120*53ee8cc1Swenshuai.xi #define REG32_SET(reg, value)    REG32_W(reg, _SET_(REG32_R(reg), value))
121*53ee8cc1Swenshuai.xi #define REG16_CLR(reg, value)    REG16_W(reg, _CLR_(REG16_R(reg), value))
122*53ee8cc1Swenshuai.xi #define REG32_CLR(reg, value)    REG32_W(reg, _CLR_(REG32_R(reg), value))
123*53ee8cc1Swenshuai.xi 
124*53ee8cc1Swenshuai.xi #define REG16_MSK_W(reg, mask, value)    REG16_W((reg), _CLR_(REG16_R(reg), (mask)) | _AND_((value), (mask)))
125*53ee8cc1Swenshuai.xi #define REG32_MSK_W(reg, mask, value)    REG32_W((reg), _CLR_(REG32_R(reg), (mask)) | _AND_((value), (mask)))
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi #define MIU_BUS (4)
128*53ee8cc1Swenshuai.xi 
129*53ee8cc1Swenshuai.xi 
130*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
131*53ee8cc1Swenshuai.xi //  Debug Message
132*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
133*53ee8cc1Swenshuai.xi typedef enum
134*53ee8cc1Swenshuai.xi {
135*53ee8cc1Swenshuai.xi     E_HAL_TSP_DBG_LEVEL_NONE,   // no debug message shown
136*53ee8cc1Swenshuai.xi     E_HAL_TSP_DBG_LEVEL_ERR,    // only shows error message that can't be recover
137*53ee8cc1Swenshuai.xi     E_HAL_TSP_DBG_LEVEL_WARN,   // error case can be recover, like retry
138*53ee8cc1Swenshuai.xi     E_HAL_TSP_DBG_LEVEL_EVENT,  // event that is okay but better known, ex: timestamp ring, file circular, etc.
139*53ee8cc1Swenshuai.xi     E_HAL_TSP_DBG_LEVEL_INFO,   // information for internal parameter
140*53ee8cc1Swenshuai.xi     E_HAL_TSP_DBG_LEVEL_FUNC,   // Function trace and input parameter trace
141*53ee8cc1Swenshuai.xi     E_HAL_TSP_DBG_LEVEL_TRACE,  // debug trace
142*53ee8cc1Swenshuai.xi } EN_HAL_TSP_DBGMSG_LEVEL;
143*53ee8cc1Swenshuai.xi 
144*53ee8cc1Swenshuai.xi typedef enum
145*53ee8cc1Swenshuai.xi {
146*53ee8cc1Swenshuai.xi     E_HAL_TSP_DBG_MODEL_NONE,         // @temporarily , need to refine
147*53ee8cc1Swenshuai.xi     E_HAL_TSP_DBG_MODEL_ALL,
148*53ee8cc1Swenshuai.xi } EN_HAL_TSP_DBGMSG_MODEL;
149*53ee8cc1Swenshuai.xi 
150*53ee8cc1Swenshuai.xi #define HAL_TSP_DBGMSG(_level,_model,_f) do {if(_u32TSPDbgLevel >= (_level)&&((_u32TSPDbgModel&_model)!=0)) (_f);} while(0)
151*53ee8cc1Swenshuai.xi static MS_U32  _u32TSPDbgLevel = E_HAL_TSP_DBG_LEVEL_ERR;
152*53ee8cc1Swenshuai.xi static MS_U32  _u32TSPDbgModel = E_HAL_TSP_DBG_MODEL_ALL;
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi 
155*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
156*53ee8cc1Swenshuai.xi //  Implementation
157*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
TSP32_IdrW(TSP32 * preg,MS_U32 value)158*53ee8cc1Swenshuai.xi void TSP32_IdrW(TSP32 *preg, MS_U32 value)
159*53ee8cc1Swenshuai.xi {
160*53ee8cc1Swenshuai.xi     MS_U32 tempDump = _u32RegDump;
161*53ee8cc1Swenshuai.xi     if(_u32RegDump)
162*53ee8cc1Swenshuai.xi     {
163*53ee8cc1Swenshuai.xi         //test_chip_top.write_ind32('h00221004, 32'hffffffff);  //indirect .... (address,data)
164*53ee8cc1Swenshuai.xi         _u32RegDump = 0;
165*53ee8cc1Swenshuai.xi         printf("test_chip_top.write_ind32(\'h%08lx, 32\'h%08lx);\n", (long unsigned int)preg, (long unsigned int)value);
166*53ee8cc1Swenshuai.xi     }
167*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->Idr_Addr, (MS_VIRT)preg);
168*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->Idr_Write, value);
169*53ee8cc1Swenshuai.xi     REG16_W(&_RegCtrl->Idr_Ctrl, TSP_IDR_START | TSP_IDR_WRITE);
170*53ee8cc1Swenshuai.xi     _u32RegDump = tempDump;
171*53ee8cc1Swenshuai.xi }
172*53ee8cc1Swenshuai.xi 
TSP32_IdrR(TSP32 * preg)173*53ee8cc1Swenshuai.xi MS_U32 TSP32_IdrR(TSP32 *preg)
174*53ee8cc1Swenshuai.xi {
175*53ee8cc1Swenshuai.xi     MS_U32 tempDump = _u32RegDump;
176*53ee8cc1Swenshuai.xi     if(_u32RegDump)
177*53ee8cc1Swenshuai.xi     {
178*53ee8cc1Swenshuai.xi         _u32RegDump = 0;
179*53ee8cc1Swenshuai.xi     }
180*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->Idr_Addr,  (MS_VIRT)preg);
181*53ee8cc1Swenshuai.xi     REG16_W(&_RegCtrl->Idr_Ctrl, TSP_IDR_START | TSP_IDR_READ);
182*53ee8cc1Swenshuai.xi     _u32RegDump = tempDump;
183*53ee8cc1Swenshuai.xi     return REG32_R(&_RegCtrl->Idr_Read);
184*53ee8cc1Swenshuai.xi }
185*53ee8cc1Swenshuai.xi 
HAL_TSP_SetBank(MS_VIRT u32BankAddr)186*53ee8cc1Swenshuai.xi void HAL_TSP_SetBank(MS_VIRT u32BankAddr)
187*53ee8cc1Swenshuai.xi {
188*53ee8cc1Swenshuai.xi     _u32RegBase             = u32BankAddr;
189*53ee8cc1Swenshuai.xi 
190*53ee8cc1Swenshuai.xi     _RegCtrl                = (REG_Ctrl*)                (u32BankAddr + 0x2A00UL);   // TSP0/1              0x1015/0x1016
191*53ee8cc1Swenshuai.xi     _RegPathCtrl            = (REG_PATH_ENG_Ctrl*)       (u32BankAddr + 0xC2000UL);  // Path                0x1610
192*53ee8cc1Swenshuai.xi     _RegFile0Ctrl           = (REG_FILE_ENG_Ctrl*)       (u32BankAddr + 0xC2200UL);  // File0               0x1611
193*53ee8cc1Swenshuai.xi     _RegFile1Ctrl           = (REG_FILE_ENG_Ctrl*)       (u32BankAddr + 0xC4E00UL);  // File1               0x1627
194*53ee8cc1Swenshuai.xi     _RegPvrCtrl_1           = (REG_PVR_ENG_Ctrl*)        (u32BankAddr + 0xC5600UL);  // PVR 9~10            0x162B
195*53ee8cc1Swenshuai.xi     _RegSpsCtrl_1           = (REG_SPS_ENG_Ctrl*)        (u32BankAddr + 0xC5800UL);  // SPS 9~10            0x162C
196*53ee8cc1Swenshuai.xi     _RegOtherCtrl           = (REG_OTHER_Ctrl*)          (u32BankAddr + 0xE0400UL);  // Other               0x1702
197*53ee8cc1Swenshuai.xi     _RegTopCtrl             = (REG_TOP_Ctrl*)            (u32BankAddr + 0xE0600UL);  // Top                 0x1703
198*53ee8cc1Swenshuai.xi     _RegSpdCtrl             = (REG_SPD_ENG_Ctrl*)        (u32BankAddr + 0xE1800UL);  // SPD                 0x170C
199*53ee8cc1Swenshuai.xi     _RegSpsCtrl             = (REG_SPS_ENG_Ctrl*)        (u32BankAddr + 0xE1A00UL);  // SPS 1~8             0x170D
200*53ee8cc1Swenshuai.xi 
201*53ee8cc1Swenshuai.xi     _RegAudioCtrl           = (REG_AV_ENG_Ctrl*)         (u32BankAddr + 0x400400UL); // Audio               0x3002
202*53ee8cc1Swenshuai.xi     _RegVideoCtrl           = (REG_AV_ENG_Ctrl*)         (u32BankAddr + 0x400600UL); // Video               0x3003
203*53ee8cc1Swenshuai.xi     _RegPvrCtrl             = (REG_PVR_ENG_Ctrl*)        (u32BankAddr + 0x401400UL); // PVR 1~8             0x300A ~ 0x300D
204*53ee8cc1Swenshuai.xi     _RegStcCtrl             = (REG_STC_ENG_Ctrl*)        (u32BankAddr + 0x401C00UL); // STC                 0x300E
205*53ee8cc1Swenshuai.xi     _RegPcrCtrl             = (REG_PCR_ENG_Ctrl*)        (u32BankAddr + 0x401C80UL); // PCR                 0x300E (offset: 0x20)
206*53ee8cc1Swenshuai.xi     _RegTspMultiCtrl        = (REG_TSP_MULTI_Ctrl*)      (u32BankAddr + 0x402600UL); // TSP_MULTI           0x3013
207*53ee8cc1Swenshuai.xi     _RegTspSrcCtrl          = (REG_TSP_SRC_Ctrl*)        (u32BankAddr + 0x402800UL); // TSP_SRC             0x3014
208*53ee8cc1Swenshuai.xi     _RegTspMultiSyncCtrl    = (REG_TSP_MULTI_SYNC_Ctrl*) (u32BankAddr + 0x402A00UL); // TSP_MULTI_SYNC_0    0x3015
209*53ee8cc1Swenshuai.xi     _RegTspMultiSyncCtrl_1  = (REG_TSP_MULTI_SYNC_Ctrl*) (u32BankAddr + 0x404E00UL); // TSP_MULTI_SYNC_1    0x3027
210*53ee8cc1Swenshuai.xi }
211*53ee8cc1Swenshuai.xi 
HAL_TSP_RegDump(MS_BOOL bEnable)212*53ee8cc1Swenshuai.xi void HAL_TSP_RegDump(MS_BOOL bEnable)
213*53ee8cc1Swenshuai.xi {
214*53ee8cc1Swenshuai.xi     _u32RegDump = bEnable;
215*53ee8cc1Swenshuai.xi }
216*53ee8cc1Swenshuai.xi 
217*53ee8cc1Swenshuai.xi #if 1
_REG32_DUMP(REG32 * reg,MS_U32 value)218*53ee8cc1Swenshuai.xi static void _REG32_DUMP(REG32* reg, MS_U32 value )
219*53ee8cc1Swenshuai.xi {
220*53ee8cc1Swenshuai.xi     //`RIU_W(`TSP_REG_BASE + 7'h06, 2'b11, 16'h400a);   //..bank 15 ,7’h06 ....reg ,16’h400a ......
221*53ee8cc1Swenshuai.xi     //`RIU_W(`TSP_REG_BASE1 + 7'h72, 2'b11, 16'hc000); // ..bank 16 ,7’h06 ....reg ,16’h400a ......
222*53ee8cc1Swenshuai.xi     //`RIU_W((24'h103800>>1) +  7'h56 ,  2'b11, 16'h0000); //....bank 038
223*53ee8cc1Swenshuai.xi     MS_U32 bank = ((MS_VIRT)(&(reg)->low) - _u32RegBase)>>(1+8);
224*53ee8cc1Swenshuai.xi     MS_U32 addr_low = ((((MS_VIRT)(&(reg)->low) - _u32RegBase)>>1)&0xFF)>>1;
225*53ee8cc1Swenshuai.xi     MS_U32 addr_high = ((((MS_VIRT)(&(reg)->high) - _u32RegBase)>>1)&0xFF)>>1;
226*53ee8cc1Swenshuai.xi     MS_U32 val_low  = (value) & 0x0000FFFF;
227*53ee8cc1Swenshuai.xi     MS_U32 val_high  = ((value) & 0xFFFF0000 )>>16;
228*53ee8cc1Swenshuai.xi 
229*53ee8cc1Swenshuai.xi     if(bank == 0x15)
230*53ee8cc1Swenshuai.xi     {
231*53ee8cc1Swenshuai.xi         printf("`RIU_W(TSP_REG_BASE + 7\'h%02lx, 2\'b11, 16\'h%04lx);\n", (long unsigned int)addr_low, (long unsigned int)val_low);
232*53ee8cc1Swenshuai.xi         printf("`RIU_W(TSP_REG_BASE + 7\'h%02lx, 2\'b11, 16\'h%04lx);\n", (long unsigned int)addr_high, (long unsigned int)val_high);
233*53ee8cc1Swenshuai.xi     }
234*53ee8cc1Swenshuai.xi     else if(bank == 0x16)
235*53ee8cc1Swenshuai.xi     {
236*53ee8cc1Swenshuai.xi         printf("`RIU_W(TSP_REG_BASE1 + 7\'h%02lx, 2\'b11, 16\'h%04lx);\n", (long unsigned int)addr_low, (long unsigned int)val_low);
237*53ee8cc1Swenshuai.xi         printf("`RIU_W(TSP_REG_BASE1 + 7\'h%02lx, 2\'b11, 16\'h%04lx);\n", (long unsigned int)addr_high, (long unsigned int)val_high);
238*53ee8cc1Swenshuai.xi     }
239*53ee8cc1Swenshuai.xi     else if(bank == 0x38)
240*53ee8cc1Swenshuai.xi     {
241*53ee8cc1Swenshuai.xi         printf("`RIU_W((24\'h103800>>1) + 7\'h%02lx, 2\'b11, 16\'h%04lx);\n", (long unsigned int)addr_low, (long unsigned int)val_low);
242*53ee8cc1Swenshuai.xi         printf("`RIU_W((24\'h103800>>1) + 7\'h%02lx, 2\'b11, 16\'h%04lx);\n", (long unsigned int)addr_high, (long unsigned int)val_high);
243*53ee8cc1Swenshuai.xi     }
244*53ee8cc1Swenshuai.xi }
245*53ee8cc1Swenshuai.xi 
_REG16_DUMP(REG16 * reg,MS_U16 value)246*53ee8cc1Swenshuai.xi static void _REG16_DUMP(REG16* reg, MS_U16 value )
247*53ee8cc1Swenshuai.xi {
248*53ee8cc1Swenshuai.xi     //`RIU_W(`TSP_REG_BASE + 7'h06, 2'b11, 16'h400a);   //..bank 15 ,7’h06 ....reg ,16’h400a ......
249*53ee8cc1Swenshuai.xi     //`RIU_W(`TSP_REG_BASE1 + 7'h72, 2'b11, 16'hc000); // ..bank 16 ,7’h06 ....reg ,16’h400a ......
250*53ee8cc1Swenshuai.xi     //`RIU_W((24'h103800>>1) +  7'h56 ,  2'b11, 16'h0000); //....bank 038
251*53ee8cc1Swenshuai.xi     MS_U32 bank = ((MS_VIRT)(&(reg)) - _u32RegBase)>>(1+8);
252*53ee8cc1Swenshuai.xi     MS_U32 addr = ((((MS_VIRT)(&(reg)) - _u32RegBase)>>1)&0xFF)>>1;
253*53ee8cc1Swenshuai.xi     MS_U32 val  = (value) & 0x0000FFFF;
254*53ee8cc1Swenshuai.xi 
255*53ee8cc1Swenshuai.xi     if(bank == 0x15)
256*53ee8cc1Swenshuai.xi     {
257*53ee8cc1Swenshuai.xi         printf("`RIU_W(TSP_REG_BASE + 7\'h%02lx, 2\'b11, 16\'h%04lx);\n", (long unsigned int)addr, (long unsigned int)val);
258*53ee8cc1Swenshuai.xi     }
259*53ee8cc1Swenshuai.xi     else if(bank == 0x16)
260*53ee8cc1Swenshuai.xi     {
261*53ee8cc1Swenshuai.xi         printf("`RIU_W(TSP_REG_BASE1 + 7\'h%02lx, 2\'b11, 16\'h%04lx);\n", (long unsigned int)addr, (long unsigned int)val);
262*53ee8cc1Swenshuai.xi     }
263*53ee8cc1Swenshuai.xi     else if(bank == 0x38)
264*53ee8cc1Swenshuai.xi     {
265*53ee8cc1Swenshuai.xi         printf("`RIU_W((24\'h103800>>1) + 7\'h%02lx, 2\'b11, 16\'h%04lx);\n", (long unsigned int)addr, (long unsigned int)val);
266*53ee8cc1Swenshuai.xi     }
267*53ee8cc1Swenshuai.xi }
268*53ee8cc1Swenshuai.xi #endif
269*53ee8cc1Swenshuai.xi 
HAL_TSP_HwPatch(void)270*53ee8cc1Swenshuai.xi void HAL_TSP_HwPatch(void)
271*53ee8cc1Swenshuai.xi {
272*53ee8cc1Swenshuai.xi     //For sram
273*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->PktChkSizeFilein, TSP_HW_STANDBY_MODE);
274*53ee8cc1Swenshuai.xi     REG16_SET(&_RegOtherCtrl->CFG_OTHER_16, CFG_OHTER_16_REG_PREVENT_SRAM_COLLISION);
275*53ee8cc1Swenshuai.xi 
276*53ee8cc1Swenshuai.xi     // @F_TODO check these setting with Stephen
277*53ee8cc1Swenshuai.xi     // TSP_HW_CFG4_WSTAT_CH_EN <--this is bit disable HW sync section buf id with section filter id
278*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->Hw_Config4, TSP_HW_CFG4_BYTE_ADDR_DMA|TSP_HW_CFG4_ALT_TS_SIZE|TSP_HW_CFG4_WSTAT_CH_EN);
279*53ee8cc1Swenshuai.xi 
280*53ee8cc1Swenshuai.xi     // Bad initial value of TSP_CTRL1
281*53ee8cc1Swenshuai.xi     // Suppose Standby mode for TSP should NOT be enabled.
282*53ee8cc1Swenshuai.xi     // Enabling TSP standby mode cause TSP section registers (SRAM in AEON) malfunction.
283*53ee8cc1Swenshuai.xi     // Disable it by SW at this stage.
284*53ee8cc1Swenshuai.xi     REG16_CLR(&_RegCtrl->TSP_Ctrl1, TSP_CTRL1_STANDBY);
285*53ee8cc1Swenshuai.xi 
286*53ee8cc1Swenshuai.xi     MS_U8   u8Idx = 0;
287*53ee8cc1Swenshuai.xi 
288*53ee8cc1Swenshuai.xi     for(u8Idx = 0; u8Idx < TSP_PVRENG_NUM; u8Idx++)
289*53ee8cc1Swenshuai.xi     {
290*53ee8cc1Swenshuai.xi         REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u8Idx < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
291*53ee8cc1Swenshuai.xi         MS_U8   u8PvrEng = (u8Idx < E_TSP_PVR_PVRENG_8)? u8Idx : (u8Idx - E_TSP_PVR_PVRENG_8);
292*53ee8cc1Swenshuai.xi 
293*53ee8cc1Swenshuai.xi         // enable PVR record to bypass header
294*53ee8cc1Swenshuai.xi         REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_20, CFG_PVR_20_REG_RECORD_TS);
295*53ee8cc1Swenshuai.xi 
296*53ee8cc1Swenshuai.xi         // record null packets for record-all case
297*53ee8cc1Swenshuai.xi         REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_20, CFG_PVR_20_REG_DIS_NULL_PKT);
298*53ee8cc1Swenshuai.xi 
299*53ee8cc1Swenshuai.xi         // Fixed PVR eng write pointer to next addr
300*53ee8cc1Swenshuai.xi         REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_0D, CFG_PVR_0D_REG_PVR_WRITE_POINTER_TO_NEXT_ADDRESS_EN);
301*53ee8cc1Swenshuai.xi 
302*53ee8cc1Swenshuai.xi         // skip FQ rush data
303*53ee8cc1Swenshuai.xi         REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_20, CFG_PVR_20_REG_SKIP_PVR_RUSH_DATA);
304*53ee8cc1Swenshuai.xi     }
305*53ee8cc1Swenshuai.xi 
306*53ee8cc1Swenshuai.xi     for(u8Idx = 0; u8Idx < TSP_PCRFLT_NUM; u8Idx++)
307*53ee8cc1Swenshuai.xi     {
308*53ee8cc1Swenshuai.xi         // skip FQ rush data
309*53ee8cc1Swenshuai.xi         REG16_SET(&_RegPcrCtrl[u8Idx].CFG_PCR_00, CFG_PCR_00_REG_SKIP_PVR_RUSH_DATA);
310*53ee8cc1Swenshuai.xi     }
311*53ee8cc1Swenshuai.xi 
312*53ee8cc1Swenshuai.xi     for(u8Idx = 0; u8Idx < E_TSP_HAL_CAP_VAL_AFIFO_NUM; u8Idx++)
313*53ee8cc1Swenshuai.xi     {
314*53ee8cc1Swenshuai.xi         REG16_SET(&_RegAudioCtrl[u8Idx].CFG_AV_00, (CFG_AV_00_REG_DUP_PKT_SKIP | CFG_AV_00_REG_PUSI_THREE_BYTE_MODE));
315*53ee8cc1Swenshuai.xi     }
316*53ee8cc1Swenshuai.xi 
317*53ee8cc1Swenshuai.xi     for(u8Idx = 0; u8Idx < E_TSP_HAL_CAP_VAL_VFIFO_NUM; u8Idx++)
318*53ee8cc1Swenshuai.xi     {
319*53ee8cc1Swenshuai.xi         REG16_SET(&_RegVideoCtrl[u8Idx].CFG_AV_00, (CFG_AV_00_REG_DUP_PKT_SKIP | CFG_AV_00_REG_PUSI_THREE_BYTE_MODE));
320*53ee8cc1Swenshuai.xi     }
321*53ee8cc1Swenshuai.xi 
322*53ee8cc1Swenshuai.xi     //Disable TSP_RM_OVF_GLITCH to fix that section A would occur overflow when section B occured overflow at first.
323*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->HW2_Config3, TSP_VQ2PINGPONG_EN | TSP_RM_PKT_DEMUX_PIPE /*| TSP_PVR1_ALIGN_EN*/);
324*53ee8cc1Swenshuai.xi 
325*53ee8cc1Swenshuai.xi     //If SEC CMP adopts pingpong mode (1 + 1 packets) , there is always 1 packet stayed in queue.
326*53ee8cc1Swenshuai.xi     //For example , if it receive 100 packets , the last packet is not in section buffer.
327*53ee8cc1Swenshuai.xi     //Set below bits can force SEC CMP processing SEC packet after receiving a complete 188 bytes.
328*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->reg160C, TSP_DOUBLE_BUF_DESC);
329*53ee8cc1Swenshuai.xi     REG16_SET(&_RegOtherCtrl->CFG_OTHER_16, CFG_OHTER_16_REG_FIX_PINPON_SYNCP_IN);
330*53ee8cc1Swenshuai.xi 
331*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->reg160E, TSP_RM_DMA_GLITCH);
332*53ee8cc1Swenshuai.xi 
333*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->TSP_Cfg5, TSP_SYSTIME_MODE);
334*53ee8cc1Swenshuai.xi 
335*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->PVRConfig, TSP_MATCH_PID_LD);
336*53ee8cc1Swenshuai.xi 
337*53ee8cc1Swenshuai.xi     for(u8Idx = 0; u8Idx < TSP_TSIF_NUM; u8Idx++)
338*53ee8cc1Swenshuai.xi     {
339*53ee8cc1Swenshuai.xi         REG16_SET(&_RegPathCtrl[u8Idx].CFG_PATH_08, CFG_PATH_08_REG_BLK_AF_SCRMB_BIT_TSP);
340*53ee8cc1Swenshuai.xi 
341*53ee8cc1Swenshuai.xi         // Merge stream through FIQ ECO config
342*53ee8cc1Swenshuai.xi         REG16_SET(&_RegPathCtrl[u8Idx].CFG_PATH_06, CFG_PATH_06_REG_ECO_TS_SYNC_OUT_DELAY);
343*53ee8cc1Swenshuai.xi         REG16_SET(&_RegPathCtrl[u8Idx].CFG_PATH_06, CFG_PATH_06_REG_ECO_TS_SYNC_OUT_REVERSE_BLOCK);
344*53ee8cc1Swenshuai.xi 
345*53ee8cc1Swenshuai.xi         // Fix filter null packet
346*53ee8cc1Swenshuai.xi         REG16_SET(&_RegPathCtrl[u8Idx].CFG_PATH_06, CFG_PATH_06_REG_FIX_FILTER_NULL_PKT);
347*53ee8cc1Swenshuai.xi     }
348*53ee8cc1Swenshuai.xi 
349*53ee8cc1Swenshuai.xi     // Serial mode config
350*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->reg15b8, TSP_SERIAL_EXT_SYNC_1T);
351*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->Hw_PVRCfg, TSP_SYNC_RISING_DETECT);
352*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->Hw_PVRCfg, TSP_VALID_FALLING_DETECT)
353*53ee8cc1Swenshuai.xi 
354*53ee8cc1Swenshuai.xi     // Internal Sync Patch
355*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->Hw_Config4, TSP_HW_CFG4_DATA_CHK_2T);
356*53ee8cc1Swenshuai.xi 
357*53ee8cc1Swenshuai.xi     for(u8Idx = 0; u8Idx < TSP_TSIF_NUM; u8Idx++)
358*53ee8cc1Swenshuai.xi     {
359*53ee8cc1Swenshuai.xi         REG_FILE_ENG_Ctrl   *RegFileCtrl = (u8Idx < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
360*53ee8cc1Swenshuai.xi         MS_U8   u8FileEng = (u8Idx < E_FILEENG_TSIF4)? u8Idx : (u8Idx - E_FILEENG_TSIF4);
361*53ee8cc1Swenshuai.xi 
362*53ee8cc1Swenshuai.xi         // Chip after Kirin will lost data when byte timer enable and delay set to 0 setting this bit to fix this issue
363*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_0A, CFG_FILE_0A_REG_FIX_192_TIMER_0_EN);
364*53ee8cc1Swenshuai.xi 
365*53ee8cc1Swenshuai.xi         // Fix pass_pkt_timestamp will hang issue
366*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_0A, CFG_FILE_0A_REG_INIT_STAMP_RSTART_EN);
367*53ee8cc1Swenshuai.xi     }
368*53ee8cc1Swenshuai.xi 
369*53ee8cc1Swenshuai.xi     // Fix load fw secure issue (dma_start = 1 , polling dma_done , dma_start = 0)
370*53ee8cc1Swenshuai.xi     REG16_SET(&_RegOtherCtrl->CFG_OTHER_14, CFG_OHTER_14_REG_CPU_LOAD_CODE_ONLY_ONE_TIME_BY_TEE);
371*53ee8cc1Swenshuai.xi 
372*53ee8cc1Swenshuai.xi     // Fix miu_req & miu_last
373*53ee8cc1Swenshuai.xi     REG16_SET(&_RegOtherCtrl->CFG_OTHER_75, CFG_OTHER_75_REG_FIXED_MIU_REQ_FLUSH);
374*53ee8cc1Swenshuai.xi 
375*53ee8cc1Swenshuai.xi     // Fix miu arbiter last_done_z
376*53ee8cc1Swenshuai.xi     REG16_SET(&_RegTopCtrl->CFG_TOP_24, CFG_TOP_24_REG_MIU_FIXED_LAST_WD_EN_DONE_Z_ABT_ALL);
377*53ee8cc1Swenshuai.xi     REG16_SET(&_RegTopCtrl->CFG_TOP_25, CFG_TOP_25_REG_CHECK_MI2RDY_ABT_ALL);
378*53ee8cc1Swenshuai.xi     REG16_SET(&_RegOtherCtrl->CFG_OTHER_14, CFG_OHTER_14_REG_OR_WRITE_FIX_FOR_NEW_MIU_ARBITER_DISABLE);
379*53ee8cc1Swenshuai.xi }
380*53ee8cc1Swenshuai.xi 
381*53ee8cc1Swenshuai.xi // ------------ initial config ------------
382*53ee8cc1Swenshuai.xi // Sync Byte: 0x47 , 0x48 .... , 0x4e
383*53ee8cc1Swenshuai.xi // Source id : 0 , 1 , ... , 7
384*53ee8cc1Swenshuai.xi // User can use "HAL_TSP_PktConverter_SetSyncByte()" to change Sync Byte configuration
385*53ee8cc1Swenshuai.xi // , and use "HAL_TSP_PktConverter_SetSrcId()" to change Source id configuration
HAL_TSP_PktConverter_Init(void)386*53ee8cc1Swenshuai.xi void HAL_TSP_PktConverter_Init(void)
387*53ee8cc1Swenshuai.xi {
388*53ee8cc1Swenshuai.xi     MS_U8   u8Path, u8Idx;
389*53ee8cc1Swenshuai.xi     MS_U8   u8SyncByte, u8SrcId;
390*53ee8cc1Swenshuai.xi 
391*53ee8cc1Swenshuai.xi     for(u8Path = 0; u8Path < TSP_TSIF_NUM; ++u8Path)
392*53ee8cc1Swenshuai.xi     {
393*53ee8cc1Swenshuai.xi         HAL_TSP_PktConverter_ForceSync(u8Path, TRUE);   //default: FALSE
394*53ee8cc1Swenshuai.xi         HAL_TSP_PktConverter_SrcIdFlt(u8Path,TRUE);     //default: FALSE
395*53ee8cc1Swenshuai.xi 
396*53ee8cc1Swenshuai.xi         u8SyncByte = 0x47;
397*53ee8cc1Swenshuai.xi         u8SrcId = 0;
398*53ee8cc1Swenshuai.xi 
399*53ee8cc1Swenshuai.xi         for(u8Idx = 0; u8Idx < TSP_MERGESTREAM_NUM; ++u8Idx,++u8SyncByte,++u8SrcId)
400*53ee8cc1Swenshuai.xi         {
401*53ee8cc1Swenshuai.xi             HAL_TSP_PktConverter_SetSyncByte(u8Path, u8Idx, &u8SyncByte, TRUE);
402*53ee8cc1Swenshuai.xi             HAL_TSP_PktConverter_SetSrcId(u8Path, u8Idx, &u8SrcId, TRUE);
403*53ee8cc1Swenshuai.xi         }
404*53ee8cc1Swenshuai.xi     }
405*53ee8cc1Swenshuai.xi }
406*53ee8cc1Swenshuai.xi 
HAL_TSP_Reset(MS_BOOL bEn)407*53ee8cc1Swenshuai.xi void HAL_TSP_Reset(MS_BOOL bEn)
408*53ee8cc1Swenshuai.xi {
409*53ee8cc1Swenshuai.xi     FILEENG_SEQ eFileEng = E_FILEENG_TSIF0;
410*53ee8cc1Swenshuai.xi 
411*53ee8cc1Swenshuai.xi     if(bEn)
412*53ee8cc1Swenshuai.xi     {
413*53ee8cc1Swenshuai.xi         // reset CMDQ
414*53ee8cc1Swenshuai.xi         for(eFileEng = 0; eFileEng < TSP_TSIF_NUM; eFileEng++)
415*53ee8cc1Swenshuai.xi         {
416*53ee8cc1Swenshuai.xi             HAL_TSP_Filein_CmdQRst(eFileEng, TRUE);
417*53ee8cc1Swenshuai.xi         }
418*53ee8cc1Swenshuai.xi 
419*53ee8cc1Swenshuai.xi         REG16_SET(&_RegCtrl->Hw_Config0, TSP_HW_CFG0_WB_DMA_RESET);
420*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegCtrl->TSP_Ctrl, TSP_CTRL_SW_RST);
421*53ee8cc1Swenshuai.xi     }
422*53ee8cc1Swenshuai.xi     else
423*53ee8cc1Swenshuai.xi     {
424*53ee8cc1Swenshuai.xi         REG16_SET(&_RegCtrl->TSP_Ctrl, TSP_CTRL_SW_RST);
425*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegCtrl->Hw_Config0, TSP_HW_CFG0_WB_DMA_RESET);
426*53ee8cc1Swenshuai.xi 
427*53ee8cc1Swenshuai.xi         for(eFileEng = 0; eFileEng < TSP_TSIF_NUM; eFileEng++)
428*53ee8cc1Swenshuai.xi         {
429*53ee8cc1Swenshuai.xi             HAL_TSP_Filein_CmdQRst(eFileEng, FALSE);
430*53ee8cc1Swenshuai.xi         }
431*53ee8cc1Swenshuai.xi     }
432*53ee8cc1Swenshuai.xi }
433*53ee8cc1Swenshuai.xi 
HAL_TSP_Power(MS_BOOL bEn)434*53ee8cc1Swenshuai.xi void HAL_TSP_Power(MS_BOOL bEn)
435*53ee8cc1Swenshuai.xi {
436*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_CLKM
437*53ee8cc1Swenshuai.xi     MS_U8   u8Idx = 0;
438*53ee8cc1Swenshuai.xi     char    ClkName[20] = "";
439*53ee8cc1Swenshuai.xi     char    Postfix[10] = "";
440*53ee8cc1Swenshuai.xi     MS_S32  s32Handle;
441*53ee8cc1Swenshuai.xi #endif
442*53ee8cc1Swenshuai.xi 
443*53ee8cc1Swenshuai.xi     if(bEn)
444*53ee8cc1Swenshuai.xi     {
445*53ee8cc1Swenshuai.xi     #ifdef CONFIG_MSTAR_CLKM
446*53ee8cc1Swenshuai.xi 
447*53ee8cc1Swenshuai.xi         // Enable TSP Clk
448*53ee8cc1Swenshuai.xi         s32Handle = Drv_Clkm_Get_Handle("g_clk_tsp");
449*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32Handle,"CLK_TSP_FAST");
450*53ee8cc1Swenshuai.xi 
451*53ee8cc1Swenshuai.xi         // Enable STC Clk
452*53ee8cc1Swenshuai.xi         for(u8Idx = 0; u8Idx < STC_ENG_NUM; u8Idx++)
453*53ee8cc1Swenshuai.xi         {
454*53ee8cc1Swenshuai.xi             strcpy(ClkName, "g_clk_stc");
455*53ee8cc1Swenshuai.xi             sprintf(Postfix, "%d", u8Idx);
456*53ee8cc1Swenshuai.xi             strcat(ClkName, Postfix);
457*53ee8cc1Swenshuai.xi 
458*53ee8cc1Swenshuai.xi             s32Handle = Drv_Clkm_Get_Handle(ClkName);
459*53ee8cc1Swenshuai.xi             Drv_Clkm_Set_Clk_Source(s32Handle, "CLK_STC0_BUF");
460*53ee8cc1Swenshuai.xi         }
461*53ee8cc1Swenshuai.xi 
462*53ee8cc1Swenshuai.xi         // Stamp
463*53ee8cc1Swenshuai.xi         s32Handle = Drv_Clkm_Get_Handle("g_clk_stamp");
464*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32Handle,"CLK_STAMP_NORMAL");
465*53ee8cc1Swenshuai.xi 
466*53ee8cc1Swenshuai.xi         // Parser
467*53ee8cc1Swenshuai.xi         s32Handle = Drv_Clkm_Get_Handle("g_clk_parser");
468*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32Handle,"CLK_PARSER_NORMAL");
469*53ee8cc1Swenshuai.xi 
470*53ee8cc1Swenshuai.xi         // Enable TSIF => Disable TSIF
471*53ee8cc1Swenshuai.xi         // FixME Enable flowset would enable TSx clk so we don't enable TSx clk
472*53ee8cc1Swenshuai.xi         for(u8Idx = 0; u8Idx < TSP_TSIF_NUM; u8Idx++)
473*53ee8cc1Swenshuai.xi         {
474*53ee8cc1Swenshuai.xi             strcpy(ClkName, "g_clk_ts");
475*53ee8cc1Swenshuai.xi             sprintf(Postfix, "%d", u8Idx);
476*53ee8cc1Swenshuai.xi             strcat(ClkName, Postfix);
477*53ee8cc1Swenshuai.xi 
478*53ee8cc1Swenshuai.xi             s32Handle = Drv_Clkm_Get_Handle(ClkName);
479*53ee8cc1Swenshuai.xi             Drv_Clkm_Set_Clk_Source(s32Handle, "CLK_TS0_PAD0");
480*53ee8cc1Swenshuai.xi         }
481*53ee8cc1Swenshuai.xi 
482*53ee8cc1Swenshuai.xi         //TSO0
483*53ee8cc1Swenshuai.xi         s32Handle = Drv_Clkm_Get_Handle("g_clk_tso_in");
484*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32Handle,"CLK_TSOIN0_PAD0");
485*53ee8cc1Swenshuai.xi 
486*53ee8cc1Swenshuai.xi     #else
487*53ee8cc1Swenshuai.xi 
488*53ee8cc1Swenshuai.xi         // Enable TSP Clk
489*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TSP_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TSP_CLK) & ~REG_CLKGEN0_TSP_CLK_MASK)
490*53ee8cc1Swenshuai.xi                 | (REG_CLKGEN0_TSP_SRC_192MHZ << REG_CLKGEN0_TSP_SRC_SHIFT);
491*53ee8cc1Swenshuai.xi 
492*53ee8cc1Swenshuai.xi         // Enable STC Clk
493*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_STC0_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_STC0_CLK) & ~REG_CLKGEN0_STC0_MASK)
494*53ee8cc1Swenshuai.xi                 | (REG_CLKGEN0_STC_SRC_SYNTH << (REG_CLKGEN0_STC_SRC_SHIFT+REG_CLKGEN0_STC0_SHIFT));
495*53ee8cc1Swenshuai.xi 
496*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_STC1_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_STC1_CLK) & ~REG_CLKGEN0_STC1_MASK)
497*53ee8cc1Swenshuai.xi                 | (REG_CLKGEN0_STC_SRC_SYNTH << (REG_CLKGEN0_STC_SRC_SHIFT+REG_CLKGEN0_STC1_SHIFT));
498*53ee8cc1Swenshuai.xi 
499*53ee8cc1Swenshuai.xi         TSP_CLKGEN2_REG(REG_CLKGEN2_STC2_CLK) = (TSP_CLKGEN2_REG(REG_CLKGEN2_STC2_CLK) & ~REG_CLKGEN2_STC2_MASK)
500*53ee8cc1Swenshuai.xi                 | (REG_CLKGEN2_STC_SRC_SYNTH << (REG_CLKGEN2_STC_SRC_SHIFT+REG_CLKGEN2_STC2_SHIFT));
501*53ee8cc1Swenshuai.xi 
502*53ee8cc1Swenshuai.xi         TSP_CLKGEN2_REG(REG_CLKGEN2_STC3_CLK) = (TSP_CLKGEN2_REG(REG_CLKGEN2_STC3_CLK) & ~REG_CLKGEN2_STC3_MASK)
503*53ee8cc1Swenshuai.xi                 | (REG_CLKGEN2_STC_SRC_SYNTH << (REG_CLKGEN2_STC_SRC_SHIFT+REG_CLKGEN2_STC3_SHIFT));
504*53ee8cc1Swenshuai.xi 
505*53ee8cc1Swenshuai.xi         TSP_CLKGEN1_REG(REG_CLKGEN1_STC4_CLK) = (TSP_CLKGEN1_REG(REG_CLKGEN1_STC4_CLK) & ~REG_CLKGEN1_STC4_MASK)
506*53ee8cc1Swenshuai.xi                 | (REG_CLKGEN1_STC_SRC_SYNTH << (REG_CLKGEN1_STC_SRC_SHIFT+REG_CLKGEN1_STC4_SHIFT));
507*53ee8cc1Swenshuai.xi 
508*53ee8cc1Swenshuai.xi         TSP_CLKGEN1_REG(REG_CLKGEN1_STC5_CLK) = (TSP_CLKGEN1_REG(REG_CLKGEN1_STC5_CLK) & ~REG_CLKGEN1_STC5_MASK)
509*53ee8cc1Swenshuai.xi                 | (REG_CLKGEN1_STC_SRC_SYNTH << (REG_CLKGEN1_STC_SRC_SHIFT+REG_CLKGEN1_STC5_SHIFT));
510*53ee8cc1Swenshuai.xi 
511*53ee8cc1Swenshuai.xi         TSP_CLKGEN1_REG(REG_CLKGEN1_STC6_CLK) = (TSP_CLKGEN1_REG(REG_CLKGEN1_STC6_CLK) & ~REG_CLKGEN1_STC6_MASK)
512*53ee8cc1Swenshuai.xi                 | (REG_CLKGEN1_STC_SRC_SYNTH << (REG_CLKGEN1_STC_SRC_SHIFT+REG_CLKGEN1_STC6_SHIFT));
513*53ee8cc1Swenshuai.xi 
514*53ee8cc1Swenshuai.xi         TSP_CLKGEN1_REG(REG_CLKGEN1_STC7_CLK) = (TSP_CLKGEN1_REG(REG_CLKGEN1_STC7_CLK) & ~REG_CLKGEN1_STC7_MASK)
515*53ee8cc1Swenshuai.xi                 | (REG_CLKGEN1_STC_SRC_SYNTH << (REG_CLKGEN1_STC_SRC_SHIFT+REG_CLKGEN1_STC7_SHIFT));
516*53ee8cc1Swenshuai.xi 
517*53ee8cc1Swenshuai.xi         // Stamp
518*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_STAMP_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_STAMP_CLK) & ~REG_CLKGEN0_STAMP_MASK);
519*53ee8cc1Swenshuai.xi 
520*53ee8cc1Swenshuai.xi         // Parser
521*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_PARSER_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_PARSER_CLK) & ~REG_CLKGEN0_PARSER_MASK);
522*53ee8cc1Swenshuai.xi 
523*53ee8cc1Swenshuai.xi         // Enable TSIF => Disable TSIF
524*53ee8cc1Swenshuai.xi         // FixME Enable flowset would enable TSx clk so we don't enable TSx clk
525*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TS0_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS0_CLK) & ~(REG_CLKGEN0_TS_MASK << REG_CLKGEN0_TS0_SHIFT));
526*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TS1_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS1_CLK) & ~(REG_CLKGEN0_TS_MASK << REG_CLKGEN0_TS1_SHIFT));
527*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TS2_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS2_CLK) & ~(REG_CLKGEN0_TS_MASK << REG_CLKGEN0_TS2_SHIFT));
528*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TS3_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS3_CLK) & ~(REG_CLKGEN0_TS_MASK << REG_CLKGEN0_TS3_SHIFT));
529*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TS4_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS4_CLK) & ~(REG_CLKGEN0_TS_MASK << REG_CLKGEN0_TS4_SHIFT));
530*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TS5_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS5_CLK) & ~(REG_CLKGEN0_TS_MASK << REG_CLKGEN0_TS5_SHIFT));
531*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TS6_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS6_CLK) & ~(REG_CLKGEN0_TS_MASK << REG_CLKGEN0_TS6_SHIFT));
532*53ee8cc1Swenshuai.xi 
533*53ee8cc1Swenshuai.xi         //TSO0
534*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TSO0_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TSO0_CLK) & ~REG_CLKGEN0_TS_MASK);
535*53ee8cc1Swenshuai.xi 
536*53ee8cc1Swenshuai.xi     #endif
537*53ee8cc1Swenshuai.xi 
538*53ee8cc1Swenshuai.xi         // TSP Boot clk sel
539*53ee8cc1Swenshuai.xi         TSP_TOP_REG(REG_TOP_TSP_BOOT_CLK_SEL) = (TSP_TOP_REG(REG_TOP_TSP_BOOT_CLK_SEL) & ~REG_TOP_TSP_BOOT_CLK_SEL_MASK) | REG_TOP_TSP_BOOT_CLK_SEL_TSP;
540*53ee8cc1Swenshuai.xi 
541*53ee8cc1Swenshuai.xi         // TSP SRAM sel
542*53ee8cc1Swenshuai.xi         TSP_MMFI_REG(REG_MMFI_TSP_SEL_SRAM) = TSP_MMFI_REG(REG_MMFI_TSP_SEL_SRAM) | REG_MMFI_TSP_SEL_SRAM_EN;
543*53ee8cc1Swenshuai.xi 
544*53ee8cc1Swenshuai.xi         REG16_SET(&_RegOtherCtrl->CFG_OTHER_16, CFG_OHTER_16_REG_PREVENT_SRAM_COLLISION);
545*53ee8cc1Swenshuai.xi 
546*53ee8cc1Swenshuai.xi         // Disable MCM
547*53ee8cc1Swenshuai.xi         REG16_SET(&_RegOtherCtrl->CFG_OTHER_13, CFG_OHTER_13_REG_TSP2MI_REQ_MCM_DISABLE)
548*53ee8cc1Swenshuai.xi     }
549*53ee8cc1Swenshuai.xi     else
550*53ee8cc1Swenshuai.xi     {
551*53ee8cc1Swenshuai.xi         // Enable MCM
552*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegOtherCtrl->CFG_OTHER_13, CFG_OHTER_13_REG_TSP2MI_REQ_MCM_DISABLE);
553*53ee8cc1Swenshuai.xi 
554*53ee8cc1Swenshuai.xi     #ifdef CONFIG_MSTAR_CLKM
555*53ee8cc1Swenshuai.xi 
556*53ee8cc1Swenshuai.xi         MS_S32 s32Handle;
557*53ee8cc1Swenshuai.xi 
558*53ee8cc1Swenshuai.xi         // Disable TSP Clk
559*53ee8cc1Swenshuai.xi         // [2016.03.10] Disable TSP clk for power problem. If AESDMA share clk with TSP. Need to do tsp init before using AESDMA.
560*53ee8cc1Swenshuai.xi         s32Handle = Drv_Clkm_Get_Handle("g_clk_tsp");
561*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32Handle);
562*53ee8cc1Swenshuai.xi 
563*53ee8cc1Swenshuai.xi         // Disable STC Clk
564*53ee8cc1Swenshuai.xi         for(u8Idx = 0; u8Idx < STC_ENG_NUM; u8Idx++)
565*53ee8cc1Swenshuai.xi         {
566*53ee8cc1Swenshuai.xi             strcpy(ClkName, "g_clk_stc");
567*53ee8cc1Swenshuai.xi             sprintf(Postfix, "%d", u8Idx);
568*53ee8cc1Swenshuai.xi             strcat(ClkName, Postfix);
569*53ee8cc1Swenshuai.xi 
570*53ee8cc1Swenshuai.xi             s32Handle = Drv_Clkm_Get_Handle(ClkName);
571*53ee8cc1Swenshuai.xi             Drv_Clkm_Clk_Gate_Disable(s32Handle);
572*53ee8cc1Swenshuai.xi         }
573*53ee8cc1Swenshuai.xi 
574*53ee8cc1Swenshuai.xi         // Stamp
575*53ee8cc1Swenshuai.xi         s32Handle = Drv_Clkm_Get_Handle("g_clk_stamp");
576*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32Handle);
577*53ee8cc1Swenshuai.xi 
578*53ee8cc1Swenshuai.xi         // Parser
579*53ee8cc1Swenshuai.xi         s32Handle = Drv_Clkm_Get_Handle("g_clk_parser");
580*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32Handle);
581*53ee8cc1Swenshuai.xi 
582*53ee8cc1Swenshuai.xi         // Disable TSIF
583*53ee8cc1Swenshuai.xi         for(u8Idx = 0; u8Idx < TSP_TSIF_NUM; u8Idx++)
584*53ee8cc1Swenshuai.xi         {
585*53ee8cc1Swenshuai.xi             strcpy(ClkName, "g_clk_ts");
586*53ee8cc1Swenshuai.xi             sprintf(Postfix, "%d", u8Idx);
587*53ee8cc1Swenshuai.xi             strcat(ClkName, Postfix);
588*53ee8cc1Swenshuai.xi 
589*53ee8cc1Swenshuai.xi             s32Handle = Drv_Clkm_Get_Handle(ClkName);
590*53ee8cc1Swenshuai.xi             Drv_Clkm_Clk_Gate_Disable(s32Handle);
591*53ee8cc1Swenshuai.xi         }
592*53ee8cc1Swenshuai.xi 
593*53ee8cc1Swenshuai.xi         //TSO0
594*53ee8cc1Swenshuai.xi         s32Handle = Drv_Clkm_Get_Handle("g_clk_tso_in");
595*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32Handle);
596*53ee8cc1Swenshuai.xi 
597*53ee8cc1Swenshuai.xi     #else
598*53ee8cc1Swenshuai.xi         // Disable TSP Clk
599*53ee8cc1Swenshuai.xi         // [2016.03.10] Disable TSP clk for power problem. If AESDMA share clk with TSP. Need to do tsp init before using AESDMA.
600*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TSP_CLK)   = _SET_(TSP_CLKGEN0_REG(REG_CLKGEN0_TSP_CLK),(REG_CLKGEN0_TSP_DISABLE << REG_CLKGEN0_TSP_SHIFT));
601*53ee8cc1Swenshuai.xi 
602*53ee8cc1Swenshuai.xi         // Disable STC Clk
603*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_STC0_CLK)   = _SET_(TSP_CLKGEN0_REG(REG_CLKGEN0_STC0_CLK),(REG_CLKGEN0_STC_DISABLE << REG_CLKGEN0_STC0_SHIFT));
604*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_STC1_CLK)   = _SET_(TSP_CLKGEN0_REG(REG_CLKGEN0_STC1_CLK),(REG_CLKGEN0_STC_DISABLE << REG_CLKGEN0_STC1_SHIFT));
605*53ee8cc1Swenshuai.xi         TSP_CLKGEN2_REG(REG_CLKGEN2_STC2_CLK)   = _SET_(TSP_CLKGEN2_REG(REG_CLKGEN2_STC2_CLK),(REG_CLKGEN2_STC_DISABLE << REG_CLKGEN2_STC2_SHIFT));
606*53ee8cc1Swenshuai.xi         TSP_CLKGEN2_REG(REG_CLKGEN2_STC3_CLK)   = _SET_(TSP_CLKGEN2_REG(REG_CLKGEN2_STC3_CLK),(REG_CLKGEN2_STC_DISABLE << REG_CLKGEN2_STC3_SHIFT));
607*53ee8cc1Swenshuai.xi         TSP_CLKGEN1_REG(REG_CLKGEN1_STC4_CLK)   = _SET_(TSP_CLKGEN1_REG(REG_CLKGEN1_STC4_CLK),(REG_CLKGEN1_STC_DISABLE << REG_CLKGEN1_STC4_SHIFT));
608*53ee8cc1Swenshuai.xi         TSP_CLKGEN1_REG(REG_CLKGEN1_STC5_CLK)   = _SET_(TSP_CLKGEN1_REG(REG_CLKGEN1_STC5_CLK),(REG_CLKGEN1_STC_DISABLE << REG_CLKGEN1_STC5_SHIFT));
609*53ee8cc1Swenshuai.xi         TSP_CLKGEN1_REG(REG_CLKGEN1_STC6_CLK)   = _SET_(TSP_CLKGEN1_REG(REG_CLKGEN1_STC6_CLK),(REG_CLKGEN1_STC_DISABLE << REG_CLKGEN1_STC6_SHIFT));
610*53ee8cc1Swenshuai.xi         TSP_CLKGEN1_REG(REG_CLKGEN1_STC7_CLK)   = _SET_(TSP_CLKGEN1_REG(REG_CLKGEN1_STC7_CLK),(REG_CLKGEN1_STC_DISABLE << REG_CLKGEN1_STC7_SHIFT));
611*53ee8cc1Swenshuai.xi 
612*53ee8cc1Swenshuai.xi         // Stamp
613*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_STAMP_CLK) = _SET_(TSP_CLKGEN0_REG(REG_CLKGEN0_STAMP_CLK),(REG_CLKGEN0_STAMP_DISABLE << REG_CLKGEN0_STAMP_SHIFT));
614*53ee8cc1Swenshuai.xi 
615*53ee8cc1Swenshuai.xi         // Parser
616*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_PARSER_CLK) = _SET_(TSP_CLKGEN0_REG(REG_CLKGEN0_PARSER_CLK),(REG_CLKGEN0_PARSER_DISABLE << REG_CLKGEN0_PARSER_SHIFT));
617*53ee8cc1Swenshuai.xi 
618*53ee8cc1Swenshuai.xi         // Disable TSIF clk
619*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TS0_CLK)   = _SET_(TSP_CLKGEN0_REG(REG_CLKGEN0_TS0_CLK),(REG_CLKGEN0_TS_DISABLE << REG_CLKGEN0_TS0_SHIFT));
620*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TS1_CLK)   = _SET_(TSP_CLKGEN0_REG(REG_CLKGEN0_TS1_CLK),(REG_CLKGEN0_TS_DISABLE << REG_CLKGEN0_TS1_SHIFT));
621*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TS2_CLK)   = _SET_(TSP_CLKGEN0_REG(REG_CLKGEN0_TS2_CLK),(REG_CLKGEN0_TS_DISABLE << REG_CLKGEN0_TS2_SHIFT));
622*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TS3_CLK)   = _SET_(TSP_CLKGEN0_REG(REG_CLKGEN0_TS3_CLK),(REG_CLKGEN0_TS_DISABLE << REG_CLKGEN0_TS3_SHIFT));
623*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TS4_CLK)   = _SET_(TSP_CLKGEN0_REG(REG_CLKGEN0_TS4_CLK),(REG_CLKGEN0_TS_DISABLE << REG_CLKGEN0_TS4_SHIFT));
624*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TS5_CLK)   = _SET_(TSP_CLKGEN0_REG(REG_CLKGEN0_TS5_CLK),(REG_CLKGEN0_TS_DISABLE << REG_CLKGEN0_TS5_SHIFT));
625*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TS6_CLK)   = _SET_(TSP_CLKGEN0_REG(REG_CLKGEN0_TS6_CLK),(REG_CLKGEN0_TS_DISABLE << REG_CLKGEN0_TS6_SHIFT));
626*53ee8cc1Swenshuai.xi 
627*53ee8cc1Swenshuai.xi         //TSO0
628*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(REG_CLKGEN0_TSO0_CLK)   = _SET_(TSP_CLKGEN0_REG(REG_CLKGEN0_TSO0_CLK),(REG_CLKGEN0_TS_DISABLE << REG_CLKGEN0_TSO0_SHIFT));
629*53ee8cc1Swenshuai.xi 
630*53ee8cc1Swenshuai.xi     #endif
631*53ee8cc1Swenshuai.xi 
632*53ee8cc1Swenshuai.xi     }
633*53ee8cc1Swenshuai.xi }
634*53ee8cc1Swenshuai.xi 
HAL_TSP_CPU(MS_BOOL bEn)635*53ee8cc1Swenshuai.xi void HAL_TSP_CPU(MS_BOOL bEn)
636*53ee8cc1Swenshuai.xi {
637*53ee8cc1Swenshuai.xi     if (bEn)
638*53ee8cc1Swenshuai.xi     {
639*53ee8cc1Swenshuai.xi         REG16_SET(&_RegCtrl->TSP_Ctrl, TSP_CTRL_CPU_EN);
640*53ee8cc1Swenshuai.xi     }
641*53ee8cc1Swenshuai.xi     else
642*53ee8cc1Swenshuai.xi     {
643*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegCtrl->TSP_Ctrl, TSP_CTRL_CPU_EN);
644*53ee8cc1Swenshuai.xi     }
645*53ee8cc1Swenshuai.xi }
646*53ee8cc1Swenshuai.xi 
HAL_TSP_LoadFW(MS_U32 u32FwPhyAddr,MS_U32 u32FwSize)647*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_LoadFW(MS_U32 u32FwPhyAddr, MS_U32 u32FwSize)
648*53ee8cc1Swenshuai.xi {
649*53ee8cc1Swenshuai.xi 
650*53ee8cc1Swenshuai.xi #define _TSP_QMEM_I_MASK            0xffff8000 //code: 0x2000, data: 0x1000, total: 0x3000
651*53ee8cc1Swenshuai.xi #define _TSP_QMEM_I_ADDR_HIT        0x00000000
652*53ee8cc1Swenshuai.xi #define _TSP_QMEM_I_ADDR_MISS       0xffffffff
653*53ee8cc1Swenshuai.xi #define _TSP_QMEM_D_MASK            0xffff8000
654*53ee8cc1Swenshuai.xi #define _TSP_QMEM_D_ADDR_HIT        0x00000000
655*53ee8cc1Swenshuai.xi #define _TSP_QMEM_D_ADDR_MISS       0xffffffff
656*53ee8cc1Swenshuai.xi #define _TSP_QMEM_SIZE              0x2000 // 32K bytes, 32bit aligment  //0x8000  this is 4 byte address
657*53ee8cc1Swenshuai.xi 
658*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->Cpu_Base, 0); // 16 bytes address unit
659*53ee8cc1Swenshuai.xi 
660*53ee8cc1Swenshuai.xi     MS_U32              u32DnldCtrl  = 0;
661*53ee8cc1Swenshuai.xi     MS_U32              u32DnldCtrl1 = 0;
662*53ee8cc1Swenshuai.xi 
663*53ee8cc1Swenshuai.xi     // Check MIU select
664*53ee8cc1Swenshuai.xi     MS_U8               u8MiuSel = 0;
665*53ee8cc1Swenshuai.xi     MS_PHY              phyMiuOffsetFWBuf = 0;
666*53ee8cc1Swenshuai.xi 
667*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetFWBuf, u32FwPhyAddr);
668*53ee8cc1Swenshuai.xi     REG16_MSK_W(&_RegTopCtrl->CFG_TOP_08, CFG_TOP_08_REG_MIU_SEL_FILEIN_MASK, u8MiuSel); //Filein #0
669*53ee8cc1Swenshuai.xi 
670*53ee8cc1Swenshuai.xi     u32DnldCtrl  =      (phyMiuOffsetFWBuf >> MIU_BUS) >> TSP_DNLD_ADDR_ALI_SHIFT;
671*53ee8cc1Swenshuai.xi     u32DnldCtrl1 =      u32DnldCtrl >> 16;
672*53ee8cc1Swenshuai.xi 
673*53ee8cc1Swenshuai.xi     REG16_W(&_RegCtrl->Dnld_Ctrl_Addr, (MS_U16)(u32DnldCtrl & TSP_DNLD_ADDR_MASK)); // oneway register
674*53ee8cc1Swenshuai.xi     REG16_MSK_W(&_RegCtrl->Dnld_AddrH, TSP_DMA_RADDR_MSB_MASK, (MS_U16)u32DnldCtrl1);
675*53ee8cc1Swenshuai.xi     REG16_W(&_RegCtrl->Dnld_Ctrl_Size, _TSP_QMEM_SIZE);
676*53ee8cc1Swenshuai.xi     REG16_CLR(&_RegCtrl->TSP_Ctrl, TSP_CTRL_DNLD_START| TSP_CTRL_DNLD_DONE);
677*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->TSP_Ctrl, TSP_CTRL_DNLD_START);
678*53ee8cc1Swenshuai.xi 
679*53ee8cc1Swenshuai.xi     //@TODO temprarily comment because of Secure Protect
680*53ee8cc1Swenshuai.xi #if 1
681*53ee8cc1Swenshuai.xi     while (!(REG16_R(&_RegCtrl->TSP_Ctrl) & TSP_CTRL_DNLD_DONE))
682*53ee8cc1Swenshuai.xi     {
683*53ee8cc1Swenshuai.xi     }
684*53ee8cc1Swenshuai.xi #endif
685*53ee8cc1Swenshuai.xi 
686*53ee8cc1Swenshuai.xi     REG16_CLR(&_RegCtrl->TSP_Ctrl, TSP_CTRL_DNLD_START| TSP_CTRL_DNLD_DONE);
687*53ee8cc1Swenshuai.xi 
688*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->Qmem_Imask, _TSP_QMEM_I_MASK);
689*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->Qmem_Ibase, _TSP_QMEM_I_ADDR_HIT);
690*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->Qmem_Dmask, _TSP_QMEM_D_MASK);
691*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->Qmem_Dbase, _TSP_QMEM_D_ADDR_HIT);
692*53ee8cc1Swenshuai.xi 
693*53ee8cc1Swenshuai.xi #undef _TSP_QMEM_I_MASK
694*53ee8cc1Swenshuai.xi #undef _TSP_QMEM_I_ADDR_HIT
695*53ee8cc1Swenshuai.xi #undef _TSP_QMEM_I_ADDR_MISS
696*53ee8cc1Swenshuai.xi #undef _TSP_QMEM_D_MASK
697*53ee8cc1Swenshuai.xi #undef _TSP_QMEM_D_ADDR_HIT
698*53ee8cc1Swenshuai.xi #undef _TSP_QMEM_D_ADDR_MISS
699*53ee8cc1Swenshuai.xi #undef _TSP_QMEM_SIZE
700*53ee8cc1Swenshuai.xi 
701*53ee8cc1Swenshuai.xi     return TRUE;
702*53ee8cc1Swenshuai.xi }
703*53ee8cc1Swenshuai.xi 
HAL_TSP_RestoreFltState(void)704*53ee8cc1Swenshuai.xi void    HAL_TSP_RestoreFltState(void)
705*53ee8cc1Swenshuai.xi {
706*53ee8cc1Swenshuai.xi     MS_U32              u32Size;
707*53ee8cc1Swenshuai.xi     TSP32 *             pRegEnd;
708*53ee8cc1Swenshuai.xi     TSP32 *             pReg;
709*53ee8cc1Swenshuai.xi     int                 i, j;
710*53ee8cc1Swenshuai.xi 
711*53ee8cc1Swenshuai.xi     for (i = 0; i < TSP_PIDFLT_NUM; i++)
712*53ee8cc1Swenshuai.xi     {
713*53ee8cc1Swenshuai.xi         TSP32_IdrW(&(_REGPid0->Flt[i]), _u32PidFltReg[i]);
714*53ee8cc1Swenshuai.xi         TSP32_IdrW(&(_REGPid1->Flt[i]), _u32PidDstReg[i]);
715*53ee8cc1Swenshuai.xi         TSP32_IdrW(&(_REGPid2->Flt[i]), _u32PidDst2Reg[i]);
716*53ee8cc1Swenshuai.xi     }
717*53ee8cc1Swenshuai.xi 
718*53ee8cc1Swenshuai.xi     u32Size = ((MS_VIRT)&(((REG_SecFlt*)0)->_x54))/sizeof(TSP32);
719*53ee8cc1Swenshuai.xi 
720*53ee8cc1Swenshuai.xi     for (i = 0; i < TSP_SECFLT_NUM; i++)
721*53ee8cc1Swenshuai.xi     {
722*53ee8cc1Swenshuai.xi        pReg = (TSP32*)&(_REGSec->Flt[i]);
723*53ee8cc1Swenshuai.xi        pRegEnd = pReg + u32Size;
724*53ee8cc1Swenshuai.xi        j = 0;
725*53ee8cc1Swenshuai.xi        for ( ; pReg < pRegEnd; pReg++)
726*53ee8cc1Swenshuai.xi        {
727*53ee8cc1Swenshuai.xi            TSP32_IdrW(pReg, _u32SecReg[i*u32Size+j]);
728*53ee8cc1Swenshuai.xi            j++;
729*53ee8cc1Swenshuai.xi        }
730*53ee8cc1Swenshuai.xi     }
731*53ee8cc1Swenshuai.xi 
732*53ee8cc1Swenshuai.xi }
733*53ee8cc1Swenshuai.xi 
HAL_TSP_SetTSIF(MS_U16 u16TSIF,TSP_TSIF_CFG u16Cfg,MS_BOOL bFileIn)734*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SetTSIF(MS_U16 u16TSIF, TSP_TSIF_CFG u16Cfg, MS_BOOL bFileIn)
735*53ee8cc1Swenshuai.xi {
736*53ee8cc1Swenshuai.xi     if(bFileIn)
737*53ee8cc1Swenshuai.xi     {
738*53ee8cc1Swenshuai.xi         HAL_TSP_TSIF_FileEn((FILEENG_SEQ)u16TSIF, TRUE); // this returns true only we don't check the return value
739*53ee8cc1Swenshuai.xi         HAL_TSP_TSIF_LiveEn(u16TSIF, FALSE);             // this returns true only we don't check the return value
740*53ee8cc1Swenshuai.xi     }
741*53ee8cc1Swenshuai.xi     else
742*53ee8cc1Swenshuai.xi     {
743*53ee8cc1Swenshuai.xi         HAL_TSP_TSIF_FileEn((FILEENG_SEQ)u16TSIF, FALSE);
744*53ee8cc1Swenshuai.xi         HAL_TSP_TSIF_LiveEn(u16TSIF, TRUE);
745*53ee8cc1Swenshuai.xi     }
746*53ee8cc1Swenshuai.xi 
747*53ee8cc1Swenshuai.xi     if(bFileIn != TRUE)
748*53ee8cc1Swenshuai.xi     {
749*53ee8cc1Swenshuai.xi         HAL_TSP_TSIF_BitSwap(u16TSIF, ((u16Cfg&E_TSP_TSIF_CFG_BITSWAP)?TRUE:FALSE));
750*53ee8cc1Swenshuai.xi         HAL_TSP_TSIF_ExtSync(u16TSIF, ((u16Cfg&E_TSP_TSIF_CFG_EXTSYNC)?TRUE:FALSE));
751*53ee8cc1Swenshuai.xi         HAL_TSP_TSIF_Parl   (u16TSIF, ((u16Cfg&E_TSP_TSIF_CFG_PARA   )?TRUE:FALSE));
752*53ee8cc1Swenshuai.xi         HAL_TSP_TSIF_3Wire  (u16TSIF, ((u16Cfg&E_TSP_TSIF_CFG_3WIRE  )?TRUE:FALSE));
753*53ee8cc1Swenshuai.xi     }
754*53ee8cc1Swenshuai.xi 
755*53ee8cc1Swenshuai.xi     return TRUE;
756*53ee8cc1Swenshuai.xi }
757*53ee8cc1Swenshuai.xi 
HAL_TSP_TSIF_LiveEn(MS_U32 tsIf,MS_BOOL bEnable)758*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_TSIF_LiveEn(MS_U32 tsIf, MS_BOOL bEnable)
759*53ee8cc1Swenshuai.xi {
760*53ee8cc1Swenshuai.xi     if(tsIf >= TSP_TSIF_NUM)
761*53ee8cc1Swenshuai.xi     {
762*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,tsIf));
763*53ee8cc1Swenshuai.xi         return FALSE;
764*53ee8cc1Swenshuai.xi     }
765*53ee8cc1Swenshuai.xi 
766*53ee8cc1Swenshuai.xi     if(bEnable)
767*53ee8cc1Swenshuai.xi     {
768*53ee8cc1Swenshuai.xi         REG16_SET(&_RegPathCtrl[tsIf].CFG_PATH_00, CFG_PATH_00_REG_TS_IF_EN);
769*53ee8cc1Swenshuai.xi     }
770*53ee8cc1Swenshuai.xi     else
771*53ee8cc1Swenshuai.xi     {
772*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegPathCtrl[tsIf].CFG_PATH_00, CFG_PATH_00_REG_TS_IF_EN);
773*53ee8cc1Swenshuai.xi     }
774*53ee8cc1Swenshuai.xi 
775*53ee8cc1Swenshuai.xi     return TRUE;
776*53ee8cc1Swenshuai.xi }
777*53ee8cc1Swenshuai.xi 
HAL_TSP_TSIF_SelPad(MS_U32 tsIf,TSP_TS_PAD eTSPad)778*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_TSIF_SelPad(MS_U32 tsIf, TSP_TS_PAD eTSPad)
779*53ee8cc1Swenshuai.xi {
780*53ee8cc1Swenshuai.xi     if(tsIf >= TSP_TSIF_NUM)
781*53ee8cc1Swenshuai.xi     {
782*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,tsIf));
783*53ee8cc1Swenshuai.xi         return FALSE;
784*53ee8cc1Swenshuai.xi     }
785*53ee8cc1Swenshuai.xi 
786*53ee8cc1Swenshuai.xi     MS_U32 clk_src = REG_CLKGEN0_TS_SRC_EXT0;
787*53ee8cc1Swenshuai.xi     MS_U32 pad_src = CFG_TSP_SRC_MUX_PAD_TS0;
788*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_CLKM
789*53ee8cc1Swenshuai.xi     MS_S32 handle;
790*53ee8cc1Swenshuai.xi     MS_U8  u8NameIdx = 0;
791*53ee8cc1Swenshuai.xi     char* u8ClkSrcNames[] =
792*53ee8cc1Swenshuai.xi     {
793*53ee8cc1Swenshuai.xi         "CLK_TS0_PAD0",
794*53ee8cc1Swenshuai.xi         "CLK_TS0_PAD1",
795*53ee8cc1Swenshuai.xi         "CLK_TS0_PAD2",
796*53ee8cc1Swenshuai.xi         "CLK_TS0_PAD3",
797*53ee8cc1Swenshuai.xi         "CLK_TS0_PAD4",
798*53ee8cc1Swenshuai.xi         "CLK_TS0_PAD5",
799*53ee8cc1Swenshuai.xi         "CLK_TS0_PAD6",
800*53ee8cc1Swenshuai.xi         "CLK_TS0_PADTSO",
801*53ee8cc1Swenshuai.xi         "CLK_TS0_PADTSIO"
802*53ee8cc1Swenshuai.xi     /*
803*53ee8cc1Swenshuai.xi         "CLK_TS0_PADINTER0",
804*53ee8cc1Swenshuai.xi         "CLK_TS0_PADINTER1"
805*53ee8cc1Swenshuai.xi     */
806*53ee8cc1Swenshuai.xi     };
807*53ee8cc1Swenshuai.xi #endif
808*53ee8cc1Swenshuai.xi 
809*53ee8cc1Swenshuai.xi     //@NOTE
810*53ee8cc1Swenshuai.xi     //EX3~6 are serial mode and ts2_padmax_mode must be 2 or 3.
811*53ee8cc1Swenshuai.xi 
812*53ee8cc1Swenshuai.xi     switch (eTSPad)
813*53ee8cc1Swenshuai.xi     {
814*53ee8cc1Swenshuai.xi         default:
815*53ee8cc1Swenshuai.xi         case E_TSP_TS_PAD_EXT0:
816*53ee8cc1Swenshuai.xi             clk_src = REG_CLKGEN0_TS_SRC_EXT0;
817*53ee8cc1Swenshuai.xi             pad_src = CFG_TSP_SRC_MUX_PAD_TS0;
818*53ee8cc1Swenshuai.xi             break;
819*53ee8cc1Swenshuai.xi         case E_TSP_TS_PAD_EXT1:
820*53ee8cc1Swenshuai.xi             clk_src = REG_CLKGEN0_TS_SRC_EXT1;
821*53ee8cc1Swenshuai.xi             pad_src = CFG_TSP_SRC_MUX_PAD_TS1;
822*53ee8cc1Swenshuai.xi             break;
823*53ee8cc1Swenshuai.xi         case E_TSP_TS_PAD_EXT2:
824*53ee8cc1Swenshuai.xi             clk_src = REG_CLKGEN0_TS_SRC_EXT2;
825*53ee8cc1Swenshuai.xi             pad_src = CFG_TSP_SRC_MUX_PAD_TS2;
826*53ee8cc1Swenshuai.xi             break;
827*53ee8cc1Swenshuai.xi         case E_TSP_TS_PAD_EXT3:
828*53ee8cc1Swenshuai.xi             clk_src = REG_CLKGEN0_TS_SRC_EXT3;
829*53ee8cc1Swenshuai.xi             pad_src = CFG_TSP_SRC_MUX_PAD_TS3;
830*53ee8cc1Swenshuai.xi             break;
831*53ee8cc1Swenshuai.xi         case E_TSP_TS_PAD_EXT4:
832*53ee8cc1Swenshuai.xi             clk_src = REG_CLKGEN0_TS_SRC_EXT4;
833*53ee8cc1Swenshuai.xi             pad_src = CFG_TSP_SRC_MUX_PAD_TS4;
834*53ee8cc1Swenshuai.xi             break;
835*53ee8cc1Swenshuai.xi         case E_TSP_TS_PAD_EXT5:
836*53ee8cc1Swenshuai.xi             clk_src = REG_CLKGEN0_TS_SRC_EXT5;
837*53ee8cc1Swenshuai.xi             pad_src = CFG_TSP_SRC_MUX_PAD_TS5;
838*53ee8cc1Swenshuai.xi             break;
839*53ee8cc1Swenshuai.xi         case E_TSP_TS_PAD_EXT6:
840*53ee8cc1Swenshuai.xi             clk_src = REG_CLKGEN0_TS_SRC_EXT6;
841*53ee8cc1Swenshuai.xi             pad_src = CFG_TSP_SRC_MUX_PAD_TS6;
842*53ee8cc1Swenshuai.xi             break;
843*53ee8cc1Swenshuai.xi         case E_TSP_TS_PAD_EXT7:
844*53ee8cc1Swenshuai.xi             clk_src = REG_CLKGEN0_TS_SRC_EXT7;
845*53ee8cc1Swenshuai.xi             pad_src = CFG_TSP_SRC_MUX_PAD_TS7;
846*53ee8cc1Swenshuai.xi             break;
847*53ee8cc1Swenshuai.xi         case E_TSP_TS_PAD_TSOUT0:
848*53ee8cc1Swenshuai.xi             clk_src = REG_CLKGEN0_TS_SRC_TSO0;
849*53ee8cc1Swenshuai.xi             pad_src = CFG_TSP_SRC_MUX_PAD_TSO0;
850*53ee8cc1Swenshuai.xi             break;
851*53ee8cc1Swenshuai.xi         case E_TSP_TS_PAD_TSOUT1:
852*53ee8cc1Swenshuai.xi             clk_src = REG_CLKGEN0_TS_SRC_TSO1;
853*53ee8cc1Swenshuai.xi             pad_src = CFG_TSP_SRC_MUX_PAD_TSO1;
854*53ee8cc1Swenshuai.xi             break;
855*53ee8cc1Swenshuai.xi         case E_TSP_TS_PAD_TSIOOUT0:
856*53ee8cc1Swenshuai.xi             clk_src = REG_CLKGEN0_TS_SRC_TSIO0;
857*53ee8cc1Swenshuai.xi             pad_src = CFG_TSP_SRC_MUX_PAD_TSIO;
858*53ee8cc1Swenshuai.xi             break;
859*53ee8cc1Swenshuai.xi     }
860*53ee8cc1Swenshuai.xi 
861*53ee8cc1Swenshuai.xi     if(tsIf & 0x1)  // Odd
862*53ee8cc1Swenshuai.xi     {
863*53ee8cc1Swenshuai.xi         REG16_MSK_W(&_RegTspSrcCtrl->CFG_TSP_SRC_00_03[(tsIf >> 1)], CFG_TSP_SRC_MUX_ODD_MASK, (pad_src << CFG_TSP_SRC_MUX_ODD_SHIFT));
864*53ee8cc1Swenshuai.xi     }
865*53ee8cc1Swenshuai.xi     else            // Even
866*53ee8cc1Swenshuai.xi     {
867*53ee8cc1Swenshuai.xi         REG16_MSK_W(&_RegTspSrcCtrl->CFG_TSP_SRC_00_03[(tsIf >> 1)], CFG_TSP_SRC_MUX_EVEN_MASK, (pad_src << CFG_TSP_SRC_MUX_EVEN_SHIFT));
868*53ee8cc1Swenshuai.xi     }
869*53ee8cc1Swenshuai.xi 
870*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_CLKM
871*53ee8cc1Swenshuai.xi     char    TspClkName[20] = "g_clk_ts";
872*53ee8cc1Swenshuai.xi     char    postfix[10] = "";
873*53ee8cc1Swenshuai.xi 
874*53ee8cc1Swenshuai.xi     sprintf(postfix, "%d", tsIf);
875*53ee8cc1Swenshuai.xi     strcat(TspClkName, postfix);
876*53ee8cc1Swenshuai.xi 
877*53ee8cc1Swenshuai.xi     handle = Drv_Clkm_Get_Handle(TspClkName);
878*53ee8cc1Swenshuai.xi     u8NameIdx = clk_src - REG_CLKGEN0_TS_SRC_EXT0;
879*53ee8cc1Swenshuai.xi     Drv_Clkm_Set_Clk_Source(handle, u8ClkSrcNames[u8NameIdx]);
880*53ee8cc1Swenshuai.xi #else
881*53ee8cc1Swenshuai.xi     switch (tsIf)
882*53ee8cc1Swenshuai.xi     {
883*53ee8cc1Swenshuai.xi         case TSP_TSIF0:
884*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_TS0_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS0_CLK) & ~(REG_CLKGEN0_TS_MASK<<REG_CLKGEN0_TS0_SHIFT)) | (clk_src<<(REG_CLKGEN0_TS0_SHIFT+REG_CLKGEN0_TS_SRC_SHIFT));
885*53ee8cc1Swenshuai.xi             break;
886*53ee8cc1Swenshuai.xi         case TSP_TSIF1:
887*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_TS1_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS1_CLK) & ~(REG_CLKGEN0_TS_MASK<<REG_CLKGEN0_TS1_SHIFT)) | (clk_src<<(REG_CLKGEN0_TS1_SHIFT+REG_CLKGEN0_TS_SRC_SHIFT));
888*53ee8cc1Swenshuai.xi             break;
889*53ee8cc1Swenshuai.xi         case TSP_TSIF2:
890*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_TS2_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS2_CLK) & ~(REG_CLKGEN0_TS_MASK<<REG_CLKGEN0_TS2_SHIFT)) | (clk_src<<(REG_CLKGEN0_TS2_SHIFT+REG_CLKGEN0_TS_SRC_SHIFT));
891*53ee8cc1Swenshuai.xi             break;
892*53ee8cc1Swenshuai.xi         case TSP_TSIF3:
893*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_TS3_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS3_CLK) & ~(REG_CLKGEN0_TS_MASK<<REG_CLKGEN0_TS3_SHIFT)) | (clk_src<<(REG_CLKGEN0_TS3_SHIFT+REG_CLKGEN0_TS_SRC_SHIFT));
894*53ee8cc1Swenshuai.xi             break;
895*53ee8cc1Swenshuai.xi         case TSP_TSIF4:
896*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_TS4_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS4_CLK) & ~(REG_CLKGEN0_TS_MASK<<REG_CLKGEN0_TS4_SHIFT)) | (clk_src<<(REG_CLKGEN0_TS4_SHIFT+REG_CLKGEN0_TS_SRC_SHIFT));
897*53ee8cc1Swenshuai.xi             break;
898*53ee8cc1Swenshuai.xi         case TSP_TSIF5:
899*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_TS5_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS5_CLK) & ~(REG_CLKGEN0_TS_MASK<<REG_CLKGEN0_TS5_SHIFT)) | (clk_src<<(REG_CLKGEN0_TS5_SHIFT+REG_CLKGEN0_TS_SRC_SHIFT));
900*53ee8cc1Swenshuai.xi             break;
901*53ee8cc1Swenshuai.xi         case TSP_TSIF6:
902*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_TS6_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS6_CLK) & ~(REG_CLKGEN0_TS_MASK<<REG_CLKGEN0_TS6_SHIFT)) | (clk_src<<(REG_CLKGEN0_TS6_SHIFT+REG_CLKGEN0_TS_SRC_SHIFT));
903*53ee8cc1Swenshuai.xi             break;
904*53ee8cc1Swenshuai.xi         default:
905*53ee8cc1Swenshuai.xi             return FALSE;
906*53ee8cc1Swenshuai.xi     }
907*53ee8cc1Swenshuai.xi #endif
908*53ee8cc1Swenshuai.xi 
909*53ee8cc1Swenshuai.xi     return TRUE;
910*53ee8cc1Swenshuai.xi }
911*53ee8cc1Swenshuai.xi 
HAL_TSO_SetTSOOutMUX(MS_BOOL bSet)912*53ee8cc1Swenshuai.xi void HAL_TSO_SetTSOOutMUX(MS_BOOL bSet)
913*53ee8cc1Swenshuai.xi {
914*53ee8cc1Swenshuai.xi     //@NOTE: K7U don't have to implement (this function is used for TSO 1.0)
915*53ee8cc1Swenshuai.xi }
916*53ee8cc1Swenshuai.xi 
HAL_TSP_TSO_TSIF_SelPad(MS_U32 u32TSOEng,TSP_TS_PAD eTSPad)917*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_TSO_TSIF_SelPad(MS_U32 u32TSOEng, TSP_TS_PAD eTSPad)
918*53ee8cc1Swenshuai.xi {
919*53ee8cc1Swenshuai.xi     //@NOTE: K7U don't have to implement (this function is used for TSO 1.0)
920*53ee8cc1Swenshuai.xi     return TRUE;
921*53ee8cc1Swenshuai.xi }
922*53ee8cc1Swenshuai.xi 
923*53ee8cc1Swenshuai.xi 
HAL_TSP_TSIF_SelPad_ClkInv(MS_U32 tsIf,MS_BOOL bClkInv)924*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_TSIF_SelPad_ClkInv(MS_U32 tsIf , MS_BOOL bClkInv)
925*53ee8cc1Swenshuai.xi {
926*53ee8cc1Swenshuai.xi     if (bClkInv)
927*53ee8cc1Swenshuai.xi     {
928*53ee8cc1Swenshuai.xi         switch (tsIf)
929*53ee8cc1Swenshuai.xi         {
930*53ee8cc1Swenshuai.xi             case 0:
931*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS0_CLK) |= ((REG_CLKGEN0_TS_INVERT)<<(REG_CLKGEN0_TS0_SHIFT));
932*53ee8cc1Swenshuai.xi                 break;
933*53ee8cc1Swenshuai.xi             case 1:
934*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS1_CLK) |= ((REG_CLKGEN0_TS_INVERT)<<(REG_CLKGEN0_TS1_SHIFT));
935*53ee8cc1Swenshuai.xi                 break;
936*53ee8cc1Swenshuai.xi             case 2:
937*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS2_CLK) |= ((REG_CLKGEN0_TS_INVERT)<<(REG_CLKGEN0_TS2_SHIFT));
938*53ee8cc1Swenshuai.xi                 break;
939*53ee8cc1Swenshuai.xi             case 3:
940*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS3_CLK) |= ((REG_CLKGEN0_TS_INVERT)<<(REG_CLKGEN0_TS3_SHIFT));
941*53ee8cc1Swenshuai.xi                 break;
942*53ee8cc1Swenshuai.xi             case 4:
943*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS4_CLK) |= ((REG_CLKGEN0_TS_INVERT)<<(REG_CLKGEN0_TS4_SHIFT));
944*53ee8cc1Swenshuai.xi                 break;
945*53ee8cc1Swenshuai.xi             case 5:
946*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS5_CLK) |= ((REG_CLKGEN0_TS_INVERT)<<(REG_CLKGEN0_TS5_SHIFT));
947*53ee8cc1Swenshuai.xi                 break;
948*53ee8cc1Swenshuai.xi             case 6:
949*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS6_CLK) |= ((REG_CLKGEN0_TS_INVERT)<<(REG_CLKGEN0_TS6_SHIFT));
950*53ee8cc1Swenshuai.xi                 break;
951*53ee8cc1Swenshuai.xi             default:
952*53ee8cc1Swenshuai.xi                 return FALSE;
953*53ee8cc1Swenshuai.xi         }
954*53ee8cc1Swenshuai.xi     }
955*53ee8cc1Swenshuai.xi     else
956*53ee8cc1Swenshuai.xi     {
957*53ee8cc1Swenshuai.xi         switch (tsIf)
958*53ee8cc1Swenshuai.xi         {
959*53ee8cc1Swenshuai.xi             case 0:
960*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS0_CLK) &= ~((REG_CLKGEN0_TS_INVERT)<<(REG_CLKGEN0_TS0_SHIFT));
961*53ee8cc1Swenshuai.xi                 break;
962*53ee8cc1Swenshuai.xi             case 1:
963*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS1_CLK) &= ~((REG_CLKGEN0_TS_INVERT)<<(REG_CLKGEN0_TS1_SHIFT));
964*53ee8cc1Swenshuai.xi                 break;
965*53ee8cc1Swenshuai.xi             case 2:
966*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS2_CLK) &= ~((REG_CLKGEN0_TS_INVERT)<<(REG_CLKGEN0_TS2_SHIFT));
967*53ee8cc1Swenshuai.xi                 break;
968*53ee8cc1Swenshuai.xi             case 3:
969*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS3_CLK) &= ~((REG_CLKGEN0_TS_INVERT)<<(REG_CLKGEN0_TS3_SHIFT));
970*53ee8cc1Swenshuai.xi                 break;
971*53ee8cc1Swenshuai.xi             case 4:
972*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS4_CLK) &= ~((REG_CLKGEN0_TS_INVERT)<<(REG_CLKGEN0_TS4_SHIFT));
973*53ee8cc1Swenshuai.xi                 break;
974*53ee8cc1Swenshuai.xi             case 5:
975*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS5_CLK) &= ~((REG_CLKGEN0_TS_INVERT)<<(REG_CLKGEN0_TS5_SHIFT));
976*53ee8cc1Swenshuai.xi                 break;
977*53ee8cc1Swenshuai.xi             case 6:
978*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS6_CLK) &= ~((REG_CLKGEN0_TS_INVERT)<<(REG_CLKGEN0_TS6_SHIFT));
979*53ee8cc1Swenshuai.xi                 break;
980*53ee8cc1Swenshuai.xi             default:
981*53ee8cc1Swenshuai.xi                 return FALSE;
982*53ee8cc1Swenshuai.xi         }
983*53ee8cc1Swenshuai.xi     }
984*53ee8cc1Swenshuai.xi     return TRUE;
985*53ee8cc1Swenshuai.xi }
986*53ee8cc1Swenshuai.xi 
HAL_TSP_TSIF_SelPad_ClkDis(MS_U32 tsIf,MS_BOOL bClkDis)987*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_TSIF_SelPad_ClkDis(MS_U32 tsIf , MS_BOOL bClkDis)
988*53ee8cc1Swenshuai.xi {
989*53ee8cc1Swenshuai.xi     if(tsIf >= TSP_TSIF_NUM)
990*53ee8cc1Swenshuai.xi     {
991*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,tsIf));
992*53ee8cc1Swenshuai.xi         return FALSE;
993*53ee8cc1Swenshuai.xi     }
994*53ee8cc1Swenshuai.xi 
995*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_CLKM
996*53ee8cc1Swenshuai.xi     MS_S32  s32Handle;
997*53ee8cc1Swenshuai.xi     char    TspClkName[20] = "g_clk_ts";
998*53ee8cc1Swenshuai.xi     char    postfix[10] = "";
999*53ee8cc1Swenshuai.xi 
1000*53ee8cc1Swenshuai.xi     sprintf(postfix, "%d", tsIf);
1001*53ee8cc1Swenshuai.xi     strcat(TspClkName, postfix);
1002*53ee8cc1Swenshuai.xi #endif
1003*53ee8cc1Swenshuai.xi 
1004*53ee8cc1Swenshuai.xi     if (bClkDis)
1005*53ee8cc1Swenshuai.xi     {
1006*53ee8cc1Swenshuai.xi     #ifdef CONFIG_MSTAR_CLKM
1007*53ee8cc1Swenshuai.xi         s32Handle = Drv_Clkm_Get_Handle(TspClkName);
1008*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32Handle);
1009*53ee8cc1Swenshuai.xi     #else
1010*53ee8cc1Swenshuai.xi         switch (tsIf)
1011*53ee8cc1Swenshuai.xi         {
1012*53ee8cc1Swenshuai.xi             case 0:
1013*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS0_CLK) |= ((REG_CLKGEN0_TS_DISABLE)<<(REG_CLKGEN0_TS0_SHIFT));
1014*53ee8cc1Swenshuai.xi                 break;
1015*53ee8cc1Swenshuai.xi             case 1:
1016*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS1_CLK) |= ((REG_CLKGEN0_TS_DISABLE)<<(REG_CLKGEN0_TS1_SHIFT));
1017*53ee8cc1Swenshuai.xi                 break;
1018*53ee8cc1Swenshuai.xi             case 2:
1019*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS2_CLK) |= ((REG_CLKGEN0_TS_DISABLE)<<(REG_CLKGEN0_TS2_SHIFT));
1020*53ee8cc1Swenshuai.xi                 break;
1021*53ee8cc1Swenshuai.xi             case 3:
1022*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS3_CLK) |= ((REG_CLKGEN0_TS_DISABLE)<<(REG_CLKGEN0_TS3_SHIFT));
1023*53ee8cc1Swenshuai.xi                 break;
1024*53ee8cc1Swenshuai.xi             case 4:
1025*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS4_CLK) |= ((REG_CLKGEN0_TS_DISABLE)<<(REG_CLKGEN0_TS4_SHIFT));
1026*53ee8cc1Swenshuai.xi                 break;
1027*53ee8cc1Swenshuai.xi             case 5:
1028*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS5_CLK) |= ((REG_CLKGEN0_TS_DISABLE)<<(REG_CLKGEN0_TS5_SHIFT));
1029*53ee8cc1Swenshuai.xi                 break;
1030*53ee8cc1Swenshuai.xi             case 6:
1031*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS6_CLK) |= ((REG_CLKGEN0_TS_DISABLE)<<(REG_CLKGEN0_TS6_SHIFT));
1032*53ee8cc1Swenshuai.xi                 break;
1033*53ee8cc1Swenshuai.xi             default:
1034*53ee8cc1Swenshuai.xi                 return FALSE;
1035*53ee8cc1Swenshuai.xi         }
1036*53ee8cc1Swenshuai.xi     #endif
1037*53ee8cc1Swenshuai.xi     }
1038*53ee8cc1Swenshuai.xi     else
1039*53ee8cc1Swenshuai.xi     {
1040*53ee8cc1Swenshuai.xi     #ifdef CONFIG_MSTAR_CLKM
1041*53ee8cc1Swenshuai.xi         MS_U16 u16ClkSrc;
1042*53ee8cc1Swenshuai.xi         MS_U8  u8NameIdx = 0;
1043*53ee8cc1Swenshuai.xi         char* u8ClkSrcNames[] =
1044*53ee8cc1Swenshuai.xi         {
1045*53ee8cc1Swenshuai.xi             "CLK_TS0_PAD0",
1046*53ee8cc1Swenshuai.xi             "CLK_TS0_PAD1",
1047*53ee8cc1Swenshuai.xi             "CLK_TS0_PAD2",
1048*53ee8cc1Swenshuai.xi             "CLK_TS0_PAD3",
1049*53ee8cc1Swenshuai.xi             "CLK_TS0_PAD4",
1050*53ee8cc1Swenshuai.xi             "CLK_TS0_PAD5",
1051*53ee8cc1Swenshuai.xi             "CLK_TS0_PAD6",
1052*53ee8cc1Swenshuai.xi             "CLK_TS0_PADTSO",
1053*53ee8cc1Swenshuai.xi             "CLK_TS0_PADTSIO"
1054*53ee8cc1Swenshuai.xi         };
1055*53ee8cc1Swenshuai.xi 
1056*53ee8cc1Swenshuai.xi         switch (tsIf)
1057*53ee8cc1Swenshuai.xi         {
1058*53ee8cc1Swenshuai.xi             case 0:
1059*53ee8cc1Swenshuai.xi                 u16ClkSrc = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS0_CLK) & (REG_CLKGEN0_TS_MASK<<REG_CLKGEN0_TS0_SHIFT)) >> (REG_CLKGEN0_TS0_SHIFT + REG_CLKGEN0_TS_SRC_SHIFT);
1060*53ee8cc1Swenshuai.xi                 break;
1061*53ee8cc1Swenshuai.xi             case 1:
1062*53ee8cc1Swenshuai.xi                 u16ClkSrc = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS1_CLK) & (REG_CLKGEN0_TS_MASK<<REG_CLKGEN0_TS1_SHIFT)) >> (REG_CLKGEN0_TS1_SHIFT + REG_CLKGEN0_TS_SRC_SHIFT);
1063*53ee8cc1Swenshuai.xi                 break;
1064*53ee8cc1Swenshuai.xi             case 2:
1065*53ee8cc1Swenshuai.xi                 u16ClkSrc = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS2_CLK) & (REG_CLKGEN0_TS_MASK<<REG_CLKGEN0_TS2_SHIFT)) >> (REG_CLKGEN0_TS2_SHIFT + REG_CLKGEN0_TS_SRC_SHIFT);
1066*53ee8cc1Swenshuai.xi                 break;
1067*53ee8cc1Swenshuai.xi             case 3:
1068*53ee8cc1Swenshuai.xi                 u16ClkSrc = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS3_CLK) & (REG_CLKGEN0_TS_MASK<<REG_CLKGEN0_TS3_SHIFT)) >> (REG_CLKGEN0_TS3_SHIFT + REG_CLKGEN0_TS_SRC_SHIFT);
1069*53ee8cc1Swenshuai.xi                 break;
1070*53ee8cc1Swenshuai.xi             case 4:
1071*53ee8cc1Swenshuai.xi                 u16ClkSrc = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS4_CLK) & (REG_CLKGEN0_TS_MASK<<REG_CLKGEN0_TS4_SHIFT)) >> (REG_CLKGEN0_TS4_SHIFT + REG_CLKGEN0_TS_SRC_SHIFT);
1072*53ee8cc1Swenshuai.xi                 break;
1073*53ee8cc1Swenshuai.xi             case 5:
1074*53ee8cc1Swenshuai.xi                 u16ClkSrc = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS5_CLK) & (REG_CLKGEN0_TS_MASK<<REG_CLKGEN0_TS5_SHIFT)) >> (REG_CLKGEN0_TS5_SHIFT + REG_CLKGEN0_TS_SRC_SHIFT);
1075*53ee8cc1Swenshuai.xi                 break;
1076*53ee8cc1Swenshuai.xi             case 6:
1077*53ee8cc1Swenshuai.xi                 u16ClkSrc = (TSP_CLKGEN0_REG(REG_CLKGEN0_TS6_CLK) & (REG_CLKGEN0_TS_MASK<<REG_CLKGEN0_TS6_SHIFT)) >> (REG_CLKGEN0_TS6_SHIFT + REG_CLKGEN0_TS_SRC_SHIFT);
1078*53ee8cc1Swenshuai.xi                 break;
1079*53ee8cc1Swenshuai.xi             default:
1080*53ee8cc1Swenshuai.xi                 return FALSE;
1081*53ee8cc1Swenshuai.xi         }
1082*53ee8cc1Swenshuai.xi 
1083*53ee8cc1Swenshuai.xi         if(u16ClkSrc > REG_CLKGEN0_TS_SRC_TSIO0)
1084*53ee8cc1Swenshuai.xi         {
1085*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[PVR ERROR][%s][%d] Pad not support !!\n",__FUNCTION__,__LINE__));
1086*53ee8cc1Swenshuai.xi             return FALSE;
1087*53ee8cc1Swenshuai.xi         }
1088*53ee8cc1Swenshuai.xi 
1089*53ee8cc1Swenshuai.xi         s32Handle = Drv_Clkm_Get_Handle(TspClkName);
1090*53ee8cc1Swenshuai.xi         u8NameIdx = u16ClkSrc - REG_CLKGEN0_TS_SRC_EXT0;
1091*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32Handle, u8ClkSrcNames[u8NameIdx]);
1092*53ee8cc1Swenshuai.xi     #else
1093*53ee8cc1Swenshuai.xi         switch (tsIf)
1094*53ee8cc1Swenshuai.xi         {
1095*53ee8cc1Swenshuai.xi             case 0:
1096*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS0_CLK) &= ~((REG_CLKGEN0_TS_DISABLE)<<(REG_CLKGEN0_TS0_SHIFT));
1097*53ee8cc1Swenshuai.xi                 break;
1098*53ee8cc1Swenshuai.xi             case 1:
1099*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS1_CLK) &= ~((REG_CLKGEN0_TS_DISABLE)<<(REG_CLKGEN0_TS1_SHIFT));
1100*53ee8cc1Swenshuai.xi                 break;
1101*53ee8cc1Swenshuai.xi             case 2:
1102*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS2_CLK) &= ~((REG_CLKGEN0_TS_DISABLE)<<(REG_CLKGEN0_TS2_SHIFT));
1103*53ee8cc1Swenshuai.xi                 break;
1104*53ee8cc1Swenshuai.xi             case 3:
1105*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS3_CLK) &= ~((REG_CLKGEN0_TS_DISABLE)<<(REG_CLKGEN0_TS3_SHIFT));
1106*53ee8cc1Swenshuai.xi                 break;
1107*53ee8cc1Swenshuai.xi             case 4:
1108*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS4_CLK) &= ~((REG_CLKGEN0_TS_DISABLE)<<(REG_CLKGEN0_TS4_SHIFT));
1109*53ee8cc1Swenshuai.xi                 break;
1110*53ee8cc1Swenshuai.xi             case 5:
1111*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS5_CLK) &= ~((REG_CLKGEN0_TS_DISABLE)<<(REG_CLKGEN0_TS5_SHIFT));
1112*53ee8cc1Swenshuai.xi                 break;
1113*53ee8cc1Swenshuai.xi             case 6:
1114*53ee8cc1Swenshuai.xi                 TSP_CLKGEN0_REG(REG_CLKGEN0_TS6_CLK) &= ~((REG_CLKGEN0_TS_DISABLE)<<(REG_CLKGEN0_TS6_SHIFT));
1115*53ee8cc1Swenshuai.xi                 break;
1116*53ee8cc1Swenshuai.xi             default:
1117*53ee8cc1Swenshuai.xi                 return FALSE;
1118*53ee8cc1Swenshuai.xi         }
1119*53ee8cc1Swenshuai.xi     #endif
1120*53ee8cc1Swenshuai.xi     }
1121*53ee8cc1Swenshuai.xi 
1122*53ee8cc1Swenshuai.xi     return TRUE;
1123*53ee8cc1Swenshuai.xi }
1124*53ee8cc1Swenshuai.xi 
HAL_TSP_TSIF_FileEn(FILEENG_SEQ eFileEng,MS_BOOL bEnable)1125*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_TSIF_FileEn(FILEENG_SEQ eFileEng, MS_BOOL bEnable)
1126*53ee8cc1Swenshuai.xi {
1127*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1128*53ee8cc1Swenshuai.xi     {
1129*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1130*53ee8cc1Swenshuai.xi         return FALSE;
1131*53ee8cc1Swenshuai.xi     }
1132*53ee8cc1Swenshuai.xi 
1133*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1134*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1135*53ee8cc1Swenshuai.xi 
1136*53ee8cc1Swenshuai.xi     if(bEnable)
1137*53ee8cc1Swenshuai.xi     {
1138*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_00, CFG_FILE_00_REG_TSP_FILE_SEGMENT);
1139*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_TS_DATA_PORT_SEL);
1140*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_00, CFG_FILE_00_REG_TSP_FILE_IN);
1141*53ee8cc1Swenshuai.xi     }
1142*53ee8cc1Swenshuai.xi     else
1143*53ee8cc1Swenshuai.xi     {
1144*53ee8cc1Swenshuai.xi         REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_00, CFG_FILE_00_REG_TSP_FILE_SEGMENT);
1145*53ee8cc1Swenshuai.xi         REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_TS_DATA_PORT_SEL);
1146*53ee8cc1Swenshuai.xi         REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_00, CFG_FILE_00_REG_TSP_FILE_IN);
1147*53ee8cc1Swenshuai.xi     }
1148*53ee8cc1Swenshuai.xi 
1149*53ee8cc1Swenshuai.xi     return TRUE;
1150*53ee8cc1Swenshuai.xi }
1151*53ee8cc1Swenshuai.xi 
HAL_TSP_TSIF_BitSwap(MS_U32 tsIf,MS_BOOL bEnable)1152*53ee8cc1Swenshuai.xi void HAL_TSP_TSIF_BitSwap(MS_U32 tsIf, MS_BOOL bEnable)
1153*53ee8cc1Swenshuai.xi {
1154*53ee8cc1Swenshuai.xi     if(tsIf >= TSP_TSIF_NUM)
1155*53ee8cc1Swenshuai.xi     {
1156*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,tsIf));
1157*53ee8cc1Swenshuai.xi         return;
1158*53ee8cc1Swenshuai.xi     }
1159*53ee8cc1Swenshuai.xi 
1160*53ee8cc1Swenshuai.xi     if(bEnable)
1161*53ee8cc1Swenshuai.xi     {
1162*53ee8cc1Swenshuai.xi         REG16_SET(&_RegPathCtrl[tsIf].CFG_PATH_00, CFG_PATH_00_REG_TS_DATA_SWAP);
1163*53ee8cc1Swenshuai.xi     }
1164*53ee8cc1Swenshuai.xi     else
1165*53ee8cc1Swenshuai.xi     {
1166*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegPathCtrl[tsIf].CFG_PATH_00, CFG_PATH_00_REG_TS_DATA_SWAP);
1167*53ee8cc1Swenshuai.xi     }
1168*53ee8cc1Swenshuai.xi }
1169*53ee8cc1Swenshuai.xi 
HAL_TSP_TSIF_ExtSync(MS_U32 tsIf,MS_BOOL bEnable)1170*53ee8cc1Swenshuai.xi void HAL_TSP_TSIF_ExtSync(MS_U32 tsIf, MS_BOOL bEnable)
1171*53ee8cc1Swenshuai.xi {
1172*53ee8cc1Swenshuai.xi     if(tsIf >= TSP_TSIF_NUM)
1173*53ee8cc1Swenshuai.xi     {
1174*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,tsIf));
1175*53ee8cc1Swenshuai.xi         return;
1176*53ee8cc1Swenshuai.xi     }
1177*53ee8cc1Swenshuai.xi 
1178*53ee8cc1Swenshuai.xi     if(bEnable)
1179*53ee8cc1Swenshuai.xi     {
1180*53ee8cc1Swenshuai.xi         REG16_SET(&_RegPathCtrl[tsIf].CFG_PATH_00, CFG_PATH_00_REG_EXT_SYNC_SEL);
1181*53ee8cc1Swenshuai.xi     }
1182*53ee8cc1Swenshuai.xi     else
1183*53ee8cc1Swenshuai.xi     {
1184*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegPathCtrl[tsIf].CFG_PATH_00, CFG_PATH_00_REG_EXT_SYNC_SEL);
1185*53ee8cc1Swenshuai.xi     }
1186*53ee8cc1Swenshuai.xi }
1187*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_Bypass(FILEENG_SEQ eFileEng,MS_BOOL bBypass)1188*53ee8cc1Swenshuai.xi void HAL_TSP_Filein_Bypass(FILEENG_SEQ eFileEng, MS_BOOL bBypass)
1189*53ee8cc1Swenshuai.xi {
1190*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1191*53ee8cc1Swenshuai.xi     {
1192*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1193*53ee8cc1Swenshuai.xi         return;
1194*53ee8cc1Swenshuai.xi     }
1195*53ee8cc1Swenshuai.xi 
1196*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1197*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1198*53ee8cc1Swenshuai.xi 
1199*53ee8cc1Swenshuai.xi     if(bBypass)
1200*53ee8cc1Swenshuai.xi     {
1201*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_PS_MODE_BLOCK);
1202*53ee8cc1Swenshuai.xi     }
1203*53ee8cc1Swenshuai.xi     else
1204*53ee8cc1Swenshuai.xi     {
1205*53ee8cc1Swenshuai.xi         REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_PS_MODE_BLOCK);
1206*53ee8cc1Swenshuai.xi     }
1207*53ee8cc1Swenshuai.xi }
1208*53ee8cc1Swenshuai.xi 
HAL_TSP_TSIF_Parl(MS_U32 tsIf,MS_BOOL bEnable)1209*53ee8cc1Swenshuai.xi void HAL_TSP_TSIF_Parl(MS_U32 tsIf, MS_BOOL bEnable)
1210*53ee8cc1Swenshuai.xi {
1211*53ee8cc1Swenshuai.xi     if(tsIf >= TSP_TSIF_NUM)
1212*53ee8cc1Swenshuai.xi     {
1213*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,tsIf));
1214*53ee8cc1Swenshuai.xi         return;
1215*53ee8cc1Swenshuai.xi     }
1216*53ee8cc1Swenshuai.xi 
1217*53ee8cc1Swenshuai.xi     if(bEnable)
1218*53ee8cc1Swenshuai.xi     {
1219*53ee8cc1Swenshuai.xi         REG16_SET(&_RegPathCtrl[tsIf].CFG_PATH_00, CFG_PATH_00_REG_P_SEL);
1220*53ee8cc1Swenshuai.xi     }
1221*53ee8cc1Swenshuai.xi     else
1222*53ee8cc1Swenshuai.xi     {
1223*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegPathCtrl[tsIf].CFG_PATH_00, CFG_PATH_00_REG_P_SEL);
1224*53ee8cc1Swenshuai.xi     }
1225*53ee8cc1Swenshuai.xi }
1226*53ee8cc1Swenshuai.xi 
HAL_TSP_PAD_3Wire(MS_U32 u32Pad,MS_BOOL bEnable)1227*53ee8cc1Swenshuai.xi void HAL_TSP_PAD_3Wire(MS_U32 u32Pad, MS_BOOL bEnable)
1228*53ee8cc1Swenshuai.xi {
1229*53ee8cc1Swenshuai.xi     //@NOTE: After Kano , do NOT need to set
1230*53ee8cc1Swenshuai.xi }
1231*53ee8cc1Swenshuai.xi 
HAL_TSP_TSIF_3Wire(MS_U32 tsIf,MS_BOOL bEnable)1232*53ee8cc1Swenshuai.xi void HAL_TSP_TSIF_3Wire(MS_U32 tsIf, MS_BOOL bEnable)
1233*53ee8cc1Swenshuai.xi {
1234*53ee8cc1Swenshuai.xi     if(tsIf >= TSP_TSIF_NUM)
1235*53ee8cc1Swenshuai.xi     {
1236*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,tsIf));
1237*53ee8cc1Swenshuai.xi         return;
1238*53ee8cc1Swenshuai.xi     }
1239*53ee8cc1Swenshuai.xi 
1240*53ee8cc1Swenshuai.xi     if(bEnable)
1241*53ee8cc1Swenshuai.xi     {
1242*53ee8cc1Swenshuai.xi         REG16_SET(&_RegOtherCtrl->CFG_OTHER_13, (CFG_OTHER_13_REG_3WIRE_SERIAL_MODE_EN << tsIf));
1243*53ee8cc1Swenshuai.xi     }
1244*53ee8cc1Swenshuai.xi     else
1245*53ee8cc1Swenshuai.xi     {
1246*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegOtherCtrl->CFG_OTHER_13, (CFG_OTHER_13_REG_3WIRE_SERIAL_MODE_EN << tsIf));
1247*53ee8cc1Swenshuai.xi     }
1248*53ee8cc1Swenshuai.xi }
1249*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_PktSize(FILEENG_SEQ eFileEng,MS_U32 u32PktSize)1250*53ee8cc1Swenshuai.xi void HAL_TSP_Filein_PktSize(FILEENG_SEQ eFileEng, MS_U32 u32PktSize)
1251*53ee8cc1Swenshuai.xi {
1252*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1253*53ee8cc1Swenshuai.xi     {
1254*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1255*53ee8cc1Swenshuai.xi         return;
1256*53ee8cc1Swenshuai.xi     }
1257*53ee8cc1Swenshuai.xi 
1258*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1259*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1260*53ee8cc1Swenshuai.xi     MS_U16  u16PktLen = u32PktSize, u16value = 0;
1261*53ee8cc1Swenshuai.xi 
1262*53ee8cc1Swenshuai.xi 
1263*53ee8cc1Swenshuai.xi     if(u32PktSize == 130)
1264*53ee8cc1Swenshuai.xi     {
1265*53ee8cc1Swenshuai.xi         u16PktLen = 188;
1266*53ee8cc1Swenshuai.xi     }
1267*53ee8cc1Swenshuai.xi     else if(u32PktSize == 134)
1268*53ee8cc1Swenshuai.xi     {
1269*53ee8cc1Swenshuai.xi         u16PktLen = 192;
1270*53ee8cc1Swenshuai.xi     }
1271*53ee8cc1Swenshuai.xi 
1272*53ee8cc1Swenshuai.xi     if(u32PktSize == 130 || u32PktSize == 134) //RVU
1273*53ee8cc1Swenshuai.xi     {
1274*53ee8cc1Swenshuai.xi         u16value = CFG_FILE_0E_REG_RVU_EN | CFG_FILE_0E_REG_RVU_PSI_EN;
1275*53ee8cc1Swenshuai.xi 
1276*53ee8cc1Swenshuai.xi         if(u32PktSize == 134)
1277*53ee8cc1Swenshuai.xi         {
1278*53ee8cc1Swenshuai.xi             u16value |= CFG_FILE_0E_REG_RVU_TIMESTAMP_EN;
1279*53ee8cc1Swenshuai.xi         }
1280*53ee8cc1Swenshuai.xi 
1281*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_0E, u16value);
1282*53ee8cc1Swenshuai.xi     }
1283*53ee8cc1Swenshuai.xi     else
1284*53ee8cc1Swenshuai.xi     {
1285*53ee8cc1Swenshuai.xi         u16value = CFG_FILE_0E_REG_RVU_EN | CFG_FILE_0E_REG_RVU_PSI_EN | CFG_FILE_0E_REG_RVU_TIMESTAMP_EN;
1286*53ee8cc1Swenshuai.xi         REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_0E, u16value);
1287*53ee8cc1Swenshuai.xi     }
1288*53ee8cc1Swenshuai.xi 
1289*53ee8cc1Swenshuai.xi     // file-in init trust count value
1290*53ee8cc1Swenshuai.xi     REG16_MSK_W(&RegFileCtrl[u8FileEng].CFG_FILE_0A, CFG_FILE_0A_REG_INIT_TRUST_SYNC_CNT_VALUE_MASK, u16PktLen << CFG_FILE_0A_REG_INIT_TRUST_SYNC_CNT_VALUE_SHIFT);
1291*53ee8cc1Swenshuai.xi     REG16_MSK_W(&RegFileCtrl[u8FileEng].CFG_FILE_08, CFG_FILE_08_REG_CHK_PKT_SIZE_MASK, (u16PktLen-1) << CFG_FILE_08_REG_CHK_PKT_SIZE_SHIFT);
1292*53ee8cc1Swenshuai.xi }
1293*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_Addr(FILEENG_SEQ eFileEng,MS_U32 addr)1294*53ee8cc1Swenshuai.xi void HAL_TSP_Filein_Addr(FILEENG_SEQ eFileEng, MS_U32 addr)
1295*53ee8cc1Swenshuai.xi {
1296*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1297*53ee8cc1Swenshuai.xi     {
1298*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1299*53ee8cc1Swenshuai.xi         return;
1300*53ee8cc1Swenshuai.xi     }
1301*53ee8cc1Swenshuai.xi 
1302*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1303*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1304*53ee8cc1Swenshuai.xi 
1305*53ee8cc1Swenshuai.xi     // Check MIU select
1306*53ee8cc1Swenshuai.xi     MS_U8   u8MiuSel;
1307*53ee8cc1Swenshuai.xi     MS_PHY  phyMiuOffsetFileinAddr;
1308*53ee8cc1Swenshuai.xi     MS_U16  u8Shift = eFileEng * TSP_MIU_SEL_BITS_LEN;
1309*53ee8cc1Swenshuai.xi 
1310*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetFileinAddr, addr);
1311*53ee8cc1Swenshuai.xi     REG16_MSK_W(&_RegTopCtrl->CFG_TOP_08, (CFG_TOP_08_REG_MIU_SEL_FILEIN_MASK << u8Shift), (u8MiuSel << (CFG_TOP_08_REG_MIU_SEL_FILEIN_SHIFT + u8Shift)));
1312*53ee8cc1Swenshuai.xi     REG32_W(&RegFileCtrl[u8FileEng].CFG_FILE_02_03, phyMiuOffsetFileinAddr);
1313*53ee8cc1Swenshuai.xi }
1314*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_Size(FILEENG_SEQ eFileEng,MS_U32 size)1315*53ee8cc1Swenshuai.xi void HAL_TSP_Filein_Size(FILEENG_SEQ eFileEng, MS_U32 size)
1316*53ee8cc1Swenshuai.xi {
1317*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1318*53ee8cc1Swenshuai.xi     {
1319*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1320*53ee8cc1Swenshuai.xi         return;
1321*53ee8cc1Swenshuai.xi     }
1322*53ee8cc1Swenshuai.xi 
1323*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1324*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1325*53ee8cc1Swenshuai.xi 
1326*53ee8cc1Swenshuai.xi     REG32_W(&RegFileCtrl[u8FileEng].CFG_FILE_04_05, size);
1327*53ee8cc1Swenshuai.xi }
1328*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_Start(FILEENG_SEQ eFileEng)1329*53ee8cc1Swenshuai.xi void HAL_TSP_Filein_Start(FILEENG_SEQ eFileEng)
1330*53ee8cc1Swenshuai.xi {
1331*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1332*53ee8cc1Swenshuai.xi     {
1333*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1334*53ee8cc1Swenshuai.xi         return;
1335*53ee8cc1Swenshuai.xi     }
1336*53ee8cc1Swenshuai.xi 
1337*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1338*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1339*53ee8cc1Swenshuai.xi 
1340*53ee8cc1Swenshuai.xi     REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_06, CFG_FILE_06_REG_FILEIN_RSTART);
1341*53ee8cc1Swenshuai.xi }
1342*53ee8cc1Swenshuai.xi 
HAL_TSP_File_Pause(FILEENG_SEQ eFileEng)1343*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_File_Pause(FILEENG_SEQ eFileEng)
1344*53ee8cc1Swenshuai.xi {
1345*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1346*53ee8cc1Swenshuai.xi     {
1347*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1348*53ee8cc1Swenshuai.xi         return FALSE;
1349*53ee8cc1Swenshuai.xi     }
1350*53ee8cc1Swenshuai.xi 
1351*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1352*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1353*53ee8cc1Swenshuai.xi 
1354*53ee8cc1Swenshuai.xi     REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_TSIF_PAUSE);
1355*53ee8cc1Swenshuai.xi     return TRUE;
1356*53ee8cc1Swenshuai.xi }
1357*53ee8cc1Swenshuai.xi 
HAL_TSP_File_Resume(FILEENG_SEQ eFileEng)1358*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_File_Resume(FILEENG_SEQ eFileEng)
1359*53ee8cc1Swenshuai.xi {
1360*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1361*53ee8cc1Swenshuai.xi     {
1362*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1363*53ee8cc1Swenshuai.xi         return FALSE;
1364*53ee8cc1Swenshuai.xi     }
1365*53ee8cc1Swenshuai.xi 
1366*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1367*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1368*53ee8cc1Swenshuai.xi 
1369*53ee8cc1Swenshuai.xi     REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_TSIF_PAUSE);
1370*53ee8cc1Swenshuai.xi     return TRUE;
1371*53ee8cc1Swenshuai.xi }
1372*53ee8cc1Swenshuai.xi 
1373*53ee8cc1Swenshuai.xi #if FPGA_TEST
1374*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_Done_Status(FILEENG_SEQ eFileEng)1375*53ee8cc1Swenshuai.xi     MS_BOOL HAL_TSP_Filein_Done_Status(FILEENG_SEQ eFileEng)
1376*53ee8cc1Swenshuai.xi     {
1377*53ee8cc1Swenshuai.xi         return !HAL_TSP_Filein_Status(eFileEng);
1378*53ee8cc1Swenshuai.xi     }
1379*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_Init_Trust_Start(FILEENG_SEQ eFileEng)1380*53ee8cc1Swenshuai.xi     void HAL_TSP_Filein_Init_Trust_Start(FILEENG_SEQ eFileEng)
1381*53ee8cc1Swenshuai.xi     {
1382*53ee8cc1Swenshuai.xi         if(eFileEng >= TSP_TSIF_NUM)
1383*53ee8cc1Swenshuai.xi         {
1384*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1385*53ee8cc1Swenshuai.xi             return;
1386*53ee8cc1Swenshuai.xi         }
1387*53ee8cc1Swenshuai.xi 
1388*53ee8cc1Swenshuai.xi         REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1389*53ee8cc1Swenshuai.xi         MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1390*53ee8cc1Swenshuai.xi 
1391*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_06, (CFG_FILE_06_REG_FILEIN_RSTART | CFG_FILE_06_REG_FILEIN_INIT_TRUST));
1392*53ee8cc1Swenshuai.xi     }
1393*53ee8cc1Swenshuai.xi 
HAL_TSP_FILEIN_Address_Protect_En(FILEENG_SEQ eFileEng,MS_BOOL bEnable)1394*53ee8cc1Swenshuai.xi     void HAL_TSP_FILEIN_Address_Protect_En(FILEENG_SEQ eFileEng, MS_BOOL bEnable)
1395*53ee8cc1Swenshuai.xi     {
1396*53ee8cc1Swenshuai.xi         if(eFileEng >= TSP_TSIF_NUM)
1397*53ee8cc1Swenshuai.xi         {
1398*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1399*53ee8cc1Swenshuai.xi             return;
1400*53ee8cc1Swenshuai.xi         }
1401*53ee8cc1Swenshuai.xi 
1402*53ee8cc1Swenshuai.xi         if(bEnable)
1403*53ee8cc1Swenshuai.xi         {
1404*53ee8cc1Swenshuai.xi             REG16_SET(&_RegOtherCtrl->CFG_OTHER_19, (CFG_OTHER_19_REG_FILEIN0_DMAR_PROTECT_EN << eFileEng));
1405*53ee8cc1Swenshuai.xi         }
1406*53ee8cc1Swenshuai.xi         else
1407*53ee8cc1Swenshuai.xi         {
1408*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegOtherCtrl->CFG_OTHER_19, (CFG_OTHER_19_REG_FILEIN0_DMAR_PROTECT_EN << eFileEng));
1409*53ee8cc1Swenshuai.xi         }
1410*53ee8cc1Swenshuai.xi     }
1411*53ee8cc1Swenshuai.xi 
HAL_TSP_FILEIN_Address_Protect(FILEENG_SEQ eFileEng,MS_PHY u32UpBoundAddr,MS_PHY u32LowBoundAddr)1412*53ee8cc1Swenshuai.xi     void HAL_TSP_FILEIN_Address_Protect(FILEENG_SEQ eFileEng,MS_PHY u32UpBoundAddr, MS_PHY u32LowBoundAddr)
1413*53ee8cc1Swenshuai.xi     {
1414*53ee8cc1Swenshuai.xi         if(eFileEng >= TSP_TSIF_NUM)
1415*53ee8cc1Swenshuai.xi         {
1416*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1417*53ee8cc1Swenshuai.xi             return;
1418*53ee8cc1Swenshuai.xi         }
1419*53ee8cc1Swenshuai.xi 
1420*53ee8cc1Swenshuai.xi         MS_U8   u8MiuSel;
1421*53ee8cc1Swenshuai.xi         MS_PHY  phyMiuOffsetLB, phyMiuOffsetUB;
1422*53ee8cc1Swenshuai.xi 
1423*53ee8cc1Swenshuai.xi         _phy_to_miu_offset(u8MiuSel, phyMiuOffsetLB, u32LowBoundAddr);
1424*53ee8cc1Swenshuai.xi         _phy_to_miu_offset(u8MiuSel, phyMiuOffsetUB, u32UpBoundAddr);
1425*53ee8cc1Swenshuai.xi 
1426*53ee8cc1Swenshuai.xi         if(u8MiuSel < E_CHIP_MIU_NUM)
1427*53ee8cc1Swenshuai.xi         {
1428*53ee8cc1Swenshuai.xi             MS_U32  u32LBnd = (MS_U32)((phyMiuOffsetLB >> MIU_BUS) & REG_TOP_ProtectCtrl_BND_MASK);
1429*53ee8cc1Swenshuai.xi             MS_U32  u32UBnd = (MS_U32)((phyMiuOffsetUB >> MIU_BUS) & REG_TOP_ProtectCtrl_BND_MASK);
1430*53ee8cc1Swenshuai.xi 
1431*53ee8cc1Swenshuai.xi             REG32_W(&_RegTopCtrl->CFG_TOP_30_4B[eFileEng].L_BND, u32LBnd);
1432*53ee8cc1Swenshuai.xi             REG32_W(&_RegTopCtrl->CFG_TOP_30_4B[eFileEng].U_BND, u32UBnd);
1433*53ee8cc1Swenshuai.xi         }
1434*53ee8cc1Swenshuai.xi     }
1435*53ee8cc1Swenshuai.xi 
1436*53ee8cc1Swenshuai.xi #endif
1437*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_Abort(FILEENG_SEQ eFileEng,MS_BOOL bEn)1438*53ee8cc1Swenshuai.xi void HAL_TSP_Filein_Abort(FILEENG_SEQ eFileEng, MS_BOOL bEn)
1439*53ee8cc1Swenshuai.xi {
1440*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1441*53ee8cc1Swenshuai.xi     {
1442*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1443*53ee8cc1Swenshuai.xi         return;
1444*53ee8cc1Swenshuai.xi     }
1445*53ee8cc1Swenshuai.xi 
1446*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1447*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1448*53ee8cc1Swenshuai.xi 
1449*53ee8cc1Swenshuai.xi     if(bEn)
1450*53ee8cc1Swenshuai.xi     {
1451*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_TSP_FILEIN_ABORT);
1452*53ee8cc1Swenshuai.xi     }
1453*53ee8cc1Swenshuai.xi     else
1454*53ee8cc1Swenshuai.xi     {
1455*53ee8cc1Swenshuai.xi         REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_TSP_FILEIN_ABORT);
1456*53ee8cc1Swenshuai.xi     }
1457*53ee8cc1Swenshuai.xi }
1458*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_CmdQRst(FILEENG_SEQ eFileEng,MS_BOOL bEnable)1459*53ee8cc1Swenshuai.xi void HAL_TSP_Filein_CmdQRst(FILEENG_SEQ eFileEng, MS_BOOL bEnable)
1460*53ee8cc1Swenshuai.xi {
1461*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1462*53ee8cc1Swenshuai.xi     {
1463*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1464*53ee8cc1Swenshuai.xi         return;
1465*53ee8cc1Swenshuai.xi     }
1466*53ee8cc1Swenshuai.xi 
1467*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1468*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1469*53ee8cc1Swenshuai.xi 
1470*53ee8cc1Swenshuai.xi     if(bEnable)
1471*53ee8cc1Swenshuai.xi     {
1472*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_00, CFG_FILE_00_REG_RST_CMDQ_FILEIN);
1473*53ee8cc1Swenshuai.xi     }
1474*53ee8cc1Swenshuai.xi     else
1475*53ee8cc1Swenshuai.xi     {
1476*53ee8cc1Swenshuai.xi         REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_00, CFG_FILE_00_REG_RST_CMDQ_FILEIN);
1477*53ee8cc1Swenshuai.xi     }
1478*53ee8cc1Swenshuai.xi }
1479*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_CmdQSlot(FILEENG_SEQ eFileEng)1480*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Filein_CmdQSlot(FILEENG_SEQ eFileEng)
1481*53ee8cc1Swenshuai.xi {
1482*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1483*53ee8cc1Swenshuai.xi     {
1484*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1485*53ee8cc1Swenshuai.xi         return 0;
1486*53ee8cc1Swenshuai.xi     }
1487*53ee8cc1Swenshuai.xi 
1488*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1489*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1490*53ee8cc1Swenshuai.xi 
1491*53ee8cc1Swenshuai.xi     return 16 - ((REG16_R(&RegFileCtrl[u8FileEng].CFG_FILE_07) & CFG_FILE_07_CMD_WR_CNT_TSIF1_MASK) >> CFG_FILE_07_CMD_WR_CNT_TSIF1_SHIFT);
1492*53ee8cc1Swenshuai.xi }
1493*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_CmdQCnt(FILEENG_SEQ eFileEng)1494*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Filein_CmdQCnt(FILEENG_SEQ eFileEng)
1495*53ee8cc1Swenshuai.xi {
1496*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1497*53ee8cc1Swenshuai.xi     {
1498*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1499*53ee8cc1Swenshuai.xi         return 0;
1500*53ee8cc1Swenshuai.xi     }
1501*53ee8cc1Swenshuai.xi 
1502*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1503*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1504*53ee8cc1Swenshuai.xi 
1505*53ee8cc1Swenshuai.xi     return ((REG16_R(&RegFileCtrl[u8FileEng].CFG_FILE_07) & CFG_FILE_07_CMD_WR_CNT_TSIF1_MASK) >> CFG_FILE_07_CMD_WR_CNT_TSIF1_SHIFT);
1506*53ee8cc1Swenshuai.xi }
1507*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_CmdQLv(FILEENG_SEQ eFileEng)1508*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Filein_CmdQLv(FILEENG_SEQ eFileEng)
1509*53ee8cc1Swenshuai.xi {
1510*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1511*53ee8cc1Swenshuai.xi     {
1512*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1513*53ee8cc1Swenshuai.xi         return 0;
1514*53ee8cc1Swenshuai.xi     }
1515*53ee8cc1Swenshuai.xi 
1516*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1517*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1518*53ee8cc1Swenshuai.xi 
1519*53ee8cc1Swenshuai.xi     return ((REG16_R(&RegFileCtrl[u8FileEng].CFG_FILE_07) & CFG_FILE_07_CMD_WR_LEVEL_TSIF1_MASK) >> CFG_FILE_07_CMD_WR_LEVEL_TSIF1_SHIFT);
1520*53ee8cc1Swenshuai.xi }
1521*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_ByteDelay(FILEENG_SEQ eFileEng,MS_U32 delay,MS_BOOL bEnable)1522*53ee8cc1Swenshuai.xi void HAL_TSP_Filein_ByteDelay(FILEENG_SEQ eFileEng, MS_U32 delay, MS_BOOL bEnable)
1523*53ee8cc1Swenshuai.xi {
1524*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1525*53ee8cc1Swenshuai.xi     {
1526*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1527*53ee8cc1Swenshuai.xi         return;
1528*53ee8cc1Swenshuai.xi     }
1529*53ee8cc1Swenshuai.xi 
1530*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1531*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1532*53ee8cc1Swenshuai.xi 
1533*53ee8cc1Swenshuai.xi     if(bEnable)
1534*53ee8cc1Swenshuai.xi     {
1535*53ee8cc1Swenshuai.xi         REG16_W(&RegFileCtrl[u8FileEng].CFG_FILE_09, delay);
1536*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_TIMER_EN);
1537*53ee8cc1Swenshuai.xi     }
1538*53ee8cc1Swenshuai.xi     else
1539*53ee8cc1Swenshuai.xi     {
1540*53ee8cc1Swenshuai.xi         REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_TIMER_EN);
1541*53ee8cc1Swenshuai.xi         REG16_W(&RegFileCtrl[u8FileEng].CFG_FILE_09, 0x0000);
1542*53ee8cc1Swenshuai.xi     }
1543*53ee8cc1Swenshuai.xi }
1544*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_Status(FILEENG_SEQ eFileEng)1545*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Filein_Status(FILEENG_SEQ eFileEng)
1546*53ee8cc1Swenshuai.xi {
1547*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1548*53ee8cc1Swenshuai.xi     {
1549*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1550*53ee8cc1Swenshuai.xi         return 0;
1551*53ee8cc1Swenshuai.xi     }
1552*53ee8cc1Swenshuai.xi 
1553*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1554*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1555*53ee8cc1Swenshuai.xi 
1556*53ee8cc1Swenshuai.xi     return !(REG16_R(&RegFileCtrl[u8FileEng].CFG_FILE_06) & CFG_FILE_06_REG_FILEIN_DONE);
1557*53ee8cc1Swenshuai.xi }
1558*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_GetState(FILEENG_SEQ eFileEng)1559*53ee8cc1Swenshuai.xi TSP_HAL_FileState HAL_TSP_Filein_GetState(FILEENG_SEQ eFileEng)
1560*53ee8cc1Swenshuai.xi {
1561*53ee8cc1Swenshuai.xi     TSP_HAL_FileState state     = E_TSP_HAL_FILE_STATE_INVALID;
1562*53ee8cc1Swenshuai.xi     MS_U32            u32Status = HAL_TSP_Filein_Status(eFileEng);
1563*53ee8cc1Swenshuai.xi 
1564*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1565*53ee8cc1Swenshuai.xi     {
1566*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1567*53ee8cc1Swenshuai.xi         return E_TSP_HAL_FILE_STATE_INVALID;
1568*53ee8cc1Swenshuai.xi     }
1569*53ee8cc1Swenshuai.xi 
1570*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1571*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1572*53ee8cc1Swenshuai.xi 
1573*53ee8cc1Swenshuai.xi     if(REG16_R(&RegFileCtrl[u8FileEng].CFG_FILE_01) & CFG_FILE_01_REG_TSIF_PAUSE)
1574*53ee8cc1Swenshuai.xi     {
1575*53ee8cc1Swenshuai.xi         state = E_TSP_HAL_FILE_STATE_PAUSE;
1576*53ee8cc1Swenshuai.xi     }
1577*53ee8cc1Swenshuai.xi     else if(u32Status)
1578*53ee8cc1Swenshuai.xi     {
1579*53ee8cc1Swenshuai.xi         state = E_TSP_HAL_FILE_STATE_BUSY;
1580*53ee8cc1Swenshuai.xi     }
1581*53ee8cc1Swenshuai.xi     else
1582*53ee8cc1Swenshuai.xi     {
1583*53ee8cc1Swenshuai.xi         state = E_TSP_HAL_FILE_STATE_IDLE;
1584*53ee8cc1Swenshuai.xi     }
1585*53ee8cc1Swenshuai.xi 
1586*53ee8cc1Swenshuai.xi     return state;
1587*53ee8cc1Swenshuai.xi }
1588*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_PacketMode(FILEENG_SEQ eFileEng,MS_BOOL bSet)1589*53ee8cc1Swenshuai.xi void HAL_TSP_Filein_PacketMode(FILEENG_SEQ eFileEng, MS_BOOL bSet)
1590*53ee8cc1Swenshuai.xi {
1591*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1592*53ee8cc1Swenshuai.xi     {
1593*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1594*53ee8cc1Swenshuai.xi         return;
1595*53ee8cc1Swenshuai.xi     }
1596*53ee8cc1Swenshuai.xi 
1597*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1598*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1599*53ee8cc1Swenshuai.xi 
1600*53ee8cc1Swenshuai.xi     if(bSet)
1601*53ee8cc1Swenshuai.xi     {
1602*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_PKT192_EN);
1603*53ee8cc1Swenshuai.xi     }
1604*53ee8cc1Swenshuai.xi     else
1605*53ee8cc1Swenshuai.xi     {
1606*53ee8cc1Swenshuai.xi         REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_PKT192_EN);
1607*53ee8cc1Swenshuai.xi     }
1608*53ee8cc1Swenshuai.xi }
1609*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_BlockTimeStamp(FILEENG_SEQ eFileEng,MS_BOOL bEn)1610*53ee8cc1Swenshuai.xi void HAL_TSP_Filein_BlockTimeStamp(FILEENG_SEQ eFileEng, MS_BOOL bEn)
1611*53ee8cc1Swenshuai.xi {
1612*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1613*53ee8cc1Swenshuai.xi     {
1614*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1615*53ee8cc1Swenshuai.xi         return;
1616*53ee8cc1Swenshuai.xi     }
1617*53ee8cc1Swenshuai.xi 
1618*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1619*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1620*53ee8cc1Swenshuai.xi 
1621*53ee8cc1Swenshuai.xi     if(bEn)
1622*53ee8cc1Swenshuai.xi     {
1623*53ee8cc1Swenshuai.xi         REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_PKT192_BLK_DISABLE);
1624*53ee8cc1Swenshuai.xi     }
1625*53ee8cc1Swenshuai.xi     else
1626*53ee8cc1Swenshuai.xi     {
1627*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_PKT192_BLK_DISABLE);
1628*53ee8cc1Swenshuai.xi     }
1629*53ee8cc1Swenshuai.xi }
1630*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_SetTimeStamp(FILEENG_SEQ eFileEng,MS_U32 u32Stamp)1631*53ee8cc1Swenshuai.xi void HAL_TSP_Filein_SetTimeStamp(FILEENG_SEQ eFileEng, MS_U32 u32Stamp)
1632*53ee8cc1Swenshuai.xi {
1633*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1634*53ee8cc1Swenshuai.xi     {
1635*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1636*53ee8cc1Swenshuai.xi         return;
1637*53ee8cc1Swenshuai.xi     }
1638*53ee8cc1Swenshuai.xi 
1639*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1640*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1641*53ee8cc1Swenshuai.xi 
1642*53ee8cc1Swenshuai.xi     REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_LPCR2_WLD);
1643*53ee8cc1Swenshuai.xi     REG32_W(&RegFileCtrl[u8FileEng].CFG_FILE_10_11, u32Stamp);
1644*53ee8cc1Swenshuai.xi     REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_LPCR2_WLD);
1645*53ee8cc1Swenshuai.xi 
1646*53ee8cc1Swenshuai.xi     // Fix pass_pkt_timestamp will hang issue by TSP8,0x60[3] : reg_init_timestamp_restart_en
1647*53ee8cc1Swenshuai.xi     // _HAL_TSP_FILEIN_ResetPktTimeStamp(eFileEng, 0);
1648*53ee8cc1Swenshuai.xi }
1649*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_SetTimeStampClk(FILEENG_SEQ eFileEng,TSP_HAL_TimeStamp_Clk eTimeStampClk)1650*53ee8cc1Swenshuai.xi void HAL_TSP_Filein_SetTimeStampClk(FILEENG_SEQ eFileEng, TSP_HAL_TimeStamp_Clk eTimeStampClk)
1651*53ee8cc1Swenshuai.xi {
1652*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1653*53ee8cc1Swenshuai.xi     {
1654*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1655*53ee8cc1Swenshuai.xi         return;
1656*53ee8cc1Swenshuai.xi     }
1657*53ee8cc1Swenshuai.xi 
1658*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1659*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1660*53ee8cc1Swenshuai.xi 
1661*53ee8cc1Swenshuai.xi     if(eTimeStampClk == E_TSP_HAL_TIMESTAMP_CLK_27M)
1662*53ee8cc1Swenshuai.xi     {
1663*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_LPCR_FREG_27M_90K);
1664*53ee8cc1Swenshuai.xi     }
1665*53ee8cc1Swenshuai.xi     else
1666*53ee8cc1Swenshuai.xi     {
1667*53ee8cc1Swenshuai.xi         REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_01, CFG_FILE_01_REG_LPCR_FREG_27M_90K);
1668*53ee8cc1Swenshuai.xi     }
1669*53ee8cc1Swenshuai.xi }
1670*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_GetTimeStamp(FILEENG_SEQ eFileEng)1671*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Filein_GetTimeStamp(FILEENG_SEQ eFileEng)
1672*53ee8cc1Swenshuai.xi {
1673*53ee8cc1Swenshuai.xi     MS_U32 u32Stamp = 0;
1674*53ee8cc1Swenshuai.xi 
1675*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1676*53ee8cc1Swenshuai.xi     {
1677*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1678*53ee8cc1Swenshuai.xi         return 0;
1679*53ee8cc1Swenshuai.xi     }
1680*53ee8cc1Swenshuai.xi 
1681*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1682*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1683*53ee8cc1Swenshuai.xi 
1684*53ee8cc1Swenshuai.xi     REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_00, CFG_FILE_00_REG_LPCR2_LOAD);
1685*53ee8cc1Swenshuai.xi     u32Stamp = REG32_R(&RegFileCtrl[u8FileEng].CFG_FILE_12_13);
1686*53ee8cc1Swenshuai.xi     REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_00, CFG_FILE_00_REG_LPCR2_LOAD);
1687*53ee8cc1Swenshuai.xi 
1688*53ee8cc1Swenshuai.xi     return u32Stamp;
1689*53ee8cc1Swenshuai.xi }
1690*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_PktTimeStamp(FILEENG_SEQ eFileEng)1691*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Filein_PktTimeStamp(FILEENG_SEQ eFileEng)
1692*53ee8cc1Swenshuai.xi {
1693*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1694*53ee8cc1Swenshuai.xi     {
1695*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1696*53ee8cc1Swenshuai.xi         return 0;
1697*53ee8cc1Swenshuai.xi     }
1698*53ee8cc1Swenshuai.xi 
1699*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1700*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1701*53ee8cc1Swenshuai.xi 
1702*53ee8cc1Swenshuai.xi     return REG32_R(&RegFileCtrl[u8FileEng].CFG_FILE_14_15);
1703*53ee8cc1Swenshuai.xi }
1704*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_GetCurAddr(FILEENG_SEQ eFileEng,MS_PHY * pu32Addr)1705*53ee8cc1Swenshuai.xi void HAL_TSP_Filein_GetCurAddr(FILEENG_SEQ eFileEng, MS_PHY *pu32Addr)
1706*53ee8cc1Swenshuai.xi {
1707*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1708*53ee8cc1Swenshuai.xi     {
1709*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1710*53ee8cc1Swenshuai.xi         return;
1711*53ee8cc1Swenshuai.xi     }
1712*53ee8cc1Swenshuai.xi 
1713*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1714*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1715*53ee8cc1Swenshuai.xi 
1716*53ee8cc1Swenshuai.xi     *pu32Addr = (MS_PHY)(REG32_R(&RegFileCtrl[u8FileEng].CFG_FILE_16_17) & CFG_FILE_16_17_REG_TSP2MI_RADDR_TSIF_MASK);
1717*53ee8cc1Swenshuai.xi }
1718*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_WbFsmRst(FILEENG_SEQ eFileEng,MS_BOOL bEnable)1719*53ee8cc1Swenshuai.xi void HAL_TSP_Filein_WbFsmRst(FILEENG_SEQ eFileEng, MS_BOOL bEnable)
1720*53ee8cc1Swenshuai.xi {
1721*53ee8cc1Swenshuai.xi     if(eFileEng >= TSP_TSIF_NUM)
1722*53ee8cc1Swenshuai.xi     {
1723*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FileIn Engine : 0x%x !!\n",__FUNCTION__,__LINE__,eFileEng));
1724*53ee8cc1Swenshuai.xi         return;
1725*53ee8cc1Swenshuai.xi     }
1726*53ee8cc1Swenshuai.xi 
1727*53ee8cc1Swenshuai.xi     REG_FILE_ENG_Ctrl   *RegFileCtrl = (eFileEng < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
1728*53ee8cc1Swenshuai.xi     MS_U8   u8FileEng = (eFileEng < E_FILEENG_TSIF4)? eFileEng : (eFileEng - E_FILEENG_TSIF4);
1729*53ee8cc1Swenshuai.xi 
1730*53ee8cc1Swenshuai.xi     if(bEnable)
1731*53ee8cc1Swenshuai.xi     {
1732*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_00, CFG_FILE_00_REG_WB_FSM_RESET);
1733*53ee8cc1Swenshuai.xi     }
1734*53ee8cc1Swenshuai.xi     else
1735*53ee8cc1Swenshuai.xi     {
1736*53ee8cc1Swenshuai.xi         REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_00, CFG_FILE_00_REG_WB_FSM_RESET);
1737*53ee8cc1Swenshuai.xi     }
1738*53ee8cc1Swenshuai.xi }
1739*53ee8cc1Swenshuai.xi 
HAL_TSP_Filein_MOBF_Enable(FILEENG_SEQ eFileEng,MS_BOOL bEnable,MS_U32 u32Key)1740*53ee8cc1Swenshuai.xi void HAL_TSP_Filein_MOBF_Enable(FILEENG_SEQ eFileEng, MS_BOOL bEnable, MS_U32 u32Key)
1741*53ee8cc1Swenshuai.xi {
1742*53ee8cc1Swenshuai.xi     // not support
1743*53ee8cc1Swenshuai.xi }
1744*53ee8cc1Swenshuai.xi 
HAL_TSP_FltSrc2PktDmx_Mapping(TSP_PIDFLT_SRC ePidFltSrc)1745*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_FltSrc2PktDmx_Mapping(TSP_PIDFLT_SRC ePidFltSrc)
1746*53ee8cc1Swenshuai.xi {
1747*53ee8cc1Swenshuai.xi     switch (ePidFltSrc)
1748*53ee8cc1Swenshuai.xi     {
1749*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_LIVE0:
1750*53ee8cc1Swenshuai.xi             return TSP_PIDFLT_TSIF0;
1751*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_LIVE1:
1752*53ee8cc1Swenshuai.xi             return TSP_PIDFLT_TSIF2;
1753*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_LIVE2:
1754*53ee8cc1Swenshuai.xi             return TSP_PIDFLT_TSIF3;
1755*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_LIVE3:
1756*53ee8cc1Swenshuai.xi             return TSP_PIDFLT_TSIF1;
1757*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_FILE0:
1758*53ee8cc1Swenshuai.xi             return TSP_PIDFLT_TSIF1;
1759*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_FILE1:
1760*53ee8cc1Swenshuai.xi             return TSP_PIDFLT_TSIF3;
1761*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_FILE2:
1762*53ee8cc1Swenshuai.xi             return TSP_PIDFLT_TSIF0;
1763*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_FILE3:
1764*53ee8cc1Swenshuai.xi             return TSP_PIDFLT_TSIF2;
1765*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_LIVE4:
1766*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_FILE4:
1767*53ee8cc1Swenshuai.xi             return TSP_PIDFLT_TSIF4;
1768*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_LIVE5:
1769*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_FILE5:
1770*53ee8cc1Swenshuai.xi             return TSP_PIDFLT_TSIF5;
1771*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_LIVE6:
1772*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_FILE6:
1773*53ee8cc1Swenshuai.xi             return TSP_PIDFLT_TSIF6;
1774*53ee8cc1Swenshuai.xi         default:
1775*53ee8cc1Swenshuai.xi             printf("[TSP_ERR][%s][%d] Wrong filter source!!!\n",__FUNCTION__, __LINE__);
1776*53ee8cc1Swenshuai.xi             break;
1777*53ee8cc1Swenshuai.xi     }
1778*53ee8cc1Swenshuai.xi 
1779*53ee8cc1Swenshuai.xi     return 0;
1780*53ee8cc1Swenshuai.xi }
1781*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SetFltIn(MS_U32 fltId,MS_U32 u32FltIn)1782*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SetFltIn(MS_U32 fltId, MS_U32 u32FltIn)
1783*53ee8cc1Swenshuai.xi {
1784*53ee8cc1Swenshuai.xi     REG_PidFlt *pPidFlt = PPIDFLT0(fltId);
1785*53ee8cc1Swenshuai.xi     TSP32_IdrW(pPidFlt, (TSP32_IdrR(pPidFlt) & ~TSP_PIDFLT_IN_MASK) | ((u32FltIn << TSP_PIDFLT_TSIF_SHFT) & TSP_PIDFLT_IN_MASK));
1786*53ee8cc1Swenshuai.xi }
1787*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SetFltOut(MS_U32 fltId,MS_U32 u32FltOut)1788*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SetFltOut(MS_U32 fltId, MS_U32 u32FltOut)
1789*53ee8cc1Swenshuai.xi {
1790*53ee8cc1Swenshuai.xi     REG_PidFlt *pPidFlt = PPIDFLT1(fltId);
1791*53ee8cc1Swenshuai.xi     TSP32_IdrW(pPidFlt, ((TSP32_IdrR(pPidFlt) & ~(TSP_PIDFLT_OUT_MASK)) | (u32FltOut & TSP_PIDFLT_OUT_MASK)));
1792*53ee8cc1Swenshuai.xi }
1793*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SetSrcID(MS_U32 fltId,MS_U32 u32SrcID)1794*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SetSrcID(MS_U32 fltId, MS_U32 u32SrcID)
1795*53ee8cc1Swenshuai.xi {
1796*53ee8cc1Swenshuai.xi     REG_PidFlt *pPidFlt = PPIDFLT0(fltId);
1797*53ee8cc1Swenshuai.xi     TSP32_IdrW(pPidFlt, ((TSP32_IdrR(pPidFlt) & ~(TSP_PIDFLT_SRCID_MASK)) | ((u32SrcID << TSP_PIDFLT_SRCID_SHIFT) & TSP_PIDFLT_SRCID_MASK)));
1798*53ee8cc1Swenshuai.xi }
1799*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SetSecFlt(MS_U32 fltId,MS_U32 u32SecFltId)1800*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SetSecFlt(MS_U32 fltId, MS_U32 u32SecFltId)
1801*53ee8cc1Swenshuai.xi {
1802*53ee8cc1Swenshuai.xi     REG_PidFlt *pPidFlt = PPIDFLT2(fltId);
1803*53ee8cc1Swenshuai.xi     TSP32_IdrW(pPidFlt, (TSP32_IdrR(pPidFlt) & ~TSP_PIDFLT_SECFLT_MASK) | ((u32SecFltId << TSP_PIDFLT_SECFLT_SHFT) & TSP_PIDFLT_SECFLT_MASK));
1804*53ee8cc1Swenshuai.xi }
1805*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SetPvrFlt(MS_U32 fltId,MS_U32 u32PVREng,MS_BOOL bEn)1806*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SetPvrFlt(MS_U32 fltId, MS_U32 u32PVREng, MS_BOOL bEn)
1807*53ee8cc1Swenshuai.xi {
1808*53ee8cc1Swenshuai.xi     REG_PidFlt *pPidFlt = PPIDFLT1(fltId);
1809*53ee8cc1Swenshuai.xi 
1810*53ee8cc1Swenshuai.xi     if(bEn)
1811*53ee8cc1Swenshuai.xi     {
1812*53ee8cc1Swenshuai.xi         TSP32_IdrW(pPidFlt, (TSP32_IdrR(pPidFlt) & ~TSP_PIDFLT_PVRFLT_MASK) | (((1 << u32PVREng) << TSP_PIDFLT_PVRFLT_SHIFT) & TSP_PIDFLT_PVRFLT_MASK));
1813*53ee8cc1Swenshuai.xi     }
1814*53ee8cc1Swenshuai.xi     else
1815*53ee8cc1Swenshuai.xi     {
1816*53ee8cc1Swenshuai.xi         TSP32_IdrW(pPidFlt, (TSP32_IdrR(pPidFlt) & ~TSP_PIDFLT_PVRFLT_MASK));
1817*53ee8cc1Swenshuai.xi     }
1818*53ee8cc1Swenshuai.xi }
1819*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SetFltRushPass(MS_U32 fltId,MS_U8 u8Enable)1820*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SetFltRushPass(MS_U32 fltId, MS_U8 u8Enable)
1821*53ee8cc1Swenshuai.xi {
1822*53ee8cc1Swenshuai.xi     REG_PidFlt *pPidFlt = PPIDFLT0(fltId);
1823*53ee8cc1Swenshuai.xi 
1824*53ee8cc1Swenshuai.xi     if(u8Enable)
1825*53ee8cc1Swenshuai.xi         TSP32_IdrW(pPidFlt, TSP32_IdrR(pPidFlt) | (TSP_PID_FLT_PKTPUSH_PASS));
1826*53ee8cc1Swenshuai.xi     else
1827*53ee8cc1Swenshuai.xi         TSP32_IdrW(pPidFlt, TSP32_IdrR(pPidFlt) & ~(TSP_PID_FLT_PKTPUSH_PASS));
1828*53ee8cc1Swenshuai.xi }
1829*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SetPid(MS_U32 fltId,MS_U32 u32Pid)1830*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SetPid(MS_U32 fltId, MS_U32 u32Pid)
1831*53ee8cc1Swenshuai.xi {
1832*53ee8cc1Swenshuai.xi     REG_PidFlt *pPidFlt = PPIDFLT0(fltId);
1833*53ee8cc1Swenshuai.xi     TSP32_IdrW(pPidFlt, (TSP32_IdrR(pPidFlt) & ~TSP_PIDFLT_PID_MASK) | ((u32Pid << TSP_PIDFLT_PID_SHFT) & TSP_PIDFLT_PID_MASK));
1834*53ee8cc1Swenshuai.xi }
1835*53ee8cc1Swenshuai.xi 
1836*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1837*53ee8cc1Swenshuai.xi // For section filter part
1838*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1839*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_BurstLen(MS_U32 burstMode)1840*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_BurstLen(MS_U32 burstMode)
1841*53ee8cc1Swenshuai.xi {
1842*53ee8cc1Swenshuai.xi      REG16_SET(&_RegCtrl->TSP_Cfg5, TSP_SEC_DMA_BURST_EN);
1843*53ee8cc1Swenshuai.xi      REG16_MSK_W(&_RegCtrl->Hw_Config4, TSP_HW_DMA_MODE_MASK, (burstMode << TSP_HW_DMA_MODE_SHIFT));
1844*53ee8cc1Swenshuai.xi }
1845*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_SetType(REG_SecFlt * pSecFlt,MS_U32 u32FltType)1846*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetType(REG_SecFlt *pSecFlt, MS_U32 u32FltType)
1847*53ee8cc1Swenshuai.xi {
1848*53ee8cc1Swenshuai.xi     TSP32_IdrW(&pSecFlt->Ctrl, (TSP32_IdrR(&pSecFlt->Ctrl) & ~TSP_SECFLT_USER_MASK) | (u32FltType << TSP_SECFLT_USER_SHFT));
1849*53ee8cc1Swenshuai.xi }
1850*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_SetMode(REG_SecFlt * pSecFlt,MS_U32 u32SecFltMode)1851*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetMode(REG_SecFlt *pSecFlt, MS_U32 u32SecFltMode)
1852*53ee8cc1Swenshuai.xi {
1853*53ee8cc1Swenshuai.xi     TSP32_IdrW(&pSecFlt->Ctrl, (TSP32_IdrR(&pSecFlt->Ctrl) & ~TSP_SECFLT_MODE_MASK) | ((u32SecFltMode << TSP_SECFLT_MODE_SHFT) & TSP_SECFLT_MODE_MASK));
1854*53ee8cc1Swenshuai.xi }
1855*53ee8cc1Swenshuai.xi 
1856*53ee8cc1Swenshuai.xi // match mask --> 0 will compare
HAL_TSP_SecFlt_SetMask(REG_SecFlt * pSecFlt,MS_U8 * pu8Mask)1857*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetMask(REG_SecFlt *pSecFlt, MS_U8 *pu8Mask)
1858*53ee8cc1Swenshuai.xi {
1859*53ee8cc1Swenshuai.xi     MS_U32 i,j;
1860*53ee8cc1Swenshuai.xi     MS_U32 u32Temp;
1861*53ee8cc1Swenshuai.xi 
1862*53ee8cc1Swenshuai.xi     for (i = 0; i < (TSP_FILTER_DEPTH/sizeof(MS_U32)); i++)
1863*53ee8cc1Swenshuai.xi     {
1864*53ee8cc1Swenshuai.xi         j = (i << 2);
1865*53ee8cc1Swenshuai.xi         u32Temp = (pu8Mask[j]) | (pu8Mask[j+ 1] << 8  ) | (pu8Mask[j+ 2] << 16  )| (pu8Mask[j+ 3] << 24);
1866*53ee8cc1Swenshuai.xi         TSP32_IdrW((TSP32 *)&pSecFlt->Mask[i], u32Temp);
1867*53ee8cc1Swenshuai.xi     }
1868*53ee8cc1Swenshuai.xi }
1869*53ee8cc1Swenshuai.xi 
1870*53ee8cc1Swenshuai.xi // not match mask --> 1 will compare
HAL_TSP_SecFlt_SetNMask(REG_SecFlt * pSecFlt,MS_U8 * pu8NMask)1871*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetNMask(REG_SecFlt *pSecFlt, MS_U8 *pu8NMask)
1872*53ee8cc1Swenshuai.xi {
1873*53ee8cc1Swenshuai.xi     MS_U32 i,j;
1874*53ee8cc1Swenshuai.xi     MS_U32 u32Temp;
1875*53ee8cc1Swenshuai.xi 
1876*53ee8cc1Swenshuai.xi     for (i = 0; i < (TSP_FILTER_DEPTH/sizeof(MS_U32)); i++)
1877*53ee8cc1Swenshuai.xi     {
1878*53ee8cc1Swenshuai.xi         j = (i<< 2);
1879*53ee8cc1Swenshuai.xi         u32Temp = (pu8NMask[j]) | (pu8NMask[j+ 1] << 8  ) | (pu8NMask[j+ 2] << 16  )| (pu8NMask[j+ 3] << 24);
1880*53ee8cc1Swenshuai.xi         TSP32_IdrW((TSP32 *)&pSecFlt->NMask[i], u32Temp);
1881*53ee8cc1Swenshuai.xi     }
1882*53ee8cc1Swenshuai.xi }
1883*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_SetMatch(REG_SecFlt * pSecFlt,MS_U8 * pu8Match)1884*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetMatch(REG_SecFlt *pSecFlt, MS_U8 *pu8Match)
1885*53ee8cc1Swenshuai.xi {
1886*53ee8cc1Swenshuai.xi     MS_U32 i,j;
1887*53ee8cc1Swenshuai.xi     MS_U32 u32Temp;
1888*53ee8cc1Swenshuai.xi 
1889*53ee8cc1Swenshuai.xi     for (i = 0; i < (TSP_FILTER_DEPTH/sizeof(MS_U32)); i++)
1890*53ee8cc1Swenshuai.xi     {
1891*53ee8cc1Swenshuai.xi         j = (i<< 2);
1892*53ee8cc1Swenshuai.xi         u32Temp =  (pu8Match[j]) | (pu8Match[j+ 1] << 8  ) | (pu8Match[j+ 2] << 16  )| (pu8Match[j+ 3] << 24);
1893*53ee8cc1Swenshuai.xi         TSP32_IdrW((TSP32 *)&pSecFlt->Match[i], u32Temp);
1894*53ee8cc1Swenshuai.xi     }
1895*53ee8cc1Swenshuai.xi }
1896*53ee8cc1Swenshuai.xi 
1897*53ee8cc1Swenshuai.xi //[LIMIT] Is impossible to identify the pidfilter is assigned a secfilter/buffer or not
HAL_TSP_SecFlt_SelSecBuf(REG_SecFlt * pSecFlt,MS_U16 u16BufId)1898*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SelSecBuf(REG_SecFlt *pSecFlt, MS_U16 u16BufId)
1899*53ee8cc1Swenshuai.xi {
1900*53ee8cc1Swenshuai.xi     TSP32_IdrW( &pSecFlt->Ctrl, (TSP32_IdrR(&pSecFlt->Ctrl) & ~TSP_SECFLT_SECBUF_MASK)
1901*53ee8cc1Swenshuai.xi             | ((u16BufId << TSP_SECFLT_SECBUF_SHFT) & TSP_SECFLT_SECBUF_MASK) );
1902*53ee8cc1Swenshuai.xi 
1903*53ee8cc1Swenshuai.xi     TSP32_IdrW( &pSecFlt->Ctrl_1, !!(u16BufId & 0x100));
1904*53ee8cc1Swenshuai.xi }
1905*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_GetSecBuf(REG_SecFlt * pSecFlt)1906*53ee8cc1Swenshuai.xi MS_U16 HAL_TSP_SecFlt_GetSecBuf(REG_SecFlt *pSecFlt)
1907*53ee8cc1Swenshuai.xi {
1908*53ee8cc1Swenshuai.xi     MS_U16  u16RetVal = (TSP32_IdrR(&pSecFlt->Ctrl) & TSP_SECFLT_SECBUF_MASK) >> TSP_SECFLT_SECBUF_SHFT;
1909*53ee8cc1Swenshuai.xi 
1910*53ee8cc1Swenshuai.xi     if(TSP32_IdrR(&pSecFlt->Ctrl_1) & TSP_SECFLT_SECBUF_H_MASK)
1911*53ee8cc1Swenshuai.xi     {
1912*53ee8cc1Swenshuai.xi         u16RetVal |= 0x100;
1913*53ee8cc1Swenshuai.xi     }
1914*53ee8cc1Swenshuai.xi 
1915*53ee8cc1Swenshuai.xi     return u16RetVal;
1916*53ee8cc1Swenshuai.xi }
1917*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_GetFltOutput(REG_PidFlt * pPidFlt)1918*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_PidFlt_GetFltOutput(REG_PidFlt *pPidFlt)
1919*53ee8cc1Swenshuai.xi {
1920*53ee8cc1Swenshuai.xi     return (TSP32_IdrR(pPidFlt) & TSP_PIDFLT_OUT_MASK);
1921*53ee8cc1Swenshuai.xi }
1922*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_DropEnable(MS_BOOL bSet)1923*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_DropEnable(MS_BOOL bSet)
1924*53ee8cc1Swenshuai.xi {
1925*53ee8cc1Swenshuai.xi     // don't have to implement no reference
1926*53ee8cc1Swenshuai.xi }
1927*53ee8cc1Swenshuai.xi 
1928*53ee8cc1Swenshuai.xi // @FIXME: Is it secflt or secbuf?
HAL_TSP_SecFlt_ResetState(REG_SecFlt * pSecFlt)1929*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_ResetState(REG_SecFlt* pSecFlt)
1930*53ee8cc1Swenshuai.xi {
1931*53ee8cc1Swenshuai.xi     TSP32_IdrW(&pSecFlt->Ctrl, TSP32_IdrR(&pSecFlt->Ctrl) & ~(TSP_SECFLT_STATE_MASK));
1932*53ee8cc1Swenshuai.xi }
1933*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_ClrCtrl(REG_SecFlt * pSecFlt)1934*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_ClrCtrl(REG_SecFlt *pSecFlt)
1935*53ee8cc1Swenshuai.xi {
1936*53ee8cc1Swenshuai.xi     TSP32_IdrW(&pSecFlt->Ctrl, 0);
1937*53ee8cc1Swenshuai.xi }
1938*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_GetState(REG_SecFlt * pSecFlt)1939*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_SecFlt_GetState(REG_SecFlt *pSecFlt)
1940*53ee8cc1Swenshuai.xi {
1941*53ee8cc1Swenshuai.xi     return ((TSP32_IdrR(&pSecFlt->Ctrl) & TSP_SECFLT_STATE_MASK) >> TSP_SECFLT_STATE_SHFT);
1942*53ee8cc1Swenshuai.xi }
1943*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_GetMode(REG_SecFlt * pSecFlt)1944*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_SecFlt_GetMode(REG_SecFlt *pSecFlt)
1945*53ee8cc1Swenshuai.xi {
1946*53ee8cc1Swenshuai.xi     return ((TSP32_IdrR(&pSecFlt->Ctrl) & TSP_SECFLT_MODE_MASK) >> TSP_SECFLT_MODE_SHFT);
1947*53ee8cc1Swenshuai.xi }
1948*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_PcrReset(REG_SecFlt * pSecFlt)1949*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_PcrReset(REG_SecFlt *pSecFlt)
1950*53ee8cc1Swenshuai.xi {
1951*53ee8cc1Swenshuai.xi     TSP32_IdrW(&pSecFlt->Ctrl, TSP32_IdrR(&pSecFlt->Ctrl) | TSP_SECFLT_PCRRST);
1952*53ee8cc1Swenshuai.xi }
1953*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_TryAlloc(REG_SecFlt * pSecFlt,MS_U16 u16TSPId)1954*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SecFlt_TryAlloc(REG_SecFlt* pSecFlt, MS_U16 u16TSPId)
1955*53ee8cc1Swenshuai.xi {
1956*53ee8cc1Swenshuai.xi     MS_U32              reg;
1957*53ee8cc1Swenshuai.xi 
1958*53ee8cc1Swenshuai.xi     // rmn counter doesn't need 32bit (check 13818) so we use some of it to store owner and alloc info
1959*53ee8cc1Swenshuai.xi     reg = TSP32_IdrR(&pSecFlt->RmnCnt) & (TSP_SECFLT_OWNER_MASK | TSP_SECFLT_ALLOC_MASK);
1960*53ee8cc1Swenshuai.xi     if (reg & TSP_SECFLT_ALLOC_MASK)
1961*53ee8cc1Swenshuai.xi     {
1962*53ee8cc1Swenshuai.xi         return FALSE;
1963*53ee8cc1Swenshuai.xi     }
1964*53ee8cc1Swenshuai.xi     reg |= TSP_SECFLT_ALLOC_MASK | ((u16TSPId<<TSP_SECFLT_OWNER_SHFT) & TSP_SECFLT_OWNER_MASK);
1965*53ee8cc1Swenshuai.xi     TSP32_IdrW(&pSecFlt->RmnCnt, reg);
1966*53ee8cc1Swenshuai.xi 
1967*53ee8cc1Swenshuai.xi     return TRUE;
1968*53ee8cc1Swenshuai.xi }
1969*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_SetAutoCRCChk(REG_SecFlt * pSecFlt,MS_BOOL bSet)1970*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetAutoCRCChk(REG_SecFlt *pSecFlt, MS_BOOL bSet)
1971*53ee8cc1Swenshuai.xi {
1972*53ee8cc1Swenshuai.xi     if(bSet)
1973*53ee8cc1Swenshuai.xi     {
1974*53ee8cc1Swenshuai.xi         TSP32_IdrW(&pSecFlt->Ctrl, TSP32_IdrR(&pSecFlt->Ctrl) | TSP_SECFLT_MODE_AUTO_CRCCHK);
1975*53ee8cc1Swenshuai.xi     }
1976*53ee8cc1Swenshuai.xi     else
1977*53ee8cc1Swenshuai.xi     {
1978*53ee8cc1Swenshuai.xi         TSP32_IdrW(&pSecFlt->Ctrl, TSP32_IdrR(&pSecFlt->Ctrl) & ~TSP_SECFLT_MODE_AUTO_CRCCHK);
1979*53ee8cc1Swenshuai.xi     }
1980*53ee8cc1Swenshuai.xi }
1981*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_Free(REG_SecFlt * pSecFlt)1982*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_Free(REG_SecFlt* pSecFlt)
1983*53ee8cc1Swenshuai.xi {
1984*53ee8cc1Swenshuai.xi     MS_U32              reg;
1985*53ee8cc1Swenshuai.xi 
1986*53ee8cc1Swenshuai.xi     reg = TSP32_IdrR(&pSecFlt->RmnCnt) & ~(TSP_SECFLT_OWNER_MASK | TSP_SECFLT_ALLOC_MASK);
1987*53ee8cc1Swenshuai.xi     TSP32_IdrW(&pSecFlt->RmnCnt, reg);
1988*53ee8cc1Swenshuai.xi }
1989*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_ResetRmnCnt(REG_SecFlt * pSecFlt)1990*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_ResetRmnCnt(REG_SecFlt* pSecFlt)
1991*53ee8cc1Swenshuai.xi {
1992*53ee8cc1Swenshuai.xi     TSP32_IdrW(&pSecFlt->RmnCnt, TSP32_IdrR(&pSecFlt->RmnCnt) & ~(TSP_SECBUF_RMNCNT_MASK));
1993*53ee8cc1Swenshuai.xi }
1994*53ee8cc1Swenshuai.xi 
1995*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1996*53ee8cc1Swenshuai.xi //  For section buffer part
1997*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
HAL_TSP_SecBuf_SetBuf(REG_SecBuf * pSecBuf,MS_U32 u32StartAddr,MS_U32 u32BufSize)1998*53ee8cc1Swenshuai.xi void HAL_TSP_SecBuf_SetBuf(REG_SecBuf *pSecBuf, MS_U32 u32StartAddr, MS_U32 u32BufSize)
1999*53ee8cc1Swenshuai.xi {
2000*53ee8cc1Swenshuai.xi     // Check MIU select
2001*53ee8cc1Swenshuai.xi     MS_U8   u8MiuSel;
2002*53ee8cc1Swenshuai.xi     MS_PHY  phyMiuOffsetSecBuf;
2003*53ee8cc1Swenshuai.xi 
2004*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetSecBuf, u32StartAddr);
2005*53ee8cc1Swenshuai.xi     REG16_MSK_W(&_RegTopCtrl->CFG_TOP_09, CFG_TOP_09_REG_MIU_SEL_SEC_MASK, (u8MiuSel << CFG_TOP_09_REG_MIU_SEL_SEC_SHIFT));
2006*53ee8cc1Swenshuai.xi     TSP32_IdrW(&pSecBuf->Start, phyMiuOffsetSecBuf);
2007*53ee8cc1Swenshuai.xi     TSP32_IdrW(&pSecBuf->End, phyMiuOffsetSecBuf + u32BufSize);
2008*53ee8cc1Swenshuai.xi }
2009*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_SetRead(REG_SecBuf * pSecBuf,MS_U32 u32ReadAddr)2010*53ee8cc1Swenshuai.xi void HAL_TSP_SecBuf_SetRead(REG_SecBuf *pSecBuf, MS_U32 u32ReadAddr)
2011*53ee8cc1Swenshuai.xi {
2012*53ee8cc1Swenshuai.xi     TSP32_IdrW(&pSecBuf->Read, u32ReadAddr);
2013*53ee8cc1Swenshuai.xi }
2014*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetStart(REG_SecBuf * pSecBuf)2015*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_SecBuf_GetStart(REG_SecBuf *pSecBuf)
2016*53ee8cc1Swenshuai.xi {
2017*53ee8cc1Swenshuai.xi     return TSP32_IdrR(&pSecBuf->Start);
2018*53ee8cc1Swenshuai.xi }
2019*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetEnd(REG_SecBuf * pSecBuf)2020*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_SecBuf_GetEnd(REG_SecBuf *pSecBuf)
2021*53ee8cc1Swenshuai.xi {
2022*53ee8cc1Swenshuai.xi     return TSP32_IdrR(&pSecBuf->End);
2023*53ee8cc1Swenshuai.xi }
2024*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetBufCur(REG_SecBuf * pSecBuf)2025*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_SecBuf_GetBufCur(REG_SecBuf *pSecBuf)
2026*53ee8cc1Swenshuai.xi {
2027*53ee8cc1Swenshuai.xi     //BufCur is control by firmware
2028*53ee8cc1Swenshuai.xi     //we use Cur pointer to receive the newest data
2029*53ee8cc1Swenshuai.xi     //and use write pointer to guarantee that the data between
2030*53ee8cc1Swenshuai.xi     //read and write pointer is correct, so that user won't get
2031*53ee8cc1Swenshuai.xi     //unverified data.
2032*53ee8cc1Swenshuai.xi     return TSP32_IdrR(&pSecBuf->Cur);
2033*53ee8cc1Swenshuai.xi }
2034*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_Reset(REG_SecBuf * pSecBuf)2035*53ee8cc1Swenshuai.xi void HAL_TSP_SecBuf_Reset(REG_SecBuf *pSecBuf)
2036*53ee8cc1Swenshuai.xi {
2037*53ee8cc1Swenshuai.xi     MS_U32              start;
2038*53ee8cc1Swenshuai.xi 
2039*53ee8cc1Swenshuai.xi     start = TSP32_IdrR(&pSecBuf->Start);
2040*53ee8cc1Swenshuai.xi 
2041*53ee8cc1Swenshuai.xi     TSP32_IdrW(&pSecBuf->Cur,    start);
2042*53ee8cc1Swenshuai.xi     TSP32_IdrW(&pSecBuf->Read,   start);
2043*53ee8cc1Swenshuai.xi     TSP32_IdrW(&pSecBuf->Write,  start);
2044*53ee8cc1Swenshuai.xi 
2045*53ee8cc1Swenshuai.xi     start = ( (MS_VIRT)pSecBuf - (MS_VIRT)REG_SECBUF_BASE ) / sizeof(REG_SecBuf)  ;
2046*53ee8cc1Swenshuai.xi     HAL_TSP_HCMD_BufRst(start); // @FIXME seems we don't need to do this
2047*53ee8cc1Swenshuai.xi }
2048*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetRead(REG_SecBuf * pSecBuf)2049*53ee8cc1Swenshuai.xi MS_U32  HAL_TSP_SecBuf_GetRead(REG_SecBuf *pSecBuf)
2050*53ee8cc1Swenshuai.xi {
2051*53ee8cc1Swenshuai.xi     return TSP32_IdrR((TSP32*)&pSecBuf->Read);
2052*53ee8cc1Swenshuai.xi }
2053*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetWrite(REG_SecBuf * pSecBuf)2054*53ee8cc1Swenshuai.xi MS_U32  HAL_TSP_SecBuf_GetWrite(REG_SecBuf *pSecBuf)
2055*53ee8cc1Swenshuai.xi {
2056*53ee8cc1Swenshuai.xi     return TSP32_IdrR((TSP32*)&pSecBuf->Write);
2057*53ee8cc1Swenshuai.xi }
2058*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_TryAlloc(REG_SecBuf * pSecBuf,MS_U16 u16TSPId)2059*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SecBuf_TryAlloc(REG_SecBuf *pSecBuf, MS_U16 u16TSPId)
2060*53ee8cc1Swenshuai.xi {
2061*53ee8cc1Swenshuai.xi     //@NOTE: K7U don't have to implement
2062*53ee8cc1Swenshuai.xi     return TRUE;
2063*53ee8cc1Swenshuai.xi }
2064*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_Free(REG_SecBuf * pSecBuf)2065*53ee8cc1Swenshuai.xi void HAL_TSP_SecBuf_Free(REG_SecBuf *pSecBuf)
2066*53ee8cc1Swenshuai.xi {
2067*53ee8cc1Swenshuai.xi     // @TODO ref to HAL_TSP_SecBuf_TryAlloc
2068*53ee8cc1Swenshuai.xi     TSP32_IdrW(&pSecBuf->Start, 0x0);
2069*53ee8cc1Swenshuai.xi }
2070*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_GetPid(REG_PidFlt * pPidFlt)2071*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_PidFlt_GetPid(REG_PidFlt* pPidFlt)
2072*53ee8cc1Swenshuai.xi {
2073*53ee8cc1Swenshuai.xi     return ((TSP32_IdrR(pPidFlt) & TSP_PIDFLT_PID_MASK) >> TSP_PIDFLT_PID_SHFT);
2074*53ee8cc1Swenshuai.xi }
2075*53ee8cc1Swenshuai.xi 
HAL_TSP_PcrFlt_Enable(MS_U32 pcrFltId,MS_BOOL bEnable)2076*53ee8cc1Swenshuai.xi void HAL_TSP_PcrFlt_Enable(MS_U32 pcrFltId, MS_BOOL bEnable)
2077*53ee8cc1Swenshuai.xi {
2078*53ee8cc1Swenshuai.xi     if(pcrFltId >= TSP_PCRFLT_NUM)
2079*53ee8cc1Swenshuai.xi     {
2080*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PCR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,pcrFltId));
2081*53ee8cc1Swenshuai.xi         return;
2082*53ee8cc1Swenshuai.xi     }
2083*53ee8cc1Swenshuai.xi 
2084*53ee8cc1Swenshuai.xi     if(bEnable)
2085*53ee8cc1Swenshuai.xi     {
2086*53ee8cc1Swenshuai.xi         REG32_SET(&_RegPcrCtrl[pcrFltId].CFG_PCR_01_02, CFG_PCR_01_02_REG_PIDFLT_PCR_ENPCR);
2087*53ee8cc1Swenshuai.xi     }
2088*53ee8cc1Swenshuai.xi     else
2089*53ee8cc1Swenshuai.xi     {
2090*53ee8cc1Swenshuai.xi         REG32_CLR(&_RegPcrCtrl[pcrFltId].CFG_PCR_01_02, CFG_PCR_01_02_REG_PIDFLT_PCR_ENPCR);
2091*53ee8cc1Swenshuai.xi     }
2092*53ee8cc1Swenshuai.xi }
2093*53ee8cc1Swenshuai.xi 
HAL_TSP_PcrFlt_SetPid(MS_U32 pcrFltId,MS_U32 u32Pid)2094*53ee8cc1Swenshuai.xi void HAL_TSP_PcrFlt_SetPid(MS_U32 pcrFltId, MS_U32 u32Pid)
2095*53ee8cc1Swenshuai.xi {
2096*53ee8cc1Swenshuai.xi     if(pcrFltId >= TSP_PCRFLT_NUM)
2097*53ee8cc1Swenshuai.xi     {
2098*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PCR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,pcrFltId));
2099*53ee8cc1Swenshuai.xi         return;
2100*53ee8cc1Swenshuai.xi     }
2101*53ee8cc1Swenshuai.xi 
2102*53ee8cc1Swenshuai.xi     REG32_MSK_W(&_RegPcrCtrl[pcrFltId].CFG_PCR_01_02, CFG_PCR_01_02_REG_PIDFLT_PCR_PID_MASK, u32Pid);
2103*53ee8cc1Swenshuai.xi }
2104*53ee8cc1Swenshuai.xi 
HAL_TSP_PcrFlt_GetPid(MS_U32 pcrFltId)2105*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_PcrFlt_GetPid(MS_U32 pcrFltId)
2106*53ee8cc1Swenshuai.xi {
2107*53ee8cc1Swenshuai.xi     if(pcrFltId >= TSP_PCRFLT_NUM)
2108*53ee8cc1Swenshuai.xi     {
2109*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PCR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,pcrFltId));
2110*53ee8cc1Swenshuai.xi         return PVR_PIDFLT_DEF;
2111*53ee8cc1Swenshuai.xi     }
2112*53ee8cc1Swenshuai.xi 
2113*53ee8cc1Swenshuai.xi     return (REG32_R(&_RegPcrCtrl[pcrFltId].CFG_PCR_01_02) & CFG_PCR_01_02_REG_PIDFLT_PCR_PID_MASK);
2114*53ee8cc1Swenshuai.xi }
2115*53ee8cc1Swenshuai.xi 
HAL_TSP_PcrFlt_SetSrc(MS_U32 pcrFltId,TSP_PCR_SRC src)2116*53ee8cc1Swenshuai.xi void HAL_TSP_PcrFlt_SetSrc(MS_U32 pcrFltId, TSP_PCR_SRC src)
2117*53ee8cc1Swenshuai.xi {
2118*53ee8cc1Swenshuai.xi     if(pcrFltId >= TSP_PCRFLT_NUM)
2119*53ee8cc1Swenshuai.xi     {
2120*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PCR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,pcrFltId));
2121*53ee8cc1Swenshuai.xi         return;
2122*53ee8cc1Swenshuai.xi     }
2123*53ee8cc1Swenshuai.xi 
2124*53ee8cc1Swenshuai.xi     REG16_MSK_W(&_RegPcrCtrl[pcrFltId].CFG_PCR_00, CFG_PCR_00_REG_PCR_SRC_MASK, src << CFG_PCR_00_REG_PCR_SRC_SHIFT);
2125*53ee8cc1Swenshuai.xi }
2126*53ee8cc1Swenshuai.xi 
HAL_TSP_PcrFlt_SetSrcId(MS_U32 pcrFltId,MS_U32 u32SrcId)2127*53ee8cc1Swenshuai.xi void HAL_TSP_PcrFlt_SetSrcId(MS_U32 pcrFltId, MS_U32 u32SrcId)
2128*53ee8cc1Swenshuai.xi {
2129*53ee8cc1Swenshuai.xi     if(pcrFltId >= TSP_PCRFLT_NUM)
2130*53ee8cc1Swenshuai.xi     {
2131*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PCR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,pcrFltId));
2132*53ee8cc1Swenshuai.xi         return;
2133*53ee8cc1Swenshuai.xi     }
2134*53ee8cc1Swenshuai.xi 
2135*53ee8cc1Swenshuai.xi     REG32_MSK_W(&_RegPcrCtrl[pcrFltId].CFG_PCR_01_02, CFG_PCR_01_02_REG_PIDFLT_PCR_SOURCE_MASK, u32SrcId << CFG_PCR_01_02_REG_PIDFLT_PCR_SOURCE_SHIFT);
2136*53ee8cc1Swenshuai.xi }
2137*53ee8cc1Swenshuai.xi 
HAL_TSP_PcrFlt_GetSrc(MS_U32 pcrFltId,TSP_PCR_SRC * pPcrSrc)2138*53ee8cc1Swenshuai.xi void HAL_TSP_PcrFlt_GetSrc(MS_U32 pcrFltId, TSP_PCR_SRC *pPcrSrc)
2139*53ee8cc1Swenshuai.xi {
2140*53ee8cc1Swenshuai.xi     if(pcrFltId >= TSP_PCRFLT_NUM)
2141*53ee8cc1Swenshuai.xi     {
2142*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PCR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,pcrFltId));
2143*53ee8cc1Swenshuai.xi         *pPcrSrc = E_TSP_PCR_SRC_INVALID;
2144*53ee8cc1Swenshuai.xi         return;
2145*53ee8cc1Swenshuai.xi     }
2146*53ee8cc1Swenshuai.xi 
2147*53ee8cc1Swenshuai.xi     *pPcrSrc = (REG16_R(&_RegPcrCtrl[pcrFltId].CFG_PCR_00) & CFG_PCR_00_REG_PCR_SRC_MASK) >> CFG_PCR_00_REG_PCR_SRC_SHIFT;
2148*53ee8cc1Swenshuai.xi }
2149*53ee8cc1Swenshuai.xi 
HAL_TSP_FltSrc2PCRSrc_Mapping(TSP_PIDFLT_SRC ePidFltSrc)2150*53ee8cc1Swenshuai.xi TSP_PCR_SRC HAL_TSP_FltSrc2PCRSrc_Mapping(TSP_PIDFLT_SRC ePidFltSrc)
2151*53ee8cc1Swenshuai.xi {
2152*53ee8cc1Swenshuai.xi     TSP_PCR_SRC ePcrSrc = E_TSP_PCR_SRC_INVALID;
2153*53ee8cc1Swenshuai.xi     switch(ePidFltSrc)
2154*53ee8cc1Swenshuai.xi     {
2155*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_LIVE0:
2156*53ee8cc1Swenshuai.xi             ePcrSrc = E_TSP_PCR_SRC_TSIF0;
2157*53ee8cc1Swenshuai.xi             break;
2158*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_LIVE1:
2159*53ee8cc1Swenshuai.xi             ePcrSrc = E_TSP_PCR_SRC_TSIF2;
2160*53ee8cc1Swenshuai.xi             break;
2161*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_LIVE2:
2162*53ee8cc1Swenshuai.xi             ePcrSrc = E_TSP_PCR_SRC_TSIF3;
2163*53ee8cc1Swenshuai.xi             break;
2164*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_LIVE3:
2165*53ee8cc1Swenshuai.xi             ePcrSrc = E_TSP_PCR_SRC_TSIF1;
2166*53ee8cc1Swenshuai.xi             break;
2167*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_FILE0:
2168*53ee8cc1Swenshuai.xi             ePcrSrc = E_TSP_PCR_SRC_TSIF1;
2169*53ee8cc1Swenshuai.xi             break;
2170*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_FILE1:
2171*53ee8cc1Swenshuai.xi             ePcrSrc = E_TSP_PCR_SRC_TSIF3;
2172*53ee8cc1Swenshuai.xi             break;
2173*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_FILE2:
2174*53ee8cc1Swenshuai.xi             ePcrSrc = E_TSP_PCR_SRC_TSIF0;
2175*53ee8cc1Swenshuai.xi             break;
2176*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_FILE3:
2177*53ee8cc1Swenshuai.xi             ePcrSrc = E_TSP_PCR_SRC_TSIF2;
2178*53ee8cc1Swenshuai.xi             break;
2179*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_LIVE4:
2180*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_FILE4:
2181*53ee8cc1Swenshuai.xi             ePcrSrc = E_TSP_PCR_SRC_TSIF4;
2182*53ee8cc1Swenshuai.xi             break;
2183*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_LIVE5:
2184*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_FILE5:
2185*53ee8cc1Swenshuai.xi             ePcrSrc = E_TSP_PCR_SRC_TSIF5;
2186*53ee8cc1Swenshuai.xi             break;
2187*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_LIVE6:
2188*53ee8cc1Swenshuai.xi         case E_TSP_PIDFLT_FILE6:
2189*53ee8cc1Swenshuai.xi             ePcrSrc = E_TSP_PCR_SRC_TSIF6;
2190*53ee8cc1Swenshuai.xi             break;
2191*53ee8cc1Swenshuai.xi         default:
2192*53ee8cc1Swenshuai.xi             printf("[TSP_ERR][%s][%d] Wrong Flt Src type!!!\n",__FUNCTION__,__LINE__);
2193*53ee8cc1Swenshuai.xi             break;
2194*53ee8cc1Swenshuai.xi     }
2195*53ee8cc1Swenshuai.xi     return ePcrSrc;
2196*53ee8cc1Swenshuai.xi 
2197*53ee8cc1Swenshuai.xi }
2198*53ee8cc1Swenshuai.xi 
HAL_TSP_PcrFlt_GetPcr(MS_U32 pcrFltId,MS_U32 * pu32Pcr_H,MS_U32 * pu32Pcr)2199*53ee8cc1Swenshuai.xi void HAL_TSP_PcrFlt_GetPcr(MS_U32 pcrFltId, MS_U32 *pu32Pcr_H, MS_U32 *pu32Pcr)
2200*53ee8cc1Swenshuai.xi {
2201*53ee8cc1Swenshuai.xi     if(pcrFltId >= TSP_PCRFLT_NUM)
2202*53ee8cc1Swenshuai.xi     {
2203*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PCR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,pcrFltId));
2204*53ee8cc1Swenshuai.xi         *pu32Pcr_H = 0;
2205*53ee8cc1Swenshuai.xi         *pu32Pcr = 0;
2206*53ee8cc1Swenshuai.xi         return;
2207*53ee8cc1Swenshuai.xi     }
2208*53ee8cc1Swenshuai.xi 
2209*53ee8cc1Swenshuai.xi     REG16_SET(&_RegPcrCtrl[pcrFltId].CFG_PCR_00, CFG_PCR_00_REG_PCR_READ);
2210*53ee8cc1Swenshuai.xi     *pu32Pcr = REG32_R(&_RegPcrCtrl[pcrFltId].CFG_PCR_03_04);
2211*53ee8cc1Swenshuai.xi     *pu32Pcr_H = REG16_R(&_RegPcrCtrl[pcrFltId].CFG_PCR_05) & CFG_PCR_05_REG_PCR_VALID_BIT32_MASK;
2212*53ee8cc1Swenshuai.xi     REG16_CLR(&_RegPcrCtrl[pcrFltId].CFG_PCR_00, CFG_PCR_00_REG_PCR_READ);
2213*53ee8cc1Swenshuai.xi }
2214*53ee8cc1Swenshuai.xi 
HAL_TSP_PcrFlt_Reset(MS_U32 pcrFltId)2215*53ee8cc1Swenshuai.xi void HAL_TSP_PcrFlt_Reset(MS_U32 pcrFltId)
2216*53ee8cc1Swenshuai.xi {
2217*53ee8cc1Swenshuai.xi     if(pcrFltId >= TSP_PCRFLT_NUM)
2218*53ee8cc1Swenshuai.xi     {
2219*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PCR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,pcrFltId));
2220*53ee8cc1Swenshuai.xi         return;
2221*53ee8cc1Swenshuai.xi     }
2222*53ee8cc1Swenshuai.xi 
2223*53ee8cc1Swenshuai.xi     REG16_CLR(&_RegPcrCtrl[pcrFltId].CFG_PCR_00, CFG_PCR_00_REG_PCR_RESET);
2224*53ee8cc1Swenshuai.xi     REG16_SET(&_RegPcrCtrl[pcrFltId].CFG_PCR_00, CFG_PCR_00_REG_PCR_RESET);
2225*53ee8cc1Swenshuai.xi }
2226*53ee8cc1Swenshuai.xi 
HAL_TSP_PcrFlt_ClearInt(MS_U32 pcrFltId)2227*53ee8cc1Swenshuai.xi void HAL_TSP_PcrFlt_ClearInt(MS_U32 pcrFltId)
2228*53ee8cc1Swenshuai.xi {
2229*53ee8cc1Swenshuai.xi     switch(pcrFltId)
2230*53ee8cc1Swenshuai.xi     {
2231*53ee8cc1Swenshuai.xi         case 0:
2232*53ee8cc1Swenshuai.xi             REG16_SET(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR0_UPDATE_END);
2233*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR0_UPDATE_END);
2234*53ee8cc1Swenshuai.xi             break;
2235*53ee8cc1Swenshuai.xi         case 1:
2236*53ee8cc1Swenshuai.xi             REG16_SET(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR1_UPDATE_END);
2237*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR1_UPDATE_END);
2238*53ee8cc1Swenshuai.xi             break;
2239*53ee8cc1Swenshuai.xi         case 2:
2240*53ee8cc1Swenshuai.xi             REG16_SET(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR2_UPDATE_END);
2241*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR2_UPDATE_END);
2242*53ee8cc1Swenshuai.xi             break;
2243*53ee8cc1Swenshuai.xi         case 3:
2244*53ee8cc1Swenshuai.xi             REG16_SET(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR3_UPDATE_END);
2245*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR3_UPDATE_END);
2246*53ee8cc1Swenshuai.xi             break;
2247*53ee8cc1Swenshuai.xi         case 4:
2248*53ee8cc1Swenshuai.xi             REG16_SET(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR4_UPDATE_END);
2249*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR4_UPDATE_END);
2250*53ee8cc1Swenshuai.xi             break;
2251*53ee8cc1Swenshuai.xi         case 5:
2252*53ee8cc1Swenshuai.xi             REG16_SET(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR5_UPDATE_END);
2253*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR5_UPDATE_END);
2254*53ee8cc1Swenshuai.xi             break;
2255*53ee8cc1Swenshuai.xi         case 6:
2256*53ee8cc1Swenshuai.xi             REG16_SET(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR6_UPDATE_END);
2257*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR6_UPDATE_END);
2258*53ee8cc1Swenshuai.xi             break;
2259*53ee8cc1Swenshuai.xi         case 7:
2260*53ee8cc1Swenshuai.xi             REG16_SET(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR7_UPDATE_END);
2261*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegCtrl->HwInt3_Stat,TSP_HWINT3_PCR7_UPDATE_END);
2262*53ee8cc1Swenshuai.xi             break;
2263*53ee8cc1Swenshuai.xi         default:
2264*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PCR Eng ID : 0x%x !!\n",__FUNCTION__,__LINE__,pcrFltId));
2265*53ee8cc1Swenshuai.xi             break;
2266*53ee8cc1Swenshuai.xi     }
2267*53ee8cc1Swenshuai.xi }
2268*53ee8cc1Swenshuai.xi 
HAL_TSP_PcrFlt_GetIntMask(MS_U32 pcrFltId)2269*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_PcrFlt_GetIntMask(MS_U32 pcrFltId)
2270*53ee8cc1Swenshuai.xi {
2271*53ee8cc1Swenshuai.xi     if(pcrFltId >= TSP_PCRFLT_NUM)
2272*53ee8cc1Swenshuai.xi     {
2273*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PCR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,pcrFltId));
2274*53ee8cc1Swenshuai.xi         return 0;
2275*53ee8cc1Swenshuai.xi     }
2276*53ee8cc1Swenshuai.xi 
2277*53ee8cc1Swenshuai.xi     return (TSP_HWINT3_PCR0_UPDATE_END_EN << (pcrFltId + 16));
2278*53ee8cc1Swenshuai.xi }
2279*53ee8cc1Swenshuai.xi 
HAL_TSP_STC_Init(void)2280*53ee8cc1Swenshuai.xi void HAL_TSP_STC_Init(void)
2281*53ee8cc1Swenshuai.xi {
2282*53ee8cc1Swenshuai.xi     /////////////Set STC control by HK////////////////
2283*53ee8cc1Swenshuai.xi     // select synth from chip top : bit 1 -> 0 -> controlled by HK
2284*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~REG_CLKGEN0_STC_CW_SEL;
2285*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~REG_CLKGEN0_STC1_CW_SEL;
2286*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) &= ~REG_CLKGEN2_STC2_CW_SEL;
2287*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) &= ~REG_CLKGEN2_STC3_CW_SEL;
2288*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) &= ~REG_CLKGEN1_STC4_CW_SEL;
2289*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) &= ~REG_CLKGEN1_STC5_CW_SEL;
2290*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) &= ~REG_CLKGEN1_STC6_CW_SEL;
2291*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) &= ~REG_CLKGEN1_STC7_CW_SEL;
2292*53ee8cc1Swenshuai.xi 
2293*53ee8cc1Swenshuai.xi     // set HK STC synth CW
2294*53ee8cc1Swenshuai.xi      //if CLK_MPLL_SYN is 432MHz, set 0x28000000;if CLK_MPLL_SYN is 216MHz, set 0x14000000
2295*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC_CW_L)  = 0x0000;
2296*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC_CW_H)  = 0x2800;
2297*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC1_CW_L) = 0x0000;
2298*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC1_CW_H) = 0x2800;
2299*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC2_CW_L) = 0x0000;
2300*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC2_CW_H) = 0x2800;
2301*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC3_CW_L) = 0x0000;
2302*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC3_CW_H) = 0x2800;
2303*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_STC4_CW_L) = 0x0000;
2304*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_STC4_CW_H) = 0x2800;
2305*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_STC5_CW_L) = 0x0000;
2306*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_STC5_CW_H) = 0x2800;
2307*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_STC6_CW_L) = 0x0000;
2308*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_STC6_CW_H) = 0x2800;
2309*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_STC7_CW_L) = 0x0000;
2310*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_STC7_CW_H) = 0x2800;
2311*53ee8cc1Swenshuai.xi 
2312*53ee8cc1Swenshuai.xi     // set STC synth
2313*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~(REG_CLKGEN0_STC_CW_EN);
2314*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) |= REG_CLKGEN0_STC_CW_EN;
2315*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~(REG_CLKGEN0_STC_CW_EN);
2316*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~(REG_CLKGEN0_STC1_CW_EN);
2317*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) |= REG_CLKGEN0_STC1_CW_EN;
2318*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~(REG_CLKGEN0_STC1_CW_EN);
2319*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) &= ~(REG_CLKGEN2_STC2_CW_EN);
2320*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) |= REG_CLKGEN2_STC2_CW_EN;
2321*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) &= ~(REG_CLKGEN2_STC2_CW_EN);
2322*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) &= ~(REG_CLKGEN2_STC3_CW_EN);
2323*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) |= REG_CLKGEN2_STC3_CW_EN;
2324*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) &= ~(REG_CLKGEN2_STC3_CW_EN);
2325*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) &= ~(REG_CLKGEN1_STC4_CW_EN);
2326*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) |= REG_CLKGEN1_STC4_CW_EN;
2327*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) &= ~(REG_CLKGEN1_STC4_CW_EN);
2328*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) &= ~(REG_CLKGEN1_STC5_CW_EN);
2329*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) |= REG_CLKGEN1_STC5_CW_EN;
2330*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) &= ~(REG_CLKGEN1_STC5_CW_EN);
2331*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) &= ~(REG_CLKGEN1_STC6_CW_EN);
2332*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) |= REG_CLKGEN1_STC6_CW_EN;
2333*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) &= ~(REG_CLKGEN1_STC6_CW_EN);
2334*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) &= ~(REG_CLKGEN1_STC7_CW_EN);
2335*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) |= REG_CLKGEN1_STC7_CW_EN;
2336*53ee8cc1Swenshuai.xi     TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) &= ~(REG_CLKGEN1_STC7_CW_EN);
2337*53ee8cc1Swenshuai.xi 
2338*53ee8cc1Swenshuai.xi #if 0  // we don't use TSP CPU to control STC anymmore, so we don't have to do the following
2339*53ee8cc1Swenshuai.xi     /////////////Set STC control by TSP////////////////
2340*53ee8cc1Swenshuai.xi     // select synth from TSP      : bit 1 -> 1 -> controlled by TSP
2341*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) |= REG_CLKGEN0_STC_CW_SEL;
2342*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) |= REG_CLKGEN0_STC1_CW_SEL;
2343*53ee8cc1Swenshuai.xi 
2344*53ee8cc1Swenshuai.xi     // set TSP STC synth CW
2345*53ee8cc1Swenshuai.xi     //if CLK_MPLL_SYN is 432MHz, set 0x28000000;if CLK_MPLL_SYN is 216MHz, set 0x14000000
2346*53ee8cc1Swenshuai.xi     TSP32_IdrW((TSP32 *)(0x0021024c<<1), 0x28000000);
2347*53ee8cc1Swenshuai.xi     TSP32_IdrW((TSP32 *)(0x00210280<<1), 0x28000000); //STC1
2348*53ee8cc1Swenshuai.xi 
2349*53ee8cc1Swenshuai.xi     // t2 , t3 had no 0x0021025c, it was add after t4, eanble synthesizer
2350*53ee8cc1Swenshuai.xi     TSP32_IdrW((TSP32 *)(0x0021025c<<1), TSP32_IdrR((TSP32 *)(0x0021025c<<1))|0x01);
2351*53ee8cc1Swenshuai.xi     TSP32_IdrW((TSP32 *)(0x0021025c<<1), TSP32_IdrR((TSP32 *)(0x0021025c<<1))& ~0x01);
2352*53ee8cc1Swenshuai.xi     TSP32_IdrW((TSP32 *)(0x0021025c<<1), TSP32_IdrR((TSP32 *)(0x0021025c<<1))|0x02); //STC1
2353*53ee8cc1Swenshuai.xi     TSP32_IdrW((TSP32 *)(0x0021025c<<1), TSP32_IdrR((TSP32 *)(0x0021025c<<1))& ~0x02);
2354*53ee8cc1Swenshuai.xi #endif
2355*53ee8cc1Swenshuai.xi }
2356*53ee8cc1Swenshuai.xi 
HAL_TSP_GetSTCSynth(MS_U32 Eng,MS_U32 * u32Sync)2357*53ee8cc1Swenshuai.xi void HAL_TSP_GetSTCSynth(MS_U32 Eng, MS_U32* u32Sync)
2358*53ee8cc1Swenshuai.xi {
2359*53ee8cc1Swenshuai.xi     switch (Eng)
2360*53ee8cc1Swenshuai.xi     {
2361*53ee8cc1Swenshuai.xi         case 0:
2362*53ee8cc1Swenshuai.xi             // get HK STC synth CW
2363*53ee8cc1Swenshuai.xi             *u32Sync  = TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC_CW_L);
2364*53ee8cc1Swenshuai.xi             *u32Sync |= TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC_CW_H) << 16 ;
2365*53ee8cc1Swenshuai.xi             break;
2366*53ee8cc1Swenshuai.xi         case 1:
2367*53ee8cc1Swenshuai.xi             // get HK STC synth CW
2368*53ee8cc1Swenshuai.xi             *u32Sync  = TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC1_CW_L);
2369*53ee8cc1Swenshuai.xi             *u32Sync |= TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC1_CW_H) << 16 ;
2370*53ee8cc1Swenshuai.xi             break;
2371*53ee8cc1Swenshuai.xi         case 2:
2372*53ee8cc1Swenshuai.xi             // get HK STC synth CW
2373*53ee8cc1Swenshuai.xi             *u32Sync  = TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC2_CW_L);
2374*53ee8cc1Swenshuai.xi             *u32Sync |= TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC2_CW_H) << 16 ;
2375*53ee8cc1Swenshuai.xi             break;
2376*53ee8cc1Swenshuai.xi         case 3:
2377*53ee8cc1Swenshuai.xi             // get HK STC synth CW
2378*53ee8cc1Swenshuai.xi             *u32Sync  = TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC3_CW_L);
2379*53ee8cc1Swenshuai.xi             *u32Sync |= TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC3_CW_H) << 16 ;
2380*53ee8cc1Swenshuai.xi             break;
2381*53ee8cc1Swenshuai.xi         case 4:
2382*53ee8cc1Swenshuai.xi             // get HK STC synth CW
2383*53ee8cc1Swenshuai.xi             *u32Sync  = TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_STC4_CW_L);
2384*53ee8cc1Swenshuai.xi             *u32Sync |= TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_STC4_CW_H) << 16 ;
2385*53ee8cc1Swenshuai.xi             break;
2386*53ee8cc1Swenshuai.xi         case 5:
2387*53ee8cc1Swenshuai.xi             // get HK STC synth CW
2388*53ee8cc1Swenshuai.xi             *u32Sync  = TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_STC5_CW_L);
2389*53ee8cc1Swenshuai.xi             *u32Sync |= TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_STC5_CW_H) << 16 ;
2390*53ee8cc1Swenshuai.xi             break;
2391*53ee8cc1Swenshuai.xi         case 6:
2392*53ee8cc1Swenshuai.xi             // get HK STC synth CW
2393*53ee8cc1Swenshuai.xi             *u32Sync  = TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_STC6_CW_L);
2394*53ee8cc1Swenshuai.xi             *u32Sync |= TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_STC6_CW_H) << 16 ;
2395*53ee8cc1Swenshuai.xi             break;
2396*53ee8cc1Swenshuai.xi         case 7:
2397*53ee8cc1Swenshuai.xi             // get HK STC synth CW
2398*53ee8cc1Swenshuai.xi             *u32Sync  = TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_STC7_CW_L);
2399*53ee8cc1Swenshuai.xi             *u32Sync |= TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_STC7_CW_H) << 16 ;
2400*53ee8cc1Swenshuai.xi             break;
2401*53ee8cc1Swenshuai.xi     }
2402*53ee8cc1Swenshuai.xi }
2403*53ee8cc1Swenshuai.xi 
HAL_TSP_SetSTCSynth(MS_U32 Eng,MS_U32 u32Sync)2404*53ee8cc1Swenshuai.xi void HAL_TSP_SetSTCSynth(MS_U32 Eng, MS_U32 u32Sync)
2405*53ee8cc1Swenshuai.xi {
2406*53ee8cc1Swenshuai.xi     switch (Eng)
2407*53ee8cc1Swenshuai.xi     {
2408*53ee8cc1Swenshuai.xi         case 0:
2409*53ee8cc1Swenshuai.xi             //set STC controller : HK or TSP CPU
2410*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~REG_CLKGEN0_STC_CW_SEL;
2411*53ee8cc1Swenshuai.xi 
2412*53ee8cc1Swenshuai.xi             // set HK STC synth CW
2413*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC_CW_L) = u32Sync & 0xFFFF;
2414*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC_CW_H) = u32Sync >> 16;
2415*53ee8cc1Swenshuai.xi 
2416*53ee8cc1Swenshuai.xi             // set STC synth : toggle update bit
2417*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~(REG_CLKGEN0_STC_CW_EN);
2418*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) |=   REG_CLKGEN0_STC_CW_EN;
2419*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~(REG_CLKGEN0_STC_CW_EN);
2420*53ee8cc1Swenshuai.xi             break;
2421*53ee8cc1Swenshuai.xi         case 1:
2422*53ee8cc1Swenshuai.xi             //set STC controller : HK or TSP CPU
2423*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~REG_CLKGEN0_STC1_CW_SEL;
2424*53ee8cc1Swenshuai.xi 
2425*53ee8cc1Swenshuai.xi             // set HK STC synth CW
2426*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC1_CW_L) = u32Sync & 0xFFFF;
2427*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC1_CW_H) = u32Sync >> 16;
2428*53ee8cc1Swenshuai.xi 
2429*53ee8cc1Swenshuai.xi             // set STC synth : toggle update bit
2430*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~(REG_CLKGEN0_STC1_CW_EN);
2431*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) |=   REG_CLKGEN0_STC1_CW_EN;
2432*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~(REG_CLKGEN0_STC1_CW_EN);
2433*53ee8cc1Swenshuai.xi             break;
2434*53ee8cc1Swenshuai.xi         case 2:
2435*53ee8cc1Swenshuai.xi             //set STC controller : HK or TSP CPU
2436*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) &= ~REG_CLKGEN2_STC2_CW_SEL;
2437*53ee8cc1Swenshuai.xi 
2438*53ee8cc1Swenshuai.xi             // set HK STC synth CW
2439*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC2_CW_L) = u32Sync & 0xFFFF;
2440*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC2_CW_H) = u32Sync >> 16;
2441*53ee8cc1Swenshuai.xi 
2442*53ee8cc1Swenshuai.xi             // set STC synth : toggle update bit
2443*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) &= ~(REG_CLKGEN2_STC2_CW_EN);
2444*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) |=   REG_CLKGEN2_STC2_CW_EN;
2445*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) &= ~(REG_CLKGEN2_STC2_CW_EN);
2446*53ee8cc1Swenshuai.xi             break;
2447*53ee8cc1Swenshuai.xi         case 3:
2448*53ee8cc1Swenshuai.xi             //set STC controller : HK or TSP CPU
2449*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) &= ~REG_CLKGEN2_STC3_CW_SEL;
2450*53ee8cc1Swenshuai.xi 
2451*53ee8cc1Swenshuai.xi             // set HK STC synth CW
2452*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC3_CW_L) = u32Sync & 0xFFFF;
2453*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC3_CW_H) = u32Sync >> 16;
2454*53ee8cc1Swenshuai.xi 
2455*53ee8cc1Swenshuai.xi             // set STC synth : toggle update bit
2456*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) &= ~(REG_CLKGEN2_STC3_CW_EN);
2457*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) |=   REG_CLKGEN2_STC3_CW_EN;
2458*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYTNTH) &= ~(REG_CLKGEN2_STC3_CW_EN);
2459*53ee8cc1Swenshuai.xi             break;
2460*53ee8cc1Swenshuai.xi         case 4:
2461*53ee8cc1Swenshuai.xi             //set STC controller : HK or TSP CPU
2462*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) &= ~REG_CLKGEN1_STC4_CW_SEL;
2463*53ee8cc1Swenshuai.xi 
2464*53ee8cc1Swenshuai.xi             // set HK STC synth CW
2465*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_STC4_CW_L) = u32Sync & 0xFFFF;
2466*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_STC4_CW_H) = u32Sync >> 16;
2467*53ee8cc1Swenshuai.xi 
2468*53ee8cc1Swenshuai.xi             // set STC synth : toggle update bit
2469*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) &= ~(REG_CLKGEN1_STC4_CW_EN);
2470*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) |=   REG_CLKGEN1_STC4_CW_EN;
2471*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) &= ~(REG_CLKGEN1_STC4_CW_EN);
2472*53ee8cc1Swenshuai.xi             break;
2473*53ee8cc1Swenshuai.xi         case 5:
2474*53ee8cc1Swenshuai.xi             //set STC controller : HK or TSP CPU
2475*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) &= ~REG_CLKGEN1_STC5_CW_SEL;
2476*53ee8cc1Swenshuai.xi 
2477*53ee8cc1Swenshuai.xi             // set HK STC synth CW
2478*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_STC5_CW_L) = u32Sync & 0xFFFF;
2479*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_STC5_CW_H) = u32Sync >> 16;
2480*53ee8cc1Swenshuai.xi 
2481*53ee8cc1Swenshuai.xi             // set STC synth : toggle update bit
2482*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) &= ~(REG_CLKGEN1_STC5_CW_EN);
2483*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) |=   REG_CLKGEN1_STC5_CW_EN;
2484*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC0_SYTNTH) &= ~(REG_CLKGEN1_STC5_CW_EN);
2485*53ee8cc1Swenshuai.xi             break;
2486*53ee8cc1Swenshuai.xi         case 6:
2487*53ee8cc1Swenshuai.xi             //set STC controller : HK or TSP CPU
2488*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) &= ~REG_CLKGEN1_STC6_CW_SEL;
2489*53ee8cc1Swenshuai.xi 
2490*53ee8cc1Swenshuai.xi             // set HK STC synth CW
2491*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_STC6_CW_L) = u32Sync & 0xFFFF;
2492*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_STC6_CW_H) = u32Sync >> 16;
2493*53ee8cc1Swenshuai.xi 
2494*53ee8cc1Swenshuai.xi             // set STC synth : toggle update bit
2495*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) &= ~(REG_CLKGEN1_STC6_CW_EN);
2496*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) |=   REG_CLKGEN1_STC6_CW_EN;
2497*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) &= ~(REG_CLKGEN1_STC6_CW_EN);
2498*53ee8cc1Swenshuai.xi             break;
2499*53ee8cc1Swenshuai.xi         case 7:
2500*53ee8cc1Swenshuai.xi             //set STC controller : HK or TSP CPU
2501*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) &= ~REG_CLKGEN1_STC7_CW_SEL;
2502*53ee8cc1Swenshuai.xi 
2503*53ee8cc1Swenshuai.xi             // set HK STC synth CW
2504*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_STC7_CW_L) = u32Sync & 0xFFFF;
2505*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_STC7_CW_H) = u32Sync >> 16;
2506*53ee8cc1Swenshuai.xi 
2507*53ee8cc1Swenshuai.xi             // set STC synth : toggle update bit
2508*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) &= ~(REG_CLKGEN1_STC7_CW_EN);
2509*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) |=   REG_CLKGEN1_STC7_CW_EN;
2510*53ee8cc1Swenshuai.xi             TSP_CLKGEN1_REG(REG_CLKGEN1_DC1_SYTNTH) &= ~(REG_CLKGEN1_STC7_CW_EN);
2511*53ee8cc1Swenshuai.xi             break;
2512*53ee8cc1Swenshuai.xi     }
2513*53ee8cc1Swenshuai.xi }
2514*53ee8cc1Swenshuai.xi 
HAL_TSP_STC64_Mode_En(MS_BOOL bEnable)2515*53ee8cc1Swenshuai.xi void HAL_TSP_STC64_Mode_En(MS_BOOL bEnable)
2516*53ee8cc1Swenshuai.xi {
2517*53ee8cc1Swenshuai.xi     if (bEnable)
2518*53ee8cc1Swenshuai.xi     {
2519*53ee8cc1Swenshuai.xi         REG16_SET(&_RegCtrl->TSP_Cfg5, TSP_SYSTIME_MODE);
2520*53ee8cc1Swenshuai.xi     }
2521*53ee8cc1Swenshuai.xi     else
2522*53ee8cc1Swenshuai.xi     {
2523*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegCtrl->TSP_Cfg5, TSP_SYSTIME_MODE);
2524*53ee8cc1Swenshuai.xi     }
2525*53ee8cc1Swenshuai.xi }
2526*53ee8cc1Swenshuai.xi 
HAL_TSP_STC64_Set(MS_U32 Eng,MS_U32 stcH,MS_U32 stcL)2527*53ee8cc1Swenshuai.xi void HAL_TSP_STC64_Set(MS_U32 Eng, MS_U32 stcH, MS_U32 stcL)
2528*53ee8cc1Swenshuai.xi {
2529*53ee8cc1Swenshuai.xi     switch (Eng)
2530*53ee8cc1Swenshuai.xi     {
2531*53ee8cc1Swenshuai.xi         case 0:
2532*53ee8cc1Swenshuai.xi             REG32_W(&_RegCtrl->Pcr_L, stcL);
2533*53ee8cc1Swenshuai.xi             REG32_W(&_RegCtrl->Pcr_H, stcH);
2534*53ee8cc1Swenshuai.xi             break;
2535*53ee8cc1Swenshuai.xi         case 1:
2536*53ee8cc1Swenshuai.xi             REG32_W(&_RegCtrl->PCR64_2_L, stcL);
2537*53ee8cc1Swenshuai.xi             REG32_W(&_RegCtrl->PCR64_2_H, stcH);
2538*53ee8cc1Swenshuai.xi             break;
2539*53ee8cc1Swenshuai.xi         default:
2540*53ee8cc1Swenshuai.xi             if(Eng >= STC_ENG_NUM)
2541*53ee8cc1Swenshuai.xi             {
2542*53ee8cc1Swenshuai.xi                 HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong STC Engine : 0x%x !!\n",__FUNCTION__,__LINE__,Eng));
2543*53ee8cc1Swenshuai.xi                 return;
2544*53ee8cc1Swenshuai.xi             }
2545*53ee8cc1Swenshuai.xi 
2546*53ee8cc1Swenshuai.xi             MS_U32 u32SetBitMask = CFG_STC_19_1A_REG_SET_BASE_STC << ((Eng - 2) << 2);
2547*53ee8cc1Swenshuai.xi 
2548*53ee8cc1Swenshuai.xi             REG32_W(&_RegStcCtrl->CFG_STC_00_17[Eng - 2].STC_L, stcL);
2549*53ee8cc1Swenshuai.xi             REG32_W(&_RegStcCtrl->CFG_STC_00_17[Eng - 2].STC_H, stcH);
2550*53ee8cc1Swenshuai.xi             REG32_SET(&_RegStcCtrl->CFG_STC_19_1A, u32SetBitMask);
2551*53ee8cc1Swenshuai.xi             REG32_CLR(&_RegStcCtrl->CFG_STC_19_1A, u32SetBitMask);
2552*53ee8cc1Swenshuai.xi             break;
2553*53ee8cc1Swenshuai.xi     }
2554*53ee8cc1Swenshuai.xi }
2555*53ee8cc1Swenshuai.xi 
HAL_TSP_STC64_Get(MS_U32 Eng,MS_U32 * pStcH,MS_U32 * pStcL)2556*53ee8cc1Swenshuai.xi void HAL_TSP_STC64_Get(MS_U32 Eng, MS_U32* pStcH, MS_U32* pStcL)
2557*53ee8cc1Swenshuai.xi {
2558*53ee8cc1Swenshuai.xi     switch (Eng)
2559*53ee8cc1Swenshuai.xi     {
2560*53ee8cc1Swenshuai.xi         case 0:
2561*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegCtrl->reg15b8, TSP_cnt_33b_ld);
2562*53ee8cc1Swenshuai.xi             *pStcH = REG32_R(&_RegCtrl->Pcr_H);
2563*53ee8cc1Swenshuai.xi             *pStcL = REG32_R(&_RegCtrl->Pcr_L);
2564*53ee8cc1Swenshuai.xi             REG16_SET(&_RegCtrl->reg15b8, TSP_cnt_33b_ld);
2565*53ee8cc1Swenshuai.xi             break;
2566*53ee8cc1Swenshuai.xi         case 1:
2567*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegCtrl->reg15b8, TSP_64bit_PCR2_ld);
2568*53ee8cc1Swenshuai.xi             *pStcH = REG32_R(&_RegCtrl->PCR64_2_H);
2569*53ee8cc1Swenshuai.xi             *pStcL = REG32_R(&_RegCtrl->PCR64_2_L);
2570*53ee8cc1Swenshuai.xi             REG16_SET(&_RegCtrl->reg15b8, TSP_64bit_PCR2_ld);
2571*53ee8cc1Swenshuai.xi             break;
2572*53ee8cc1Swenshuai.xi         default:
2573*53ee8cc1Swenshuai.xi             if(Eng >= STC_ENG_NUM)
2574*53ee8cc1Swenshuai.xi             {
2575*53ee8cc1Swenshuai.xi                 HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong STC Engine : 0x%x !!\n",__FUNCTION__,__LINE__,Eng));
2576*53ee8cc1Swenshuai.xi                 *pStcH = 0;
2577*53ee8cc1Swenshuai.xi                 *pStcL = 0;
2578*53ee8cc1Swenshuai.xi                 return;
2579*53ee8cc1Swenshuai.xi             }
2580*53ee8cc1Swenshuai.xi 
2581*53ee8cc1Swenshuai.xi             MS_U32 u32LdBitMask = CFG_STC_19_1A_REG_STC_LD << ((Eng - 2) << 2);
2582*53ee8cc1Swenshuai.xi 
2583*53ee8cc1Swenshuai.xi             REG32_CLR(&_RegStcCtrl->CFG_STC_19_1A, u32LdBitMask);
2584*53ee8cc1Swenshuai.xi             *pStcH = REG32_R(&_RegStcCtrl->CFG_STC_00_17[Eng - 2].STC_H);
2585*53ee8cc1Swenshuai.xi             *pStcL = REG32_R(&_RegStcCtrl->CFG_STC_00_17[Eng - 2].STC_L);
2586*53ee8cc1Swenshuai.xi             REG32_SET(&_RegStcCtrl->CFG_STC_19_1A, u32LdBitMask);
2587*53ee8cc1Swenshuai.xi             break;
2588*53ee8cc1Swenshuai.xi     }
2589*53ee8cc1Swenshuai.xi }
2590*53ee8cc1Swenshuai.xi 
HAL_TSP_STC33_CmdQSet(MS_U32 stcH,MS_U32 stcL)2591*53ee8cc1Swenshuai.xi void HAL_TSP_STC33_CmdQSet(MS_U32 stcH, MS_U32 stcL)
2592*53ee8cc1Swenshuai.xi {
2593*53ee8cc1Swenshuai.xi     // @TODO ask designer for the difference between 64bit STC and 33 Bit STC
2594*53ee8cc1Swenshuai.xi     // and it's hw limit (like: cmdQ delay)
2595*53ee8cc1Swenshuai.xi     REG16_W(&_RegCtrl->Pcr_H_CmdQ, stcH & TSP_REG_PCR_CMDQ_H);
2596*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->Pcr_L_CmdQ, stcL);
2597*53ee8cc1Swenshuai.xi }
2598*53ee8cc1Swenshuai.xi 
HAL_TSP_STC33_CmdQGet(MS_U32 * pStcH,MS_U32 * pStcL)2599*53ee8cc1Swenshuai.xi void HAL_TSP_STC33_CmdQGet(MS_U32* pStcH, MS_U32* pStcL)
2600*53ee8cc1Swenshuai.xi {
2601*53ee8cc1Swenshuai.xi     REG16_CLR(&_RegCtrl->reg15b8, TSP_cnt_33b_ld);
2602*53ee8cc1Swenshuai.xi     *pStcH = REG16_R(&_RegCtrl->Pcr_H_CmdQ) & TSP_REG_PCR_CMDQ_H;
2603*53ee8cc1Swenshuai.xi     *pStcL = REG32_R(&_RegCtrl->Pcr_L_CmdQ);
2604*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->reg15b8, TSP_cnt_33b_ld);
2605*53ee8cc1Swenshuai.xi }
2606*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_SetSrc(TSP_DST_SEQ eFltType,MS_U32 pktDmxId)2607*53ee8cc1Swenshuai.xi void HAL_TSP_FIFO_SetSrc(TSP_DST_SEQ eFltType, MS_U32 pktDmxId)
2608*53ee8cc1Swenshuai.xi {
2609*53ee8cc1Swenshuai.xi     if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
2610*53ee8cc1Swenshuai.xi     {
2611*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
2612*53ee8cc1Swenshuai.xi 
2613*53ee8cc1Swenshuai.xi         REG16_MSK_W(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02, CFG_AV_02_REG_INPUT_SRC_MASK, ((MS_U16)pktDmxId) << CFG_AV_02_REG_INPUT_SRC_SHIFT);
2614*53ee8cc1Swenshuai.xi     }
2615*53ee8cc1Swenshuai.xi     else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
2616*53ee8cc1Swenshuai.xi     {
2617*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
2618*53ee8cc1Swenshuai.xi 
2619*53ee8cc1Swenshuai.xi         REG16_MSK_W(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02, CFG_AV_02_REG_INPUT_SRC_MASK, ((MS_U16)pktDmxId) << CFG_AV_02_REG_INPUT_SRC_SHIFT);
2620*53ee8cc1Swenshuai.xi     }
2621*53ee8cc1Swenshuai.xi     else
2622*53ee8cc1Swenshuai.xi     {
2623*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
2624*53ee8cc1Swenshuai.xi     }
2625*53ee8cc1Swenshuai.xi }
2626*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_GetSrc(TSP_DST_SEQ eFltType,TSP_SRC_SEQ * pktDmxId)2627*53ee8cc1Swenshuai.xi void HAL_TSP_FIFO_GetSrc(TSP_DST_SEQ eFltType, TSP_SRC_SEQ *pktDmxId)
2628*53ee8cc1Swenshuai.xi {
2629*53ee8cc1Swenshuai.xi     if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
2630*53ee8cc1Swenshuai.xi     {
2631*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
2632*53ee8cc1Swenshuai.xi 
2633*53ee8cc1Swenshuai.xi         *pktDmxId = ((REG16_R(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02)) & CFG_AV_02_REG_INPUT_SRC_MASK) >> CFG_AV_02_REG_INPUT_SRC_SHIFT;
2634*53ee8cc1Swenshuai.xi     }
2635*53ee8cc1Swenshuai.xi     else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
2636*53ee8cc1Swenshuai.xi     {
2637*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
2638*53ee8cc1Swenshuai.xi 
2639*53ee8cc1Swenshuai.xi         *pktDmxId = ((REG16_R(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02)) & CFG_AV_02_REG_INPUT_SRC_MASK) >> CFG_AV_02_REG_INPUT_SRC_SHIFT;
2640*53ee8cc1Swenshuai.xi     }
2641*53ee8cc1Swenshuai.xi     else
2642*53ee8cc1Swenshuai.xi     {
2643*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
2644*53ee8cc1Swenshuai.xi         *pktDmxId = E_TSP_SRC_INVALID;
2645*53ee8cc1Swenshuai.xi     }
2646*53ee8cc1Swenshuai.xi }
2647*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_BD_AUD_En(TSP_DST_SEQ eAudioType,MS_BOOL bMainChEn,MS_BOOL bEn)2648*53ee8cc1Swenshuai.xi void HAL_TSP_FIFO_BD_AUD_En(TSP_DST_SEQ eAudioType, MS_BOOL bMainChEn, MS_BOOL bEn)
2649*53ee8cc1Swenshuai.xi {
2650*53ee8cc1Swenshuai.xi     if((eAudioType >= E_TSP_DST_FIFO_AUDIO) && (eAudioType <= E_TSP_DST_FIFO_AUDIO6))
2651*53ee8cc1Swenshuai.xi     {
2652*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eAudioType - E_TSP_DST_FIFO_AUDIO;
2653*53ee8cc1Swenshuai.xi 
2654*53ee8cc1Swenshuai.xi         if(bEn)
2655*53ee8cc1Swenshuai.xi         {
2656*53ee8cc1Swenshuai.xi             REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_REG_BD_AUD_EN);
2657*53ee8cc1Swenshuai.xi 
2658*53ee8cc1Swenshuai.xi             if(bMainChEn)
2659*53ee8cc1Swenshuai.xi             {
2660*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_REG_MAIN_CHANNEL);
2661*53ee8cc1Swenshuai.xi             }
2662*53ee8cc1Swenshuai.xi             else
2663*53ee8cc1Swenshuai.xi             {
2664*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_REG_MAIN_CHANNEL);
2665*53ee8cc1Swenshuai.xi             }
2666*53ee8cc1Swenshuai.xi         }
2667*53ee8cc1Swenshuai.xi         else
2668*53ee8cc1Swenshuai.xi         {
2669*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_REG_BD_AUD_EN);
2670*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_REG_MAIN_CHANNEL);
2671*53ee8cc1Swenshuai.xi         }
2672*53ee8cc1Swenshuai.xi     }
2673*53ee8cc1Swenshuai.xi     else
2674*53ee8cc1Swenshuai.xi     {
2675*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
2676*53ee8cc1Swenshuai.xi     }
2677*53ee8cc1Swenshuai.xi }
2678*53ee8cc1Swenshuai.xi 
HAL_TSP_BD_AUD_En(MS_U32 u32BD,MS_BOOL bEn)2679*53ee8cc1Swenshuai.xi void HAL_TSP_BD_AUD_En(MS_U32 u32BD, MS_BOOL bEn)
2680*53ee8cc1Swenshuai.xi {
2681*53ee8cc1Swenshuai.xi     if(bEn)
2682*53ee8cc1Swenshuai.xi     {
2683*53ee8cc1Swenshuai.xi         switch(u32BD)
2684*53ee8cc1Swenshuai.xi         {
2685*53ee8cc1Swenshuai.xi             case 0:
2686*53ee8cc1Swenshuai.xi                 HAL_TSP_FIFO_BD_AUD_En(E_TSP_DST_FIFO_AUDIO, TRUE, TRUE);
2687*53ee8cc1Swenshuai.xi                 HAL_TSP_FIFO_BD_AUD_En(E_TSP_DST_FIFO_AUDIO2, FALSE, TRUE);
2688*53ee8cc1Swenshuai.xi                 break;
2689*53ee8cc1Swenshuai.xi             case 1:
2690*53ee8cc1Swenshuai.xi                 HAL_TSP_FIFO_BD_AUD_En(E_TSP_DST_FIFO_AUDIO3, TRUE, TRUE);
2691*53ee8cc1Swenshuai.xi                 HAL_TSP_FIFO_BD_AUD_En(E_TSP_DST_FIFO_AUDIO4, FALSE, TRUE);
2692*53ee8cc1Swenshuai.xi                 break;
2693*53ee8cc1Swenshuai.xi             case 2:
2694*53ee8cc1Swenshuai.xi                 HAL_TSP_FIFO_BD_AUD_En(E_TSP_DST_FIFO_AUDIO5, TRUE, TRUE);
2695*53ee8cc1Swenshuai.xi                 HAL_TSP_FIFO_BD_AUD_En(E_TSP_DST_FIFO_AUDIO6, FALSE, TRUE);
2696*53ee8cc1Swenshuai.xi                 break;
2697*53ee8cc1Swenshuai.xi             default:
2698*53ee8cc1Swenshuai.xi                 HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
2699*53ee8cc1Swenshuai.xi                 break;
2700*53ee8cc1Swenshuai.xi         }
2701*53ee8cc1Swenshuai.xi     }
2702*53ee8cc1Swenshuai.xi     else
2703*53ee8cc1Swenshuai.xi     {
2704*53ee8cc1Swenshuai.xi         switch(u32BD)
2705*53ee8cc1Swenshuai.xi         {
2706*53ee8cc1Swenshuai.xi             case 0:
2707*53ee8cc1Swenshuai.xi                 HAL_TSP_FIFO_BD_AUD_En(E_TSP_DST_FIFO_AUDIO, FALSE, FALSE);
2708*53ee8cc1Swenshuai.xi                 HAL_TSP_FIFO_BD_AUD_En(E_TSP_DST_FIFO_AUDIO2, FALSE, FALSE);
2709*53ee8cc1Swenshuai.xi                 break;
2710*53ee8cc1Swenshuai.xi             case 1:
2711*53ee8cc1Swenshuai.xi                 HAL_TSP_FIFO_BD_AUD_En(E_TSP_DST_FIFO_AUDIO3, FALSE, FALSE);
2712*53ee8cc1Swenshuai.xi                 HAL_TSP_FIFO_BD_AUD_En(E_TSP_DST_FIFO_AUDIO4, FALSE, FALSE);
2713*53ee8cc1Swenshuai.xi                 break;
2714*53ee8cc1Swenshuai.xi             case 2:
2715*53ee8cc1Swenshuai.xi                 HAL_TSP_FIFO_BD_AUD_En(E_TSP_DST_FIFO_AUDIO5, FALSE, FALSE);
2716*53ee8cc1Swenshuai.xi                 HAL_TSP_FIFO_BD_AUD_En(E_TSP_DST_FIFO_AUDIO6, FALSE, FALSE);
2717*53ee8cc1Swenshuai.xi                 break;
2718*53ee8cc1Swenshuai.xi             default:
2719*53ee8cc1Swenshuai.xi                 HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
2720*53ee8cc1Swenshuai.xi                 break;
2721*53ee8cc1Swenshuai.xi         }
2722*53ee8cc1Swenshuai.xi     }
2723*53ee8cc1Swenshuai.xi }
2724*53ee8cc1Swenshuai.xi 
2725*53ee8cc1Swenshuai.xi #if FPGA_TEST
2726*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_ClearAll()2727*53ee8cc1Swenshuai.xi     void HAL_TSP_FIFO_ClearAll()
2728*53ee8cc1Swenshuai.xi     {
2729*53ee8cc1Swenshuai.xi         // clear ALL FIFO !!!
2730*53ee8cc1Swenshuai.xi         MS_U8   u8Idx = 0;
2731*53ee8cc1Swenshuai.xi 
2732*53ee8cc1Swenshuai.xi         for(u8Idx = 0; u8Idx < E_TSP_HAL_CAP_VAL_AFIFO_NUM; u8Idx++)
2733*53ee8cc1Swenshuai.xi         {
2734*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegAudioCtrl[u8Idx].CFG_AV_00, CFG_AV_00_REG_PS_MODE);
2735*53ee8cc1Swenshuai.xi         }
2736*53ee8cc1Swenshuai.xi 
2737*53ee8cc1Swenshuai.xi         for(u8Idx = 0; u8Idx < E_TSP_HAL_CAP_VAL_VFIFO_NUM; u8Idx++)
2738*53ee8cc1Swenshuai.xi         {
2739*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegVideoCtrl[u8Idx].CFG_AV_00, CFG_AV_00_REG_PS_MODE);
2740*53ee8cc1Swenshuai.xi         }
2741*53ee8cc1Swenshuai.xi     }
2742*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_ReadEn(TSP_DST_SEQ eFltType,MS_BOOL bEn)2743*53ee8cc1Swenshuai.xi     void HAL_TSP_FIFO_ReadEn(TSP_DST_SEQ eFltType, MS_BOOL bEn)
2744*53ee8cc1Swenshuai.xi     {
2745*53ee8cc1Swenshuai.xi         if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
2746*53ee8cc1Swenshuai.xi         {
2747*53ee8cc1Swenshuai.xi             MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
2748*53ee8cc1Swenshuai.xi 
2749*53ee8cc1Swenshuai.xi             if(bEn)
2750*53ee8cc1Swenshuai.xi             {
2751*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_06, CFG_AV_06_REG_PES_RSEL);
2752*53ee8cc1Swenshuai.xi             }
2753*53ee8cc1Swenshuai.xi             else
2754*53ee8cc1Swenshuai.xi             {
2755*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_06, CFG_AV_06_REG_PES_RSEL);
2756*53ee8cc1Swenshuai.xi             }
2757*53ee8cc1Swenshuai.xi         }
2758*53ee8cc1Swenshuai.xi         else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
2759*53ee8cc1Swenshuai.xi         {
2760*53ee8cc1Swenshuai.xi             MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
2761*53ee8cc1Swenshuai.xi 
2762*53ee8cc1Swenshuai.xi             if(bEn)
2763*53ee8cc1Swenshuai.xi             {
2764*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_06, CFG_AV_06_REG_PES_RSEL);
2765*53ee8cc1Swenshuai.xi             }
2766*53ee8cc1Swenshuai.xi             else
2767*53ee8cc1Swenshuai.xi             {
2768*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_06, CFG_AV_06_REG_PES_RSEL);
2769*53ee8cc1Swenshuai.xi             }
2770*53ee8cc1Swenshuai.xi         }
2771*53ee8cc1Swenshuai.xi         else
2772*53ee8cc1Swenshuai.xi         {
2773*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
2774*53ee8cc1Swenshuai.xi         }
2775*53ee8cc1Swenshuai.xi     }
2776*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_ReadPkt(TSP_DST_SEQ eFltType)2777*53ee8cc1Swenshuai.xi     MS_U16 HAL_TSP_FIFO_ReadPkt(TSP_DST_SEQ eFltType)
2778*53ee8cc1Swenshuai.xi     {
2779*53ee8cc1Swenshuai.xi         if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
2780*53ee8cc1Swenshuai.xi         {
2781*53ee8cc1Swenshuai.xi             MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
2782*53ee8cc1Swenshuai.xi 
2783*53ee8cc1Swenshuai.xi             return REG16_R(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_07) & CFG_AV_07_REG_DEBUG_FIFO_DATA_MASK;
2784*53ee8cc1Swenshuai.xi         }
2785*53ee8cc1Swenshuai.xi         else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
2786*53ee8cc1Swenshuai.xi         {
2787*53ee8cc1Swenshuai.xi             MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
2788*53ee8cc1Swenshuai.xi 
2789*53ee8cc1Swenshuai.xi             return REG16_R(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_07) & CFG_AV_07_REG_DEBUG_FIFO_DATA_MASK;
2790*53ee8cc1Swenshuai.xi         }
2791*53ee8cc1Swenshuai.xi         else
2792*53ee8cc1Swenshuai.xi         {
2793*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
2794*53ee8cc1Swenshuai.xi             return 0;
2795*53ee8cc1Swenshuai.xi         }
2796*53ee8cc1Swenshuai.xi     }
2797*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_Connect(TSP_DST_SEQ eFltType,MS_BOOL bEn)2798*53ee8cc1Swenshuai.xi     void HAL_TSP_FIFO_Connect(TSP_DST_SEQ eFltType, MS_BOOL bEn)
2799*53ee8cc1Swenshuai.xi     {
2800*53ee8cc1Swenshuai.xi         if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
2801*53ee8cc1Swenshuai.xi         {
2802*53ee8cc1Swenshuai.xi             MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
2803*53ee8cc1Swenshuai.xi 
2804*53ee8cc1Swenshuai.xi             if(bEn)
2805*53ee8cc1Swenshuai.xi             {
2806*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_06, CFG_AV_06_REG_FIFO_RD);
2807*53ee8cc1Swenshuai.xi             }
2808*53ee8cc1Swenshuai.xi             else
2809*53ee8cc1Swenshuai.xi             {
2810*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_06, CFG_AV_06_REG_FIFO_RD);
2811*53ee8cc1Swenshuai.xi             }
2812*53ee8cc1Swenshuai.xi         }
2813*53ee8cc1Swenshuai.xi         else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
2814*53ee8cc1Swenshuai.xi         {
2815*53ee8cc1Swenshuai.xi             MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
2816*53ee8cc1Swenshuai.xi 
2817*53ee8cc1Swenshuai.xi             if(bEn)
2818*53ee8cc1Swenshuai.xi             {
2819*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_06, CFG_AV_06_REG_FIFO_RD);
2820*53ee8cc1Swenshuai.xi             }
2821*53ee8cc1Swenshuai.xi             else
2822*53ee8cc1Swenshuai.xi             {
2823*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_06, CFG_AV_06_REG_FIFO_RD);
2824*53ee8cc1Swenshuai.xi             }
2825*53ee8cc1Swenshuai.xi         }
2826*53ee8cc1Swenshuai.xi         else
2827*53ee8cc1Swenshuai.xi         {
2828*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
2829*53ee8cc1Swenshuai.xi         }
2830*53ee8cc1Swenshuai.xi     }
2831*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_PidHit(TSP_DST_SEQ eFltType)2832*53ee8cc1Swenshuai.xi     MS_U32 HAL_TSP_FIFO_PidHit(TSP_DST_SEQ eFltType)
2833*53ee8cc1Swenshuai.xi     {
2834*53ee8cc1Swenshuai.xi         if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
2835*53ee8cc1Swenshuai.xi         {
2836*53ee8cc1Swenshuai.xi             MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
2837*53ee8cc1Swenshuai.xi 
2838*53ee8cc1Swenshuai.xi             return REG16_R(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_08) & CFG_AV_08_REG_PID_MATCH_MASK;
2839*53ee8cc1Swenshuai.xi         }
2840*53ee8cc1Swenshuai.xi         else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
2841*53ee8cc1Swenshuai.xi         {
2842*53ee8cc1Swenshuai.xi             MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
2843*53ee8cc1Swenshuai.xi 
2844*53ee8cc1Swenshuai.xi             return REG16_R(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_08) & CFG_AV_08_REG_PID_MATCH_MASK;
2845*53ee8cc1Swenshuai.xi         }
2846*53ee8cc1Swenshuai.xi         else
2847*53ee8cc1Swenshuai.xi         {
2848*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
2849*53ee8cc1Swenshuai.xi             return PVR_PIDFLT_DEF;
2850*53ee8cc1Swenshuai.xi         }
2851*53ee8cc1Swenshuai.xi     }
2852*53ee8cc1Swenshuai.xi 
HAL_TSP_TRACE_MARK_En(TSP_DST_SEQ eFltType,MS_BOOL bEn)2853*53ee8cc1Swenshuai.xi     void HAL_TSP_TRACE_MARK_En(TSP_DST_SEQ eFltType,MS_BOOL bEn)
2854*53ee8cc1Swenshuai.xi     {
2855*53ee8cc1Swenshuai.xi         if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
2856*53ee8cc1Swenshuai.xi         {
2857*53ee8cc1Swenshuai.xi             MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
2858*53ee8cc1Swenshuai.xi 
2859*53ee8cc1Swenshuai.xi             if(bEn)
2860*53ee8cc1Swenshuai.xi             {
2861*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_TRACE_MARK_EN);
2862*53ee8cc1Swenshuai.xi             }
2863*53ee8cc1Swenshuai.xi             else
2864*53ee8cc1Swenshuai.xi             {
2865*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_TRACE_MARK_EN);
2866*53ee8cc1Swenshuai.xi             }
2867*53ee8cc1Swenshuai.xi         }
2868*53ee8cc1Swenshuai.xi         else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
2869*53ee8cc1Swenshuai.xi         {
2870*53ee8cc1Swenshuai.xi             MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
2871*53ee8cc1Swenshuai.xi 
2872*53ee8cc1Swenshuai.xi             if(bEn)
2873*53ee8cc1Swenshuai.xi             {
2874*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_00, CFG_AV_00_REG_TRACE_MARK_EN);
2875*53ee8cc1Swenshuai.xi             }
2876*53ee8cc1Swenshuai.xi             else
2877*53ee8cc1Swenshuai.xi             {
2878*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_00, CFG_AV_00_REG_TRACE_MARK_EN);
2879*53ee8cc1Swenshuai.xi             }
2880*53ee8cc1Swenshuai.xi         }
2881*53ee8cc1Swenshuai.xi         else
2882*53ee8cc1Swenshuai.xi         {
2883*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
2884*53ee8cc1Swenshuai.xi         }
2885*53ee8cc1Swenshuai.xi     }
2886*53ee8cc1Swenshuai.xi 
2887*53ee8cc1Swenshuai.xi #endif
2888*53ee8cc1Swenshuai.xi 
2889*53ee8cc1Swenshuai.xi //@NOTE for TS mode
2890*53ee8cc1Swenshuai.xi //@TODO need to rename (TS enable or PKTDMX_BYPASS)
HAL_TSP_Flt_Bypass(TSP_DST_SEQ eFltType,MS_BOOL bEn)2891*53ee8cc1Swenshuai.xi void HAL_TSP_Flt_Bypass(TSP_DST_SEQ eFltType, MS_BOOL bEn)
2892*53ee8cc1Swenshuai.xi {
2893*53ee8cc1Swenshuai.xi     if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
2894*53ee8cc1Swenshuai.xi     {
2895*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
2896*53ee8cc1Swenshuai.xi 
2897*53ee8cc1Swenshuai.xi         if(bEn)
2898*53ee8cc1Swenshuai.xi         {
2899*53ee8cc1Swenshuai.xi             REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_PID_BYPASS);
2900*53ee8cc1Swenshuai.xi         }
2901*53ee8cc1Swenshuai.xi         else
2902*53ee8cc1Swenshuai.xi         {
2903*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_PID_BYPASS);
2904*53ee8cc1Swenshuai.xi         }
2905*53ee8cc1Swenshuai.xi     }
2906*53ee8cc1Swenshuai.xi     else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
2907*53ee8cc1Swenshuai.xi     {
2908*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
2909*53ee8cc1Swenshuai.xi 
2910*53ee8cc1Swenshuai.xi         if(bEn)
2911*53ee8cc1Swenshuai.xi         {
2912*53ee8cc1Swenshuai.xi             REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_00, CFG_AV_00_REG_PID_BYPASS);
2913*53ee8cc1Swenshuai.xi         }
2914*53ee8cc1Swenshuai.xi         else
2915*53ee8cc1Swenshuai.xi         {
2916*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_00, CFG_AV_00_REG_PID_BYPASS);
2917*53ee8cc1Swenshuai.xi         }
2918*53ee8cc1Swenshuai.xi     }
2919*53ee8cc1Swenshuai.xi     else
2920*53ee8cc1Swenshuai.xi     {
2921*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
2922*53ee8cc1Swenshuai.xi     }
2923*53ee8cc1Swenshuai.xi }
2924*53ee8cc1Swenshuai.xi 
2925*53ee8cc1Swenshuai.xi //PS MODE
2926*53ee8cc1Swenshuai.xi //NEED TO rename
HAL_TSP_FIFO_Bypass(TSP_DST_SEQ eFltType,MS_BOOL bEn)2927*53ee8cc1Swenshuai.xi void HAL_TSP_FIFO_Bypass(TSP_DST_SEQ eFltType, MS_BOOL bEn) // @NOTE this function only for Tsif0 fileEng other fileEng has no by pass capability
2928*53ee8cc1Swenshuai.xi {
2929*53ee8cc1Swenshuai.xi     if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
2930*53ee8cc1Swenshuai.xi     {
2931*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
2932*53ee8cc1Swenshuai.xi 
2933*53ee8cc1Swenshuai.xi         if(bEn)
2934*53ee8cc1Swenshuai.xi         {
2935*53ee8cc1Swenshuai.xi             REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_PS_MODE);
2936*53ee8cc1Swenshuai.xi         }
2937*53ee8cc1Swenshuai.xi         else
2938*53ee8cc1Swenshuai.xi         {
2939*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_PS_MODE);
2940*53ee8cc1Swenshuai.xi         }
2941*53ee8cc1Swenshuai.xi     }
2942*53ee8cc1Swenshuai.xi     else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
2943*53ee8cc1Swenshuai.xi     {
2944*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
2945*53ee8cc1Swenshuai.xi 
2946*53ee8cc1Swenshuai.xi         if(bEn)
2947*53ee8cc1Swenshuai.xi         {
2948*53ee8cc1Swenshuai.xi             REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_00, CFG_AV_00_REG_PS_MODE);
2949*53ee8cc1Swenshuai.xi         }
2950*53ee8cc1Swenshuai.xi         else
2951*53ee8cc1Swenshuai.xi         {
2952*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_00, CFG_AV_00_REG_PS_MODE);
2953*53ee8cc1Swenshuai.xi         }
2954*53ee8cc1Swenshuai.xi     }
2955*53ee8cc1Swenshuai.xi     else
2956*53ee8cc1Swenshuai.xi     {
2957*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
2958*53ee8cc1Swenshuai.xi     }
2959*53ee8cc1Swenshuai.xi }
2960*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_Bypass_Src(FILEENG_SEQ eFileEng,TSP_DST_SEQ eFltType)2961*53ee8cc1Swenshuai.xi void HAL_TSP_FIFO_Bypass_Src(FILEENG_SEQ eFileEng, TSP_DST_SEQ eFltType)
2962*53ee8cc1Swenshuai.xi {
2963*53ee8cc1Swenshuai.xi     // (K6 HW CL)
2964*53ee8cc1Swenshuai.xi     // PS mode source sel need to be independent
2965*53ee8cc1Swenshuai.xi     if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
2966*53ee8cc1Swenshuai.xi     {
2967*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
2968*53ee8cc1Swenshuai.xi 
2969*53ee8cc1Swenshuai.xi         REG16_MSK_W(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_01, CFG_AV_01_REG_PS_MODE_SRC_MASK, ((eFileEng + 1) << CFG_AV_01_REG_PS_MODE_SRC_SHIFT));
2970*53ee8cc1Swenshuai.xi     }
2971*53ee8cc1Swenshuai.xi     else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
2972*53ee8cc1Swenshuai.xi     {
2973*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
2974*53ee8cc1Swenshuai.xi 
2975*53ee8cc1Swenshuai.xi         REG16_MSK_W(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_01, CFG_AV_01_REG_PS_MODE_SRC_MASK, ((eFileEng + 1) << CFG_AV_01_REG_PS_MODE_SRC_SHIFT));
2976*53ee8cc1Swenshuai.xi     }
2977*53ee8cc1Swenshuai.xi     else
2978*53ee8cc1Swenshuai.xi     {
2979*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
2980*53ee8cc1Swenshuai.xi     }
2981*53ee8cc1Swenshuai.xi }
2982*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_Reset(TSP_DST_SEQ eFltType,MS_BOOL bReset)2983*53ee8cc1Swenshuai.xi void HAL_TSP_FIFO_Reset(TSP_DST_SEQ eFltType, MS_BOOL bReset)
2984*53ee8cc1Swenshuai.xi {
2985*53ee8cc1Swenshuai.xi     if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
2986*53ee8cc1Swenshuai.xi     {
2987*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
2988*53ee8cc1Swenshuai.xi 
2989*53ee8cc1Swenshuai.xi         if(bReset)
2990*53ee8cc1Swenshuai.xi         {
2991*53ee8cc1Swenshuai.xi             REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_01, CFG_AV_01_REG_RESET_FIFO_PARSER);
2992*53ee8cc1Swenshuai.xi         }
2993*53ee8cc1Swenshuai.xi         else
2994*53ee8cc1Swenshuai.xi         {
2995*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_01, CFG_AV_01_REG_RESET_FIFO_PARSER);
2996*53ee8cc1Swenshuai.xi         }
2997*53ee8cc1Swenshuai.xi     }
2998*53ee8cc1Swenshuai.xi     else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
2999*53ee8cc1Swenshuai.xi     {
3000*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
3001*53ee8cc1Swenshuai.xi 
3002*53ee8cc1Swenshuai.xi         if(bReset)
3003*53ee8cc1Swenshuai.xi         {
3004*53ee8cc1Swenshuai.xi             REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_01, CFG_AV_01_REG_RESET_FIFO_PARSER);
3005*53ee8cc1Swenshuai.xi         }
3006*53ee8cc1Swenshuai.xi         else
3007*53ee8cc1Swenshuai.xi         {
3008*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_01, CFG_AV_01_REG_RESET_FIFO_PARSER);
3009*53ee8cc1Swenshuai.xi         }
3010*53ee8cc1Swenshuai.xi     }
3011*53ee8cc1Swenshuai.xi     else
3012*53ee8cc1Swenshuai.xi     {
3013*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
3014*53ee8cc1Swenshuai.xi     }
3015*53ee8cc1Swenshuai.xi 
3016*53ee8cc1Swenshuai.xi     _delay(1);
3017*53ee8cc1Swenshuai.xi }
3018*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_Skip_Scrmb(TSP_DST_SEQ eFltType,MS_BOOL bSkip)3019*53ee8cc1Swenshuai.xi void HAL_TSP_FIFO_Skip_Scrmb(TSP_DST_SEQ eFltType,MS_BOOL bSkip)
3020*53ee8cc1Swenshuai.xi {
3021*53ee8cc1Swenshuai.xi     if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
3022*53ee8cc1Swenshuai.xi     {
3023*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
3024*53ee8cc1Swenshuai.xi 
3025*53ee8cc1Swenshuai.xi         if(bSkip)
3026*53ee8cc1Swenshuai.xi         {
3027*53ee8cc1Swenshuai.xi             REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_MASK_SCR_EN);
3028*53ee8cc1Swenshuai.xi         }
3029*53ee8cc1Swenshuai.xi         else
3030*53ee8cc1Swenshuai.xi         {
3031*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_MASK_SCR_EN);
3032*53ee8cc1Swenshuai.xi         }
3033*53ee8cc1Swenshuai.xi     }
3034*53ee8cc1Swenshuai.xi     else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
3035*53ee8cc1Swenshuai.xi     {
3036*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
3037*53ee8cc1Swenshuai.xi 
3038*53ee8cc1Swenshuai.xi         if(bSkip)
3039*53ee8cc1Swenshuai.xi         {
3040*53ee8cc1Swenshuai.xi             REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_00, CFG_AV_00_REG_MASK_SCR_EN);
3041*53ee8cc1Swenshuai.xi         }
3042*53ee8cc1Swenshuai.xi         else
3043*53ee8cc1Swenshuai.xi         {
3044*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_00, CFG_AV_00_REG_MASK_SCR_EN);
3045*53ee8cc1Swenshuai.xi         }
3046*53ee8cc1Swenshuai.xi     }
3047*53ee8cc1Swenshuai.xi     else
3048*53ee8cc1Swenshuai.xi     {
3049*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
3050*53ee8cc1Swenshuai.xi     }
3051*53ee8cc1Swenshuai.xi }
3052*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_BlockDis(TSP_DST_SEQ eFltType,MS_BOOL bDisable)3053*53ee8cc1Swenshuai.xi void HAL_TSP_FIFO_BlockDis(TSP_DST_SEQ eFltType, MS_BOOL bDisable)
3054*53ee8cc1Swenshuai.xi {
3055*53ee8cc1Swenshuai.xi     if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
3056*53ee8cc1Swenshuai.xi     {
3057*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
3058*53ee8cc1Swenshuai.xi 
3059*53ee8cc1Swenshuai.xi         if(bDisable)
3060*53ee8cc1Swenshuai.xi         {
3061*53ee8cc1Swenshuai.xi             REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_BLOCK_DISABLE);
3062*53ee8cc1Swenshuai.xi         }
3063*53ee8cc1Swenshuai.xi         else
3064*53ee8cc1Swenshuai.xi         {
3065*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_BLOCK_DISABLE);
3066*53ee8cc1Swenshuai.xi         }
3067*53ee8cc1Swenshuai.xi     }
3068*53ee8cc1Swenshuai.xi     else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
3069*53ee8cc1Swenshuai.xi     {
3070*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
3071*53ee8cc1Swenshuai.xi 
3072*53ee8cc1Swenshuai.xi         if(bDisable)
3073*53ee8cc1Swenshuai.xi         {
3074*53ee8cc1Swenshuai.xi             REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_00, CFG_AV_00_REG_BLOCK_DISABLE);
3075*53ee8cc1Swenshuai.xi         }
3076*53ee8cc1Swenshuai.xi         else
3077*53ee8cc1Swenshuai.xi         {
3078*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_00, CFG_AV_00_REG_BLOCK_DISABLE);
3079*53ee8cc1Swenshuai.xi         }
3080*53ee8cc1Swenshuai.xi     }
3081*53ee8cc1Swenshuai.xi     else
3082*53ee8cc1Swenshuai.xi     {
3083*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
3084*53ee8cc1Swenshuai.xi     }
3085*53ee8cc1Swenshuai.xi }
3086*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_IsReset(TSP_DST_SEQ eFltType)3087*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_FIFO_IsReset(TSP_DST_SEQ eFltType)
3088*53ee8cc1Swenshuai.xi {
3089*53ee8cc1Swenshuai.xi     MS_U16 u16Matched = 0;
3090*53ee8cc1Swenshuai.xi 
3091*53ee8cc1Swenshuai.xi     if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
3092*53ee8cc1Swenshuai.xi     {
3093*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
3094*53ee8cc1Swenshuai.xi 
3095*53ee8cc1Swenshuai.xi         u16Matched = REG16_R(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_01) & CFG_AV_01_REG_RESET_FIFO_PARSER;
3096*53ee8cc1Swenshuai.xi     }
3097*53ee8cc1Swenshuai.xi     else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
3098*53ee8cc1Swenshuai.xi     {
3099*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
3100*53ee8cc1Swenshuai.xi 
3101*53ee8cc1Swenshuai.xi         u16Matched = REG16_R(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_01) & CFG_AV_01_REG_RESET_FIFO_PARSER;
3102*53ee8cc1Swenshuai.xi     }
3103*53ee8cc1Swenshuai.xi     else
3104*53ee8cc1Swenshuai.xi     {
3105*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
3106*53ee8cc1Swenshuai.xi         return FALSE;
3107*53ee8cc1Swenshuai.xi     }
3108*53ee8cc1Swenshuai.xi 
3109*53ee8cc1Swenshuai.xi     return (u16Matched) ? TRUE: FALSE;
3110*53ee8cc1Swenshuai.xi }
3111*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_GetStatus(TSP_DST_SEQ eFltType)3112*53ee8cc1Swenshuai.xi MS_U32  HAL_TSP_FIFO_GetStatus(TSP_DST_SEQ eFltType)
3113*53ee8cc1Swenshuai.xi {
3114*53ee8cc1Swenshuai.xi     #define E_TSP_FIFO_STATUS_ISRESET    0x80000000
3115*53ee8cc1Swenshuai.xi     #define E_TSP_FIFO_STATUS_EMPTY      0x00000001
3116*53ee8cc1Swenshuai.xi     #define E_TSP_FIFO_STATUS_OVERFLOW   0x00000002
3117*53ee8cc1Swenshuai.xi     #define E_TSP_FIFO_STATUS_LEVEL      0x0000000C
3118*53ee8cc1Swenshuai.xi     #define TSP_FIFO_STATUS_LEVEL_SHFT            2   //shift the value get from HAL_TSP_FIFO_Level to the u32Status level position
3119*53ee8cc1Swenshuai.xi     // @NOTE please follow K2 like series to return this value
3120*53ee8cc1Swenshuai.xi     // since API layer didn't define for each column
3121*53ee8cc1Swenshuai.xi     // we only defined that 0x80000000 stands for this fifo reset is High
3122*53ee8cc1Swenshuai.xi     //                               0x00000001 stands for this fifo is empty
3123*53ee8cc1Swenshuai.xi     //                               0x00000002 stands for this fifo is overflow
3124*53ee8cc1Swenshuai.xi     //                               0x0000000C is a mask for this fifo level
3125*53ee8cc1Swenshuai.xi     // this is exclusive usage
3126*53ee8cc1Swenshuai.xi     MS_U32 u32Status = 0;
3127*53ee8cc1Swenshuai.xi     if (HAL_TSP_FIFO_IsReset(eFltType))
3128*53ee8cc1Swenshuai.xi     {
3129*53ee8cc1Swenshuai.xi         u32Status |= E_TSP_FIFO_STATUS_ISRESET;
3130*53ee8cc1Swenshuai.xi     }
3131*53ee8cc1Swenshuai.xi     if (HAL_TSP_FIFO_Empty(eFltType))
3132*53ee8cc1Swenshuai.xi     {
3133*53ee8cc1Swenshuai.xi         u32Status |= E_TSP_FIFO_STATUS_EMPTY;
3134*53ee8cc1Swenshuai.xi     }
3135*53ee8cc1Swenshuai.xi     if (HAL_TSP_FIFO_Overflow(eFltType))
3136*53ee8cc1Swenshuai.xi     {
3137*53ee8cc1Swenshuai.xi         u32Status |= E_TSP_FIFO_STATUS_OVERFLOW;
3138*53ee8cc1Swenshuai.xi     }
3139*53ee8cc1Swenshuai.xi 
3140*53ee8cc1Swenshuai.xi     u32Status |= ((HAL_TSP_FIFO_Level(eFltType)<<TSP_FIFO_STATUS_LEVEL_SHFT)&E_TSP_FIFO_STATUS_LEVEL);
3141*53ee8cc1Swenshuai.xi 
3142*53ee8cc1Swenshuai.xi     return u32Status;
3143*53ee8cc1Swenshuai.xi }
3144*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_Level(TSP_DST_SEQ eFltType)3145*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_FIFO_Level(TSP_DST_SEQ eFltType)
3146*53ee8cc1Swenshuai.xi {
3147*53ee8cc1Swenshuai.xi     if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
3148*53ee8cc1Swenshuai.xi     {
3149*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
3150*53ee8cc1Swenshuai.xi 
3151*53ee8cc1Swenshuai.xi         return (REG16_R(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_06) & CFG_AV_06_REG_FIFO_WR_LEVEL_MASK)  >> CFG_AV_06_REG_FIFO_WR_LEVEL_SHIFT;
3152*53ee8cc1Swenshuai.xi     }
3153*53ee8cc1Swenshuai.xi     else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
3154*53ee8cc1Swenshuai.xi     {
3155*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
3156*53ee8cc1Swenshuai.xi 
3157*53ee8cc1Swenshuai.xi         return (REG16_R(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_06) & CFG_AV_06_REG_FIFO_WR_LEVEL_MASK)  >> CFG_AV_06_REG_FIFO_WR_LEVEL_SHIFT;
3158*53ee8cc1Swenshuai.xi     }
3159*53ee8cc1Swenshuai.xi     else
3160*53ee8cc1Swenshuai.xi     {
3161*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
3162*53ee8cc1Swenshuai.xi         return 0;
3163*53ee8cc1Swenshuai.xi     }
3164*53ee8cc1Swenshuai.xi }
3165*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_Overflow(TSP_DST_SEQ eFltType)3166*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_FIFO_Overflow(TSP_DST_SEQ eFltType)
3167*53ee8cc1Swenshuai.xi {
3168*53ee8cc1Swenshuai.xi     if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
3169*53ee8cc1Swenshuai.xi     {
3170*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
3171*53ee8cc1Swenshuai.xi 
3172*53ee8cc1Swenshuai.xi         return (REG16_R(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_06) & CFG_AV_06_REG_FIFO_FULL_MASK)  >> CFG_AV_06_REG_FIFO_FULL_SHIFT;
3173*53ee8cc1Swenshuai.xi     }
3174*53ee8cc1Swenshuai.xi     else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
3175*53ee8cc1Swenshuai.xi     {
3176*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
3177*53ee8cc1Swenshuai.xi 
3178*53ee8cc1Swenshuai.xi         return (REG16_R(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_06) & CFG_AV_06_REG_FIFO_FULL_MASK)  >> CFG_AV_06_REG_FIFO_FULL_SHIFT;
3179*53ee8cc1Swenshuai.xi     }
3180*53ee8cc1Swenshuai.xi     else
3181*53ee8cc1Swenshuai.xi     {
3182*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
3183*53ee8cc1Swenshuai.xi         return FALSE;
3184*53ee8cc1Swenshuai.xi     }
3185*53ee8cc1Swenshuai.xi }
3186*53ee8cc1Swenshuai.xi 
HAL_TSP_FIFO_Empty(TSP_DST_SEQ eFltType)3187*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_FIFO_Empty(TSP_DST_SEQ eFltType)
3188*53ee8cc1Swenshuai.xi {
3189*53ee8cc1Swenshuai.xi     if((eFltType >= E_TSP_DST_FIFO_AUDIO) && (eFltType <= E_TSP_DST_FIFO_AUDIO6))
3190*53ee8cc1Swenshuai.xi     {
3191*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eFltType - E_TSP_DST_FIFO_AUDIO;
3192*53ee8cc1Swenshuai.xi 
3193*53ee8cc1Swenshuai.xi         return (REG16_R(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_06) & CFG_AV_06_REG_FIFO_EMPTY_MASK)  >> CFG_AV_06_REG_FIFO_EMPTY_SHIFT;
3194*53ee8cc1Swenshuai.xi     }
3195*53ee8cc1Swenshuai.xi     else if(eFltType <= E_TSP_DST_FIFO_VIDEO8)
3196*53ee8cc1Swenshuai.xi     {
3197*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eFltType - E_TSP_DST_FIFO_VIDEO;
3198*53ee8cc1Swenshuai.xi 
3199*53ee8cc1Swenshuai.xi         return (REG16_R(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_06) & CFG_AV_06_REG_FIFO_EMPTY_MASK)  >> CFG_AV_06_REG_FIFO_EMPTY_SHIFT;
3200*53ee8cc1Swenshuai.xi     }
3201*53ee8cc1Swenshuai.xi     else
3202*53ee8cc1Swenshuai.xi     {
3203*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
3204*53ee8cc1Swenshuai.xi         return FALSE;
3205*53ee8cc1Swenshuai.xi     }
3206*53ee8cc1Swenshuai.xi }
3207*53ee8cc1Swenshuai.xi 
_HAL_TSP_VQ_TxConfig(void)3208*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_TSP_VQ_TxConfig(void)
3209*53ee8cc1Swenshuai.xi {
3210*53ee8cc1Swenshuai.xi     // reg_vq_wr_threshold = 0x8
3211*53ee8cc1Swenshuai.xi     // reg_vq_forcefire_cnt_1k= 0xC
3212*53ee8cc1Swenshuai.xi     REG16_MSK_W(&_RegOtherCtrl->CFG_OTHER_70, CFG_OTHER_70_REG_VQ_WR_THRESHOLD_MASK, (0x8 << CFG_OTHER_70_REG_VQ_WR_THRESHOLD_SHIFT));
3213*53ee8cc1Swenshuai.xi     REG16_MSK_W(&_RegOtherCtrl->CFG_OTHER_70, CFG_OTHER_70_REG_VQ_FORCEFIRE_CNT_1K_MASK, (0xC << CFG_OTHER_70_REG_VQ_FORCEFIRE_CNT_1K_SHIFT));
3214*53ee8cc1Swenshuai.xi 
3215*53ee8cc1Swenshuai.xi     return TRUE;
3216*53ee8cc1Swenshuai.xi }
3217*53ee8cc1Swenshuai.xi 
HAL_TSP_SetVQ(MS_PHYADDR u32BaseAddr,MS_U32 u32BufLen)3218*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SetVQ(MS_PHYADDR u32BaseAddr, MS_U32 u32BufLen)
3219*53ee8cc1Swenshuai.xi {
3220*53ee8cc1Swenshuai.xi     MS_U32  vqId = 0;
3221*53ee8cc1Swenshuai.xi     MS_U32  u32VQ_PktNum = 0;
3222*53ee8cc1Swenshuai.xi     MS_U32  u32Addr = 0;
3223*53ee8cc1Swenshuai.xi     MS_U32  u32OneBufSize = 0;
3224*53ee8cc1Swenshuai.xi 
3225*53ee8cc1Swenshuai.xi     // Check MIU select
3226*53ee8cc1Swenshuai.xi     MS_U8   u8MiuSel = 0;
3227*53ee8cc1Swenshuai.xi 
3228*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, u32Addr, u32BaseAddr);
3229*53ee8cc1Swenshuai.xi     REG16_MSK_W(&_RegTopCtrl->CFG_TOP_09, CFG_TOP_09_REG_MIU_SEL_VQ_MASK, (u8MiuSel << CFG_TOP_09_REG_MIU_SEL_VQ_SHIFT));
3230*53ee8cc1Swenshuai.xi 
3231*53ee8cc1Swenshuai.xi     u32OneBufSize = ((u32BufLen >> MIU_BUS) / VQ_NUM) << MIU_BUS; //miu alignment
3232*53ee8cc1Swenshuai.xi     u32VQ_PktNum = u32OneBufSize / VQ_PACKET_UNIT_LEN;
3233*53ee8cc1Swenshuai.xi 
3234*53ee8cc1Swenshuai.xi     _HAL_TSP_VQ_TxConfig();
3235*53ee8cc1Swenshuai.xi 
3236*53ee8cc1Swenshuai.xi     for(vqId = 0; vqId < VQ_NUM; vqId ++)
3237*53ee8cc1Swenshuai.xi     {
3238*53ee8cc1Swenshuai.xi         // in kaiser we needs to set 6 VQ and the base unit is 208 so total vq size should be N*208*6
3239*53ee8cc1Swenshuai.xi         if (TRUE != HAL_TSP_VQ_Buffer(vqId, u32Addr, u32VQ_PktNum))
3240*53ee8cc1Swenshuai.xi         {
3241*53ee8cc1Swenshuai.xi             return FALSE;
3242*53ee8cc1Swenshuai.xi         }
3243*53ee8cc1Swenshuai.xi         u32Addr += u32OneBufSize;
3244*53ee8cc1Swenshuai.xi     }
3245*53ee8cc1Swenshuai.xi 
3246*53ee8cc1Swenshuai.xi     HAL_TSP_VQ_Enable(TRUE);
3247*53ee8cc1Swenshuai.xi     return TRUE;
3248*53ee8cc1Swenshuai.xi }
3249*53ee8cc1Swenshuai.xi 
HAL_TSP_VQ_Buffer(MS_U32 vqId,MS_PHYADDR u32BaseAddr,MS_U32 u32VQ_PktNum)3250*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_VQ_Buffer(MS_U32 vqId, MS_PHYADDR u32BaseAddr, MS_U32 u32VQ_PktNum)
3251*53ee8cc1Swenshuai.xi {
3252*53ee8cc1Swenshuai.xi     if(vqId >= VQ_NUM)
3253*53ee8cc1Swenshuai.xi     {
3254*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong VQ Engine : 0x%x !!\n",__FUNCTION__,__LINE__,vqId));
3255*53ee8cc1Swenshuai.xi         return FALSE;
3256*53ee8cc1Swenshuai.xi     }
3257*53ee8cc1Swenshuai.xi 
3258*53ee8cc1Swenshuai.xi     REG32_W(&_RegOtherCtrl->CFG_OTHER_30_67[vqId].reg_vq_base, (u32BaseAddr >> MIU_BUS));
3259*53ee8cc1Swenshuai.xi     REG16_W(&_RegOtherCtrl->CFG_OTHER_30_67[vqId].reg_vq_size_208byte, u32VQ_PktNum);
3260*53ee8cc1Swenshuai.xi 
3261*53ee8cc1Swenshuai.xi     return TRUE;
3262*53ee8cc1Swenshuai.xi }
3263*53ee8cc1Swenshuai.xi 
HAL_TSP_VQ_Enable(MS_BOOL bEn)3264*53ee8cc1Swenshuai.xi void HAL_TSP_VQ_Enable(MS_BOOL bEn)
3265*53ee8cc1Swenshuai.xi {
3266*53ee8cc1Swenshuai.xi     if (bEn)
3267*53ee8cc1Swenshuai.xi     {
3268*53ee8cc1Swenshuai.xi           REG16_SET(&_RegCtrl->HW2_Config3, TSP_VQ_EN|TSP_VQ2PINGPONG_EN);
3269*53ee8cc1Swenshuai.xi     }
3270*53ee8cc1Swenshuai.xi     else
3271*53ee8cc1Swenshuai.xi     {
3272*53ee8cc1Swenshuai.xi           REG16_CLR(&_RegCtrl->HW2_Config3, TSP_VQ_EN|TSP_VQ2PINGPONG_EN);
3273*53ee8cc1Swenshuai.xi     }
3274*53ee8cc1Swenshuai.xi }
3275*53ee8cc1Swenshuai.xi 
HAL_TSP_VQ_Reset(MS_U32 vqId,MS_BOOL bEn)3276*53ee8cc1Swenshuai.xi void HAL_TSP_VQ_Reset(MS_U32 vqId, MS_BOOL bEn)
3277*53ee8cc1Swenshuai.xi {
3278*53ee8cc1Swenshuai.xi     if(vqId >= VQ_NUM)
3279*53ee8cc1Swenshuai.xi     {
3280*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong VQ Engine : 0x%x !!\n",__FUNCTION__,__LINE__,vqId));
3281*53ee8cc1Swenshuai.xi         return;
3282*53ee8cc1Swenshuai.xi     }
3283*53ee8cc1Swenshuai.xi 
3284*53ee8cc1Swenshuai.xi     if(bEn)
3285*53ee8cc1Swenshuai.xi     {
3286*53ee8cc1Swenshuai.xi         REG16_SET(&_RegOtherCtrl->CFG_OTHER_30_67[vqId].reg_vq_ctrl, REG_OTHER_VQ_TX_REG_VQ_RESET);
3287*53ee8cc1Swenshuai.xi     }
3288*53ee8cc1Swenshuai.xi     else
3289*53ee8cc1Swenshuai.xi     {
3290*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegOtherCtrl->CFG_OTHER_30_67[vqId].reg_vq_ctrl, REG_OTHER_VQ_TX_REG_VQ_RESET);
3291*53ee8cc1Swenshuai.xi     }
3292*53ee8cc1Swenshuai.xi }
3293*53ee8cc1Swenshuai.xi 
3294*53ee8cc1Swenshuai.xi #if FPGA_TEST
3295*53ee8cc1Swenshuai.xi 
HAL_TSP_VQ_Block_Dis(MS_U32 vqId,MS_BOOL bDis)3296*53ee8cc1Swenshuai.xi     MS_BOOL HAL_TSP_VQ_Block_Dis(MS_U32 vqId, MS_BOOL bDis)
3297*53ee8cc1Swenshuai.xi     {
3298*53ee8cc1Swenshuai.xi         if(vqId >= VQ_NUM)
3299*53ee8cc1Swenshuai.xi         {
3300*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong VQ Engine : 0x%x !!\n",__FUNCTION__,__LINE__,vqId));
3301*53ee8cc1Swenshuai.xi             return FALSE;
3302*53ee8cc1Swenshuai.xi         }
3303*53ee8cc1Swenshuai.xi 
3304*53ee8cc1Swenshuai.xi         if(bDis)
3305*53ee8cc1Swenshuai.xi         {
3306*53ee8cc1Swenshuai.xi             REG16_SET(&_RegOtherCtrl->CFG_OTHER_75, (CFG_OTHER_75_REG_VQ_TX_BLOCK_DISABLE << vqId));
3307*53ee8cc1Swenshuai.xi         }
3308*53ee8cc1Swenshuai.xi         else
3309*53ee8cc1Swenshuai.xi         {
3310*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegOtherCtrl->CFG_OTHER_75, (CFG_OTHER_75_REG_VQ_TX_BLOCK_DISABLE << vqId));
3311*53ee8cc1Swenshuai.xi         }
3312*53ee8cc1Swenshuai.xi 
3313*53ee8cc1Swenshuai.xi         return TRUE;
3314*53ee8cc1Swenshuai.xi     }
3315*53ee8cc1Swenshuai.xi 
HAL_TSP_VQ_OverflowInt_En(MS_U32 vqId,MS_BOOL bEn)3316*53ee8cc1Swenshuai.xi     void HAL_TSP_VQ_OverflowInt_En(MS_U32 vqId, MS_BOOL bEn)
3317*53ee8cc1Swenshuai.xi     {
3318*53ee8cc1Swenshuai.xi         if(vqId >= VQ_NUM)
3319*53ee8cc1Swenshuai.xi         {
3320*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong VQ Engine : 0x%x !!\n",__FUNCTION__,__LINE__,vqId));
3321*53ee8cc1Swenshuai.xi             return;
3322*53ee8cc1Swenshuai.xi         }
3323*53ee8cc1Swenshuai.xi 
3324*53ee8cc1Swenshuai.xi         if(bEn)
3325*53ee8cc1Swenshuai.xi         {
3326*53ee8cc1Swenshuai.xi             REG16_SET(&_RegOtherCtrl->CFG_OTHER_30_67[vqId].reg_vq_ctrl, REG_OTHER_VQ_TX_REG_VQ_OVERFLOW_INT_EN);
3327*53ee8cc1Swenshuai.xi         }
3328*53ee8cc1Swenshuai.xi         else
3329*53ee8cc1Swenshuai.xi         {
3330*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegOtherCtrl->CFG_OTHER_30_67[vqId].reg_vq_ctrl, REG_OTHER_VQ_TX_REG_VQ_OVERFLOW_INT_EN);
3331*53ee8cc1Swenshuai.xi         }
3332*53ee8cc1Swenshuai.xi     }
3333*53ee8cc1Swenshuai.xi 
HAL_TSP_VQ_OverflowInt_Clr(MS_U32 vqId)3334*53ee8cc1Swenshuai.xi     void HAL_TSP_VQ_OverflowInt_Clr(MS_U32 vqId)
3335*53ee8cc1Swenshuai.xi     {
3336*53ee8cc1Swenshuai.xi         if(vqId >= VQ_NUM)
3337*53ee8cc1Swenshuai.xi         {
3338*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong VQ Engine : 0x%x !!\n",__FUNCTION__,__LINE__,vqId));
3339*53ee8cc1Swenshuai.xi             return;
3340*53ee8cc1Swenshuai.xi         }
3341*53ee8cc1Swenshuai.xi 
3342*53ee8cc1Swenshuai.xi         REG16_SET(&_RegOtherCtrl->CFG_OTHER_30_67[vqId].reg_vq_ctrl, REG_OTHER_VQ_TX_REG_VQ_CLR_OVERFLOW_INT);
3343*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegOtherCtrl->CFG_OTHER_30_67[vqId].reg_vq_ctrl, REG_OTHER_VQ_TX_REG_VQ_CLR_OVERFLOW_INT);
3344*53ee8cc1Swenshuai.xi     }
3345*53ee8cc1Swenshuai.xi 
3346*53ee8cc1Swenshuai.xi #endif
3347*53ee8cc1Swenshuai.xi 
HAL_PVR_Init(MS_U32 u32PVREng,MS_U32 pktDmxId)3348*53ee8cc1Swenshuai.xi void HAL_PVR_Init(MS_U32 u32PVREng, MS_U32 pktDmxId)
3349*53ee8cc1Swenshuai.xi {
3350*53ee8cc1Swenshuai.xi     if(u32PVREng >= TSP_PVRENG_NUM)
3351*53ee8cc1Swenshuai.xi     {
3352*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3353*53ee8cc1Swenshuai.xi         return;
3354*53ee8cc1Swenshuai.xi     }
3355*53ee8cc1Swenshuai.xi 
3356*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3357*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3358*53ee8cc1Swenshuai.xi 
3359*53ee8cc1Swenshuai.xi     REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_PINGPONG_EN);
3360*53ee8cc1Swenshuai.xi     REG16_MSK_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_10, CFG_PVR_10_REG_INPUT_SRC_MASK, (((MS_U16)pktDmxId) << CFG_PVR_10_REG_INPUT_SRC_SHIFT));
3361*53ee8cc1Swenshuai.xi }
3362*53ee8cc1Swenshuai.xi 
HAL_PVR_Exit(MS_U32 u32PVREng)3363*53ee8cc1Swenshuai.xi void HAL_PVR_Exit(MS_U32 u32PVREng)
3364*53ee8cc1Swenshuai.xi {
3365*53ee8cc1Swenshuai.xi     if(u32PVREng >= TSP_PVRENG_NUM)
3366*53ee8cc1Swenshuai.xi     {
3367*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3368*53ee8cc1Swenshuai.xi         return;
3369*53ee8cc1Swenshuai.xi     }
3370*53ee8cc1Swenshuai.xi 
3371*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3372*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3373*53ee8cc1Swenshuai.xi 
3374*53ee8cc1Swenshuai.xi     //reset pvr control registers
3375*53ee8cc1Swenshuai.xi     REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_PINGPONG_EN);
3376*53ee8cc1Swenshuai.xi     REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_10, CFG_PVR_10_REG_INPUT_SRC_MASK);
3377*53ee8cc1Swenshuai.xi 
3378*53ee8cc1Swenshuai.xi     //reset write address
3379*53ee8cc1Swenshuai.xi     REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_STR2MI_RST_WADR);
3380*53ee8cc1Swenshuai.xi     REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_STR2MI_RST_WADR);
3381*53ee8cc1Swenshuai.xi 
3382*53ee8cc1Swenshuai.xi     //reset time-stamp
3383*53ee8cc1Swenshuai.xi     HAL_PVR_SetPVRTimeStamp(u32PVREng, 0);
3384*53ee8cc1Swenshuai.xi }
3385*53ee8cc1Swenshuai.xi 
HAL_PVR_Start(MS_U32 u32PVREng)3386*53ee8cc1Swenshuai.xi void HAL_PVR_Start(MS_U32 u32PVREng)
3387*53ee8cc1Swenshuai.xi {
3388*53ee8cc1Swenshuai.xi     if(u32PVREng >= TSP_PVRENG_NUM)
3389*53ee8cc1Swenshuai.xi     {
3390*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3391*53ee8cc1Swenshuai.xi         return;
3392*53ee8cc1Swenshuai.xi     }
3393*53ee8cc1Swenshuai.xi 
3394*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3395*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3396*53ee8cc1Swenshuai.xi 
3397*53ee8cc1Swenshuai.xi     //reset write address
3398*53ee8cc1Swenshuai.xi     REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_STR2MI_RST_WADR);
3399*53ee8cc1Swenshuai.xi     REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_STR2MI_RST_WADR);
3400*53ee8cc1Swenshuai.xi 
3401*53ee8cc1Swenshuai.xi     //enable string to miu
3402*53ee8cc1Swenshuai.xi     REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_STR2MI_EN);
3403*53ee8cc1Swenshuai.xi }
3404*53ee8cc1Swenshuai.xi 
HAL_PVR_Stop(MS_U32 u32PVREng)3405*53ee8cc1Swenshuai.xi void HAL_PVR_Stop(MS_U32 u32PVREng)
3406*53ee8cc1Swenshuai.xi {
3407*53ee8cc1Swenshuai.xi     if(u32PVREng >= TSP_PVRENG_NUM)
3408*53ee8cc1Swenshuai.xi     {
3409*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3410*53ee8cc1Swenshuai.xi         return;
3411*53ee8cc1Swenshuai.xi     }
3412*53ee8cc1Swenshuai.xi 
3413*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3414*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3415*53ee8cc1Swenshuai.xi 
3416*53ee8cc1Swenshuai.xi     //disable string to miu
3417*53ee8cc1Swenshuai.xi     REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_STR2MI_EN);
3418*53ee8cc1Swenshuai.xi }
3419*53ee8cc1Swenshuai.xi 
HAL_PVR_Pause(MS_U32 u32PVREng,MS_BOOL bPause)3420*53ee8cc1Swenshuai.xi void HAL_PVR_Pause(MS_U32 u32PVREng, MS_BOOL bPause)
3421*53ee8cc1Swenshuai.xi {
3422*53ee8cc1Swenshuai.xi     if(u32PVREng >= TSP_PVRENG_NUM)
3423*53ee8cc1Swenshuai.xi     {
3424*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3425*53ee8cc1Swenshuai.xi         return;
3426*53ee8cc1Swenshuai.xi     }
3427*53ee8cc1Swenshuai.xi 
3428*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3429*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3430*53ee8cc1Swenshuai.xi 
3431*53ee8cc1Swenshuai.xi     if(bPause)
3432*53ee8cc1Swenshuai.xi     {
3433*53ee8cc1Swenshuai.xi         REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_STR2MI_PAUSE);
3434*53ee8cc1Swenshuai.xi     }
3435*53ee8cc1Swenshuai.xi     else
3436*53ee8cc1Swenshuai.xi     {
3437*53ee8cc1Swenshuai.xi         REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_STR2MI_PAUSE);
3438*53ee8cc1Swenshuai.xi     }
3439*53ee8cc1Swenshuai.xi }
3440*53ee8cc1Swenshuai.xi 
HAL_PVR_RecPid(MS_U32 u32PVREng,MS_BOOL bSet)3441*53ee8cc1Swenshuai.xi void HAL_PVR_RecPid(MS_U32 u32PVREng, MS_BOOL bSet)
3442*53ee8cc1Swenshuai.xi {
3443*53ee8cc1Swenshuai.xi     if(u32PVREng >= TSP_PVRENG_NUM)
3444*53ee8cc1Swenshuai.xi     {
3445*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3446*53ee8cc1Swenshuai.xi         return;
3447*53ee8cc1Swenshuai.xi     }
3448*53ee8cc1Swenshuai.xi 
3449*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3450*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3451*53ee8cc1Swenshuai.xi 
3452*53ee8cc1Swenshuai.xi     if(bSet)
3453*53ee8cc1Swenshuai.xi     {
3454*53ee8cc1Swenshuai.xi         REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_20, CFG_PVR_20_REG_RECORD_ALL);
3455*53ee8cc1Swenshuai.xi     }
3456*53ee8cc1Swenshuai.xi     else
3457*53ee8cc1Swenshuai.xi     {
3458*53ee8cc1Swenshuai.xi         REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_20, CFG_PVR_20_REG_RECORD_ALL);
3459*53ee8cc1Swenshuai.xi     }
3460*53ee8cc1Swenshuai.xi }
3461*53ee8cc1Swenshuai.xi 
3462*53ee8cc1Swenshuai.xi #if FPGA_TEST
3463*53ee8cc1Swenshuai.xi 
HAL_PVR_Alignment_Enable(MS_U32 u32PVREng,MS_BOOL bEnable)3464*53ee8cc1Swenshuai.xi     void HAL_PVR_Alignment_Enable(MS_U32 u32PVREng, MS_BOOL bEnable)
3465*53ee8cc1Swenshuai.xi     {
3466*53ee8cc1Swenshuai.xi         if(u32PVREng >= TSP_PVRENG_NUM)
3467*53ee8cc1Swenshuai.xi         {
3468*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3469*53ee8cc1Swenshuai.xi             return;
3470*53ee8cc1Swenshuai.xi         }
3471*53ee8cc1Swenshuai.xi 
3472*53ee8cc1Swenshuai.xi         REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3473*53ee8cc1Swenshuai.xi         MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3474*53ee8cc1Swenshuai.xi 
3475*53ee8cc1Swenshuai.xi         if(bEnable)
3476*53ee8cc1Swenshuai.xi         {
3477*53ee8cc1Swenshuai.xi             REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_ALIGN_EN);
3478*53ee8cc1Swenshuai.xi         }
3479*53ee8cc1Swenshuai.xi         else
3480*53ee8cc1Swenshuai.xi         {
3481*53ee8cc1Swenshuai.xi             REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_ALIGN_EN);
3482*53ee8cc1Swenshuai.xi         }
3483*53ee8cc1Swenshuai.xi     }
3484*53ee8cc1Swenshuai.xi 
HAL_PVR_FlushData(MS_U32 u32PVREng)3485*53ee8cc1Swenshuai.xi     void HAL_PVR_FlushData(MS_U32 u32PVREng)
3486*53ee8cc1Swenshuai.xi     {
3487*53ee8cc1Swenshuai.xi         if(u32PVREng >= TSP_PVRENG_NUM)
3488*53ee8cc1Swenshuai.xi         {
3489*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3490*53ee8cc1Swenshuai.xi             return;
3491*53ee8cc1Swenshuai.xi         }
3492*53ee8cc1Swenshuai.xi 
3493*53ee8cc1Swenshuai.xi         REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3494*53ee8cc1Swenshuai.xi         MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3495*53ee8cc1Swenshuai.xi 
3496*53ee8cc1Swenshuai.xi         REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_0D, CFG_PVR_0D_REG_FLUSH_PVR_DATA);
3497*53ee8cc1Swenshuai.xi         REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_0D, CFG_PVR_0D_REG_FLUSH_PVR_DATA);
3498*53ee8cc1Swenshuai.xi     }
3499*53ee8cc1Swenshuai.xi 
HAL_PVR_Skip_Scrmb(MS_U32 u32PVREng,MS_BOOL bSkip)3500*53ee8cc1Swenshuai.xi     void HAL_PVR_Skip_Scrmb(MS_U32 u32PVREng, MS_BOOL bSkip)
3501*53ee8cc1Swenshuai.xi     {
3502*53ee8cc1Swenshuai.xi         if(u32PVREng >= TSP_PVRENG_NUM)
3503*53ee8cc1Swenshuai.xi         {
3504*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3505*53ee8cc1Swenshuai.xi             return;
3506*53ee8cc1Swenshuai.xi         }
3507*53ee8cc1Swenshuai.xi 
3508*53ee8cc1Swenshuai.xi         REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3509*53ee8cc1Swenshuai.xi         MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3510*53ee8cc1Swenshuai.xi 
3511*53ee8cc1Swenshuai.xi         if(bSkip)
3512*53ee8cc1Swenshuai.xi         {
3513*53ee8cc1Swenshuai.xi             REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_20, CFG_PVR_20_REG_MASK_SCR_PVR_EN);
3514*53ee8cc1Swenshuai.xi         }
3515*53ee8cc1Swenshuai.xi         else
3516*53ee8cc1Swenshuai.xi         {
3517*53ee8cc1Swenshuai.xi             REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_20, CFG_PVR_20_REG_MASK_SCR_PVR_EN);
3518*53ee8cc1Swenshuai.xi         }
3519*53ee8cc1Swenshuai.xi     }
3520*53ee8cc1Swenshuai.xi 
HAL_PVR_Block_Dis(MS_U32 u32PVREng,MS_BOOL bDisable)3521*53ee8cc1Swenshuai.xi     void HAL_PVR_Block_Dis(MS_U32 u32PVREng, MS_BOOL bDisable)
3522*53ee8cc1Swenshuai.xi     {
3523*53ee8cc1Swenshuai.xi         if(u32PVREng >= TSP_PVRENG_NUM)
3524*53ee8cc1Swenshuai.xi         {
3525*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3526*53ee8cc1Swenshuai.xi             return;
3527*53ee8cc1Swenshuai.xi         }
3528*53ee8cc1Swenshuai.xi 
3529*53ee8cc1Swenshuai.xi         REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3530*53ee8cc1Swenshuai.xi         MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3531*53ee8cc1Swenshuai.xi 
3532*53ee8cc1Swenshuai.xi         if(bDisable)
3533*53ee8cc1Swenshuai.xi         {
3534*53ee8cc1Swenshuai.xi             REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_20, CFG_PVR_20_REG_PVR_BLOCK_DISABLE);
3535*53ee8cc1Swenshuai.xi         }
3536*53ee8cc1Swenshuai.xi         else
3537*53ee8cc1Swenshuai.xi         {
3538*53ee8cc1Swenshuai.xi             REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_20, CFG_PVR_20_REG_PVR_BLOCK_DISABLE);
3539*53ee8cc1Swenshuai.xi         }
3540*53ee8cc1Swenshuai.xi     }
3541*53ee8cc1Swenshuai.xi 
HAL_PVR_BurstLen(MS_U32 u32PVREng,MS_U16 u16BurstMode)3542*53ee8cc1Swenshuai.xi     void HAL_PVR_BurstLen(MS_U32 u32PVREng, MS_U16 u16BurstMode)
3543*53ee8cc1Swenshuai.xi     {
3544*53ee8cc1Swenshuai.xi         if(u32PVREng >= TSP_PVRENG_NUM)
3545*53ee8cc1Swenshuai.xi         {
3546*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3547*53ee8cc1Swenshuai.xi             return;
3548*53ee8cc1Swenshuai.xi         }
3549*53ee8cc1Swenshuai.xi 
3550*53ee8cc1Swenshuai.xi         REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3551*53ee8cc1Swenshuai.xi         MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3552*53ee8cc1Swenshuai.xi 
3553*53ee8cc1Swenshuai.xi         REG16_MSK_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_BURST_LEN_MASK, (u16BurstMode << CFG_PVR_00_REG_PVR_BURST_LEN_SHIFT));
3554*53ee8cc1Swenshuai.xi     }
3555*53ee8cc1Swenshuai.xi 
HAL_PVR_TimeStamp_Stream_En(MS_U32 u32pktDmxId,MS_BOOL bEnable)3556*53ee8cc1Swenshuai.xi     void HAL_PVR_TimeStamp_Stream_En(MS_U32 u32pktDmxId, MS_BOOL bEnable)
3557*53ee8cc1Swenshuai.xi     {
3558*53ee8cc1Swenshuai.xi         // not support
3559*53ee8cc1Swenshuai.xi     }
3560*53ee8cc1Swenshuai.xi 
HAL_PVR_MOBF_Enable(MS_U32 u32PVREng,MS_BOOL bEnable,MS_U32 u32Key)3561*53ee8cc1Swenshuai.xi     void HAL_PVR_MOBF_Enable(MS_U32 u32PVREng, MS_BOOL bEnable, MS_U32 u32Key)
3562*53ee8cc1Swenshuai.xi     {
3563*53ee8cc1Swenshuai.xi         // not support
3564*53ee8cc1Swenshuai.xi     }
3565*53ee8cc1Swenshuai.xi 
HAL_PVR_TimeStamp_Sel(MS_U32 u32PVREng,MS_BOOL bLocal_Stream)3566*53ee8cc1Swenshuai.xi     void HAL_PVR_TimeStamp_Sel(MS_U32 u32PVREng, MS_BOOL bLocal_Stream)
3567*53ee8cc1Swenshuai.xi     {
3568*53ee8cc1Swenshuai.xi         if (u32PVREng >= TSP_PVRENG_NUM)
3569*53ee8cc1Swenshuai.xi         {
3570*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3571*53ee8cc1Swenshuai.xi             return;
3572*53ee8cc1Swenshuai.xi         }
3573*53ee8cc1Swenshuai.xi 
3574*53ee8cc1Swenshuai.xi         REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3575*53ee8cc1Swenshuai.xi         MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3576*53ee8cc1Swenshuai.xi 
3577*53ee8cc1Swenshuai.xi         if (bLocal_Stream)  //Stream
3578*53ee8cc1Swenshuai.xi         {
3579*53ee8cc1Swenshuai.xi             REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_0D, CFG_PVR_0D_REG_PVR_TIMESTAMP_SRC_SEL);
3580*53ee8cc1Swenshuai.xi         }
3581*53ee8cc1Swenshuai.xi         else                //local
3582*53ee8cc1Swenshuai.xi         {
3583*53ee8cc1Swenshuai.xi             REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_0D, CFG_PVR_0D_REG_PVR_TIMESTAMP_SRC_SEL);
3584*53ee8cc1Swenshuai.xi         }
3585*53ee8cc1Swenshuai.xi     }
3586*53ee8cc1Swenshuai.xi 
HAL_PVR_SetPVRTimeStamp_Stream(MS_U32 u32PVREng,MS_U32 u32Stamp)3587*53ee8cc1Swenshuai.xi     void HAL_PVR_SetPVRTimeStamp_Stream(MS_U32 u32PVREng , MS_U32 u32Stamp)
3588*53ee8cc1Swenshuai.xi     {
3589*53ee8cc1Swenshuai.xi         // not supported
3590*53ee8cc1Swenshuai.xi     }
3591*53ee8cc1Swenshuai.xi 
HAL_PVR_PauseTime_En(MS_U32 u32PVREng,MS_BOOL bEnable)3592*53ee8cc1Swenshuai.xi     void HAL_PVR_PauseTime_En(MS_U32 u32PVREng,MS_BOOL bEnable)
3593*53ee8cc1Swenshuai.xi     {
3594*53ee8cc1Swenshuai.xi         if (u32PVREng >= TSP_PVRENG_NUM)
3595*53ee8cc1Swenshuai.xi         {
3596*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3597*53ee8cc1Swenshuai.xi             return;
3598*53ee8cc1Swenshuai.xi         }
3599*53ee8cc1Swenshuai.xi 
3600*53ee8cc1Swenshuai.xi         REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3601*53ee8cc1Swenshuai.xi         MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3602*53ee8cc1Swenshuai.xi 
3603*53ee8cc1Swenshuai.xi         // bypass_timestamp_sel: 1 , timestamp don't need to consider PVR pause time
3604*53ee8cc1Swenshuai.xi         //                       0 , timestamp needs to consider PVR pause time
3605*53ee8cc1Swenshuai.xi         if(bEnable)
3606*53ee8cc1Swenshuai.xi         {
3607*53ee8cc1Swenshuai.xi             REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_26, CFG_PVR_26_REG_BYPASS_TIMESTAMP_SEL);
3608*53ee8cc1Swenshuai.xi         }
3609*53ee8cc1Swenshuai.xi         else
3610*53ee8cc1Swenshuai.xi         {
3611*53ee8cc1Swenshuai.xi             REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_26, CFG_PVR_26_REG_BYPASS_TIMESTAMP_SEL);
3612*53ee8cc1Swenshuai.xi         }
3613*53ee8cc1Swenshuai.xi     }
3614*53ee8cc1Swenshuai.xi 
HAL_PVR_SetPauseTime(MS_U32 u32PVREng,MS_U32 u32PauseTime)3615*53ee8cc1Swenshuai.xi     void HAL_PVR_SetPauseTime(MS_U32 u32PVREng, MS_U32 u32PauseTime)
3616*53ee8cc1Swenshuai.xi     {
3617*53ee8cc1Swenshuai.xi         if (u32PVREng >= TSP_PVRENG_NUM)
3618*53ee8cc1Swenshuai.xi         {
3619*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3620*53ee8cc1Swenshuai.xi             return;
3621*53ee8cc1Swenshuai.xi         }
3622*53ee8cc1Swenshuai.xi 
3623*53ee8cc1Swenshuai.xi         REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3624*53ee8cc1Swenshuai.xi         MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3625*53ee8cc1Swenshuai.xi 
3626*53ee8cc1Swenshuai.xi         REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_22_23, u32PauseTime);
3627*53ee8cc1Swenshuai.xi     }
3628*53ee8cc1Swenshuai.xi 
HAL_PVR_RecNull(MS_U32 u32PVREng,MS_BOOL bSet)3629*53ee8cc1Swenshuai.xi     void HAL_PVR_RecNull(MS_U32 u32PVREng, MS_BOOL bSet)
3630*53ee8cc1Swenshuai.xi     {
3631*53ee8cc1Swenshuai.xi         if(u32PVREng >= TSP_PVRENG_NUM)
3632*53ee8cc1Swenshuai.xi         {
3633*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3634*53ee8cc1Swenshuai.xi             return;
3635*53ee8cc1Swenshuai.xi         }
3636*53ee8cc1Swenshuai.xi 
3637*53ee8cc1Swenshuai.xi         REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3638*53ee8cc1Swenshuai.xi         MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3639*53ee8cc1Swenshuai.xi 
3640*53ee8cc1Swenshuai.xi         if(bSet)
3641*53ee8cc1Swenshuai.xi         {
3642*53ee8cc1Swenshuai.xi             REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_20, CFG_PVR_20_REG_DIS_NULL_PKT);
3643*53ee8cc1Swenshuai.xi         }
3644*53ee8cc1Swenshuai.xi         else
3645*53ee8cc1Swenshuai.xi         {
3646*53ee8cc1Swenshuai.xi             REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_20, CFG_PVR_20_REG_DIS_NULL_PKT);
3647*53ee8cc1Swenshuai.xi         }
3648*53ee8cc1Swenshuai.xi     }
3649*53ee8cc1Swenshuai.xi 
HAL_PVR_SetBuf(MS_U32 u32PVREng,MS_U32 u32StartAddr0,MS_U32 u32BufSize0,MS_U32 u32StartAddr1,MS_U32 u32BufSize1)3650*53ee8cc1Swenshuai.xi     void HAL_PVR_SetBuf(MS_U32 u32PVREng , MS_U32 u32StartAddr0, MS_U32 u32BufSize0, MS_U32 u32StartAddr1, MS_U32 u32BufSize1)
3651*53ee8cc1Swenshuai.xi     {
3652*53ee8cc1Swenshuai.xi         if(u32PVREng >= TSP_PVRENG_NUM)
3653*53ee8cc1Swenshuai.xi         {
3654*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3655*53ee8cc1Swenshuai.xi             return;
3656*53ee8cc1Swenshuai.xi         }
3657*53ee8cc1Swenshuai.xi 
3658*53ee8cc1Swenshuai.xi         REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3659*53ee8cc1Swenshuai.xi         MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3660*53ee8cc1Swenshuai.xi 
3661*53ee8cc1Swenshuai.xi         MS_U32 u32EndAddr0 = u32StartAddr0 + u32BufSize0;
3662*53ee8cc1Swenshuai.xi         MS_U32 u32EndAddr1 = u32StartAddr1 + u32BufSize1;
3663*53ee8cc1Swenshuai.xi 
3664*53ee8cc1Swenshuai.xi         // head1
3665*53ee8cc1Swenshuai.xi         REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_01_02, (u32StartAddr0 >> MIU_BUS));
3666*53ee8cc1Swenshuai.xi         // end1
3667*53ee8cc1Swenshuai.xi         REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_05_06, (u32EndAddr0 >> MIU_BUS));
3668*53ee8cc1Swenshuai.xi         // mid1
3669*53ee8cc1Swenshuai.xi         REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_03_04, (u32StartAddr0 >> MIU_BUS));
3670*53ee8cc1Swenshuai.xi 
3671*53ee8cc1Swenshuai.xi         // head2
3672*53ee8cc1Swenshuai.xi         REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_07_08, (u32StartAddr1 >> MIU_BUS));
3673*53ee8cc1Swenshuai.xi         // end2
3674*53ee8cc1Swenshuai.xi         REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_0B_0C, (u32EndAddr1 >> MIU_BUS));
3675*53ee8cc1Swenshuai.xi         // mid2
3676*53ee8cc1Swenshuai.xi         REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_09_0A, (u32StartAddr1 >> MIU_BUS));
3677*53ee8cc1Swenshuai.xi     }
3678*53ee8cc1Swenshuai.xi 
3679*53ee8cc1Swenshuai.xi #endif
3680*53ee8cc1Swenshuai.xi 
HAL_PVR_SetStr2Miu_StartAddr(MS_U32 u32PVREng,MS_U32 u32StartAddr0,MS_U32 u32StartAddr1)3681*53ee8cc1Swenshuai.xi void HAL_PVR_SetStr2Miu_StartAddr(MS_U32 u32PVREng, MS_U32 u32StartAddr0, MS_U32 u32StartAddr1)
3682*53ee8cc1Swenshuai.xi {
3683*53ee8cc1Swenshuai.xi     if(u32PVREng >= TSP_PVRENG_NUM)
3684*53ee8cc1Swenshuai.xi     {
3685*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3686*53ee8cc1Swenshuai.xi         return;
3687*53ee8cc1Swenshuai.xi     }
3688*53ee8cc1Swenshuai.xi 
3689*53ee8cc1Swenshuai.xi     // Check MIU select
3690*53ee8cc1Swenshuai.xi     MS_U8   u8MiuSel;
3691*53ee8cc1Swenshuai.xi     MS_PHY  phyMiuOffsetPvrBuf0, phyMiuOffsetPvrBuf1;
3692*53ee8cc1Swenshuai.xi     MS_U8   u8Shift = u32PVREng * TSP_MIU_SEL_BITS_LEN;
3693*53ee8cc1Swenshuai.xi 
3694*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetPvrBuf0, u32StartAddr0);
3695*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetPvrBuf1, u32StartAddr1);
3696*53ee8cc1Swenshuai.xi 
3697*53ee8cc1Swenshuai.xi     // Select MIU
3698*53ee8cc1Swenshuai.xi     REG32_MSK_W(&_RegTopCtrl->CFG_TOP_05_06, (CFG_TOP_05_06_REG_MIU_SEL_PVR_MASK << u8Shift), (u8MiuSel << (CFG_TOP_05_06_REG_MIU_SEL_PVR_SHIFT + u8Shift)));
3699*53ee8cc1Swenshuai.xi 
3700*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3701*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3702*53ee8cc1Swenshuai.xi 
3703*53ee8cc1Swenshuai.xi     // head1
3704*53ee8cc1Swenshuai.xi     REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_01_02, (phyMiuOffsetPvrBuf0 >> MIU_BUS));
3705*53ee8cc1Swenshuai.xi     // head2
3706*53ee8cc1Swenshuai.xi     REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_07_08, (phyMiuOffsetPvrBuf1 >> MIU_BUS));
3707*53ee8cc1Swenshuai.xi }
3708*53ee8cc1Swenshuai.xi 
HAL_PVR_SetStr2Miu_MidAddr(MS_U32 u32PVREng,MS_U32 u32MidAddr0,MS_U32 u32MidAddr1)3709*53ee8cc1Swenshuai.xi void HAL_PVR_SetStr2Miu_MidAddr(MS_U32 u32PVREng, MS_U32 u32MidAddr0, MS_U32 u32MidAddr1)
3710*53ee8cc1Swenshuai.xi {
3711*53ee8cc1Swenshuai.xi     if(u32PVREng >= TSP_PVRENG_NUM)
3712*53ee8cc1Swenshuai.xi     {
3713*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3714*53ee8cc1Swenshuai.xi         return;
3715*53ee8cc1Swenshuai.xi     }
3716*53ee8cc1Swenshuai.xi 
3717*53ee8cc1Swenshuai.xi     // Check MIU select
3718*53ee8cc1Swenshuai.xi     MS_U8   u8MiuSel;
3719*53ee8cc1Swenshuai.xi     MS_PHY  phyMiuOffsetPvrBuf0, phyMiuOffsetPvrBuf1;
3720*53ee8cc1Swenshuai.xi     MS_U8   u8Shift = u32PVREng * TSP_MIU_SEL_BITS_LEN;
3721*53ee8cc1Swenshuai.xi 
3722*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetPvrBuf0, u32MidAddr0);
3723*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetPvrBuf1, u32MidAddr1);
3724*53ee8cc1Swenshuai.xi 
3725*53ee8cc1Swenshuai.xi     // Select MIU
3726*53ee8cc1Swenshuai.xi     REG32_MSK_W(&_RegTopCtrl->CFG_TOP_05_06, (CFG_TOP_05_06_REG_MIU_SEL_PVR_MASK << u8Shift), (u8MiuSel << (CFG_TOP_05_06_REG_MIU_SEL_PVR_SHIFT + u8Shift)));
3727*53ee8cc1Swenshuai.xi 
3728*53ee8cc1Swenshuai.xi 
3729*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3730*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3731*53ee8cc1Swenshuai.xi 
3732*53ee8cc1Swenshuai.xi     // mid1
3733*53ee8cc1Swenshuai.xi     REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_03_04, (phyMiuOffsetPvrBuf0 >> MIU_BUS));
3734*53ee8cc1Swenshuai.xi     // mid2
3735*53ee8cc1Swenshuai.xi     REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_09_0A, (phyMiuOffsetPvrBuf1 >> MIU_BUS));
3736*53ee8cc1Swenshuai.xi }
3737*53ee8cc1Swenshuai.xi 
HAL_PVR_SetStr2Miu_EndAddr(MS_U32 u32PVREng,MS_U32 u32EndAddr0,MS_U32 u32EndAddr1)3738*53ee8cc1Swenshuai.xi void HAL_PVR_SetStr2Miu_EndAddr(MS_U32 u32PVREng, MS_U32 u32EndAddr0, MS_U32 u32EndAddr1)
3739*53ee8cc1Swenshuai.xi {
3740*53ee8cc1Swenshuai.xi     if(u32PVREng >= TSP_PVRENG_NUM)
3741*53ee8cc1Swenshuai.xi     {
3742*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3743*53ee8cc1Swenshuai.xi         return;
3744*53ee8cc1Swenshuai.xi     }
3745*53ee8cc1Swenshuai.xi 
3746*53ee8cc1Swenshuai.xi     // Check MIU select
3747*53ee8cc1Swenshuai.xi     MS_U8   u8MiuSel;
3748*53ee8cc1Swenshuai.xi     MS_PHY  phyMiuOffsetPvrBuf0, phyMiuOffsetPvrBuf1;
3749*53ee8cc1Swenshuai.xi     MS_U8   u8Shift = u32PVREng * TSP_MIU_SEL_BITS_LEN;
3750*53ee8cc1Swenshuai.xi 
3751*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetPvrBuf0, u32EndAddr0);
3752*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetPvrBuf1, u32EndAddr1);
3753*53ee8cc1Swenshuai.xi 
3754*53ee8cc1Swenshuai.xi     // Select MIU
3755*53ee8cc1Swenshuai.xi     REG32_MSK_W(&_RegTopCtrl->CFG_TOP_05_06, (CFG_TOP_05_06_REG_MIU_SEL_PVR_MASK << u8Shift), (u8MiuSel << (CFG_TOP_05_06_REG_MIU_SEL_PVR_SHIFT + u8Shift)));
3756*53ee8cc1Swenshuai.xi 
3757*53ee8cc1Swenshuai.xi 
3758*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3759*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3760*53ee8cc1Swenshuai.xi 
3761*53ee8cc1Swenshuai.xi     // end1
3762*53ee8cc1Swenshuai.xi     REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_05_06, (u32EndAddr0 >> MIU_BUS));
3763*53ee8cc1Swenshuai.xi     // end2
3764*53ee8cc1Swenshuai.xi     REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_0B_0C, (u32EndAddr1 >> MIU_BUS));
3765*53ee8cc1Swenshuai.xi }
3766*53ee8cc1Swenshuai.xi 
HAL_PVR_GetWritePtr(MS_U32 u32PVREng)3767*53ee8cc1Swenshuai.xi MS_U32 HAL_PVR_GetWritePtr(MS_U32 u32PVREng)
3768*53ee8cc1Swenshuai.xi {
3769*53ee8cc1Swenshuai.xi     if(u32PVREng >= TSP_PVRENG_NUM)
3770*53ee8cc1Swenshuai.xi     {
3771*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
3772*53ee8cc1Swenshuai.xi         return 0;
3773*53ee8cc1Swenshuai.xi     }
3774*53ee8cc1Swenshuai.xi 
3775*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3776*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
3777*53ee8cc1Swenshuai.xi 
3778*53ee8cc1Swenshuai.xi     return (REG32_R(&RegPvrCtrl[u8PvrEng].CFG_PVR_13_14) << MIU_BUS);
3779*53ee8cc1Swenshuai.xi }
3780*53ee8cc1Swenshuai.xi 
3781*53ee8cc1Swenshuai.xi 
HAL_PVR_GetEngSrc(MS_U32 u32EngDst,TSP_SRC_SEQ * eSrc)3782*53ee8cc1Swenshuai.xi void HAL_PVR_GetEngSrc(MS_U32 u32EngDst, TSP_SRC_SEQ *eSrc)
3783*53ee8cc1Swenshuai.xi {
3784*53ee8cc1Swenshuai.xi     if(u32EngDst >= TSP_PVRENG_NUM)
3785*53ee8cc1Swenshuai.xi     {
3786*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32EngDst));
3787*53ee8cc1Swenshuai.xi         return;
3788*53ee8cc1Swenshuai.xi     }
3789*53ee8cc1Swenshuai.xi 
3790*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32EngDst < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
3791*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32EngDst < E_TSP_PVR_PVRENG_8)? u32EngDst : (u32EngDst - E_TSP_PVR_PVRENG_8);
3792*53ee8cc1Swenshuai.xi 
3793*53ee8cc1Swenshuai.xi     *eSrc = (REG16_R(&RegPvrCtrl[u8PvrEng].CFG_PVR_10) & CFG_PVR_10_REG_INPUT_SRC_MASK) >> CFG_PVR_10_REG_INPUT_SRC_SHIFT;
3794*53ee8cc1Swenshuai.xi }
3795*53ee8cc1Swenshuai.xi 
3796*53ee8cc1Swenshuai.xi //   kaiser Only!!!
HAL_TSP_FilePath2Tsif_Mapping(MS_U32 u32FileEng)3797*53ee8cc1Swenshuai.xi FILEENG_SEQ HAL_TSP_FilePath2Tsif_Mapping(MS_U32 u32FileEng)
3798*53ee8cc1Swenshuai.xi {
3799*53ee8cc1Swenshuai.xi     switch (u32FileEng)
3800*53ee8cc1Swenshuai.xi     {
3801*53ee8cc1Swenshuai.xi         case 0: //File in Eng 0
3802*53ee8cc1Swenshuai.xi             return E_FILEENG_TSIF1;
3803*53ee8cc1Swenshuai.xi         case 1: //File in Eng 1
3804*53ee8cc1Swenshuai.xi             return E_FILEENG_TSIF3;
3805*53ee8cc1Swenshuai.xi         case 2: //File in Eng 2
3806*53ee8cc1Swenshuai.xi             return E_FILEENG_TSIF0;
3807*53ee8cc1Swenshuai.xi         case 3: //File in Eng 3
3808*53ee8cc1Swenshuai.xi             return E_FILEENG_TSIF2;
3809*53ee8cc1Swenshuai.xi         case 4:
3810*53ee8cc1Swenshuai.xi             return E_FILEENG_TSIF4;
3811*53ee8cc1Swenshuai.xi         case 5:
3812*53ee8cc1Swenshuai.xi             return E_FILEENG_TSIF5;
3813*53ee8cc1Swenshuai.xi         case 6:
3814*53ee8cc1Swenshuai.xi             return E_FILEENG_TSIF6;
3815*53ee8cc1Swenshuai.xi         default:
3816*53ee8cc1Swenshuai.xi             return E_FILEENG_INVALID;
3817*53ee8cc1Swenshuai.xi     }
3818*53ee8cc1Swenshuai.xi }
3819*53ee8cc1Swenshuai.xi 
3820*53ee8cc1Swenshuai.xi // @NOTE for backward competible when calling flowset pvr
3821*53ee8cc1Swenshuai.xi //   kaiser Only!!!
HAL_TSP_Eng2PktDmx_Mapping(MS_U32 u32Eng)3822*53ee8cc1Swenshuai.xi TSP_SRC_SEQ HAL_TSP_Eng2PktDmx_Mapping(MS_U32 u32Eng)
3823*53ee8cc1Swenshuai.xi {
3824*53ee8cc1Swenshuai.xi     switch(u32Eng)
3825*53ee8cc1Swenshuai.xi     {
3826*53ee8cc1Swenshuai.xi         case 0:
3827*53ee8cc1Swenshuai.xi             return E_TSP_SRC_PKTDMX2;
3828*53ee8cc1Swenshuai.xi         case 1:
3829*53ee8cc1Swenshuai.xi             return E_TSP_SRC_PKTDMX3;
3830*53ee8cc1Swenshuai.xi         case 2:
3831*53ee8cc1Swenshuai.xi             return E_TSP_SRC_PKTDMX2;
3832*53ee8cc1Swenshuai.xi         case 3:
3833*53ee8cc1Swenshuai.xi             return E_TSP_SRC_PKTDMX3;
3834*53ee8cc1Swenshuai.xi         default:
3835*53ee8cc1Swenshuai.xi             return E_TSP_SRC_INVALID;
3836*53ee8cc1Swenshuai.xi     }
3837*53ee8cc1Swenshuai.xi }
3838*53ee8cc1Swenshuai.xi 
3839*53ee8cc1Swenshuai.xi //   kaiser Only!!!
HAL_TSP_TsifMapping(TSP_HAL_TSIF eTSIF,MS_BOOL bFileIn)3840*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_TsifMapping(TSP_HAL_TSIF eTSIF, MS_BOOL bFileIn)
3841*53ee8cc1Swenshuai.xi {
3842*53ee8cc1Swenshuai.xi     MS_U32  u32PhyTSIF = 0;
3843*53ee8cc1Swenshuai.xi     switch (eTSIF)
3844*53ee8cc1Swenshuai.xi     {
3845*53ee8cc1Swenshuai.xi         case E_TSP_HAL_TSIF_0:
3846*53ee8cc1Swenshuai.xi             if(bFileIn)
3847*53ee8cc1Swenshuai.xi                 u32PhyTSIF = TSP_TSIF1; // @NOTE tsif1 is used for playback0 file-in
3848*53ee8cc1Swenshuai.xi             else
3849*53ee8cc1Swenshuai.xi                 u32PhyTSIF = TSP_TSIF0;
3850*53ee8cc1Swenshuai.xi             break;
3851*53ee8cc1Swenshuai.xi         case E_TSP_HAL_TSIF_1:
3852*53ee8cc1Swenshuai.xi             if(bFileIn)
3853*53ee8cc1Swenshuai.xi                 u32PhyTSIF = TSP_TSIF3; // @NOTE tsif3 is used for playback0 file-in
3854*53ee8cc1Swenshuai.xi             else
3855*53ee8cc1Swenshuai.xi                 u32PhyTSIF = TSP_TSIF2;
3856*53ee8cc1Swenshuai.xi             break;
3857*53ee8cc1Swenshuai.xi         case E_TSP_HAL_TSIF_2:
3858*53ee8cc1Swenshuai.xi             if(bFileIn)
3859*53ee8cc1Swenshuai.xi                 u32PhyTSIF = TSP_TSIF0;
3860*53ee8cc1Swenshuai.xi             else
3861*53ee8cc1Swenshuai.xi                 u32PhyTSIF = TSP_TSIF3;
3862*53ee8cc1Swenshuai.xi             break;
3863*53ee8cc1Swenshuai.xi         case E_TSP_HAL_TSIF_3:
3864*53ee8cc1Swenshuai.xi             if(bFileIn)
3865*53ee8cc1Swenshuai.xi                 u32PhyTSIF = TSP_TSIF2;
3866*53ee8cc1Swenshuai.xi             else
3867*53ee8cc1Swenshuai.xi                 u32PhyTSIF = TSP_TSIF1;
3868*53ee8cc1Swenshuai.xi             break;
3869*53ee8cc1Swenshuai.xi         case E_TSP_HAL_TSIF_4:
3870*53ee8cc1Swenshuai.xi             u32PhyTSIF = TSP_TSIF4;
3871*53ee8cc1Swenshuai.xi             break;
3872*53ee8cc1Swenshuai.xi         case E_TSP_HAL_TSIF_5:
3873*53ee8cc1Swenshuai.xi             u32PhyTSIF = TSP_TSIF5;
3874*53ee8cc1Swenshuai.xi             break;
3875*53ee8cc1Swenshuai.xi         case E_TSP_HAL_TSIF_6:
3876*53ee8cc1Swenshuai.xi             u32PhyTSIF = TSP_TSIF6;
3877*53ee8cc1Swenshuai.xi             break;
3878*53ee8cc1Swenshuai.xi         case E_TSP_HAL_TSIF_PVR0:
3879*53ee8cc1Swenshuai.xi             u32PhyTSIF = TSP_TSIF2;
3880*53ee8cc1Swenshuai.xi             break;
3881*53ee8cc1Swenshuai.xi         case E_TSP_HAL_TSIF_PVR1:
3882*53ee8cc1Swenshuai.xi             u32PhyTSIF = TSP_TSIF3;
3883*53ee8cc1Swenshuai.xi             break;
3884*53ee8cc1Swenshuai.xi         case E_TSP_HAL_TSIF_PVR2:
3885*53ee8cc1Swenshuai.xi             u32PhyTSIF = TSP_TSIF2;
3886*53ee8cc1Swenshuai.xi             break;
3887*53ee8cc1Swenshuai.xi         case E_TSP_HAL_TSIF_PVR3:
3888*53ee8cc1Swenshuai.xi             u32PhyTSIF = TSP_TSIF3;
3889*53ee8cc1Swenshuai.xi             break;
3890*53ee8cc1Swenshuai.xi        default:
3891*53ee8cc1Swenshuai.xi             printf("[PVR ERROR][%s][%d] mapping TSIF error\n",__FUNCTION__,__LINE__);
3892*53ee8cc1Swenshuai.xi             break;
3893*53ee8cc1Swenshuai.xi     }
3894*53ee8cc1Swenshuai.xi 
3895*53ee8cc1Swenshuai.xi     return u32PhyTSIF;
3896*53ee8cc1Swenshuai.xi }
3897*53ee8cc1Swenshuai.xi 
3898*53ee8cc1Swenshuai.xi //   kaiser Only!!!
HAL_TSP_PktDmx2FltSrc_Mapping(TSP_SRC_SEQ eSrc)3899*53ee8cc1Swenshuai.xi TSP_PIDFLT_SRC HAL_TSP_PktDmx2FltSrc_Mapping(TSP_SRC_SEQ eSrc)
3900*53ee8cc1Swenshuai.xi {
3901*53ee8cc1Swenshuai.xi     // @NOTE we map hw pkt dmx setting to api layer flow at this function
3902*53ee8cc1Swenshuai.xi 
3903*53ee8cc1Swenshuai.xi     TSP_PIDFLT_SRC ePidFltSrc = E_TSP_PIDFLT_INVALID;
3904*53ee8cc1Swenshuai.xi 
3905*53ee8cc1Swenshuai.xi     switch (eSrc)
3906*53ee8cc1Swenshuai.xi     {
3907*53ee8cc1Swenshuai.xi         case E_TSP_SRC_PKTDMX0:
3908*53ee8cc1Swenshuai.xi             ePidFltSrc = E_TSP_PIDFLT_LIVE0;
3909*53ee8cc1Swenshuai.xi             break;
3910*53ee8cc1Swenshuai.xi         case E_TSP_SRC_PKTDMX1:
3911*53ee8cc1Swenshuai.xi             ePidFltSrc = E_TSP_PIDFLT_FILE0;
3912*53ee8cc1Swenshuai.xi             break;
3913*53ee8cc1Swenshuai.xi         case E_TSP_SRC_PKTDMX2:
3914*53ee8cc1Swenshuai.xi             ePidFltSrc = E_TSP_PIDFLT_LIVE1;
3915*53ee8cc1Swenshuai.xi             break;
3916*53ee8cc1Swenshuai.xi         case E_TSP_SRC_PKTDMX3:
3917*53ee8cc1Swenshuai.xi             ePidFltSrc = E_TSP_PIDFLT_FILE1;
3918*53ee8cc1Swenshuai.xi             break;
3919*53ee8cc1Swenshuai.xi         case E_TSP_SRC_PKTDMX4:
3920*53ee8cc1Swenshuai.xi             ePidFltSrc = E_TSP_PIDFLT_LIVE4;
3921*53ee8cc1Swenshuai.xi             break;
3922*53ee8cc1Swenshuai.xi         case E_TSP_SRC_PKTDMX5:
3923*53ee8cc1Swenshuai.xi             ePidFltSrc = E_TSP_PIDFLT_LIVE5;
3924*53ee8cc1Swenshuai.xi             break;
3925*53ee8cc1Swenshuai.xi         case E_TSP_SRC_PKTDMX6:
3926*53ee8cc1Swenshuai.xi             ePidFltSrc = E_TSP_PIDFLT_LIVE6;
3927*53ee8cc1Swenshuai.xi             break;
3928*53ee8cc1Swenshuai.xi         default:
3929*53ee8cc1Swenshuai.xi             // @TODO add assert
3930*53ee8cc1Swenshuai.xi             printf ("[TSP_ERR][%s][%d] Wrong Engine Source!!\n", __FUNCTION__,__LINE__);
3931*53ee8cc1Swenshuai.xi             break;
3932*53ee8cc1Swenshuai.xi     }
3933*53ee8cc1Swenshuai.xi 
3934*53ee8cc1Swenshuai.xi     return ePidFltSrc;
3935*53ee8cc1Swenshuai.xi }
3936*53ee8cc1Swenshuai.xi 
HAL_TSP_GetDefaultFileinEng(void)3937*53ee8cc1Swenshuai.xi FILEENG_SEQ HAL_TSP_GetDefaultFileinEng(void)
3938*53ee8cc1Swenshuai.xi {
3939*53ee8cc1Swenshuai.xi     return E_FILEENG_TSIF1;
3940*53ee8cc1Swenshuai.xi }
3941*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFltDstMapping(TSP_PIDFLT_DST eDstType,MS_U32 u32Eng)3942*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_PidFltDstMapping(TSP_PIDFLT_DST eDstType, MS_U32 u32Eng)
3943*53ee8cc1Swenshuai.xi {
3944*53ee8cc1Swenshuai.xi     if(eDstType == E_TSP_PIDFLT_DST_VIDEO)
3945*53ee8cc1Swenshuai.xi     {
3946*53ee8cc1Swenshuai.xi         switch(u32Eng)
3947*53ee8cc1Swenshuai.xi         {
3948*53ee8cc1Swenshuai.xi             case 0:
3949*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_VFIFO;
3950*53ee8cc1Swenshuai.xi             case 1:
3951*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_VFIFO3D;
3952*53ee8cc1Swenshuai.xi             case 2:
3953*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_VFIFO3;
3954*53ee8cc1Swenshuai.xi             case 3:
3955*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_VFIFO4;
3956*53ee8cc1Swenshuai.xi             case 4:
3957*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_VFIFO5;
3958*53ee8cc1Swenshuai.xi             case 5:
3959*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_VFIFO6;
3960*53ee8cc1Swenshuai.xi             case 6:
3961*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_VFIFO7;
3962*53ee8cc1Swenshuai.xi             case 7:
3963*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_VFIFO8;
3964*53ee8cc1Swenshuai.xi             default:
3965*53ee8cc1Swenshuai.xi                 printf("[TSP ERROR][%s][%d] mapping Vfifo eng error\n", __FUNCTION__, __LINE__);
3966*53ee8cc1Swenshuai.xi                 return 0;
3967*53ee8cc1Swenshuai.xi         }
3968*53ee8cc1Swenshuai.xi     }
3969*53ee8cc1Swenshuai.xi     else if(eDstType == E_TSP_PIDFLT_DST_AUDIO)
3970*53ee8cc1Swenshuai.xi     {
3971*53ee8cc1Swenshuai.xi         switch(u32Eng)
3972*53ee8cc1Swenshuai.xi         {
3973*53ee8cc1Swenshuai.xi             case 0:
3974*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_AFIFO;
3975*53ee8cc1Swenshuai.xi             case 1:
3976*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_AFIFO2;
3977*53ee8cc1Swenshuai.xi             case 2:
3978*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_AFIFO3;
3979*53ee8cc1Swenshuai.xi             case 3:
3980*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_AFIFO4;
3981*53ee8cc1Swenshuai.xi             case 4:
3982*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_AFIFO5;
3983*53ee8cc1Swenshuai.xi             case 5:
3984*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_AFIFO6;
3985*53ee8cc1Swenshuai.xi             default:
3986*53ee8cc1Swenshuai.xi                 printf("[TSP ERROR][%s][%d] mapping Afifo eng error\n", __FUNCTION__, __LINE__);
3987*53ee8cc1Swenshuai.xi                 return 0;
3988*53ee8cc1Swenshuai.xi         }
3989*53ee8cc1Swenshuai.xi     }
3990*53ee8cc1Swenshuai.xi     else if(eDstType == E_TSP_PIDFLT_DST_PVR)
3991*53ee8cc1Swenshuai.xi     {
3992*53ee8cc1Swenshuai.xi         switch(u32Eng)
3993*53ee8cc1Swenshuai.xi         {
3994*53ee8cc1Swenshuai.xi             case 0:
3995*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_PVR1;
3996*53ee8cc1Swenshuai.xi             case 1:
3997*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_PVR2;
3998*53ee8cc1Swenshuai.xi             case 2:
3999*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_PVR3;
4000*53ee8cc1Swenshuai.xi             case 3:
4001*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_PVR4;
4002*53ee8cc1Swenshuai.xi             case 4:
4003*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_PVR5;
4004*53ee8cc1Swenshuai.xi             case 5:
4005*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_PVR6;
4006*53ee8cc1Swenshuai.xi             case 6:
4007*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_PVR7;
4008*53ee8cc1Swenshuai.xi             case 7:
4009*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_PVR8;
4010*53ee8cc1Swenshuai.xi             case 8:
4011*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_PVR9;
4012*53ee8cc1Swenshuai.xi             case 9:
4013*53ee8cc1Swenshuai.xi                 return TSP_PIDFLT_OUT_PVR10;
4014*53ee8cc1Swenshuai.xi 
4015*53ee8cc1Swenshuai.xi             default:
4016*53ee8cc1Swenshuai.xi                 printf("[TSP ERROR][%s][%d] mapping PVR eng error\n", __FUNCTION__, __LINE__);
4017*53ee8cc1Swenshuai.xi                 return 0;
4018*53ee8cc1Swenshuai.xi         }
4019*53ee8cc1Swenshuai.xi     }
4020*53ee8cc1Swenshuai.xi     else
4021*53ee8cc1Swenshuai.xi     {
4022*53ee8cc1Swenshuai.xi         printf("[TSP ERROR][%s][%d] pid filter destination type error\n", __FUNCTION__, __LINE__);
4023*53ee8cc1Swenshuai.xi         return 0;
4024*53ee8cc1Swenshuai.xi     }
4025*53ee8cc1Swenshuai.xi }
4026*53ee8cc1Swenshuai.xi 
HAL_TSP_Tsif2Fq_Mapping(MS_U32 u32Tsif)4027*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Tsif2Fq_Mapping(MS_U32 u32Tsif)
4028*53ee8cc1Swenshuai.xi {
4029*53ee8cc1Swenshuai.xi     MS_U32  u32Fq = 0;
4030*53ee8cc1Swenshuai.xi 
4031*53ee8cc1Swenshuai.xi     switch (u32Tsif)
4032*53ee8cc1Swenshuai.xi     {
4033*53ee8cc1Swenshuai.xi         case 0:
4034*53ee8cc1Swenshuai.xi             u32Fq = 0;
4035*53ee8cc1Swenshuai.xi             break;
4036*53ee8cc1Swenshuai.xi         case 1:
4037*53ee8cc1Swenshuai.xi             u32Fq = 2;
4038*53ee8cc1Swenshuai.xi             break;
4039*53ee8cc1Swenshuai.xi         case 2:
4040*53ee8cc1Swenshuai.xi             u32Fq = 3;
4041*53ee8cc1Swenshuai.xi             break;
4042*53ee8cc1Swenshuai.xi         case 3:
4043*53ee8cc1Swenshuai.xi             u32Fq = 1;
4044*53ee8cc1Swenshuai.xi             break;
4045*53ee8cc1Swenshuai.xi         case 4 ... 10: //exclude 7
4046*53ee8cc1Swenshuai.xi             u32Fq = u32Tsif;
4047*53ee8cc1Swenshuai.xi             break;
4048*53ee8cc1Swenshuai.xi        default:
4049*53ee8cc1Swenshuai.xi             printf("[PVR ERROR][%s][%d] mapping TSIF:%u error\n",__FUNCTION__,__LINE__,(unsigned int)u32Tsif);
4050*53ee8cc1Swenshuai.xi             break;
4051*53ee8cc1Swenshuai.xi     }
4052*53ee8cc1Swenshuai.xi 
4053*53ee8cc1Swenshuai.xi     return u32Fq;
4054*53ee8cc1Swenshuai.xi }
4055*53ee8cc1Swenshuai.xi 
HAL_TSP_3WirePadMapping(MS_U8 u8Pad3WireId)4056*53ee8cc1Swenshuai.xi TSP_TS_PAD HAL_TSP_3WirePadMapping(MS_U8 u8Pad3WireId)
4057*53ee8cc1Swenshuai.xi {
4058*53ee8cc1Swenshuai.xi     switch(u8Pad3WireId)
4059*53ee8cc1Swenshuai.xi     {
4060*53ee8cc1Swenshuai.xi         case 4:
4061*53ee8cc1Swenshuai.xi             return E_TSP_TS_PAD_EXT4;
4062*53ee8cc1Swenshuai.xi         case 5:
4063*53ee8cc1Swenshuai.xi             return E_TSP_TS_PAD_EXT5;
4064*53ee8cc1Swenshuai.xi         case 6:
4065*53ee8cc1Swenshuai.xi             return E_TSP_TS_PAD_EXT6;
4066*53ee8cc1Swenshuai.xi         case 7:
4067*53ee8cc1Swenshuai.xi             return E_TSP_TS_PAD_EXT7;
4068*53ee8cc1Swenshuai.xi         default:
4069*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[PVR ERROR][%s][%d] mapping 3WirePad:%u error\n",__FUNCTION__,__LINE__,u8Pad3WireId));
4070*53ee8cc1Swenshuai.xi             return E_TSP_TS_PAD_INVALID;
4071*53ee8cc1Swenshuai.xi     }
4072*53ee8cc1Swenshuai.xi }
4073*53ee8cc1Swenshuai.xi 
HAL_PVR_SetStrPacketMode(MS_U32 u32PVREng,MS_BOOL bSet)4074*53ee8cc1Swenshuai.xi void HAL_PVR_SetStrPacketMode(MS_U32 u32PVREng, MS_BOOL bSet)
4075*53ee8cc1Swenshuai.xi {
4076*53ee8cc1Swenshuai.xi     if(u32PVREng >= TSP_PVRENG_NUM)
4077*53ee8cc1Swenshuai.xi     {
4078*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
4079*53ee8cc1Swenshuai.xi         return;
4080*53ee8cc1Swenshuai.xi     }
4081*53ee8cc1Swenshuai.xi 
4082*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
4083*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
4084*53ee8cc1Swenshuai.xi 
4085*53ee8cc1Swenshuai.xi     if(bSet)
4086*53ee8cc1Swenshuai.xi     {
4087*53ee8cc1Swenshuai.xi         REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_PKT192_EN);
4088*53ee8cc1Swenshuai.xi     }
4089*53ee8cc1Swenshuai.xi     else
4090*53ee8cc1Swenshuai.xi     {
4091*53ee8cc1Swenshuai.xi         REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_PKT192_EN);
4092*53ee8cc1Swenshuai.xi     }
4093*53ee8cc1Swenshuai.xi }
4094*53ee8cc1Swenshuai.xi 
HAL_PVR_GetPVRTimeStamp(MS_U32 u32PVREng)4095*53ee8cc1Swenshuai.xi MS_U32 HAL_PVR_GetPVRTimeStamp(MS_U32 u32PVREng)
4096*53ee8cc1Swenshuai.xi {
4097*53ee8cc1Swenshuai.xi     MS_U32 u32lpcr = 0;
4098*53ee8cc1Swenshuai.xi 
4099*53ee8cc1Swenshuai.xi     if(u32PVREng >= TSP_PVRENG_NUM)
4100*53ee8cc1Swenshuai.xi     {
4101*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
4102*53ee8cc1Swenshuai.xi         return 0;
4103*53ee8cc1Swenshuai.xi     }
4104*53ee8cc1Swenshuai.xi 
4105*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
4106*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
4107*53ee8cc1Swenshuai.xi 
4108*53ee8cc1Swenshuai.xi     REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_LPCR1_RLD);
4109*53ee8cc1Swenshuai.xi     u32lpcr = REG32_R(&RegPvrCtrl[u8PvrEng].CFG_PVR_17_18);
4110*53ee8cc1Swenshuai.xi     REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_LPCR1_RLD);
4111*53ee8cc1Swenshuai.xi 
4112*53ee8cc1Swenshuai.xi     return u32lpcr;
4113*53ee8cc1Swenshuai.xi }
4114*53ee8cc1Swenshuai.xi 
HAL_PVR_SetPVRTimeStamp(MS_U32 u32PVREng,MS_U32 u32Stamp)4115*53ee8cc1Swenshuai.xi void HAL_PVR_SetPVRTimeStamp(MS_U32 u32PVREng, MS_U32 u32Stamp)
4116*53ee8cc1Swenshuai.xi {
4117*53ee8cc1Swenshuai.xi     if(u32PVREng >= TSP_PVRENG_NUM)
4118*53ee8cc1Swenshuai.xi     {
4119*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
4120*53ee8cc1Swenshuai.xi         return;
4121*53ee8cc1Swenshuai.xi     }
4122*53ee8cc1Swenshuai.xi 
4123*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
4124*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
4125*53ee8cc1Swenshuai.xi 
4126*53ee8cc1Swenshuai.xi     //reset pvr control registers
4127*53ee8cc1Swenshuai.xi     REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_LPCR1_WLD);
4128*53ee8cc1Swenshuai.xi     REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_15_16, u32Stamp);
4129*53ee8cc1Swenshuai.xi     REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_00, CFG_PVR_00_REG_PVR_LPCR1_WLD);
4130*53ee8cc1Swenshuai.xi }
4131*53ee8cc1Swenshuai.xi 
4132*53ee8cc1Swenshuai.xi /*
4133*53ee8cc1Swenshuai.xi void HAL_PVR_SetTSIF(MS_U32 u32PVREng , MS_BOOL bPara, MS_BOOL bExtSync, MS_BOOL bDataSWP)
4134*53ee8cc1Swenshuai.xi {
4135*53ee8cc1Swenshuai.xi     if (bPara)
4136*53ee8cc1Swenshuai.xi     {
4137*53ee8cc1Swenshuai.xi         REG16_SET(&(_PVRReg[u32PVREng]->PVR_Ctrl0), PVR_TSIF_PARA_SEL);
4138*53ee8cc1Swenshuai.xi     }
4139*53ee8cc1Swenshuai.xi     else
4140*53ee8cc1Swenshuai.xi     {
4141*53ee8cc1Swenshuai.xi         REG16_CLR(&(_PVRReg[u32PVREng]->PVR_Ctrl0), PVR_TSIF_PARA_SEL);
4142*53ee8cc1Swenshuai.xi     }
4143*53ee8cc1Swenshuai.xi 
4144*53ee8cc1Swenshuai.xi     if (bExtSync)
4145*53ee8cc1Swenshuai.xi     {
4146*53ee8cc1Swenshuai.xi         REG16_SET(&(_PVRReg[u32PVREng]->PVR_Ctrl0), PVR_TSIF_EXT_SYNC);
4147*53ee8cc1Swenshuai.xi     }
4148*53ee8cc1Swenshuai.xi     else
4149*53ee8cc1Swenshuai.xi     {
4150*53ee8cc1Swenshuai.xi         REG16_CLR(&(_PVRReg[u32PVREng]->PVR_Ctrl0), PVR_TSIF_EXT_SYNC);
4151*53ee8cc1Swenshuai.xi     }
4152*53ee8cc1Swenshuai.xi 
4153*53ee8cc1Swenshuai.xi     if (bDataSWP)
4154*53ee8cc1Swenshuai.xi     {
4155*53ee8cc1Swenshuai.xi         REG16_SET(&(_PVRReg[u32PVREng]->PVR_Ctrl0), PVR_TSIF_DATA_SWP);
4156*53ee8cc1Swenshuai.xi     }
4157*53ee8cc1Swenshuai.xi     else
4158*53ee8cc1Swenshuai.xi     {
4159*53ee8cc1Swenshuai.xi         REG16_CLR(&(_PVRReg[u32PVREng]->PVR_Ctrl0), PVR_TSIF_DATA_SWP);
4160*53ee8cc1Swenshuai.xi     }
4161*53ee8cc1Swenshuai.xi }
4162*53ee8cc1Swenshuai.xi 
4163*53ee8cc1Swenshuai.xi void HAL_PVR_RecAtSync_Dis(MS_U32 u32PVREng, MS_BOOL bDis)
4164*53ee8cc1Swenshuai.xi {
4165*53ee8cc1Swenshuai.xi     if(bDis)
4166*53ee8cc1Swenshuai.xi     {
4167*53ee8cc1Swenshuai.xi         REG16_SET(&(_PVRReg[u32PVREng]->PVR_Ctrl1), PVR_REC_AT_SYNC_DIS);
4168*53ee8cc1Swenshuai.xi     }
4169*53ee8cc1Swenshuai.xi     else
4170*53ee8cc1Swenshuai.xi     {
4171*53ee8cc1Swenshuai.xi         REG16_CLR(&(_PVRReg[u32PVREng]->PVR_Ctrl1), PVR_REC_AT_SYNC_DIS);
4172*53ee8cc1Swenshuai.xi     }
4173*53ee8cc1Swenshuai.xi }
4174*53ee8cc1Swenshuai.xi 
4175*53ee8cc1Swenshuai.xi void HAL_PVR_SetDataSwap(MS_U32 u32PVREng, MS_BOOL bEn)
4176*53ee8cc1Swenshuai.xi {
4177*53ee8cc1Swenshuai.xi     if(bEn)
4178*53ee8cc1Swenshuai.xi     {
4179*53ee8cc1Swenshuai.xi         REG16_SET(&(_PVRReg[u32PVREng]->PVR_Ctrl0), PVR_TSIF_DATA_SWP);
4180*53ee8cc1Swenshuai.xi     }
4181*53ee8cc1Swenshuai.xi     else
4182*53ee8cc1Swenshuai.xi     {
4183*53ee8cc1Swenshuai.xi         REG16_CLR(&(_PVRReg[u32PVREng]->PVR_Ctrl0), PVR_TSIF_DATA_SWP);
4184*53ee8cc1Swenshuai.xi     }
4185*53ee8cc1Swenshuai.xi }
4186*53ee8cc1Swenshuai.xi */
4187*53ee8cc1Swenshuai.xi 
HAL_TSP_HCMD_GetInfo(MS_U32 u32Type)4188*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_HCMD_GetInfo(MS_U32 u32Type)
4189*53ee8cc1Swenshuai.xi {
4190*53ee8cc1Swenshuai.xi     MS_U32              u32Data;
4191*53ee8cc1Swenshuai.xi 
4192*53ee8cc1Swenshuai.xi //reserved
4193*53ee8cc1Swenshuai.xi     switch (u32Type)
4194*53ee8cc1Swenshuai.xi     {
4195*53ee8cc1Swenshuai.xi 
4196*53ee8cc1Swenshuai.xi     case INFO_FW_VERSION:
4197*53ee8cc1Swenshuai.xi         REG32_W(&_RegCtrl->MCU_Data0, INFO_FW_VERSION);
4198*53ee8cc1Swenshuai.xi     break;
4199*53ee8cc1Swenshuai.xi     case INFO_FW_DATE:
4200*53ee8cc1Swenshuai.xi         REG32_W(&_RegCtrl->MCU_Data0, INFO_FW_DATE);
4201*53ee8cc1Swenshuai.xi         break;
4202*53ee8cc1Swenshuai.xi     default:
4203*53ee8cc1Swenshuai.xi         REG32_W(&_RegCtrl->MCU_Data0, INFO_FW_VERSION);
4204*53ee8cc1Swenshuai.xi         break;
4205*53ee8cc1Swenshuai.xi 
4206*53ee8cc1Swenshuai.xi     }
4207*53ee8cc1Swenshuai.xi 
4208*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Cmd, TSP_MCU_CMD_INFO);
4209*53ee8cc1Swenshuai.xi 
4210*53ee8cc1Swenshuai.xi     _delay(10); // supposed TSP is able to respond in 10us
4211*53ee8cc1Swenshuai.xi     u32Data = REG32_R(&_RegCtrl->MCU_Data1);
4212*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Cmd, 0); // write null to clear
4213*53ee8cc1Swenshuai.xi 
4214*53ee8cc1Swenshuai.xi     return u32Data;
4215*53ee8cc1Swenshuai.xi }
4216*53ee8cc1Swenshuai.xi 
HAL_TSP_HCMD_BufRst(MS_U32 u32Value)4217*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_HCMD_BufRst(MS_U32 u32Value)
4218*53ee8cc1Swenshuai.xi {
4219*53ee8cc1Swenshuai.xi  //   MS_U32              u32Data;
4220*53ee8cc1Swenshuai.xi 
4221*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Data0 , u32Value);
4222*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Cmd   , TSP_MCU_CMD_BUFRST);
4223*53ee8cc1Swenshuai.xi     _delay(10); // supposed TSP is able to respond in 10us
4224*53ee8cc1Swenshuai.xi 
4225*53ee8cc1Swenshuai.xi     return TRUE;
4226*53ee8cc1Swenshuai.xi }
4227*53ee8cc1Swenshuai.xi 
HAL_TSP_HCMD_Read(MS_U32 u32Addr)4228*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_HCMD_Read(MS_U32 u32Addr)
4229*53ee8cc1Swenshuai.xi {
4230*53ee8cc1Swenshuai.xi     MS_U32              u32Data;
4231*53ee8cc1Swenshuai.xi 
4232*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Data0, u32Addr);
4233*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Cmd, TSP_MCU_CMD_READ);
4234*53ee8cc1Swenshuai.xi 
4235*53ee8cc1Swenshuai.xi     _delay(10); // supposed TSP is able to respond in 10us
4236*53ee8cc1Swenshuai.xi     u32Data = REG32_R(&_RegCtrl->MCU_Data1);
4237*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Cmd, 0); // write null to clear
4238*53ee8cc1Swenshuai.xi 
4239*53ee8cc1Swenshuai.xi     return u32Data;
4240*53ee8cc1Swenshuai.xi }
4241*53ee8cc1Swenshuai.xi 
4242*53ee8cc1Swenshuai.xi 
HAL_TSP_HCMD_Write(MS_U32 u32Addr,MS_U32 u32Value)4243*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_HCMD_Write(MS_U32 u32Addr, MS_U32 u32Value)
4244*53ee8cc1Swenshuai.xi {
4245*53ee8cc1Swenshuai.xi     MS_U32              u32Data;
4246*53ee8cc1Swenshuai.xi 
4247*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Data0, u32Addr);
4248*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Data1, u32Value);
4249*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Cmd, TSP_MCU_CMD_WRITE);
4250*53ee8cc1Swenshuai.xi 
4251*53ee8cc1Swenshuai.xi     _delay(10); // supposed TSP is able to respond in 10us
4252*53ee8cc1Swenshuai.xi     u32Data = REG32_R(&_RegCtrl->MCU_Data1);
4253*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Cmd, 0); // write null to clear
4254*53ee8cc1Swenshuai.xi 
4255*53ee8cc1Swenshuai.xi     return TRUE;
4256*53ee8cc1Swenshuai.xi }
4257*53ee8cc1Swenshuai.xi 
4258*53ee8cc1Swenshuai.xi 
HAL_TSP_HCMD_Alive(void)4259*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_HCMD_Alive(void)
4260*53ee8cc1Swenshuai.xi {
4261*53ee8cc1Swenshuai.xi     MS_U32              u32Data;
4262*53ee8cc1Swenshuai.xi 
4263*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Data1, 0);
4264*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Cmd, TSP_MCU_CMD_ALIVE);  //@TODO check FW HCMD
4265*53ee8cc1Swenshuai.xi     _delay(10); // supposed TSP is able to respond in 10us
4266*53ee8cc1Swenshuai.xi     u32Data = REG32_R(&_RegCtrl->MCU_Data1);
4267*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Cmd, 0); // write null to clear
4268*53ee8cc1Swenshuai.xi 
4269*53ee8cc1Swenshuai.xi     return (u32Data == TSP_MCU_DATA_ALIVE)? TRUE : FALSE;
4270*53ee8cc1Swenshuai.xi }
4271*53ee8cc1Swenshuai.xi 
HAL_TSP_HCMD_SET(MS_U32 mcu_cmd,MS_U32 mcu_data0,MS_U32 mcu_data1)4272*53ee8cc1Swenshuai.xi void HAL_TSP_HCMD_SET(MS_U32 mcu_cmd, MS_U32 mcu_data0, MS_U32 mcu_data1)
4273*53ee8cc1Swenshuai.xi {
4274*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Data0, mcu_data0);
4275*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Data1, mcu_data1);
4276*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Cmd,   mcu_cmd);
4277*53ee8cc1Swenshuai.xi }
4278*53ee8cc1Swenshuai.xi 
HAL_TSP_HCMD_GET(MS_U32 * pmcu_cmd,MS_U32 * pmcu_data0,MS_U32 * pmcu_data1)4279*53ee8cc1Swenshuai.xi void HAL_TSP_HCMD_GET(MS_U32* pmcu_cmd, MS_U32* pmcu_data0, MS_U32* pmcu_data1)
4280*53ee8cc1Swenshuai.xi {
4281*53ee8cc1Swenshuai.xi     *pmcu_cmd   = REG32_R(&_RegCtrl->MCU_Cmd);
4282*53ee8cc1Swenshuai.xi     *pmcu_data0 = REG32_R(&_RegCtrl->MCU_Data0);
4283*53ee8cc1Swenshuai.xi     *pmcu_data1 = REG32_R(&_RegCtrl->MCU_Data1);
4284*53ee8cc1Swenshuai.xi }
4285*53ee8cc1Swenshuai.xi 
HAL_TSP_HCMD_SecRdyInt_Disable(MS_U32 FltId,MS_BOOL bDis)4286*53ee8cc1Swenshuai.xi void HAL_TSP_HCMD_SecRdyInt_Disable(MS_U32 FltId ,MS_BOOL bDis)
4287*53ee8cc1Swenshuai.xi {
4288*53ee8cc1Swenshuai.xi     MS_U32              u32Data = bDis ;
4289*53ee8cc1Swenshuai.xi 
4290*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Data0, FltId);
4291*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Data1,u32Data);
4292*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Cmd, TSP_MCU_CMD_SECRDYINT_DISABLE); // @TODO add HCMD list here
4293*53ee8cc1Swenshuai.xi     _delay(10); // supposed TSP is able to respond in 10us
4294*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Cmd, 0); // write null to clear
4295*53ee8cc1Swenshuai.xi 
4296*53ee8cc1Swenshuai.xi     return ;
4297*53ee8cc1Swenshuai.xi }
4298*53ee8cc1Swenshuai.xi 
HAL_TSP_HCMD_Dbg(MS_U32 u32Enable)4299*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_HCMD_Dbg(MS_U32 u32Enable)
4300*53ee8cc1Swenshuai.xi {
4301*53ee8cc1Swenshuai.xi     MS_U32              u32Data;
4302*53ee8cc1Swenshuai.xi 
4303*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Data0, u32Enable);
4304*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Cmd, TSP_MCU_CMD_DBG);
4305*53ee8cc1Swenshuai.xi 
4306*53ee8cc1Swenshuai.xi     _delay(10); // supposed TSP is able to respond in 10us
4307*53ee8cc1Swenshuai.xi     u32Data = REG32_R(&_RegCtrl->MCU_Data1);
4308*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->MCU_Cmd, 0); // write null to clear
4309*53ee8cc1Swenshuai.xi 
4310*53ee8cc1Swenshuai.xi     return REG32_R(&_RegCtrl->MCU_Data1);
4311*53ee8cc1Swenshuai.xi }
4312*53ee8cc1Swenshuai.xi 
HAL_TSP_GetDBGStatus(MS_U16 u16Sel)4313*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetDBGStatus(MS_U16 u16Sel)
4314*53ee8cc1Swenshuai.xi {
4315*53ee8cc1Swenshuai.xi     REG16_CLR(&_RegCtrl->DBG_SEL, TSP_DBG_SEL_MASK);
4316*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->DBG_SEL, ((u16Sel << TSP_DBG_SEL_SHIFT) & TSP_DBG_SEL_MASK));
4317*53ee8cc1Swenshuai.xi 
4318*53ee8cc1Swenshuai.xi     return REG32_R(&_RegCtrl->TSP_Debug);
4319*53ee8cc1Swenshuai.xi }
4320*53ee8cc1Swenshuai.xi 
4321*53ee8cc1Swenshuai.xi // [ToDo...]
HAL_TSP_INT_Enable(MS_U32 u32Mask)4322*53ee8cc1Swenshuai.xi void HAL_TSP_INT_Enable(MS_U32 u32Mask)
4323*53ee8cc1Swenshuai.xi {
4324*53ee8cc1Swenshuai.xi     // u32Mask [0:7] for bank 0x15 7e bit[0:7]
4325*53ee8cc1Swenshuai.xi         /*
4326*53ee8cc1Swenshuai.xi             6: DMA read done
4327*53ee8cc1Swenshuai.xi             5: HK_INT_FORCE. (it's trigger bit is at bank 15 39 bit[15])
4328*53ee8cc1Swenshuai.xi             4: STR2MI_WADR meets STR2MI_MID.
4329*53ee8cc1Swenshuai.xi             3: STR2MI_WADR meets STR2MI_TAIL.
4330*53ee8cc1Swenshuai.xi             2: dma_status1
4331*53ee8cc1Swenshuai.xi             1: dma_status2
4332*53ee8cc1Swenshuai.xi             0: dma_status3
4333*53ee8cc1Swenshuai.xi         */
4334*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->HwInt_Stat, (TSP_HWINT_EN_MASK & u32Mask));
4335*53ee8cc1Swenshuai.xi 
4336*53ee8cc1Swenshuai.xi     // u32Mask [8:15] for bank 0x16 6c bit[0:7]
4337*53ee8cc1Swenshuai.xi         /*
4338*53ee8cc1Swenshuai.xi             [5] : OTV HW interrupt
4339*53ee8cc1Swenshuai.xi             [4] : all DMA write address not in the protect zone interrupt
4340*53ee8cc1Swenshuai.xi             [3] : vq0~vq6 overflow interrupt
4341*53ee8cc1Swenshuai.xi             [2] : aud_err
4342*53ee8cc1Swenshuai.xi             [1] : vid_err
4343*53ee8cc1Swenshuai.xi             [0] : reg_hk_int_force (it's trigger bit is at bank 15 44 bit[15])
4344*53ee8cc1Swenshuai.xi         */
4345*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->HwInt2_Stat, (TSP_HWINT2_EN_MASK & (u32Mask >> 8)));
4346*53ee8cc1Swenshuai.xi 
4347*53ee8cc1Swenshuai.xi      // u32Mask [16:23] for bank 0x16 6f bit[0:7]
4348*53ee8cc1Swenshuai.xi         /*
4349*53ee8cc1Swenshuai.xi             [7] : pcr filter 7 update finish
4350*53ee8cc1Swenshuai.xi             [6] : pcr filter 6 update finish
4351*53ee8cc1Swenshuai.xi             [5] : pcr filter 5 update finish
4352*53ee8cc1Swenshuai.xi             [4] : pcr filter 4 update finish
4353*53ee8cc1Swenshuai.xi             [3] : pcr filter 3 update finish
4354*53ee8cc1Swenshuai.xi             [2] : pcr filter 2 update finish
4355*53ee8cc1Swenshuai.xi             [1] : pcr filter 1 update finish
4356*53ee8cc1Swenshuai.xi             [0] : pcr filter 0 update finish
4357*53ee8cc1Swenshuai.xi         */
4358*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->HwInt3_Stat, (TSP_HWINT3_EN_MASK & (u32Mask >> 16)));
4359*53ee8cc1Swenshuai.xi }
4360*53ee8cc1Swenshuai.xi 
4361*53ee8cc1Swenshuai.xi 
4362*53ee8cc1Swenshuai.xi // [ToDo...]
HAL_TSP_INT_Disable(MS_U32 u32Mask)4363*53ee8cc1Swenshuai.xi void HAL_TSP_INT_Disable(MS_U32 u32Mask)
4364*53ee8cc1Swenshuai.xi {
4365*53ee8cc1Swenshuai.xi     REG16_W(&_RegCtrl->HwInt_Stat,
4366*53ee8cc1Swenshuai.xi         (REG16_R(&_RegCtrl->HwInt_Stat) & ~(TSP_HWINT_EN_MASK & (u32Mask))));
4367*53ee8cc1Swenshuai.xi 
4368*53ee8cc1Swenshuai.xi     REG16_W(&_RegCtrl->HwInt2_Stat,
4369*53ee8cc1Swenshuai.xi         (REG16_R(&_RegCtrl->HwInt2_Stat) & ~(TSP_HWINT2_EN_MASK & (u32Mask >> 8))));
4370*53ee8cc1Swenshuai.xi 
4371*53ee8cc1Swenshuai.xi     REG16_W(&_RegCtrl->HwInt3_Stat,
4372*53ee8cc1Swenshuai.xi         (REG16_R(&_RegCtrl->HwInt3_Stat) & ~(TSP_HWINT3_EN_MASK & (u32Mask >> 16))));
4373*53ee8cc1Swenshuai.xi }
4374*53ee8cc1Swenshuai.xi 
4375*53ee8cc1Swenshuai.xi 
4376*53ee8cc1Swenshuai.xi // [ToDo...]
HAL_TSP_INT_ClrHW(MS_U32 u32Mask)4377*53ee8cc1Swenshuai.xi void HAL_TSP_INT_ClrHW(MS_U32 u32Mask)
4378*53ee8cc1Swenshuai.xi {
4379*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->HwInt_Stat, ((u32Mask << TSP_HWINT_STATUS_SHIFT) & TSP_HWINT_STATUS_MASK));
4380*53ee8cc1Swenshuai.xi     REG16_CLR(&_RegCtrl->HwInt_Stat, ((u32Mask << TSP_HWINT_STATUS_SHIFT) & TSP_HWINT_STATUS_MASK));
4381*53ee8cc1Swenshuai.xi 
4382*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->HwInt2_Stat, (((u32Mask >> 8) << TSP_HWINT2_STATUS_SHIFT) & TSP_HWINT2_STATUS_MASK));
4383*53ee8cc1Swenshuai.xi     REG16_CLR(&_RegCtrl->HwInt2_Stat, (((u32Mask >> 8) << TSP_HWINT2_STATUS_SHIFT) & TSP_HWINT2_STATUS_MASK));
4384*53ee8cc1Swenshuai.xi 
4385*53ee8cc1Swenshuai.xi     REG16_SET(&_RegCtrl->HwInt3_Stat, (((u32Mask >> 16) << TSP_HWINT3_STATUS_SHIFT) & TSP_HWINT3_STATUS_MASK));
4386*53ee8cc1Swenshuai.xi     REG16_CLR(&_RegCtrl->HwInt3_Stat, (((u32Mask >> 16) << TSP_HWINT3_STATUS_SHIFT) & TSP_HWINT3_STATUS_MASK));
4387*53ee8cc1Swenshuai.xi }
4388*53ee8cc1Swenshuai.xi 
4389*53ee8cc1Swenshuai.xi // [ToDo...]
HAL_TSP_INT_GetHW(void)4390*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_INT_GetHW(void)
4391*53ee8cc1Swenshuai.xi {
4392*53ee8cc1Swenshuai.xi     MS_U32 status;
4393*53ee8cc1Swenshuai.xi 
4394*53ee8cc1Swenshuai.xi     status = (MS_U32)(((REG16_R(&_RegCtrl->HwInt3_Stat) & TSP_HWINT3_STATUS_MASK) >> TSP_HWINT3_STATUS_SHIFT) << 16);
4395*53ee8cc1Swenshuai.xi 
4396*53ee8cc1Swenshuai.xi 
4397*53ee8cc1Swenshuai.xi     status |= ((MS_U32)(((REG16_R(&_RegCtrl->HwInt2_Stat) & TSP_HWINT2_STATUS_MASK) >> TSP_HWINT2_STATUS_SHIFT) << 8));
4398*53ee8cc1Swenshuai.xi 
4399*53ee8cc1Swenshuai.xi 
4400*53ee8cc1Swenshuai.xi     status |= ((MS_U32)((REG16_R(&_RegCtrl->HwInt_Stat) & TSP_HWINT_STATUS_MASK) >> TSP_HWINT_STATUS_SHIFT));
4401*53ee8cc1Swenshuai.xi 
4402*53ee8cc1Swenshuai.xi     return (status & 0x00FFFFFF);
4403*53ee8cc1Swenshuai.xi }
4404*53ee8cc1Swenshuai.xi 
HAL_TSP_INT_ClrSW(void)4405*53ee8cc1Swenshuai.xi void HAL_TSP_INT_ClrSW(void)
4406*53ee8cc1Swenshuai.xi {
4407*53ee8cc1Swenshuai.xi     REG32_W(&_RegCtrl->SwInt_Stat, 0);
4408*53ee8cc1Swenshuai.xi }
4409*53ee8cc1Swenshuai.xi 
HAL_TSP_INT_GetSW(void)4410*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_INT_GetSW(void)
4411*53ee8cc1Swenshuai.xi {
4412*53ee8cc1Swenshuai.xi     return REG32_R(&_RegCtrl->SwInt_Stat);
4413*53ee8cc1Swenshuai.xi }
4414*53ee8cc1Swenshuai.xi 
4415*53ee8cc1Swenshuai.xi #if FPGA_TEST
4416*53ee8cc1Swenshuai.xi 
HAL_TSP_Set_RcvBuf_Src(MS_U32 bufIdx,MS_U32 inputSrc)4417*53ee8cc1Swenshuai.xi     void HAL_TSP_Set_RcvBuf_Src(MS_U32 bufIdx, MS_U32 inputSrc)
4418*53ee8cc1Swenshuai.xi     {
4419*53ee8cc1Swenshuai.xi         //@NOTE: K7U don't have to implement (deleted...)
4420*53ee8cc1Swenshuai.xi     }
4421*53ee8cc1Swenshuai.xi 
HAL_TSP_SPD_Bypass_En(MS_BOOL bByPassEn)4422*53ee8cc1Swenshuai.xi     void HAL_TSP_SPD_Bypass_En(MS_BOOL bByPassEn)
4423*53ee8cc1Swenshuai.xi     {
4424*53ee8cc1Swenshuai.xi         MS_U8   u8FileEng;
4425*53ee8cc1Swenshuai.xi 
4426*53ee8cc1Swenshuai.xi         if(bByPassEn)
4427*53ee8cc1Swenshuai.xi         {
4428*53ee8cc1Swenshuai.xi             for(u8FileEng = 0; u8FileEng < E_FILEENG_TSIF4; u8FileEng++)
4429*53ee8cc1Swenshuai.xi             {
4430*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegFile0Ctrl[u8FileEng].CFG_FILE_0F, CFG_FILE_0F_REG_SPD_TSIF_BYPASS);
4431*53ee8cc1Swenshuai.xi             }
4432*53ee8cc1Swenshuai.xi 
4433*53ee8cc1Swenshuai.xi             for(u8FileEng = 0; u8FileEng <= (E_FILEENG_TSIF6 - E_FILEENG_TSIF4); u8FileEng++)
4434*53ee8cc1Swenshuai.xi             {
4435*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegFile1Ctrl[u8FileEng].CFG_FILE_0F, CFG_FILE_0F_REG_SPD_TSIF_BYPASS);
4436*53ee8cc1Swenshuai.xi             }
4437*53ee8cc1Swenshuai.xi         }
4438*53ee8cc1Swenshuai.xi         else
4439*53ee8cc1Swenshuai.xi         {
4440*53ee8cc1Swenshuai.xi             for(u8FileEng = 0; u8FileEng < E_FILEENG_TSIF4; u8FileEng++)
4441*53ee8cc1Swenshuai.xi             {
4442*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegFile0Ctrl[u8FileEng].CFG_FILE_0F, CFG_FILE_0F_REG_SPD_TSIF_BYPASS);
4443*53ee8cc1Swenshuai.xi             }
4444*53ee8cc1Swenshuai.xi 
4445*53ee8cc1Swenshuai.xi             for(u8FileEng = 0; u8FileEng <= (E_FILEENG_TSIF6 - E_FILEENG_TSIF4); u8FileEng++)
4446*53ee8cc1Swenshuai.xi             {
4447*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegFile1Ctrl[u8FileEng].CFG_FILE_0F, CFG_FILE_0F_REG_SPD_TSIF_BYPASS);
4448*53ee8cc1Swenshuai.xi             }
4449*53ee8cc1Swenshuai.xi         }
4450*53ee8cc1Swenshuai.xi     }
4451*53ee8cc1Swenshuai.xi 
HAL_TSP_FileIn_SPDConfig(MS_U32 tsIf,MS_BOOL CTR_mode)4452*53ee8cc1Swenshuai.xi     void HAL_TSP_FileIn_SPDConfig(MS_U32 tsIf, MS_BOOL CTR_mode)
4453*53ee8cc1Swenshuai.xi     {
4454*53ee8cc1Swenshuai.xi         if(tsIf >= TSP_TSIF_NUM)
4455*53ee8cc1Swenshuai.xi         {
4456*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,tsIf));
4457*53ee8cc1Swenshuai.xi             return;
4458*53ee8cc1Swenshuai.xi         }
4459*53ee8cc1Swenshuai.xi 
4460*53ee8cc1Swenshuai.xi         if(CTR_mode)
4461*53ee8cc1Swenshuai.xi         {
4462*53ee8cc1Swenshuai.xi             REG16_SET(&_RegSpdCtrl[tsIf].CFG_SPD_05, CFG_SPD_05_REG_CTR_MODE_SPD_FILEIN);   //set CTR mode enable
4463*53ee8cc1Swenshuai.xi             REG16_W(&_RegSpdCtrl[tsIf].CFG_SPD_00_03[0], 0x0000);                           //set counter IV
4464*53ee8cc1Swenshuai.xi             REG16_W(&_RegSpdCtrl[tsIf].CFG_SPD_00_03[1], 0x0000);
4465*53ee8cc1Swenshuai.xi             REG16_W(&_RegSpdCtrl[tsIf].CFG_SPD_00_03[2], 0x0000);
4466*53ee8cc1Swenshuai.xi             REG16_W(&_RegSpdCtrl[tsIf].CFG_SPD_00_03[3], 0x0000);
4467*53ee8cc1Swenshuai.xi             REG16_W(&_RegSpdCtrl[tsIf].CFG_SPD_04, CFG_SPD_04_CTR_IV_SPD_MAX_1K);           //set counter IV max vld
4468*53ee8cc1Swenshuai.xi             REG16_SET(&_RegSpdCtrl[tsIf].CFG_SPD_05, CFG_SPD_05_REG_LOAD_INIT_COUNTER_SPD); //load counter IV
4469*53ee8cc1Swenshuai.xi         }
4470*53ee8cc1Swenshuai.xi         else
4471*53ee8cc1Swenshuai.xi         {
4472*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegSpdCtrl[tsIf].CFG_SPD_05, CFG_SPD_05_REG_CTR_MODE_SPD_FILEIN);
4473*53ee8cc1Swenshuai.xi         }
4474*53ee8cc1Swenshuai.xi 
4475*53ee8cc1Swenshuai.xi         REG16_MSK_W(&_RegOtherCtrl->CFG_OTHER_1F, CFG_OTHER_1F_REG_SRC_AES_FILEIN_KEY_MASK, (tsIf << CFG_OTHER_1F_REG_SRC_AES_FILEIN_KEY_SHIFT));
4476*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_28_2F[0], 0x0000);    //file-in SPD key
4477*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_28_2F[1], 0x0000);
4478*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_28_2F[2], 0x0000);
4479*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_28_2F[3], 0x0000);
4480*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_28_2F[4], 0x1111);
4481*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_28_2F[5], 0x1111);
4482*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_28_2F[6], 0x1111);
4483*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_28_2F[7], 0x1111);
4484*53ee8cc1Swenshuai.xi 
4485*53ee8cc1Swenshuai.xi         REG_FILE_ENG_Ctrl   *RegFileCtrl = (tsIf < E_FILEENG_TSIF4)? _RegFile0Ctrl : _RegFile1Ctrl;
4486*53ee8cc1Swenshuai.xi         MS_U8   u8FileEng = (tsIf < E_FILEENG_TSIF4)? tsIf : (tsIf - E_FILEENG_TSIF4);
4487*53ee8cc1Swenshuai.xi 
4488*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_0F, CFG_FILE_0F_REG_LOAD_SPD_KEY);
4489*53ee8cc1Swenshuai.xi         REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_0F, CFG_FILE_0F_REG_SPD_TSIF_BYPASS);
4490*53ee8cc1Swenshuai.xi         REG16_SET(&RegFileCtrl[u8FileEng].CFG_FILE_0F, CFG_FILE_0F_REG_TSIF_SPD_RST);
4491*53ee8cc1Swenshuai.xi         REG16_CLR(&RegFileCtrl[u8FileEng].CFG_FILE_0F, CFG_FILE_0F_REG_TSIF_SPD_RST);
4492*53ee8cc1Swenshuai.xi     }
4493*53ee8cc1Swenshuai.xi 
4494*53ee8cc1Swenshuai.xi #endif
4495*53ee8cc1Swenshuai.xi 
HAL_TSP_GetCaps(TSP_HAL_CAP_TYPE eCap,MS_U32 * pu32CapInfo)4496*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_GetCaps(TSP_HAL_CAP_TYPE eCap, MS_U32 *pu32CapInfo)
4497*53ee8cc1Swenshuai.xi {
4498*53ee8cc1Swenshuai.xi     switch (eCap)
4499*53ee8cc1Swenshuai.xi     {
4500*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_PIDFLT_NUM :
4501*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_PIDFLT_NUM;
4502*53ee8cc1Swenshuai.xi             break;
4503*53ee8cc1Swenshuai.xi 
4504*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_SECFLT_NUM :
4505*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_SECFLT_NUM;
4506*53ee8cc1Swenshuai.xi             break;
4507*53ee8cc1Swenshuai.xi 
4508*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_SECBUF_NUM :
4509*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_SECBUF_NUM;
4510*53ee8cc1Swenshuai.xi             break;
4511*53ee8cc1Swenshuai.xi 
4512*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_RECENG_NUM :
4513*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_RECENG_NUM;
4514*53ee8cc1Swenshuai.xi             break;
4515*53ee8cc1Swenshuai.xi 
4516*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_RECFLT_NUM :
4517*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_RECFLT_NUM;
4518*53ee8cc1Swenshuai.xi             break;
4519*53ee8cc1Swenshuai.xi 
4520*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_TSIF_NUM :
4521*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_TSIF_NUM;
4522*53ee8cc1Swenshuai.xi             break;
4523*53ee8cc1Swenshuai.xi 
4524*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_DEMOD_NUM :
4525*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_DEMOD_NUM;
4526*53ee8cc1Swenshuai.xi             break;
4527*53ee8cc1Swenshuai.xi 
4528*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_TSPAD_NUM :
4529*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_TSPAD_NUM;
4530*53ee8cc1Swenshuai.xi             break;
4531*53ee8cc1Swenshuai.xi 
4532*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_VQ_NUM :
4533*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_VQ_NUM;
4534*53ee8cc1Swenshuai.xi             break;
4535*53ee8cc1Swenshuai.xi 
4536*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_CAFLT_NUM :
4537*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_CAFLT_NUM;
4538*53ee8cc1Swenshuai.xi             break;
4539*53ee8cc1Swenshuai.xi 
4540*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_CAKEY_NUM :
4541*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_CAKEY_NUM;
4542*53ee8cc1Swenshuai.xi             break;
4543*53ee8cc1Swenshuai.xi 
4544*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_SECBUF_ALIGN :
4545*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_SECBUF_ALIGN;
4546*53ee8cc1Swenshuai.xi             break;
4547*53ee8cc1Swenshuai.xi 
4548*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_PVR_ALIGN:
4549*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_PVR_ALIGN;
4550*53ee8cc1Swenshuai.xi             break;
4551*53ee8cc1Swenshuai.xi 
4552*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_FW_ALIGN :
4553*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_FW_ALIGN;
4554*53ee8cc1Swenshuai.xi             break;
4555*53ee8cc1Swenshuai.xi 
4556*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_VQ_ALIGN :
4557*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_VQ_ALIGN;
4558*53ee8cc1Swenshuai.xi             break;
4559*53ee8cc1Swenshuai.xi 
4560*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_VQ_PITCH :
4561*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_VQ_PITCH;
4562*53ee8cc1Swenshuai.xi             break;
4563*53ee8cc1Swenshuai.xi 
4564*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_MMFI_AUDIO_FILTER_NUM:
4565*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_MMFI_AUDIO_FILTER_NUM;
4566*53ee8cc1Swenshuai.xi             break;
4567*53ee8cc1Swenshuai.xi 
4568*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_MMFI_V3D_FILTER_NUM:
4569*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_MMFI_V3D_FILTER_NUM;
4570*53ee8cc1Swenshuai.xi             break;
4571*53ee8cc1Swenshuai.xi 
4572*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_HW_TYPE:
4573*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_HW_TYPE;
4574*53ee8cc1Swenshuai.xi             break;
4575*53ee8cc1Swenshuai.xi 
4576*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_RECFLT_IDX :
4577*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_RECFLT_IDX;
4578*53ee8cc1Swenshuai.xi             break;
4579*53ee8cc1Swenshuai.xi 
4580*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_PCRFLT_START_IDX :
4581*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_PCRFLT_START_IDX;
4582*53ee8cc1Swenshuai.xi             break;
4583*53ee8cc1Swenshuai.xi 
4584*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_VFIFO_NUM:
4585*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_VFIFO_NUM;
4586*53ee8cc1Swenshuai.xi             break;
4587*53ee8cc1Swenshuai.xi 
4588*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_AFIFO_NUM:
4589*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_AFIFO_NUM;
4590*53ee8cc1Swenshuai.xi             break;
4591*53ee8cc1Swenshuai.xi 
4592*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_TYPE_HWPCR_SUPPORT:
4593*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_HWPCR_SUPPORT;
4594*53ee8cc1Swenshuai.xi             break;
4595*53ee8cc1Swenshuai.xi 
4596*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_FIQ_NUM:
4597*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_FIQ_NUM;
4598*53ee8cc1Swenshuai.xi             break;
4599*53ee8cc1Swenshuai.xi 
4600*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_FW_BUF_SIZE:
4601*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_FW_BUF_SIZE;
4602*53ee8cc1Swenshuai.xi             break;
4603*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_FW_BUF_RANGE:
4604*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = TSP_FW_BUF_LOW_BUD;
4605*53ee8cc1Swenshuai.xi             *(pu32CapInfo + 1) = TSP_FW_BUF_UP_BUD;
4606*53ee8cc1Swenshuai.xi             break;
4607*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_VQ_BUF_RANGE:
4608*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = TSP_VQ_BUF_LOW_BUD;
4609*53ee8cc1Swenshuai.xi             *(pu32CapInfo + 1) = TSP_VQ_BUF_UP_BUD;
4610*53ee8cc1Swenshuai.xi             break;
4611*53ee8cc1Swenshuai.xi         case E_TSP_HAL_CAP_SEC_BUF_RANGE:
4612*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = TSP_SEC_BUF_LOW_BUD;
4613*53ee8cc1Swenshuai.xi             *(pu32CapInfo + 1) = TSP_SEC_BUF_UP_BUD;
4614*53ee8cc1Swenshuai.xi             break;
4615*53ee8cc1Swenshuai.xi         default:
4616*53ee8cc1Swenshuai.xi             *(pu32CapInfo) = E_TSP_HAL_CAP_VAL_NULL;
4617*53ee8cc1Swenshuai.xi             return FALSE;
4618*53ee8cc1Swenshuai.xi     }
4619*53ee8cc1Swenshuai.xi 
4620*53ee8cc1Swenshuai.xi     return TRUE;
4621*53ee8cc1Swenshuai.xi }
4622*53ee8cc1Swenshuai.xi 
HAL_TSP_PktDmx_RmDupAVPkt(MS_BOOL bEnable)4623*53ee8cc1Swenshuai.xi void HAL_TSP_PktDmx_RmDupAVPkt(MS_BOOL bEnable)
4624*53ee8cc1Swenshuai.xi {
4625*53ee8cc1Swenshuai.xi     MS_U8   u8Idx = 0;
4626*53ee8cc1Swenshuai.xi 
4627*53ee8cc1Swenshuai.xi     if(bEnable)
4628*53ee8cc1Swenshuai.xi     {
4629*53ee8cc1Swenshuai.xi         for(u8Idx = 0; u8Idx < E_TSP_HAL_CAP_VAL_AFIFO_NUM; u8Idx++)
4630*53ee8cc1Swenshuai.xi         {
4631*53ee8cc1Swenshuai.xi             REG16_SET(&_RegAudioCtrl[u8Idx].CFG_AV_00, CFG_AV_00_REG_DUP_PKT_SKIP);
4632*53ee8cc1Swenshuai.xi         }
4633*53ee8cc1Swenshuai.xi 
4634*53ee8cc1Swenshuai.xi         for(u8Idx = 0; u8Idx < E_TSP_HAL_CAP_VAL_VFIFO_NUM; u8Idx++)
4635*53ee8cc1Swenshuai.xi         {
4636*53ee8cc1Swenshuai.xi             REG16_SET(&_RegVideoCtrl[u8Idx].CFG_AV_00, CFG_AV_00_REG_DUP_PKT_SKIP);
4637*53ee8cc1Swenshuai.xi         }
4638*53ee8cc1Swenshuai.xi     }
4639*53ee8cc1Swenshuai.xi     else
4640*53ee8cc1Swenshuai.xi     {
4641*53ee8cc1Swenshuai.xi         for(u8Idx = 0; u8Idx < E_TSP_HAL_CAP_VAL_AFIFO_NUM; u8Idx++)
4642*53ee8cc1Swenshuai.xi         {
4643*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegAudioCtrl[u8Idx].CFG_AV_00, CFG_AV_00_REG_DUP_PKT_SKIP);
4644*53ee8cc1Swenshuai.xi         }
4645*53ee8cc1Swenshuai.xi 
4646*53ee8cc1Swenshuai.xi         for(u8Idx = 0; u8Idx < E_TSP_HAL_CAP_VAL_VFIFO_NUM; u8Idx++)
4647*53ee8cc1Swenshuai.xi         {
4648*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegVideoCtrl[u8Idx].CFG_AV_00, CFG_AV_00_REG_DUP_PKT_SKIP);
4649*53ee8cc1Swenshuai.xi         }
4650*53ee8cc1Swenshuai.xi     }
4651*53ee8cc1Swenshuai.xi }
4652*53ee8cc1Swenshuai.xi 
HAL_TSP_TEI_RemoveErrorPkt(TSP_HAL_TEI_RmPktType eHalPktType,MS_BOOL bEnable)4653*53ee8cc1Swenshuai.xi void HAL_TSP_TEI_RemoveErrorPkt(TSP_HAL_TEI_RmPktType eHalPktType, MS_BOOL bEnable)
4654*53ee8cc1Swenshuai.xi {
4655*53ee8cc1Swenshuai.xi     if(eHalPktType <= E_TSP_HAL_TEI_REMOVE_AUDIO6_PKT)
4656*53ee8cc1Swenshuai.xi     {
4657*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eHalPktType - E_TSP_HAL_TEI_REMOVE_AUDIO_PKT;
4658*53ee8cc1Swenshuai.xi 
4659*53ee8cc1Swenshuai.xi         if(bEnable)
4660*53ee8cc1Swenshuai.xi         {
4661*53ee8cc1Swenshuai.xi             REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_PES_ERR_RM_EN);
4662*53ee8cc1Swenshuai.xi         }
4663*53ee8cc1Swenshuai.xi         else
4664*53ee8cc1Swenshuai.xi         {
4665*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_00, CFG_AV_00_REG_PES_ERR_RM_EN);
4666*53ee8cc1Swenshuai.xi         }
4667*53ee8cc1Swenshuai.xi     }
4668*53ee8cc1Swenshuai.xi     else if((eHalPktType >= E_TSP_HAL_TEI_REMOVE_VIDEO_PKT) && (eHalPktType <= E_TSP_HAL_TEI_REMOVE_VIDEO8_PKT))
4669*53ee8cc1Swenshuai.xi     {
4670*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eHalPktType - E_TSP_HAL_TEI_REMOVE_VIDEO_PKT;
4671*53ee8cc1Swenshuai.xi 
4672*53ee8cc1Swenshuai.xi         if(bEnable)
4673*53ee8cc1Swenshuai.xi         {
4674*53ee8cc1Swenshuai.xi             REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_00, CFG_AV_00_REG_PES_ERR_RM_EN);
4675*53ee8cc1Swenshuai.xi         }
4676*53ee8cc1Swenshuai.xi         else
4677*53ee8cc1Swenshuai.xi         {
4678*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_00, CFG_AV_00_REG_PES_ERR_RM_EN);
4679*53ee8cc1Swenshuai.xi         }
4680*53ee8cc1Swenshuai.xi     }
4681*53ee8cc1Swenshuai.xi     else
4682*53ee8cc1Swenshuai.xi     {
4683*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
4684*53ee8cc1Swenshuai.xi     }
4685*53ee8cc1Swenshuai.xi }
4686*53ee8cc1Swenshuai.xi 
4687*53ee8cc1Swenshuai.xi #if FPGA_TEST
4688*53ee8cc1Swenshuai.xi 
HAL_TSP_TEI_SKIP(MS_U32 tsIf,MS_BOOL bEnable)4689*53ee8cc1Swenshuai.xi     void HAL_TSP_TEI_SKIP(MS_U32 tsIf, MS_BOOL bEnable)
4690*53ee8cc1Swenshuai.xi     {
4691*53ee8cc1Swenshuai.xi         if(tsIf >= TSP_TSIF_NUM)
4692*53ee8cc1Swenshuai.xi         {
4693*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,tsIf));
4694*53ee8cc1Swenshuai.xi             return;
4695*53ee8cc1Swenshuai.xi         }
4696*53ee8cc1Swenshuai.xi 
4697*53ee8cc1Swenshuai.xi         if(bEnable)
4698*53ee8cc1Swenshuai.xi         {
4699*53ee8cc1Swenshuai.xi             REG16_SET(&_RegPathCtrl[tsIf].CFG_PATH_08, CFG_PATH_08_REG_TEI_SKIP_PKT);
4700*53ee8cc1Swenshuai.xi         }
4701*53ee8cc1Swenshuai.xi         else
4702*53ee8cc1Swenshuai.xi         {
4703*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegPathCtrl[tsIf].CFG_PATH_08, CFG_PATH_08_REG_TEI_SKIP_PKT);
4704*53ee8cc1Swenshuai.xi         }
4705*53ee8cc1Swenshuai.xi     }
4706*53ee8cc1Swenshuai.xi 
4707*53ee8cc1Swenshuai.xi #endif
4708*53ee8cc1Swenshuai.xi 
HAL_TSP_OR_Address_Protect_En(MS_BOOL bEn)4709*53ee8cc1Swenshuai.xi void HAL_TSP_OR_Address_Protect_En(MS_BOOL bEn)
4710*53ee8cc1Swenshuai.xi {
4711*53ee8cc1Swenshuai.xi     if(bEn == TRUE)
4712*53ee8cc1Swenshuai.xi     {
4713*53ee8cc1Swenshuai.xi         REG16_SET(&_RegCtrl->reg160C, TSP_ORZ_DMAW_PROT_EN);
4714*53ee8cc1Swenshuai.xi     }
4715*53ee8cc1Swenshuai.xi     else
4716*53ee8cc1Swenshuai.xi     {
4717*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegCtrl->reg160C, TSP_ORZ_DMAW_PROT_EN);
4718*53ee8cc1Swenshuai.xi     }
4719*53ee8cc1Swenshuai.xi }
4720*53ee8cc1Swenshuai.xi 
HAL_TSP_OR_Address_Protect(MS_PHY u32UpBoundAddr,MS_PHY u32LowBoundAddr)4721*53ee8cc1Swenshuai.xi void HAL_TSP_OR_Address_Protect(MS_PHY u32UpBoundAddr, MS_PHY u32LowBoundAddr)
4722*53ee8cc1Swenshuai.xi {
4723*53ee8cc1Swenshuai.xi     MS_U8 u8MiuSel;
4724*53ee8cc1Swenshuai.xi     MS_PHY phyMiuOffsetLB, phyMiuOffsetUB;
4725*53ee8cc1Swenshuai.xi 
4726*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetLB, u32LowBoundAddr);
4727*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetUB, u32UpBoundAddr);
4728*53ee8cc1Swenshuai.xi 
4729*53ee8cc1Swenshuai.xi     if(u8MiuSel < E_CHIP_MIU_NUM)
4730*53ee8cc1Swenshuai.xi     {
4731*53ee8cc1Swenshuai.xi         REG32_W(&_RegCtrl->ORZ_DMAW_LBND,(MS_U32)((phyMiuOffsetLB >> MIU_BUS) & TSP_ORZ_DMAW_LBND_MASK));
4732*53ee8cc1Swenshuai.xi         REG32_W(&_RegCtrl->ORZ_DMAW_UBND,(MS_U32)((phyMiuOffsetUB >> MIU_BUS) & TSP_ORZ_DMAW_UBND_MASK));
4733*53ee8cc1Swenshuai.xi     }
4734*53ee8cc1Swenshuai.xi }
4735*53ee8cc1Swenshuai.xi 
HAL_TSP_SEC_Address_Protect_En(MS_BOOL bEn)4736*53ee8cc1Swenshuai.xi void HAL_TSP_SEC_Address_Protect_En(MS_BOOL bEn)
4737*53ee8cc1Swenshuai.xi {
4738*53ee8cc1Swenshuai.xi     if(bEn == TRUE)
4739*53ee8cc1Swenshuai.xi     {
4740*53ee8cc1Swenshuai.xi         REG16_SET(&_RegCtrl->reg15b4, TSP_SEC_CB_PVR2_DAMW_PROTECT_EN);
4741*53ee8cc1Swenshuai.xi     }
4742*53ee8cc1Swenshuai.xi     else
4743*53ee8cc1Swenshuai.xi     {
4744*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegCtrl->reg15b4, TSP_SEC_CB_PVR2_DAMW_PROTECT_EN);
4745*53ee8cc1Swenshuai.xi     }
4746*53ee8cc1Swenshuai.xi }
4747*53ee8cc1Swenshuai.xi 
HAL_TSP_SEC_Address_Protect(MS_U8 u8SecID,MS_PHY u32UpBoundAddr,MS_PHY u32LowBoundAddr)4748*53ee8cc1Swenshuai.xi void HAL_TSP_SEC_Address_Protect(MS_U8 u8SecID, MS_PHY u32UpBoundAddr, MS_PHY u32LowBoundAddr)
4749*53ee8cc1Swenshuai.xi {
4750*53ee8cc1Swenshuai.xi     MS_U8 u8MiuSel;
4751*53ee8cc1Swenshuai.xi     MS_PHY phyMiuOffsetLB, phyMiuOffsetUB;
4752*53ee8cc1Swenshuai.xi 
4753*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetLB, u32LowBoundAddr);
4754*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetUB, u32UpBoundAddr);
4755*53ee8cc1Swenshuai.xi 
4756*53ee8cc1Swenshuai.xi     if(u8MiuSel < E_CHIP_MIU_NUM)
4757*53ee8cc1Swenshuai.xi     {
4758*53ee8cc1Swenshuai.xi         MS_U32  u32LBnd = (MS_U32)((phyMiuOffsetLB >> MIU_BUS) & TSP_DMAW_BND_MASK);
4759*53ee8cc1Swenshuai.xi         MS_U32  u32UBnd = (MS_U32)((phyMiuOffsetUB >> MIU_BUS) & TSP_DMAW_BND_MASK);
4760*53ee8cc1Swenshuai.xi 
4761*53ee8cc1Swenshuai.xi         switch(u8SecID)
4762*53ee8cc1Swenshuai.xi         {
4763*53ee8cc1Swenshuai.xi             case 0:
4764*53ee8cc1Swenshuai.xi                 REG32_W(&_RegCtrl->DMAW_LBND0, u32LBnd);
4765*53ee8cc1Swenshuai.xi                 REG32_W(&_RegCtrl->DMAW_UBND0, u32UBnd);
4766*53ee8cc1Swenshuai.xi                 break;
4767*53ee8cc1Swenshuai.xi             case 1:
4768*53ee8cc1Swenshuai.xi                 REG32_W(&_RegCtrl->DMAW_LBND1, u32LBnd);
4769*53ee8cc1Swenshuai.xi                 REG32_W(&_RegCtrl->DMAW_UBND1, u32UBnd);
4770*53ee8cc1Swenshuai.xi                 break;
4771*53ee8cc1Swenshuai.xi             default:
4772*53ee8cc1Swenshuai.xi                 break;
4773*53ee8cc1Swenshuai.xi         }
4774*53ee8cc1Swenshuai.xi     }
4775*53ee8cc1Swenshuai.xi }
4776*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_Address_Protect_En(MS_U32 u32PVREng,MS_BOOL bEnable)4777*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_Address_Protect_En(MS_U32 u32PVREng, MS_BOOL bEnable)
4778*53ee8cc1Swenshuai.xi {
4779*53ee8cc1Swenshuai.xi     if(u32PVREng >= TSP_PVRENG_NUM)
4780*53ee8cc1Swenshuai.xi     {
4781*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
4782*53ee8cc1Swenshuai.xi         return;
4783*53ee8cc1Swenshuai.xi     }
4784*53ee8cc1Swenshuai.xi 
4785*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
4786*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
4787*53ee8cc1Swenshuai.xi 
4788*53ee8cc1Swenshuai.xi     if(bEnable)
4789*53ee8cc1Swenshuai.xi     {
4790*53ee8cc1Swenshuai.xi         REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_0D, CFG_PVR_0D_REG_PVR_DMAW_PROTECT_EN);
4791*53ee8cc1Swenshuai.xi     }
4792*53ee8cc1Swenshuai.xi     else
4793*53ee8cc1Swenshuai.xi     {
4794*53ee8cc1Swenshuai.xi         REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_0D, CFG_PVR_0D_REG_PVR_DMAW_PROTECT_EN);
4795*53ee8cc1Swenshuai.xi     }
4796*53ee8cc1Swenshuai.xi }
4797*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_Address_Protect(MS_U32 u32PVREng,MS_PHY u32UpBoundAddr,MS_PHY u32LowBoundAddr)4798*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_Address_Protect(MS_U32 u32PVREng, MS_PHY u32UpBoundAddr, MS_PHY u32LowBoundAddr)
4799*53ee8cc1Swenshuai.xi {
4800*53ee8cc1Swenshuai.xi     if(u32PVREng >= TSP_PVRENG_NUM)
4801*53ee8cc1Swenshuai.xi     {
4802*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
4803*53ee8cc1Swenshuai.xi         return;
4804*53ee8cc1Swenshuai.xi     }
4805*53ee8cc1Swenshuai.xi 
4806*53ee8cc1Swenshuai.xi     MS_U8 u8MiuSel;
4807*53ee8cc1Swenshuai.xi     MS_PHY phyMiuOffsetLB, phyMiuOffsetUB;
4808*53ee8cc1Swenshuai.xi 
4809*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetLB, u32LowBoundAddr);
4810*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetUB, u32UpBoundAddr);
4811*53ee8cc1Swenshuai.xi 
4812*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32PVREng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
4813*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32PVREng < E_TSP_PVR_PVRENG_8)? u32PVREng : (u32PVREng - E_TSP_PVR_PVRENG_8);
4814*53ee8cc1Swenshuai.xi 
4815*53ee8cc1Swenshuai.xi     if(u8MiuSel < E_CHIP_MIU_NUM)
4816*53ee8cc1Swenshuai.xi     {
4817*53ee8cc1Swenshuai.xi         MS_U32  u32LBnd = (MS_U32)(phyMiuOffsetLB >> MIU_BUS);
4818*53ee8cc1Swenshuai.xi         MS_U32  u32UBnd = (MS_U32)(phyMiuOffsetUB >> MIU_BUS);
4819*53ee8cc1Swenshuai.xi 
4820*53ee8cc1Swenshuai.xi         REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_1C_1D, u32LBnd);
4821*53ee8cc1Swenshuai.xi         REG32_W(&RegPvrCtrl[u8PvrEng].CFG_PVR_1E_1F, u32UBnd);
4822*53ee8cc1Swenshuai.xi     }
4823*53ee8cc1Swenshuai.xi }
4824*53ee8cc1Swenshuai.xi 
HAL_TSP_MMFI_Address_Protect_En(MS_U32 u32MMFIEng,MS_BOOL bEnable)4825*53ee8cc1Swenshuai.xi void HAL_TSP_MMFI_Address_Protect_En(MS_U32 u32MMFIEng,MS_BOOL bEnable)
4826*53ee8cc1Swenshuai.xi {
4827*53ee8cc1Swenshuai.xi     if(u32MMFIEng >= 2)
4828*53ee8cc1Swenshuai.xi     {
4829*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong MMFI Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32MMFIEng));
4830*53ee8cc1Swenshuai.xi         return;
4831*53ee8cc1Swenshuai.xi     }
4832*53ee8cc1Swenshuai.xi 
4833*53ee8cc1Swenshuai.xi     if(bEnable)
4834*53ee8cc1Swenshuai.xi     {
4835*53ee8cc1Swenshuai.xi         REG16_SET(&_RegOtherCtrl->CFG_OTHER_18, (CFG_OTHER_18_REG_MMFI0_DMAR_PROTECT_EN << u32MMFIEng));
4836*53ee8cc1Swenshuai.xi     }
4837*53ee8cc1Swenshuai.xi     else
4838*53ee8cc1Swenshuai.xi     {
4839*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegOtherCtrl->CFG_OTHER_18, (CFG_OTHER_18_REG_MMFI0_DMAR_PROTECT_EN << u32MMFIEng));
4840*53ee8cc1Swenshuai.xi     }
4841*53ee8cc1Swenshuai.xi }
4842*53ee8cc1Swenshuai.xi 
HAL_TSP_MMFI_Address_Protect(MS_U32 u32MMFIEng,MS_PHY u32UpBoundAddr,MS_PHY u32LowBoundAddr)4843*53ee8cc1Swenshuai.xi void HAL_TSP_MMFI_Address_Protect(MS_U32 u32MMFIEng, MS_PHY u32UpBoundAddr, MS_PHY u32LowBoundAddr)
4844*53ee8cc1Swenshuai.xi {
4845*53ee8cc1Swenshuai.xi     if(u32MMFIEng >= 2)
4846*53ee8cc1Swenshuai.xi     {
4847*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong MMFI Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32MMFIEng));
4848*53ee8cc1Swenshuai.xi         return;
4849*53ee8cc1Swenshuai.xi     }
4850*53ee8cc1Swenshuai.xi 
4851*53ee8cc1Swenshuai.xi     MS_U8 u8MiuSel;
4852*53ee8cc1Swenshuai.xi     MS_PHY phyMiuOffsetLB, phyMiuOffsetUB;
4853*53ee8cc1Swenshuai.xi 
4854*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetLB, u32LowBoundAddr);
4855*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetUB, u32UpBoundAddr);
4856*53ee8cc1Swenshuai.xi 
4857*53ee8cc1Swenshuai.xi     if(u8MiuSel < E_CHIP_MIU_NUM)
4858*53ee8cc1Swenshuai.xi     {
4859*53ee8cc1Swenshuai.xi         MS_U32  u32LBnd = (MS_U32)((phyMiuOffsetLB >> MIU_BUS) & REG_TOP_ProtectCtrl_BND_MASK);
4860*53ee8cc1Swenshuai.xi         MS_U32  u32UBnd = (MS_U32)((phyMiuOffsetUB >> MIU_BUS) & REG_TOP_ProtectCtrl_BND_MASK);
4861*53ee8cc1Swenshuai.xi 
4862*53ee8cc1Swenshuai.xi         REG32_W(&_RegTopCtrl->CFG_TOP_50_57[u32MMFIEng].L_BND, u32LBnd);
4863*53ee8cc1Swenshuai.xi         REG32_W(&_RegTopCtrl->CFG_TOP_50_57[u32MMFIEng].U_BND, u32UBnd);
4864*53ee8cc1Swenshuai.xi     }
4865*53ee8cc1Swenshuai.xi }
4866*53ee8cc1Swenshuai.xi 
HAL_TSP_SaveFltState(void)4867*53ee8cc1Swenshuai.xi void HAL_TSP_SaveFltState(void)
4868*53ee8cc1Swenshuai.xi {
4869*53ee8cc1Swenshuai.xi     MS_U32              u32Size;
4870*53ee8cc1Swenshuai.xi     TSP32 *             pRegEnd;
4871*53ee8cc1Swenshuai.xi     TSP32 *             pReg;
4872*53ee8cc1Swenshuai.xi     int                 i, j;
4873*53ee8cc1Swenshuai.xi 
4874*53ee8cc1Swenshuai.xi     for (i = 0; i < TSP_PIDFLT_NUM; i++)
4875*53ee8cc1Swenshuai.xi     {
4876*53ee8cc1Swenshuai.xi          _u32PidFltReg[i] = TSP32_IdrR(&(_REGPid0->Flt[i]));
4877*53ee8cc1Swenshuai.xi          _u32PidDstReg[i] = TSP32_IdrR(&(_REGPid1->Flt[i]));
4878*53ee8cc1Swenshuai.xi          _u32PidDst2Reg[i] = TSP32_IdrR(&(_REGPid2->Flt[i]));
4879*53ee8cc1Swenshuai.xi     }
4880*53ee8cc1Swenshuai.xi 
4881*53ee8cc1Swenshuai.xi     u32Size = ((MS_VIRT)&(((REG_SecFlt*)0)->_x54))/sizeof(TSP32);
4882*53ee8cc1Swenshuai.xi     for (i = 0; i < TSP_SECFLT_NUM; i++)
4883*53ee8cc1Swenshuai.xi     {
4884*53ee8cc1Swenshuai.xi          pReg = (TSP32*)&(_REGSec->Flt[i]);
4885*53ee8cc1Swenshuai.xi          pRegEnd = pReg + u32Size;
4886*53ee8cc1Swenshuai.xi          j = 0;
4887*53ee8cc1Swenshuai.xi          for ( ; pReg < pRegEnd; pReg++)
4888*53ee8cc1Swenshuai.xi          {
4889*53ee8cc1Swenshuai.xi              _u32SecReg[i*u32Size+j] = TSP32_IdrR(pReg);
4890*53ee8cc1Swenshuai.xi              j++;
4891*53ee8cc1Swenshuai.xi          }
4892*53ee8cc1Swenshuai.xi     }
4893*53ee8cc1Swenshuai.xi }
4894*53ee8cc1Swenshuai.xi 
HAL_TSP_CMD_Run(MS_U32 u32Cmd,MS_U32 u32Config0,MS_U32 u32Config1,MS_U32 * pData)4895*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_CMD_Run(MS_U32 u32Cmd, MS_U32 u32Config0, MS_U32 u32Config1, MS_U32* pData)
4896*53ee8cc1Swenshuai.xi {
4897*53ee8cc1Swenshuai.xi     MS_U32 u32Data = 0;
4898*53ee8cc1Swenshuai.xi     MS_BOOL brtn = FALSE;
4899*53ee8cc1Swenshuai.xi     //printf("\033[31m [%s] Mode = %lX , Config0 =%lX , Config1 = %lX \033[m\n",__FUNCTION__,u32Cmd,u32Config0,u32Config1);  // Eason test
4900*53ee8cc1Swenshuai.xi     switch (u32Cmd)
4901*53ee8cc1Swenshuai.xi     {
4902*53ee8cc1Swenshuai.xi         case HAL_DMX_CMD_RUN_DISABLE_SEC_CC_CHECK:
4903*53ee8cc1Swenshuai.xi             REG32_W(&_RegCtrl->MCU_Data1, u32Config0);
4904*53ee8cc1Swenshuai.xi             REG32_W(&_RegCtrl->MCU_Cmd, TSP_MCU_CMD_SEC_CC_CHECK_DISABLE);
4905*53ee8cc1Swenshuai.xi             _delay(10); // supposed TSP is able to respond in 10us
4906*53ee8cc1Swenshuai.xi             u32Data = REG32_R(&_RegCtrl->MCU_Data1);
4907*53ee8cc1Swenshuai.xi             REG32_W(&_RegCtrl->MCU_Cmd, 0); // write null to clear
4908*53ee8cc1Swenshuai.xi             brtn = (u32Data == TSP_MCU_CMD_SEC_CC_CHECK_DISABLE)? TRUE : FALSE;
4909*53ee8cc1Swenshuai.xi             break;
4910*53ee8cc1Swenshuai.xi         default:
4911*53ee8cc1Swenshuai.xi             break;
4912*53ee8cc1Swenshuai.xi     }
4913*53ee8cc1Swenshuai.xi     return brtn;
4914*53ee8cc1Swenshuai.xi }
4915*53ee8cc1Swenshuai.xi 
HAL_TSP_CAPVR_SPSEnable(MS_U32 u32Eng,MS_U16 u16CaPvrMode,MS_BOOL bEnable)4916*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_CAPVR_SPSEnable(MS_U32 u32Eng, MS_U16 u16CaPvrMode, MS_BOOL bEnable)
4917*53ee8cc1Swenshuai.xi {
4918*53ee8cc1Swenshuai.xi     if(u32Eng >= TSP_PVRENG_NUM)
4919*53ee8cc1Swenshuai.xi     {
4920*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32Eng));
4921*53ee8cc1Swenshuai.xi         return FALSE;
4922*53ee8cc1Swenshuai.xi     }
4923*53ee8cc1Swenshuai.xi 
4924*53ee8cc1Swenshuai.xi     REG_PVR_ENG_Ctrl    *RegPvrCtrl = (u32Eng < E_TSP_PVR_PVRENG_8)? _RegPvrCtrl : _RegPvrCtrl_1;
4925*53ee8cc1Swenshuai.xi     MS_U8   u8PvrEng = (u32Eng < E_TSP_PVR_PVRENG_8)? u32Eng : (u32Eng - E_TSP_PVR_PVRENG_8);
4926*53ee8cc1Swenshuai.xi 
4927*53ee8cc1Swenshuai.xi     if(bEnable)
4928*53ee8cc1Swenshuai.xi     {
4929*53ee8cc1Swenshuai.xi         if(u16CaPvrMode != 0)
4930*53ee8cc1Swenshuai.xi         {
4931*53ee8cc1Swenshuai.xi             REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_10, CFG_PVR_10_REG_REC_CA_UPPER_PATH);
4932*53ee8cc1Swenshuai.xi         }
4933*53ee8cc1Swenshuai.xi 
4934*53ee8cc1Swenshuai.xi         REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_1B, CFG_PVR_1B_REG_PKT_192_SPS_EN);
4935*53ee8cc1Swenshuai.xi     }
4936*53ee8cc1Swenshuai.xi     else
4937*53ee8cc1Swenshuai.xi     {
4938*53ee8cc1Swenshuai.xi         REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_10, CFG_PVR_10_REG_REC_CA_UPPER_PATH);
4939*53ee8cc1Swenshuai.xi         REG16_CLR(&RegPvrCtrl[u8PvrEng].CFG_PVR_1B, CFG_PVR_1B_REG_PKT_192_SPS_EN);
4940*53ee8cc1Swenshuai.xi     }
4941*53ee8cc1Swenshuai.xi 
4942*53ee8cc1Swenshuai.xi     return TRUE;
4943*53ee8cc1Swenshuai.xi }
4944*53ee8cc1Swenshuai.xi 
4945*53ee8cc1Swenshuai.xi //@TODO
4946*53ee8cc1Swenshuai.xi #if FPGA_TEST
4947*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_SPSConfig(MS_U32 u32PVREng,MS_BOOL CTR_mode)4948*53ee8cc1Swenshuai.xi     void HAL_TSP_PVR_SPSConfig(MS_U32 u32PVREng, MS_BOOL CTR_mode)
4949*53ee8cc1Swenshuai.xi     {
4950*53ee8cc1Swenshuai.xi         if(u32PVREng >= TSP_PVRENG_NUM)
4951*53ee8cc1Swenshuai.xi         {
4952*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PVR Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32PVREng));
4953*53ee8cc1Swenshuai.xi             return;
4954*53ee8cc1Swenshuai.xi         }
4955*53ee8cc1Swenshuai.xi 
4956*53ee8cc1Swenshuai.xi         REG_PVR_ENG_Ctrl    *RegPvrCtrl = NULL;
4957*53ee8cc1Swenshuai.xi         REG_SPS_ENG_Ctrl    *RegSpsCtrl = NULL;
4958*53ee8cc1Swenshuai.xi         MS_U8               u8PvrEng = 0;
4959*53ee8cc1Swenshuai.xi 
4960*53ee8cc1Swenshuai.xi         if(u32PVREng < E_TSP_PVR_PVRENG_8)
4961*53ee8cc1Swenshuai.xi         {
4962*53ee8cc1Swenshuai.xi             u8PvrEng = u32PVREng;
4963*53ee8cc1Swenshuai.xi             RegPvrCtrl = _RegPvrCtrl;
4964*53ee8cc1Swenshuai.xi             RegSpsCtrl = _RegSpsCtrl;
4965*53ee8cc1Swenshuai.xi         }
4966*53ee8cc1Swenshuai.xi         else
4967*53ee8cc1Swenshuai.xi         {
4968*53ee8cc1Swenshuai.xi             u8PvrEng = u32PVREng - E_TSP_PVR_PVRENG_8;
4969*53ee8cc1Swenshuai.xi             RegPvrCtrl = _RegPvrCtrl_1;
4970*53ee8cc1Swenshuai.xi             RegSpsCtrl = _RegSpsCtrl_1;
4971*53ee8cc1Swenshuai.xi         }
4972*53ee8cc1Swenshuai.xi 
4973*53ee8cc1Swenshuai.xi         REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_1B, CFG_PVR_1B_REG_PKT_192_SPS_EN);
4974*53ee8cc1Swenshuai.xi         REG16_MSK_W(&_RegOtherCtrl->CFG_OTHER_1F, CFG_OTHER_1F_REG_SRC_AES_PVR_KEY_MASK, ((MS_U16)u32PVREng << CFG_OTHER_1F_REG_SRC_AES_PVR_KEY_SHIFT));
4975*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_20_27[0], 0x0000);
4976*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_20_27[1], 0x0000);
4977*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_20_27[2], 0x0000);
4978*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_20_27[3], 0x0000);
4979*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_20_27[4], 0x1111);
4980*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_20_27[5], 0x1111);
4981*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_20_27[6], 0x1111);
4982*53ee8cc1Swenshuai.xi         REG16_W(&_RegOtherCtrl->CFG_OTHER_20_27[7], 0x1111);
4983*53ee8cc1Swenshuai.xi         REG16_SET(&RegPvrCtrl[u8PvrEng].CFG_PVR_1B, CFG_PVR_1B_REG_LOAD_SPS_KEY);
4984*53ee8cc1Swenshuai.xi 
4985*53ee8cc1Swenshuai.xi         if(CTR_mode)
4986*53ee8cc1Swenshuai.xi         {
4987*53ee8cc1Swenshuai.xi             REG16_SET(&RegSpsCtrl[u8PvrEng].CFG_SPS_05, CFG_SPS_05_REG_CTR_MODE_SPS_PVR);         //set CTR mode
4988*53ee8cc1Swenshuai.xi             REG16_W(&RegSpsCtrl[u8PvrEng].CFG_SPS_00_03[0], 0x0000);                              //set counter IV
4989*53ee8cc1Swenshuai.xi             REG16_W(&RegSpsCtrl[u8PvrEng].CFG_SPS_00_03[1], 0x0000);
4990*53ee8cc1Swenshuai.xi             REG16_W(&RegSpsCtrl[u8PvrEng].CFG_SPS_00_03[2], 0x0000);
4991*53ee8cc1Swenshuai.xi             REG16_W(&RegSpsCtrl[u8PvrEng].CFG_SPS_00_03[3], 0x0000);
4992*53ee8cc1Swenshuai.xi             REG16_W(&RegSpsCtrl[u8PvrEng].CFG_SPS_04, CFG_SPS_04_CTR_IV_SPS_MAX_1K);              //set counter IV max vld
4993*53ee8cc1Swenshuai.xi             REG16_SET(&RegSpsCtrl[u8PvrEng].CFG_SPS_05, CFG_SPS_05_REG_LOAD_INIT_COUNTER_SPS);    //load counter IV
4994*53ee8cc1Swenshuai.xi         }
4995*53ee8cc1Swenshuai.xi         else
4996*53ee8cc1Swenshuai.xi         {
4997*53ee8cc1Swenshuai.xi             REG16_CLR(&RegSpsCtrl[u8PvrEng].CFG_SPS_05, CFG_SPS_05_REG_CTR_MODE_SPS_PVR);
4998*53ee8cc1Swenshuai.xi         }
4999*53ee8cc1Swenshuai.xi     }
5000*53ee8cc1Swenshuai.xi 
5001*53ee8cc1Swenshuai.xi #endif
5002*53ee8cc1Swenshuai.xi 
5003*53ee8cc1Swenshuai.xi // u32GroupId: 0 -> filter0  ~ filter31
5004*53ee8cc1Swenshuai.xi // u32GroupId: 1 -> filter32 ~ filter63
5005*53ee8cc1Swenshuai.xi // u32GroupId: 2 -> filter64 ~ filter95
5006*53ee8cc1Swenshuai.xi // u32GroupId: 3 -> filter96 ~ filter127
5007*53ee8cc1Swenshuai.xi // u32GroupId: 4 -> filter128 ~ filter159
5008*53ee8cc1Swenshuai.xi // u32GroupId: 5 -> filter160 ~ filter191
HAL_DSCMB_GetStatus(MS_U32 u32PktDmx,MS_U32 u32GroupId,MS_U32 u32PidFltId,MS_U32 * pu32ScmbSts)5009*53ee8cc1Swenshuai.xi MS_BOOL HAL_DSCMB_GetStatus(MS_U32 u32PktDmx, MS_U32 u32GroupId, MS_U32 u32PidFltId, MS_U32 *pu32ScmbSts)
5010*53ee8cc1Swenshuai.xi {
5011*53ee8cc1Swenshuai.xi     MS_U16              u16PktDmxSrc;
5012*53ee8cc1Swenshuai.xi     MS_U16              u16WordId;
5013*53ee8cc1Swenshuai.xi     MS_U32              u32PIDFltMask = u32PidFltId;
5014*53ee8cc1Swenshuai.xi 
5015*53ee8cc1Swenshuai.xi     if(u32PidFltId != 0xFFFFFFFF)
5016*53ee8cc1Swenshuai.xi     {
5017*53ee8cc1Swenshuai.xi         u32PIDFltMask = (1 << (u32PidFltId & 0x1F));
5018*53ee8cc1Swenshuai.xi     }
5019*53ee8cc1Swenshuai.xi 
5020*53ee8cc1Swenshuai.xi     u16PktDmxSrc = _CLR_(REG16_R(&_RegCtrl->reg15b8), TSP_MATCH_PID_SRC_MASK);
5021*53ee8cc1Swenshuai.xi 
5022*53ee8cc1Swenshuai.xi     switch(u32PktDmx)
5023*53ee8cc1Swenshuai.xi     {
5024*53ee8cc1Swenshuai.xi         case 0:
5025*53ee8cc1Swenshuai.xi             u16PktDmxSrc = _SET_(u16PktDmxSrc, TSP_MATCH_PID_SRC_PKTDMX0 << TSP_MATCH_PID_SRC_SHIFT);
5026*53ee8cc1Swenshuai.xi             break;
5027*53ee8cc1Swenshuai.xi         case 1:
5028*53ee8cc1Swenshuai.xi             u16PktDmxSrc = _SET_(u16PktDmxSrc, TSP_MATCH_PID_SRC_PKTDMX1 << TSP_MATCH_PID_SRC_SHIFT);
5029*53ee8cc1Swenshuai.xi             break;
5030*53ee8cc1Swenshuai.xi         case 2:
5031*53ee8cc1Swenshuai.xi             u16PktDmxSrc = _SET_(u16PktDmxSrc, TSP_MATCH_PID_SRC_PKTDMX2 << TSP_MATCH_PID_SRC_SHIFT);
5032*53ee8cc1Swenshuai.xi             break;
5033*53ee8cc1Swenshuai.xi         case 3:
5034*53ee8cc1Swenshuai.xi             u16PktDmxSrc = _SET_(u16PktDmxSrc, TSP_MATCH_PID_SRC_PKTDMX3 << TSP_MATCH_PID_SRC_SHIFT);
5035*53ee8cc1Swenshuai.xi             break;
5036*53ee8cc1Swenshuai.xi         case 4:
5037*53ee8cc1Swenshuai.xi             u16PktDmxSrc = _SET_(u16PktDmxSrc, TSP_MATCH_PID_SRC_PKTDMX4 << TSP_MATCH_PID_SRC_SHIFT);
5038*53ee8cc1Swenshuai.xi             break;
5039*53ee8cc1Swenshuai.xi         case 5:
5040*53ee8cc1Swenshuai.xi             u16PktDmxSrc = _SET_(u16PktDmxSrc, TSP_MATCH_PID_SRC_PKTDMX5 << TSP_MATCH_PID_SRC_SHIFT);
5041*53ee8cc1Swenshuai.xi             break;
5042*53ee8cc1Swenshuai.xi         case 6:
5043*53ee8cc1Swenshuai.xi             u16PktDmxSrc = _SET_(u16PktDmxSrc, TSP_MATCH_PID_SRC_PKTDMX6 << TSP_MATCH_PID_SRC_SHIFT);
5044*53ee8cc1Swenshuai.xi             break;
5045*53ee8cc1Swenshuai.xi         default:
5046*53ee8cc1Swenshuai.xi             break;
5047*53ee8cc1Swenshuai.xi     }
5048*53ee8cc1Swenshuai.xi 
5049*53ee8cc1Swenshuai.xi     REG16_W(&_RegCtrl->reg15b8, u16PktDmxSrc);
5050*53ee8cc1Swenshuai.xi 
5051*53ee8cc1Swenshuai.xi     REG16_W(&_RegCtrl->PVRConfig, _SET_(REG16_R(&_RegCtrl->PVRConfig), TSP_MATCH_PID_LD)); // Set 1 to load match_pid_num
5052*53ee8cc1Swenshuai.xi 
5053*53ee8cc1Swenshuai.xi     // get status
5054*53ee8cc1Swenshuai.xi     REG16_W(&_RegCtrl->PVRConfig, _CLR_(REG16_R(&_RegCtrl->PVRConfig), TSP_MATCH_PID_LD)); // freeze
5055*53ee8cc1Swenshuai.xi 
5056*53ee8cc1Swenshuai.xi     u16WordId =  _CLR_(REG16_R(&_RegCtrl->PVRConfig), TSP_MATCH_PID_SEL_MASK);
5057*53ee8cc1Swenshuai.xi 
5058*53ee8cc1Swenshuai.xi     if (u32GroupId < 24)
5059*53ee8cc1Swenshuai.xi     {
5060*53ee8cc1Swenshuai.xi         u16WordId = _SET_(u16WordId, u32GroupId << TSP_MATCH_PID_SEL_SHIFT);
5061*53ee8cc1Swenshuai.xi         REG16_MSK_W(&_RegCtrl->PVRConfig,TSP_MATCH_PID_SEL_MASK, u16WordId);
5062*53ee8cc1Swenshuai.xi     }
5063*53ee8cc1Swenshuai.xi     else
5064*53ee8cc1Swenshuai.xi     {
5065*53ee8cc1Swenshuai.xi         printf("[TSP_ERR][%s][%d] Unsupported u32GroupId (%lu)!!!\n",__FUNCTION__, __LINE__, (long unsigned int)u32GroupId);
5066*53ee8cc1Swenshuai.xi     }
5067*53ee8cc1Swenshuai.xi 
5068*53ee8cc1Swenshuai.xi     *pu32ScmbSts = _AND_(REG32_R(&_RegCtrl->TsPidScmbStatTsin), u32PIDFltMask);
5069*53ee8cc1Swenshuai.xi 
5070*53ee8cc1Swenshuai.xi     REG16_W(&_RegCtrl->PVRConfig, _SET_(REG16_R(&_RegCtrl->PVRConfig), TSP_MATCH_PID_LD)); // re-enable
5071*53ee8cc1Swenshuai.xi 
5072*53ee8cc1Swenshuai.xi     if(u32PIDFltMask != 0xFFFFFFFF)
5073*53ee8cc1Swenshuai.xi     {
5074*53ee8cc1Swenshuai.xi         *pu32ScmbSts = ((*pu32ScmbSts > 0) ? 1: 0);
5075*53ee8cc1Swenshuai.xi     }
5076*53ee8cc1Swenshuai.xi 
5077*53ee8cc1Swenshuai.xi     return TRUE;
5078*53ee8cc1Swenshuai.xi }
5079*53ee8cc1Swenshuai.xi 
5080*53ee8cc1Swenshuai.xi // -------------------------------------------------------------
5081*53ee8cc1Swenshuai.xi // Merge Stream
5082*53ee8cc1Swenshuai.xi // -------------------------------------------------------------
HAL_TSP_PktConverter_SetSyncByte(MS_U8 u8Path,MS_U8 u8Idx,MS_U8 * pu8SyncByte,MS_BOOL bSet)5083*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_PktConverter_SetSyncByte(MS_U8 u8Path, MS_U8 u8Idx, MS_U8 *pu8SyncByte, MS_BOOL bSet)
5084*53ee8cc1Swenshuai.xi {
5085*53ee8cc1Swenshuai.xi     if(u8Path >= TSP_TSIF_NUM)
5086*53ee8cc1Swenshuai.xi     {
5087*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u8Path));
5088*53ee8cc1Swenshuai.xi         return FALSE;
5089*53ee8cc1Swenshuai.xi     }
5090*53ee8cc1Swenshuai.xi 
5091*53ee8cc1Swenshuai.xi     REG16   *SynCReg =  (u8Path < TSP_TSIF4)?
5092*53ee8cc1Swenshuai.xi                         &_RegTspMultiSyncCtrl->CFG_TSP_MULTI_SYNC_00_7F[u8Path].reg_sync_byte[u8Idx >> 1]
5093*53ee8cc1Swenshuai.xi                        :&_RegTspMultiSyncCtrl_1->CFG_TSP_MULTI_SYNC_00_7F[(u8Path - TSP_TSIF4)].reg_sync_byte[u8Idx >> 1];
5094*53ee8cc1Swenshuai.xi     MS_U16  u16Mask = (u8Idx & 0x1)? CFG_TSP_MULTI_SYNC_BYTE_ODD_MASK : CFG_TSP_MULTI_SYNC_BYTE_EVEN_MASK;
5095*53ee8cc1Swenshuai.xi     MS_U16  u16Shift = (u8Idx & 0x1)? CFG_TSP_MULTI_SYNC_BYTE_ODD_SHIFT : CFG_TSP_MULTI_SYNC_BYTE_EVEN_SHIFT;
5096*53ee8cc1Swenshuai.xi 
5097*53ee8cc1Swenshuai.xi     if(bSet)
5098*53ee8cc1Swenshuai.xi     {
5099*53ee8cc1Swenshuai.xi         REG16_MSK_W(SynCReg, u16Mask, (*pu8SyncByte << u16Shift));
5100*53ee8cc1Swenshuai.xi     }
5101*53ee8cc1Swenshuai.xi     else
5102*53ee8cc1Swenshuai.xi     {
5103*53ee8cc1Swenshuai.xi         *pu8SyncByte = (MS_U8)((REG16_R(SynCReg) & u16Mask) >> u16Shift);
5104*53ee8cc1Swenshuai.xi     }
5105*53ee8cc1Swenshuai.xi 
5106*53ee8cc1Swenshuai.xi     return TRUE;
5107*53ee8cc1Swenshuai.xi }
5108*53ee8cc1Swenshuai.xi 
HAL_TSP_PktConverter_SetSrcId(MS_U8 u8Path,MS_U8 u8Idx,MS_U8 * pu8SrcId,MS_BOOL bSet)5109*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_PktConverter_SetSrcId(MS_U8 u8Path, MS_U8 u8Idx, MS_U8 *pu8SrcId, MS_BOOL bSet)
5110*53ee8cc1Swenshuai.xi {
5111*53ee8cc1Swenshuai.xi     if(u8Path >= TSP_TSIF_NUM)
5112*53ee8cc1Swenshuai.xi     {
5113*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u8Path));
5114*53ee8cc1Swenshuai.xi         return FALSE;
5115*53ee8cc1Swenshuai.xi     }
5116*53ee8cc1Swenshuai.xi 
5117*53ee8cc1Swenshuai.xi     REG16   *SrcIdReg = (u8Path < TSP_TSIF4)?
5118*53ee8cc1Swenshuai.xi                         &_RegTspMultiSyncCtrl->CFG_TSP_MULTI_SYNC_00_7F[u8Path].reg_source_id[u8Idx >> 1]
5119*53ee8cc1Swenshuai.xi                        :&_RegTspMultiSyncCtrl_1->CFG_TSP_MULTI_SYNC_00_7F[(u8Path - TSP_TSIF4)].reg_source_id[u8Idx >> 1];
5120*53ee8cc1Swenshuai.xi     MS_U16  u16Mask = (u8Idx & 0x1)? CFG_TSP_MULTI_SRC_ID_ODD_MASK : CFG_TSP_MULTI_SRC_ID_EVEN_MASK;
5121*53ee8cc1Swenshuai.xi     MS_U16  u16Shift = (u8Idx & 0x1)? CFG_TSP_MULTI_SRC_ID_ODD_SHIFT : CFG_TSP_MULTI_SRC_ID_EVEN_SHIFT;
5122*53ee8cc1Swenshuai.xi 
5123*53ee8cc1Swenshuai.xi     if(bSet)
5124*53ee8cc1Swenshuai.xi     {
5125*53ee8cc1Swenshuai.xi         REG16_MSK_W(SrcIdReg, u16Mask, (*pu8SrcId << u16Shift));
5126*53ee8cc1Swenshuai.xi         REG16_SET(SrcIdReg, (CFG_TSP_MULTI_SRC_ID_MULTI_SYNC_BYTE_EN << u16Shift)); // enable bit
5127*53ee8cc1Swenshuai.xi     }
5128*53ee8cc1Swenshuai.xi     else
5129*53ee8cc1Swenshuai.xi     {
5130*53ee8cc1Swenshuai.xi         *pu8SrcId = (MS_U8)((REG16_R(SrcIdReg) & u16Mask) >> u16Shift);
5131*53ee8cc1Swenshuai.xi     }
5132*53ee8cc1Swenshuai.xi 
5133*53ee8cc1Swenshuai.xi     return TRUE;
5134*53ee8cc1Swenshuai.xi }
5135*53ee8cc1Swenshuai.xi 
HAL_TSP_PktConverter_SetMXLPktHeaderLen(MS_U8 u8Path,MS_U8 u8PktHeaderLen)5136*53ee8cc1Swenshuai.xi static void HAL_TSP_PktConverter_SetMXLPktHeaderLen(MS_U8 u8Path, MS_U8 u8PktHeaderLen)
5137*53ee8cc1Swenshuai.xi {
5138*53ee8cc1Swenshuai.xi     if(u8Path >= TSP_TSIF_NUM)
5139*53ee8cc1Swenshuai.xi     {
5140*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u8Path));
5141*53ee8cc1Swenshuai.xi         return;
5142*53ee8cc1Swenshuai.xi     }
5143*53ee8cc1Swenshuai.xi 
5144*53ee8cc1Swenshuai.xi     REG16 *PktConverterReg = &_RegPathCtrl[u8Path].CFG_PATH_05;
5145*53ee8cc1Swenshuai.xi     REG16_MSK_W(PktConverterReg, CFG_PATH_05_MXL_PKT_HEADER_MASK, (u8PktHeaderLen << CFG_PATH_05_MXL_PKT_HEADER_SHIFT));
5146*53ee8cc1Swenshuai.xi }
5147*53ee8cc1Swenshuai.xi 
HAL_TSP_PktConverter_SetSyncBytePosition(MS_U8 u8Path,MS_U8 u8SyncBytePos)5148*53ee8cc1Swenshuai.xi static void HAL_TSP_PktConverter_SetSyncBytePosition(MS_U8 u8Path, MS_U8 u8SyncBytePos)
5149*53ee8cc1Swenshuai.xi {
5150*53ee8cc1Swenshuai.xi     if(u8Path >= TSP_TSIF_NUM)
5151*53ee8cc1Swenshuai.xi     {
5152*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u8Path));
5153*53ee8cc1Swenshuai.xi         return;
5154*53ee8cc1Swenshuai.xi     }
5155*53ee8cc1Swenshuai.xi 
5156*53ee8cc1Swenshuai.xi     REG16 *PktConverterReg = &_RegPathCtrl[u8Path].CFG_PATH_05;
5157*53ee8cc1Swenshuai.xi     REG16_MSK_W(PktConverterReg, CFG_PATH_05_SYNC_BYTE_POSITION_MASK, (u8SyncBytePos << CFG_PATH_05_SYNC_BYTE_POSITION_SHIFT));
5158*53ee8cc1Swenshuai.xi }
5159*53ee8cc1Swenshuai.xi 
HAL_TSP_PktConverter_PktMode(MS_U8 u8Path,TSP_HAL_PKT_MODE ePktMode)5160*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_PktConverter_PktMode(MS_U8 u8Path, TSP_HAL_PKT_MODE ePktMode)
5161*53ee8cc1Swenshuai.xi {
5162*53ee8cc1Swenshuai.xi     if(u8Path >= TSP_TSIF_NUM)
5163*53ee8cc1Swenshuai.xi     {
5164*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u8Path));
5165*53ee8cc1Swenshuai.xi         return FALSE;
5166*53ee8cc1Swenshuai.xi     }
5167*53ee8cc1Swenshuai.xi 
5168*53ee8cc1Swenshuai.xi     REG16 *PktConverterReg = &_RegPathCtrl[u8Path].CFG_PATH_05;
5169*53ee8cc1Swenshuai.xi 
5170*53ee8cc1Swenshuai.xi     switch(ePktMode)
5171*53ee8cc1Swenshuai.xi     {
5172*53ee8cc1Swenshuai.xi         case E_TSP_HAL_PKT_MODE_NORMAL:
5173*53ee8cc1Swenshuai.xi             REG16_MSK_W(PktConverterReg, CFG_PATH_05_PKT_CONVERTER_MODE_MASK, CFG_PATH_05_PKT_CONVERTER_NORMAL_MODE);
5174*53ee8cc1Swenshuai.xi             break;
5175*53ee8cc1Swenshuai.xi         case E_TSP_HAL_PKT_MODE_CI:
5176*53ee8cc1Swenshuai.xi             REG16_MSK_W(PktConverterReg, CFG_PATH_05_PKT_CONVERTER_MODE_MASK, CFG_PATH_05_PKT_CONVERTER_CIPLUS_MODE);
5177*53ee8cc1Swenshuai.xi             break;
5178*53ee8cc1Swenshuai.xi         case E_TSP_HAL_PKT_MODE_OPEN_CABLE:
5179*53ee8cc1Swenshuai.xi             REG16_MSK_W(PktConverterReg, CFG_PATH_05_PKT_CONVERTER_MODE_MASK, CFG_PATH_05_PKT_CONVERTER_OPENCABLE_MODE);
5180*53ee8cc1Swenshuai.xi             break;
5181*53ee8cc1Swenshuai.xi         case E_TSP_HAL_PKT_MODE_ATS:
5182*53ee8cc1Swenshuai.xi             REG16_MSK_W(PktConverterReg, CFG_PATH_05_PKT_CONVERTER_MODE_MASK, CFG_PATH_05_PKT_CONVERTER_ATS_MODE);
5183*53ee8cc1Swenshuai.xi             break;
5184*53ee8cc1Swenshuai.xi         case E_TSP_HAL_PKT_MODE_MXL_192:
5185*53ee8cc1Swenshuai.xi             REG16_MSK_W(PktConverterReg, CFG_PATH_05_PKT_CONVERTER_MODE_MASK, CFG_PATH_05_PKT_CONVERTER_MXL_MODE);
5186*53ee8cc1Swenshuai.xi             HAL_TSP_PktConverter_SetMXLPktHeaderLen(u8Path,4);
5187*53ee8cc1Swenshuai.xi             break;
5188*53ee8cc1Swenshuai.xi         case E_TSP_HAL_PKT_MODE_MXL_196:
5189*53ee8cc1Swenshuai.xi             REG16_MSK_W(PktConverterReg, CFG_PATH_05_PKT_CONVERTER_MODE_MASK, CFG_PATH_05_PKT_CONVERTER_MXL_MODE);
5190*53ee8cc1Swenshuai.xi             HAL_TSP_PktConverter_SetMXLPktHeaderLen(u8Path,8);
5191*53ee8cc1Swenshuai.xi             break;
5192*53ee8cc1Swenshuai.xi         case E_TSP_HAL_PKT_MODE_MXL_200:
5193*53ee8cc1Swenshuai.xi             REG16_MSK_W(PktConverterReg, CFG_PATH_05_PKT_CONVERTER_MODE_MASK, CFG_PATH_05_PKT_CONVERTER_MXL_MODE);
5194*53ee8cc1Swenshuai.xi             HAL_TSP_PktConverter_SetMXLPktHeaderLen(u8Path,12);
5195*53ee8cc1Swenshuai.xi             break;
5196*53ee8cc1Swenshuai.xi         case E_TSP_HAL_PKT_MODE_ND:
5197*53ee8cc1Swenshuai.xi             REG16_MSK_W(PktConverterReg, CFG_PATH_05_PKT_CONVERTER_MODE_MASK, CFG_PATH_05_PKT_CONVERTER_ND_MODE);
5198*53ee8cc1Swenshuai.xi             HAL_TSP_PktConverter_SetMXLPktHeaderLen(u8Path,1);
5199*53ee8cc1Swenshuai.xi             HAL_TSP_PktConverter_SetSyncBytePosition(u8Path, 1);
5200*53ee8cc1Swenshuai.xi             break;
5201*53ee8cc1Swenshuai.xi         default:
5202*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong PktConverter Packet Mode!!!\n",__FUNCTION__,__LINE__));
5203*53ee8cc1Swenshuai.xi             return FALSE;
5204*53ee8cc1Swenshuai.xi     }
5205*53ee8cc1Swenshuai.xi 
5206*53ee8cc1Swenshuai.xi     return TRUE;
5207*53ee8cc1Swenshuai.xi }
5208*53ee8cc1Swenshuai.xi 
HAL_TSP_PktConverter_ForceSync(MS_U8 u8Path,MS_BOOL bEnable)5209*53ee8cc1Swenshuai.xi void HAL_TSP_PktConverter_ForceSync(MS_U8 u8Path, MS_BOOL bEnable)
5210*53ee8cc1Swenshuai.xi {
5211*53ee8cc1Swenshuai.xi     if(u8Path >= TSP_TSIF_NUM)
5212*53ee8cc1Swenshuai.xi     {
5213*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u8Path));
5214*53ee8cc1Swenshuai.xi         return;
5215*53ee8cc1Swenshuai.xi     }
5216*53ee8cc1Swenshuai.xi 
5217*53ee8cc1Swenshuai.xi     REG16 *PktConverterReg = &_RegPathCtrl[u8Path].CFG_PATH_05;
5218*53ee8cc1Swenshuai.xi 
5219*53ee8cc1Swenshuai.xi     if(bEnable)
5220*53ee8cc1Swenshuai.xi     {
5221*53ee8cc1Swenshuai.xi         REG16_SET(PktConverterReg, CFG_PATH_05_PKT_CONVERTER_FORCE_SYNCBYTE); // Set 1 to force sync byte be 0x47
5222*53ee8cc1Swenshuai.xi     }
5223*53ee8cc1Swenshuai.xi     else
5224*53ee8cc1Swenshuai.xi     {
5225*53ee8cc1Swenshuai.xi         REG16_CLR(PktConverterReg, CFG_PATH_05_PKT_CONVERTER_FORCE_SYNCBYTE);
5226*53ee8cc1Swenshuai.xi     }
5227*53ee8cc1Swenshuai.xi }
5228*53ee8cc1Swenshuai.xi 
HAL_TSP_Reset_TSIF_MergeSetting(MS_U8 u8Path)5229*53ee8cc1Swenshuai.xi void HAL_TSP_Reset_TSIF_MergeSetting(MS_U8 u8Path)
5230*53ee8cc1Swenshuai.xi {
5231*53ee8cc1Swenshuai.xi     MS_U8   u8Id;
5232*53ee8cc1Swenshuai.xi     MS_U8   u8SyncByte;
5233*53ee8cc1Swenshuai.xi 
5234*53ee8cc1Swenshuai.xi     u8SyncByte = 0x47;
5235*53ee8cc1Swenshuai.xi     for(u8Id = 0; u8Id < TSP_MERGESTREAM_NUM; u8Id++,u8SyncByte++)
5236*53ee8cc1Swenshuai.xi     {
5237*53ee8cc1Swenshuai.xi         HAL_TSP_PktConverter_SetSyncByte(u8Path, u8Id, &u8SyncByte, TRUE);
5238*53ee8cc1Swenshuai.xi         HAL_TSP_PktConverter_SetSrcId(u8Path, u8Id, &u8Id, TRUE);
5239*53ee8cc1Swenshuai.xi     }
5240*53ee8cc1Swenshuai.xi     HAL_TSP_PktConverter_PktMode(u8Path,E_TSP_HAL_PKT_MODE_NORMAL);
5241*53ee8cc1Swenshuai.xi }
5242*53ee8cc1Swenshuai.xi 
HAL_TSP_PktConverter_SrcIdFlt(MS_U8 u8Path,MS_BOOL bEnable)5243*53ee8cc1Swenshuai.xi void HAL_TSP_PktConverter_SrcIdFlt(MS_U8 u8Path, MS_BOOL bEnable)
5244*53ee8cc1Swenshuai.xi {
5245*53ee8cc1Swenshuai.xi     if(u8Path >= TSP_TSIF_NUM)
5246*53ee8cc1Swenshuai.xi     {
5247*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u8Path));
5248*53ee8cc1Swenshuai.xi         return;
5249*53ee8cc1Swenshuai.xi     }
5250*53ee8cc1Swenshuai.xi 
5251*53ee8cc1Swenshuai.xi     REG16 *PktConverterReg = &_RegPathCtrl[u8Path].CFG_PATH_05;
5252*53ee8cc1Swenshuai.xi 
5253*53ee8cc1Swenshuai.xi     if(bEnable)
5254*53ee8cc1Swenshuai.xi     {
5255*53ee8cc1Swenshuai.xi         REG16_SET(PktConverterReg, CFG_PATH_05_SRC_ID_FLT_EN);
5256*53ee8cc1Swenshuai.xi     }
5257*53ee8cc1Swenshuai.xi     else
5258*53ee8cc1Swenshuai.xi     {
5259*53ee8cc1Swenshuai.xi         REG16_CLR(PktConverterReg, CFG_PATH_05_SRC_ID_FLT_EN);
5260*53ee8cc1Swenshuai.xi     }
5261*53ee8cc1Swenshuai.xi }
5262*53ee8cc1Swenshuai.xi 
5263*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
5264*53ee8cc1Swenshuai.xi //  For Debug Table
5265*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
5266*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_Flow2PktDmx_Mapping(TSP_HAL_FLOW eFlow)5267*53ee8cc1Swenshuai.xi TSP_SRC_SEQ HAL_TSP_Debug_Flow2PktDmx_Mapping(TSP_HAL_FLOW eFlow)
5268*53ee8cc1Swenshuai.xi {
5269*53ee8cc1Swenshuai.xi     switch (eFlow)
5270*53ee8cc1Swenshuai.xi     {
5271*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_LIVE0:
5272*53ee8cc1Swenshuai.xi             return E_TSP_SRC_PKTDMX0;
5273*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_LIVE1:
5274*53ee8cc1Swenshuai.xi             return E_TSP_SRC_PKTDMX2;
5275*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_LIVE2:
5276*53ee8cc1Swenshuai.xi             return E_TSP_SRC_PKTDMX3;
5277*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_LIVE3:
5278*53ee8cc1Swenshuai.xi             return E_TSP_SRC_PKTDMX1;
5279*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_FILE0:
5280*53ee8cc1Swenshuai.xi             return E_TSP_SRC_PKTDMX1;
5281*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_FILE1:
5282*53ee8cc1Swenshuai.xi             return E_TSP_SRC_PKTDMX3;
5283*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_FILE2:
5284*53ee8cc1Swenshuai.xi             return E_TSP_SRC_PKTDMX0;
5285*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_FILE3:
5286*53ee8cc1Swenshuai.xi             return E_TSP_SRC_PKTDMX2;
5287*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_LIVE4:
5288*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_FILE4:
5289*53ee8cc1Swenshuai.xi             return E_TSP_SRC_PKTDMX4;
5290*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_LIVE5:
5291*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_FILE5:
5292*53ee8cc1Swenshuai.xi             return E_TSP_SRC_PKTDMX5;
5293*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_LIVE6:
5294*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_FILE6:
5295*53ee8cc1Swenshuai.xi             return E_TSP_SRC_PKTDMX6;
5296*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_MMFI0:
5297*53ee8cc1Swenshuai.xi             return E_TSP_SRC_MMFI0;
5298*53ee8cc1Swenshuai.xi         case E_TSP_HAL_FLOW_MMFI1:
5299*53ee8cc1Swenshuai.xi             return E_TSP_SRC_MMFI1;
5300*53ee8cc1Swenshuai.xi         default:
5301*53ee8cc1Swenshuai.xi             printf("[TSP_ERR][%s][%d] UnSupported Debug Flow : %d !!!\n",__FUNCTION__, __LINE__,eFlow);
5302*53ee8cc1Swenshuai.xi             return E_TSP_SRC_INVALID;
5303*53ee8cc1Swenshuai.xi     }
5304*53ee8cc1Swenshuai.xi }
5305*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_LockPktCnt_Src(MS_U32 u32TsIf)5306*53ee8cc1Swenshuai.xi void HAL_TSP_Debug_LockPktCnt_Src(MS_U32 u32TsIf)
5307*53ee8cc1Swenshuai.xi {
5308*53ee8cc1Swenshuai.xi     //@NOTE: K7U don't have to implement
5309*53ee8cc1Swenshuai.xi }
5310*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_LockPktCnt_Load(MS_U32 u32TsIf,MS_BOOL bEn)5311*53ee8cc1Swenshuai.xi void HAL_TSP_Debug_LockPktCnt_Load(MS_U32 u32TsIf, MS_BOOL bEn)
5312*53ee8cc1Swenshuai.xi {
5313*53ee8cc1Swenshuai.xi     if(u32TsIf >= TSP_TSIF_NUM)
5314*53ee8cc1Swenshuai.xi     {
5315*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32TsIf));
5316*53ee8cc1Swenshuai.xi         return;
5317*53ee8cc1Swenshuai.xi     }
5318*53ee8cc1Swenshuai.xi 
5319*53ee8cc1Swenshuai.xi     if(bEn)
5320*53ee8cc1Swenshuai.xi     {
5321*53ee8cc1Swenshuai.xi         REG16_SET(&_RegPathCtrl[u32TsIf].CFG_PATH_02, CFG_PATH_02_REG_LOCKED_PKT_CNT_LOAD);
5322*53ee8cc1Swenshuai.xi     }
5323*53ee8cc1Swenshuai.xi     else
5324*53ee8cc1Swenshuai.xi     {
5325*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegPathCtrl[u32TsIf].CFG_PATH_02, CFG_PATH_02_REG_LOCKED_PKT_CNT_LOAD);
5326*53ee8cc1Swenshuai.xi     }
5327*53ee8cc1Swenshuai.xi }
5328*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_LockPktCnt_Get(MS_U32 u32TsIf,MS_BOOL bLock)5329*53ee8cc1Swenshuai.xi MS_U16 HAL_TSP_Debug_LockPktCnt_Get(MS_U32 u32TsIf, MS_BOOL bLock)
5330*53ee8cc1Swenshuai.xi {
5331*53ee8cc1Swenshuai.xi     if(u32TsIf >= TSP_TSIF_NUM)
5332*53ee8cc1Swenshuai.xi     {
5333*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32TsIf));
5334*53ee8cc1Swenshuai.xi         return 0;
5335*53ee8cc1Swenshuai.xi     }
5336*53ee8cc1Swenshuai.xi 
5337*53ee8cc1Swenshuai.xi     if(bLock)
5338*53ee8cc1Swenshuai.xi     {
5339*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegPathCtrl[u32TsIf].CFG_PATH_02, CFG_PATH_02_REG_UNLOCKED_PKT_CNT_MODE);
5340*53ee8cc1Swenshuai.xi     }
5341*53ee8cc1Swenshuai.xi     else
5342*53ee8cc1Swenshuai.xi     {
5343*53ee8cc1Swenshuai.xi         REG16_SET(&_RegPathCtrl[u32TsIf].CFG_PATH_02, CFG_PATH_02_REG_UNLOCKED_PKT_CNT_MODE);
5344*53ee8cc1Swenshuai.xi     }
5345*53ee8cc1Swenshuai.xi 
5346*53ee8cc1Swenshuai.xi     return REG16_R(&_RegPathCtrl[u32TsIf].CFG_PATH_03);
5347*53ee8cc1Swenshuai.xi }
5348*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_LockPktCnt_Clear(MS_U32 u32TsIf)5349*53ee8cc1Swenshuai.xi void HAL_TSP_Debug_LockPktCnt_Clear(MS_U32 u32TsIf)
5350*53ee8cc1Swenshuai.xi {
5351*53ee8cc1Swenshuai.xi     if(u32TsIf >= TSP_TSIF_NUM)
5352*53ee8cc1Swenshuai.xi     {
5353*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32TsIf));
5354*53ee8cc1Swenshuai.xi         return;
5355*53ee8cc1Swenshuai.xi     }
5356*53ee8cc1Swenshuai.xi 
5357*53ee8cc1Swenshuai.xi     REG16_SET(&_RegPathCtrl[u32TsIf].CFG_PATH_02, CFG_PATH_02_REG_LOCKED_PKT_CNT_CLR);
5358*53ee8cc1Swenshuai.xi     REG16_CLR(&_RegPathCtrl[u32TsIf].CFG_PATH_02, CFG_PATH_02_REG_LOCKED_PKT_CNT_CLR);
5359*53ee8cc1Swenshuai.xi }
5360*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_ClrSrcSel(TSP_SRC_SEQ eClrSrc)5361*53ee8cc1Swenshuai.xi void HAL_TSP_Debug_ClrSrcSel(TSP_SRC_SEQ eClrSrc)
5362*53ee8cc1Swenshuai.xi {
5363*53ee8cc1Swenshuai.xi     //@NOTE: K7U don't have to implement
5364*53ee8cc1Swenshuai.xi }
5365*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_AvPktCnt_Src(TSP_DST_SEQ eAvType,TSP_SRC_SEQ ePktDmxId)5366*53ee8cc1Swenshuai.xi void HAL_TSP_Debug_AvPktCnt_Src(TSP_DST_SEQ eAvType, TSP_SRC_SEQ ePktDmxId)
5367*53ee8cc1Swenshuai.xi {
5368*53ee8cc1Swenshuai.xi     //@NOTE: K7U don't have to implement
5369*53ee8cc1Swenshuai.xi }
5370*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_AvPktCnt_Load(TSP_DST_SEQ eAvType,MS_BOOL bEn)5371*53ee8cc1Swenshuai.xi void HAL_TSP_Debug_AvPktCnt_Load(TSP_DST_SEQ eAvType, MS_BOOL bEn)
5372*53ee8cc1Swenshuai.xi {
5373*53ee8cc1Swenshuai.xi     if((eAvType >= E_TSP_DST_FIFO_AUDIO) && (eAvType <= E_TSP_DST_FIFO_AUDIO6))
5374*53ee8cc1Swenshuai.xi     {
5375*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eAvType - E_TSP_DST_FIFO_AUDIO;
5376*53ee8cc1Swenshuai.xi 
5377*53ee8cc1Swenshuai.xi         if(bEn)
5378*53ee8cc1Swenshuai.xi         {
5379*53ee8cc1Swenshuai.xi             REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02, CFG_AV_02_REG_PKT_CNT_LOAD);
5380*53ee8cc1Swenshuai.xi         }
5381*53ee8cc1Swenshuai.xi         else
5382*53ee8cc1Swenshuai.xi         {
5383*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02, CFG_AV_02_REG_PKT_CNT_LOAD);
5384*53ee8cc1Swenshuai.xi         }
5385*53ee8cc1Swenshuai.xi     }
5386*53ee8cc1Swenshuai.xi     else if(eAvType <= E_TSP_DST_FIFO_VIDEO8)
5387*53ee8cc1Swenshuai.xi     {
5388*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eAvType - E_TSP_DST_FIFO_VIDEO;
5389*53ee8cc1Swenshuai.xi 
5390*53ee8cc1Swenshuai.xi         if(bEn)
5391*53ee8cc1Swenshuai.xi         {
5392*53ee8cc1Swenshuai.xi             REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02, CFG_AV_02_REG_PKT_CNT_LOAD);
5393*53ee8cc1Swenshuai.xi         }
5394*53ee8cc1Swenshuai.xi         else
5395*53ee8cc1Swenshuai.xi         {
5396*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02, CFG_AV_02_REG_PKT_CNT_LOAD);
5397*53ee8cc1Swenshuai.xi         }
5398*53ee8cc1Swenshuai.xi     }
5399*53ee8cc1Swenshuai.xi     else
5400*53ee8cc1Swenshuai.xi     {
5401*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
5402*53ee8cc1Swenshuai.xi     }
5403*53ee8cc1Swenshuai.xi }
5404*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_AvPktCnt_Get(TSP_DST_SEQ eAvType)5405*53ee8cc1Swenshuai.xi MS_U16 HAL_TSP_Debug_AvPktCnt_Get(TSP_DST_SEQ eAvType)
5406*53ee8cc1Swenshuai.xi {
5407*53ee8cc1Swenshuai.xi     if((eAvType >= E_TSP_DST_FIFO_AUDIO) && (eAvType <= E_TSP_DST_FIFO_AUDIO6))
5408*53ee8cc1Swenshuai.xi     {
5409*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eAvType - E_TSP_DST_FIFO_AUDIO;
5410*53ee8cc1Swenshuai.xi 
5411*53ee8cc1Swenshuai.xi         return REG16_R(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_05);
5412*53ee8cc1Swenshuai.xi     }
5413*53ee8cc1Swenshuai.xi     else if(eAvType <= E_TSP_DST_FIFO_VIDEO8)
5414*53ee8cc1Swenshuai.xi     {
5415*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eAvType - E_TSP_DST_FIFO_VIDEO;
5416*53ee8cc1Swenshuai.xi 
5417*53ee8cc1Swenshuai.xi         return REG16_R(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_05);
5418*53ee8cc1Swenshuai.xi     }
5419*53ee8cc1Swenshuai.xi     else
5420*53ee8cc1Swenshuai.xi     {
5421*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
5422*53ee8cc1Swenshuai.xi         return 0;
5423*53ee8cc1Swenshuai.xi     }
5424*53ee8cc1Swenshuai.xi }
5425*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_AvPktCnt_Clear(TSP_DST_SEQ eAvType)5426*53ee8cc1Swenshuai.xi void HAL_TSP_Debug_AvPktCnt_Clear(TSP_DST_SEQ eAvType)
5427*53ee8cc1Swenshuai.xi {
5428*53ee8cc1Swenshuai.xi     if((eAvType >= E_TSP_DST_FIFO_AUDIO) && (eAvType <= E_TSP_DST_FIFO_AUDIO6))
5429*53ee8cc1Swenshuai.xi     {
5430*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eAvType - E_TSP_DST_FIFO_AUDIO;
5431*53ee8cc1Swenshuai.xi 
5432*53ee8cc1Swenshuai.xi         REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02, CFG_AV_02_REG_PKT_CNT_CLR);
5433*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02, CFG_AV_02_REG_PKT_CNT_CLR);
5434*53ee8cc1Swenshuai.xi     }
5435*53ee8cc1Swenshuai.xi     else if(eAvType <= E_TSP_DST_FIFO_VIDEO8)
5436*53ee8cc1Swenshuai.xi     {
5437*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eAvType - E_TSP_DST_FIFO_VIDEO;
5438*53ee8cc1Swenshuai.xi 
5439*53ee8cc1Swenshuai.xi         REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02, CFG_AV_02_REG_PKT_CNT_CLR);
5440*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02, CFG_AV_02_REG_PKT_CNT_CLR);
5441*53ee8cc1Swenshuai.xi     }
5442*53ee8cc1Swenshuai.xi     else
5443*53ee8cc1Swenshuai.xi     {
5444*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
5445*53ee8cc1Swenshuai.xi     }
5446*53ee8cc1Swenshuai.xi }
5447*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_DropDisPktCnt_Src(TSP_DST_SEQ eAvType,TSP_SRC_SEQ ePktDmxId)5448*53ee8cc1Swenshuai.xi void HAL_TSP_Debug_DropDisPktCnt_Src(TSP_DST_SEQ eAvType,TSP_SRC_SEQ ePktDmxId)
5449*53ee8cc1Swenshuai.xi {
5450*53ee8cc1Swenshuai.xi     //@NOTE: K7U don't have to implement
5451*53ee8cc1Swenshuai.xi }
5452*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_DropPktCnt_Load(TSP_DST_SEQ eAvType,MS_BOOL bEn)5453*53ee8cc1Swenshuai.xi void HAL_TSP_Debug_DropPktCnt_Load(TSP_DST_SEQ eAvType, MS_BOOL bEn)
5454*53ee8cc1Swenshuai.xi {
5455*53ee8cc1Swenshuai.xi     if((eAvType >= E_TSP_DST_FIFO_AUDIO) && (eAvType <= E_TSP_DST_FIFO_AUDIO6))
5456*53ee8cc1Swenshuai.xi     {
5457*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eAvType - E_TSP_DST_FIFO_AUDIO;
5458*53ee8cc1Swenshuai.xi 
5459*53ee8cc1Swenshuai.xi         if(bEn)
5460*53ee8cc1Swenshuai.xi         {
5461*53ee8cc1Swenshuai.xi             REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02, CFG_AV_02_REG_DROP_PKT_CNT_LOAD);
5462*53ee8cc1Swenshuai.xi         }
5463*53ee8cc1Swenshuai.xi         else
5464*53ee8cc1Swenshuai.xi         {
5465*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02, CFG_AV_02_REG_DROP_PKT_CNT_LOAD);
5466*53ee8cc1Swenshuai.xi         }
5467*53ee8cc1Swenshuai.xi     }
5468*53ee8cc1Swenshuai.xi     else if(eAvType <= E_TSP_DST_FIFO_VIDEO8)
5469*53ee8cc1Swenshuai.xi     {
5470*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eAvType - E_TSP_DST_FIFO_VIDEO;
5471*53ee8cc1Swenshuai.xi 
5472*53ee8cc1Swenshuai.xi         if(bEn)
5473*53ee8cc1Swenshuai.xi         {
5474*53ee8cc1Swenshuai.xi             REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02, CFG_AV_02_REG_DROP_PKT_CNT_LOAD);
5475*53ee8cc1Swenshuai.xi         }
5476*53ee8cc1Swenshuai.xi         else
5477*53ee8cc1Swenshuai.xi         {
5478*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02, CFG_AV_02_REG_DROP_PKT_CNT_LOAD);
5479*53ee8cc1Swenshuai.xi         }
5480*53ee8cc1Swenshuai.xi     }
5481*53ee8cc1Swenshuai.xi     else
5482*53ee8cc1Swenshuai.xi     {
5483*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
5484*53ee8cc1Swenshuai.xi     }
5485*53ee8cc1Swenshuai.xi }
5486*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_DisPktCnt_Load(TSP_DST_SEQ eAvType,MS_BOOL bEn,MS_BOOL bPayload)5487*53ee8cc1Swenshuai.xi void HAL_TSP_Debug_DisPktCnt_Load(TSP_DST_SEQ eAvType,MS_BOOL bEn,MS_BOOL bPayload)
5488*53ee8cc1Swenshuai.xi {
5489*53ee8cc1Swenshuai.xi     if((eAvType >= E_TSP_DST_FIFO_AUDIO) && (eAvType <= E_TSP_DST_FIFO_AUDIO6))
5490*53ee8cc1Swenshuai.xi     {
5491*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eAvType - E_TSP_DST_FIFO_AUDIO;
5492*53ee8cc1Swenshuai.xi 
5493*53ee8cc1Swenshuai.xi         if(bPayload)
5494*53ee8cc1Swenshuai.xi         {
5495*53ee8cc1Swenshuai.xi             REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02, CFG_AV_02_REG_DIS_CNTR_INC_BY_PL);
5496*53ee8cc1Swenshuai.xi         }
5497*53ee8cc1Swenshuai.xi         else
5498*53ee8cc1Swenshuai.xi         {
5499*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02, CFG_AV_02_REG_DIS_CNTR_INC_BY_PL);
5500*53ee8cc1Swenshuai.xi         }
5501*53ee8cc1Swenshuai.xi 
5502*53ee8cc1Swenshuai.xi         if(bEn)
5503*53ee8cc1Swenshuai.xi         {
5504*53ee8cc1Swenshuai.xi             REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02, CFG_AV_02_REG_DIS_CNTR_LOAD);
5505*53ee8cc1Swenshuai.xi         }
5506*53ee8cc1Swenshuai.xi         else
5507*53ee8cc1Swenshuai.xi         {
5508*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02, CFG_AV_02_REG_DIS_CNTR_LOAD);
5509*53ee8cc1Swenshuai.xi         }
5510*53ee8cc1Swenshuai.xi     }
5511*53ee8cc1Swenshuai.xi     else if(eAvType <= E_TSP_DST_FIFO_VIDEO8)
5512*53ee8cc1Swenshuai.xi     {
5513*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eAvType - E_TSP_DST_FIFO_VIDEO;
5514*53ee8cc1Swenshuai.xi 
5515*53ee8cc1Swenshuai.xi         if(bPayload)
5516*53ee8cc1Swenshuai.xi         {
5517*53ee8cc1Swenshuai.xi             REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02, CFG_AV_02_REG_DIS_CNTR_INC_BY_PL);
5518*53ee8cc1Swenshuai.xi         }
5519*53ee8cc1Swenshuai.xi         else
5520*53ee8cc1Swenshuai.xi         {
5521*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02, CFG_AV_02_REG_DIS_CNTR_INC_BY_PL);
5522*53ee8cc1Swenshuai.xi         }
5523*53ee8cc1Swenshuai.xi 
5524*53ee8cc1Swenshuai.xi         if(bEn)
5525*53ee8cc1Swenshuai.xi         {
5526*53ee8cc1Swenshuai.xi             REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02, CFG_AV_02_REG_DIS_CNTR_LOAD);
5527*53ee8cc1Swenshuai.xi         }
5528*53ee8cc1Swenshuai.xi         else
5529*53ee8cc1Swenshuai.xi         {
5530*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02, CFG_AV_02_REG_DIS_CNTR_LOAD);
5531*53ee8cc1Swenshuai.xi         }
5532*53ee8cc1Swenshuai.xi     }
5533*53ee8cc1Swenshuai.xi     else
5534*53ee8cc1Swenshuai.xi     {
5535*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
5536*53ee8cc1Swenshuai.xi     }
5537*53ee8cc1Swenshuai.xi }
5538*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_DropDisPktCnt_Get(TSP_DST_SEQ eAvType,MS_BOOL bDrop)5539*53ee8cc1Swenshuai.xi MS_U16 HAL_TSP_Debug_DropDisPktCnt_Get(TSP_DST_SEQ eAvType, MS_BOOL bDrop)
5540*53ee8cc1Swenshuai.xi {
5541*53ee8cc1Swenshuai.xi     if((eAvType >= E_TSP_DST_FIFO_AUDIO) && (eAvType <= E_TSP_DST_FIFO_AUDIO6))
5542*53ee8cc1Swenshuai.xi     {
5543*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eAvType - E_TSP_DST_FIFO_AUDIO;
5544*53ee8cc1Swenshuai.xi 
5545*53ee8cc1Swenshuai.xi         if(bDrop)
5546*53ee8cc1Swenshuai.xi         {
5547*53ee8cc1Swenshuai.xi             return REG16_R(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_03);
5548*53ee8cc1Swenshuai.xi         }
5549*53ee8cc1Swenshuai.xi         else
5550*53ee8cc1Swenshuai.xi         {
5551*53ee8cc1Swenshuai.xi             return REG16_R(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_04);
5552*53ee8cc1Swenshuai.xi         }
5553*53ee8cc1Swenshuai.xi     }
5554*53ee8cc1Swenshuai.xi     else if(eAvType <= E_TSP_DST_FIFO_VIDEO8)
5555*53ee8cc1Swenshuai.xi     {
5556*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eAvType - E_TSP_DST_FIFO_VIDEO;
5557*53ee8cc1Swenshuai.xi 
5558*53ee8cc1Swenshuai.xi         if(bDrop)
5559*53ee8cc1Swenshuai.xi         {
5560*53ee8cc1Swenshuai.xi             return REG16_R(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_03);
5561*53ee8cc1Swenshuai.xi         }
5562*53ee8cc1Swenshuai.xi         else
5563*53ee8cc1Swenshuai.xi         {
5564*53ee8cc1Swenshuai.xi             return REG16_R(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_04);
5565*53ee8cc1Swenshuai.xi         }
5566*53ee8cc1Swenshuai.xi     }
5567*53ee8cc1Swenshuai.xi     else
5568*53ee8cc1Swenshuai.xi     {
5569*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
5570*53ee8cc1Swenshuai.xi         return 0;
5571*53ee8cc1Swenshuai.xi     }
5572*53ee8cc1Swenshuai.xi }
5573*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_DropPktCnt_Clear(TSP_DST_SEQ eAvType)5574*53ee8cc1Swenshuai.xi void HAL_TSP_Debug_DropPktCnt_Clear(TSP_DST_SEQ eAvType)
5575*53ee8cc1Swenshuai.xi {
5576*53ee8cc1Swenshuai.xi     if((eAvType >= E_TSP_DST_FIFO_AUDIO) && (eAvType <= E_TSP_DST_FIFO_AUDIO6))
5577*53ee8cc1Swenshuai.xi     {
5578*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eAvType - E_TSP_DST_FIFO_AUDIO;
5579*53ee8cc1Swenshuai.xi 
5580*53ee8cc1Swenshuai.xi         REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02, CFG_AV_02_REG_DROP_PKT_CNT_CLR);
5581*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02, CFG_AV_02_REG_DROP_PKT_CNT_CLR);
5582*53ee8cc1Swenshuai.xi     }
5583*53ee8cc1Swenshuai.xi     else if(eAvType <= E_TSP_DST_FIFO_VIDEO8)
5584*53ee8cc1Swenshuai.xi     {
5585*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eAvType - E_TSP_DST_FIFO_VIDEO;
5586*53ee8cc1Swenshuai.xi 
5587*53ee8cc1Swenshuai.xi         REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02, CFG_AV_02_REG_DROP_PKT_CNT_CLR);
5588*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02, CFG_AV_02_REG_DROP_PKT_CNT_CLR);
5589*53ee8cc1Swenshuai.xi     }
5590*53ee8cc1Swenshuai.xi     else
5591*53ee8cc1Swenshuai.xi     {
5592*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
5593*53ee8cc1Swenshuai.xi     }
5594*53ee8cc1Swenshuai.xi }
5595*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_DisPktCnt_Clear(TSP_DST_SEQ eAvType)5596*53ee8cc1Swenshuai.xi void HAL_TSP_Debug_DisPktCnt_Clear(TSP_DST_SEQ eAvType)
5597*53ee8cc1Swenshuai.xi {
5598*53ee8cc1Swenshuai.xi     if((eAvType >= E_TSP_DST_FIFO_AUDIO) && (eAvType <= E_TSP_DST_FIFO_AUDIO6))
5599*53ee8cc1Swenshuai.xi     {
5600*53ee8cc1Swenshuai.xi         MS_U8   u8AudioFltIdx = eAvType - E_TSP_DST_FIFO_AUDIO;
5601*53ee8cc1Swenshuai.xi 
5602*53ee8cc1Swenshuai.xi         REG16_SET(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02, CFG_AV_02_REG_DIS_CNTR_CLR);
5603*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegAudioCtrl[u8AudioFltIdx].CFG_AV_02, CFG_AV_02_REG_DIS_CNTR_CLR);
5604*53ee8cc1Swenshuai.xi     }
5605*53ee8cc1Swenshuai.xi     else if(eAvType <= E_TSP_DST_FIFO_VIDEO8)
5606*53ee8cc1Swenshuai.xi     {
5607*53ee8cc1Swenshuai.xi         MS_U8   u8VideoFltIdx = eAvType - E_TSP_DST_FIFO_VIDEO;
5608*53ee8cc1Swenshuai.xi 
5609*53ee8cc1Swenshuai.xi         REG16_SET(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02, CFG_AV_02_REG_DIS_CNTR_CLR);
5610*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegVideoCtrl[u8VideoFltIdx].CFG_AV_02, CFG_AV_02_REG_DIS_CNTR_CLR);
5611*53ee8cc1Swenshuai.xi     }
5612*53ee8cc1Swenshuai.xi     else
5613*53ee8cc1Swenshuai.xi     {
5614*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[AV ERROR][%s][%d] Type not support !!\n",__FUNCTION__,__LINE__));
5615*53ee8cc1Swenshuai.xi     }
5616*53ee8cc1Swenshuai.xi }
5617*53ee8cc1Swenshuai.xi 
5618*53ee8cc1Swenshuai.xi #if FPGA_TEST
5619*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_ErrPktCnt_Src(MS_U32 u32TsIf)5620*53ee8cc1Swenshuai.xi     void HAL_TSP_Debug_ErrPktCnt_Src(MS_U32 u32TsIf)
5621*53ee8cc1Swenshuai.xi     {
5622*53ee8cc1Swenshuai.xi         //@NOTE: K7U don't have to implement
5623*53ee8cc1Swenshuai.xi     }
5624*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_ErrPktCnt_Load(MS_U32 u32TsIf,MS_BOOL bEn)5625*53ee8cc1Swenshuai.xi     void HAL_TSP_Debug_ErrPktCnt_Load(MS_U32 u32TsIf, MS_BOOL bEn)
5626*53ee8cc1Swenshuai.xi     {
5627*53ee8cc1Swenshuai.xi         if(u32TsIf >= TSP_TSIF_NUM)
5628*53ee8cc1Swenshuai.xi         {
5629*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32TsIf));
5630*53ee8cc1Swenshuai.xi             return;
5631*53ee8cc1Swenshuai.xi         }
5632*53ee8cc1Swenshuai.xi 
5633*53ee8cc1Swenshuai.xi         if(bEn)
5634*53ee8cc1Swenshuai.xi         {
5635*53ee8cc1Swenshuai.xi             REG16_SET(&_RegPathCtrl[u32TsIf].CFG_PATH_0C, CFG_PATH_0C_REG_ERR_PKT_CNTR_LOAD);
5636*53ee8cc1Swenshuai.xi         }
5637*53ee8cc1Swenshuai.xi         else
5638*53ee8cc1Swenshuai.xi         {
5639*53ee8cc1Swenshuai.xi             REG16_CLR(&_RegPathCtrl[u32TsIf].CFG_PATH_0C, CFG_PATH_0C_REG_ERR_PKT_CNTR_LOAD);
5640*53ee8cc1Swenshuai.xi         }
5641*53ee8cc1Swenshuai.xi     }
5642*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_ErrPktCnt_Get(MS_U32 u32TsIf)5643*53ee8cc1Swenshuai.xi     MS_U16 HAL_TSP_Debug_ErrPktCnt_Get(MS_U32 u32TsIf)
5644*53ee8cc1Swenshuai.xi     {
5645*53ee8cc1Swenshuai.xi         if(u32TsIf >= TSP_TSIF_NUM)
5646*53ee8cc1Swenshuai.xi         {
5647*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32TsIf));
5648*53ee8cc1Swenshuai.xi             return 0;
5649*53ee8cc1Swenshuai.xi         }
5650*53ee8cc1Swenshuai.xi 
5651*53ee8cc1Swenshuai.xi         return REG16_R(&_RegPathCtrl[u32TsIf].CFG_PATH_0B);
5652*53ee8cc1Swenshuai.xi     }
5653*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_ErrPktCnt_Clear(MS_U32 u32TsIf)5654*53ee8cc1Swenshuai.xi     void HAL_TSP_Debug_ErrPktCnt_Clear(MS_U32 u32TsIf)
5655*53ee8cc1Swenshuai.xi     {
5656*53ee8cc1Swenshuai.xi         if(u32TsIf >= TSP_TSIF_NUM)
5657*53ee8cc1Swenshuai.xi         {
5658*53ee8cc1Swenshuai.xi             HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong Path Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32TsIf));
5659*53ee8cc1Swenshuai.xi             return;
5660*53ee8cc1Swenshuai.xi         }
5661*53ee8cc1Swenshuai.xi 
5662*53ee8cc1Swenshuai.xi         REG16_SET(&_RegPathCtrl[u32TsIf].CFG_PATH_0C, CFG_PATH_0C_REG_ERR_PKT_CNTR_CLR);
5663*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegPathCtrl[u32TsIf].CFG_PATH_0C, CFG_PATH_0C_REG_ERR_PKT_CNTR_CLR);
5664*53ee8cc1Swenshuai.xi     }
5665*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_InputPktCnt_Src(MS_U32 u32TsIf)5666*53ee8cc1Swenshuai.xi     void HAL_TSP_Debug_InputPktCnt_Src(MS_U32 u32TsIf)
5667*53ee8cc1Swenshuai.xi     {
5668*53ee8cc1Swenshuai.xi         //@NOTE: K7U don't have to implement (deleted...)
5669*53ee8cc1Swenshuai.xi     }
5670*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_InputPktCnt_Load(MS_U32 u32TsIf,MS_BOOL bEn)5671*53ee8cc1Swenshuai.xi     void HAL_TSP_Debug_InputPktCnt_Load(MS_U32 u32TsIf,MS_BOOL bEn)
5672*53ee8cc1Swenshuai.xi     {
5673*53ee8cc1Swenshuai.xi         //@NOTE: K7U don't have to implement (deleted...)
5674*53ee8cc1Swenshuai.xi     }
5675*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_InputPktCnt_Get(void)5676*53ee8cc1Swenshuai.xi     MS_U16 HAL_TSP_Debug_InputPktCnt_Get(void)
5677*53ee8cc1Swenshuai.xi     {
5678*53ee8cc1Swenshuai.xi         //@NOTE: K7U don't have to implement (deleted...)
5679*53ee8cc1Swenshuai.xi         return 0;
5680*53ee8cc1Swenshuai.xi     }
5681*53ee8cc1Swenshuai.xi 
HAL_TSP_Debug_InputPktCnt_Clear(MS_U32 u32Tsif)5682*53ee8cc1Swenshuai.xi     void HAL_TSP_Debug_InputPktCnt_Clear(MS_U32 u32Tsif)
5683*53ee8cc1Swenshuai.xi     {
5684*53ee8cc1Swenshuai.xi         //@NOTE: K7U don't have to implement (deleted...)
5685*53ee8cc1Swenshuai.xi     }
5686*53ee8cc1Swenshuai.xi 
5687*53ee8cc1Swenshuai.xi #endif
5688*53ee8cc1Swenshuai.xi 
HAL_TSP_FQ_SetMuxSwitch(MS_U32 u32FQEng,MS_U32 u32FQSrc)5689*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_FQ_SetMuxSwitch(MS_U32 u32FQEng, MS_U32 u32FQSrc)
5690*53ee8cc1Swenshuai.xi {
5691*53ee8cc1Swenshuai.xi     // not support
5692*53ee8cc1Swenshuai.xi     return TRUE;
5693*53ee8cc1Swenshuai.xi }
5694*53ee8cc1Swenshuai.xi 
HAL_TSP_FQ_GetMuxSwitch(MS_U32 u32FQEng)5695*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_FQ_GetMuxSwitch(MS_U32 u32FQEng)
5696*53ee8cc1Swenshuai.xi {
5697*53ee8cc1Swenshuai.xi     // not support
5698*53ee8cc1Swenshuai.xi     return 0;
5699*53ee8cc1Swenshuai.xi }
5700*53ee8cc1Swenshuai.xi 
HAL_TSP_FQ_FLT_NULL_PKT(MS_U32 u32FQEng,MS_BOOL bFltNull)5701*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_FQ_FLT_NULL_PKT(MS_U32 u32FQEng, MS_BOOL bFltNull)
5702*53ee8cc1Swenshuai.xi {
5703*53ee8cc1Swenshuai.xi     if(u32FQEng >= TSP_FQ_NUM)
5704*53ee8cc1Swenshuai.xi     {
5705*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FQ Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32FQEng));
5706*53ee8cc1Swenshuai.xi         return FALSE;
5707*53ee8cc1Swenshuai.xi     }
5708*53ee8cc1Swenshuai.xi 
5709*53ee8cc1Swenshuai.xi     if(bFltNull)
5710*53ee8cc1Swenshuai.xi     {
5711*53ee8cc1Swenshuai.xi         REG16_SET(&_RegPathCtrl[u32FQEng].CFG_PATH_06, CFG_PATH_06_REG_FILTER_NULL_PKT);
5712*53ee8cc1Swenshuai.xi     }
5713*53ee8cc1Swenshuai.xi     else
5714*53ee8cc1Swenshuai.xi     {
5715*53ee8cc1Swenshuai.xi         REG16_CLR(&_RegPathCtrl[u32FQEng].CFG_PATH_06, CFG_PATH_06_REG_FILTER_NULL_PKT);
5716*53ee8cc1Swenshuai.xi     }
5717*53ee8cc1Swenshuai.xi 
5718*53ee8cc1Swenshuai.xi     return TRUE;
5719*53ee8cc1Swenshuai.xi }
5720*53ee8cc1Swenshuai.xi 
HAL_TSP_FQ_MuxOutPathSrc(MS_U32 u32FQEng,TSP_FQ_MUX_OUT_SRC * peSrc,MS_BOOL bSet)5721*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_FQ_MuxOutPathSrc(MS_U32 u32FQEng, TSP_FQ_MUX_OUT_SRC *peSrc, MS_BOOL bSet)
5722*53ee8cc1Swenshuai.xi {
5723*53ee8cc1Swenshuai.xi     if(u32FQEng >= TSP_FQ_NUM)
5724*53ee8cc1Swenshuai.xi     {
5725*53ee8cc1Swenshuai.xi         HAL_TSP_DBGMSG(E_HAL_TSP_DBG_LEVEL_ERR, E_HAL_TSP_DBG_MODEL_ALL, printf("[TSP_ERR][%s][%d] Wrong FQ Engine : 0x%x !!\n",__FUNCTION__,__LINE__,u32FQEng));
5726*53ee8cc1Swenshuai.xi         return FALSE;
5727*53ee8cc1Swenshuai.xi     }
5728*53ee8cc1Swenshuai.xi 
5729*53ee8cc1Swenshuai.xi     if(bSet)
5730*53ee8cc1Swenshuai.xi     {
5731*53ee8cc1Swenshuai.xi         REG16_MSK_W(&_RegPathCtrl[u32FQEng].CFG_PATH_09, CFG_PATH_09_REG_FIQ_MUX_OUT_PATH_SRC_MASK, ((MS_U16)*peSrc << CFG_PATH_09_REG_FIQ_MUX_OUT_PATH_SRC_SHIFT));
5732*53ee8cc1Swenshuai.xi     }
5733*53ee8cc1Swenshuai.xi     else
5734*53ee8cc1Swenshuai.xi     {
5735*53ee8cc1Swenshuai.xi         *peSrc = (TSP_FQ_MUX_OUT_SRC)((REG16_R(&_RegPathCtrl[u32FQEng].CFG_PATH_09) & CFG_PATH_09_REG_FIQ_MUX_OUT_PATH_SRC_MASK) >> CFG_PATH_09_REG_FIQ_MUX_OUT_PATH_SRC_SHIFT);
5736*53ee8cc1Swenshuai.xi     }
5737*53ee8cc1Swenshuai.xi 
5738*53ee8cc1Swenshuai.xi     return TRUE;
5739*53ee8cc1Swenshuai.xi }
5740*53ee8cc1Swenshuai.xi 
HAL_TSP_CLK_GATING(TSP_HAL_GATING ePath,MS_U32 u32Eng,MS_BOOL bEn)5741*53ee8cc1Swenshuai.xi void HAL_TSP_CLK_GATING(TSP_HAL_GATING ePath, MS_U32 u32Eng, MS_BOOL bEn)
5742*53ee8cc1Swenshuai.xi {
5743*53ee8cc1Swenshuai.xi #if 0 //@NOTE: temporarily comment
5744*53ee8cc1Swenshuai.xi     if(bEn)
5745*53ee8cc1Swenshuai.xi     {
5746*53ee8cc1Swenshuai.xi         switch(ePath)
5747*53ee8cc1Swenshuai.xi         {
5748*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PATH0:
5749*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PATH1:
5750*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PATH2:
5751*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PATH3:
5752*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PATH4:
5753*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PATH5:
5754*53ee8cc1Swenshuai.xi                 if(u32Eng > TSP_TSIF_NUM)
5755*53ee8cc1Swenshuai.xi                 {
5756*53ee8cc1Swenshuai.xi                     printf("[%s][%s][%d] UnSupported TSIF : %u\n\n",__FILE__,__FUNCTION__,__LINE__, (unsigned int)u32Eng);
5757*53ee8cc1Swenshuai.xi                     return;
5758*53ee8cc1Swenshuai.xi                 }
5759*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_79,CFG6_79_REG_CLK_GATING_PATH0 << u32Eng);
5760*53ee8cc1Swenshuai.xi                 break;
5761*53ee8cc1Swenshuai.xi 
5762*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_TSP_ENG:
5763*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_79,CFG6_79_REG_CLK_GATING_TSP_ENG);
5764*53ee8cc1Swenshuai.xi                 break;
5765*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_FIQ:
5766*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_79,CFG6_79_REG_CLK_GATING_FIQ);
5767*53ee8cc1Swenshuai.xi                 break;
5768*53ee8cc1Swenshuai.xi 
5769*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PVR1:
5770*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PVR2:
5771*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PVR3:
5772*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PVR4:
5773*53ee8cc1Swenshuai.xi                 if(u32Eng > TSP_PVRENG_NUM)
5774*53ee8cc1Swenshuai.xi                 {
5775*53ee8cc1Swenshuai.xi                     printf("[%s][%s][%d] UnSupported PVR eng : %u\n\n",__FILE__,__FUNCTION__,__LINE__, (unsigned int)u32Eng);
5776*53ee8cc1Swenshuai.xi                     return;
5777*53ee8cc1Swenshuai.xi                 }
5778*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_79,CFG6_79_REG_CLK_GATING_PVR1 << u32Eng);
5779*53ee8cc1Swenshuai.xi                 break;
5780*53ee8cc1Swenshuai.xi 
5781*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_PATH0:
5782*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_PATH1:
5783*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_PATH2:
5784*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_PATH3:
5785*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_PATH4:
5786*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_PATH5:
5787*53ee8cc1Swenshuai.xi                 if(u32Eng > TSP_TSIF_NUM)
5788*53ee8cc1Swenshuai.xi                 {
5789*53ee8cc1Swenshuai.xi                     printf("[%s][%s][%d] UnSupported TSIF : %u\n\n",__FILE__,__FUNCTION__,__LINE__, (unsigned int)u32Eng);
5790*53ee8cc1Swenshuai.xi                     return;
5791*53ee8cc1Swenshuai.xi                 }
5792*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_7F,CFG6_7F_REG_MIU_CLK_GATING_PATH0 << u32Eng);
5793*53ee8cc1Swenshuai.xi                 break;
5794*53ee8cc1Swenshuai.xi 
5795*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_TSP_ENG:
5796*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_7F,CFG6_7F_REG_MIU_CLK_GATING_TSP_ENG);
5797*53ee8cc1Swenshuai.xi                 break;
5798*53ee8cc1Swenshuai.xi 
5799*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_FIQ0:
5800*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_FIQ1:
5801*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_FIQ2:
5802*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_FIQ3:
5803*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_FIQ4:
5804*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_FIQ5:
5805*53ee8cc1Swenshuai.xi                 if(u32Eng > TSP_FQ_NUM)
5806*53ee8cc1Swenshuai.xi                 {
5807*53ee8cc1Swenshuai.xi                     printf("[%s][%s][%d] UnSupported FIQ : %u\n\n",__FILE__,__FUNCTION__,__LINE__, (unsigned int)u32Eng);
5808*53ee8cc1Swenshuai.xi                     return;
5809*53ee8cc1Swenshuai.xi                 }
5810*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_6D,CFG6_6D_REG_CLK_GATING_FIQ0 << u32Eng);
5811*53ee8cc1Swenshuai.xi                 break;
5812*53ee8cc1Swenshuai.xi 
5813*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_FIQ0:
5814*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_FIQ1:
5815*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_FIQ2:
5816*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_FIQ3:
5817*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_FIQ4:
5818*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_FIQ5:
5819*53ee8cc1Swenshuai.xi                 if(u32Eng > TSP_FQ_NUM)
5820*53ee8cc1Swenshuai.xi                 {
5821*53ee8cc1Swenshuai.xi                     printf("[%s][%s][%d] UnSupported FIQ : %u\n\n",__FILE__,__FUNCTION__,__LINE__, (unsigned int)u32Eng);
5822*53ee8cc1Swenshuai.xi                     return;
5823*53ee8cc1Swenshuai.xi                 }
5824*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_6D,CFG6_6D_REG_MIU_CLK_GATING_FIQ0 << u32Eng);
5825*53ee8cc1Swenshuai.xi                 break;
5826*53ee8cc1Swenshuai.xi             default :
5827*53ee8cc1Swenshuai.xi                 printf("[%s][%s][%d] UnSupported Type : %u\n\n",__FILE__,__FUNCTION__,__LINE__, (unsigned int)ePath);
5828*53ee8cc1Swenshuai.xi                 break;
5829*53ee8cc1Swenshuai.xi         }
5830*53ee8cc1Swenshuai.xi     }
5831*53ee8cc1Swenshuai.xi     else
5832*53ee8cc1Swenshuai.xi     {
5833*53ee8cc1Swenshuai.xi         switch(ePath)
5834*53ee8cc1Swenshuai.xi         {
5835*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PATH0:
5836*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PATH1:
5837*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PATH2:
5838*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PATH3:
5839*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PATH4:
5840*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PATH5:
5841*53ee8cc1Swenshuai.xi                 if(u32Eng > TSP_TSIF_NUM)
5842*53ee8cc1Swenshuai.xi                 {
5843*53ee8cc1Swenshuai.xi                     printf("[%s][%s][%d] UnSupported TSIF : %u\n\n",__FILE__,__FUNCTION__,__LINE__, (unsigned int)u32Eng);
5844*53ee8cc1Swenshuai.xi                     return;
5845*53ee8cc1Swenshuai.xi                 }
5846*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_79,CFG6_79_REG_CLK_GATING_PATH0 << u32Eng);
5847*53ee8cc1Swenshuai.xi                 break;
5848*53ee8cc1Swenshuai.xi 
5849*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_TSP_ENG:
5850*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_79,CFG6_79_REG_CLK_GATING_TSP_ENG);
5851*53ee8cc1Swenshuai.xi                 break;
5852*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_FIQ:
5853*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_79,CFG6_79_REG_CLK_GATING_FIQ);
5854*53ee8cc1Swenshuai.xi                 break;
5855*53ee8cc1Swenshuai.xi 
5856*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PVR1:
5857*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PVR2:
5858*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PVR3:
5859*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_PVR4:
5860*53ee8cc1Swenshuai.xi                 if(u32Eng > TSP_PVRENG_NUM)
5861*53ee8cc1Swenshuai.xi                 {
5862*53ee8cc1Swenshuai.xi                     printf("[%s][%s][%d] UnSupported PVR eng : %u\n\n",__FILE__,__FUNCTION__,__LINE__, (unsigned int)u32Eng);
5863*53ee8cc1Swenshuai.xi                     return;
5864*53ee8cc1Swenshuai.xi                 }
5865*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_79,CFG6_79_REG_CLK_GATING_PVR1 << u32Eng);
5866*53ee8cc1Swenshuai.xi                 break;
5867*53ee8cc1Swenshuai.xi 
5868*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_PATH0:
5869*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_PATH1:
5870*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_PATH2:
5871*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_PATH3:
5872*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_PATH4:
5873*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_PATH5:
5874*53ee8cc1Swenshuai.xi                 if(u32Eng > TSP_TSIF_NUM)
5875*53ee8cc1Swenshuai.xi                 {
5876*53ee8cc1Swenshuai.xi                     printf("[%s][%s][%d] UnSupported TSIF : %u\n\n",__FILE__,__FUNCTION__,__LINE__, (unsigned int)u32Eng);
5877*53ee8cc1Swenshuai.xi                     return;
5878*53ee8cc1Swenshuai.xi                 }
5879*53ee8cc1Swenshuai.xi 
5880*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_7F,CFG6_7F_REG_MIU_CLK_GATING_PATH0 << u32Eng);
5881*53ee8cc1Swenshuai.xi                 break;
5882*53ee8cc1Swenshuai.xi 
5883*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_TSP_ENG:
5884*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_7F,CFG6_7F_REG_MIU_CLK_GATING_TSP_ENG);
5885*53ee8cc1Swenshuai.xi                 break;
5886*53ee8cc1Swenshuai.xi 
5887*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_FIQ0:
5888*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_FIQ1:
5889*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_FIQ2:
5890*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_FIQ3:
5891*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_FIQ4:
5892*53ee8cc1Swenshuai.xi             case E_TSP_HAL_GATING_FIQ5:
5893*53ee8cc1Swenshuai.xi                 if(u32Eng > TSP_FQ_NUM)
5894*53ee8cc1Swenshuai.xi                 {
5895*53ee8cc1Swenshuai.xi                     printf("[%s][%s][%d] UnSupported FIQ : %u\n\n",__FILE__,__FUNCTION__,__LINE__, (unsigned int)u32Eng);
5896*53ee8cc1Swenshuai.xi                     return;
5897*53ee8cc1Swenshuai.xi                 }
5898*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_6D,CFG6_6D_REG_CLK_GATING_FIQ0 << u32Eng);
5899*53ee8cc1Swenshuai.xi                 break;
5900*53ee8cc1Swenshuai.xi 
5901*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_FIQ0:
5902*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_FIQ1:
5903*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_FIQ2:
5904*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_FIQ3:
5905*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_FIQ4:
5906*53ee8cc1Swenshuai.xi             case E_TSP_HAL_MIU_CLK_GATING_FIQ5:
5907*53ee8cc1Swenshuai.xi                 if(u32Eng > TSP_FQ_NUM)
5908*53ee8cc1Swenshuai.xi                 {
5909*53ee8cc1Swenshuai.xi                     printf("[%s][%s][%d] UnSupported FIQ : %u\n\n",__FILE__,__FUNCTION__,__LINE__, (unsigned int)u32Eng);
5910*53ee8cc1Swenshuai.xi                     return;
5911*53ee8cc1Swenshuai.xi                 }
5912*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_6D,CFG6_6D_REG_MIU_CLK_GATING_FIQ1 << u32Eng);
5913*53ee8cc1Swenshuai.xi                 break;
5914*53ee8cc1Swenshuai.xi 
5915*53ee8cc1Swenshuai.xi             default :
5916*53ee8cc1Swenshuai.xi                 printf("[%s][%s][%d] UnSupported Type : %u\n\n",__FILE__,__FUNCTION__,__LINE__, (unsigned int)ePath);
5917*53ee8cc1Swenshuai.xi                 break;
5918*53ee8cc1Swenshuai.xi         }
5919*53ee8cc1Swenshuai.xi     }
5920*53ee8cc1Swenshuai.xi #endif
5921*53ee8cc1Swenshuai.xi }
5922*53ee8cc1Swenshuai.xi 
HAL_TSP_Module_Reset(TSP_HAL_RESET_CTRL ePath,MS_U32 u32Idx,MS_BOOL bEn)5923*53ee8cc1Swenshuai.xi void HAL_TSP_Module_Reset(TSP_HAL_RESET_CTRL ePath, MS_U32 u32Idx, MS_BOOL bEn)
5924*53ee8cc1Swenshuai.xi {
5925*53ee8cc1Swenshuai.xi #if 0 //@NOTE: temporarily comment
5926*53ee8cc1Swenshuai.xi     if(bEn)
5927*53ee8cc1Swenshuai.xi     {
5928*53ee8cc1Swenshuai.xi         switch(ePath)
5929*53ee8cc1Swenshuai.xi         {
5930*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_PKT_CONVERTER0:
5931*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
5932*53ee8cc1Swenshuai.xi                     return;
5933*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_7A,CFG6_7A_REG_CLK_RESET_PKT_CONVERTER0 << u32Idx);
5934*53ee8cc1Swenshuai.xi                 break;
5935*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_FIQ0:
5936*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
5937*53ee8cc1Swenshuai.xi                     return;
5938*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_7A,CFG6_7A_REG_CLK_RESET_FIQ0 << u32Idx);
5939*53ee8cc1Swenshuai.xi                 break;
5940*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_VQ_TX0:
5941*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
5942*53ee8cc1Swenshuai.xi                     return;
5943*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_7B,CFG6_7B_REG_RESET_VQ_TX0 << u32Idx);
5944*53ee8cc1Swenshuai.xi                 break;
5945*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_VQ_RX:
5946*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_7B,CFG6_7B_REG_RESET_VQ_RX);
5947*53ee8cc1Swenshuai.xi                 break;
5948*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_VQ_TOP:
5949*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_7B,CFG6_7B_REG_RESET_VQ_TOP);
5950*53ee8cc1Swenshuai.xi                 break;
5951*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_PKT_DEMUX0:
5952*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
5953*53ee8cc1Swenshuai.xi                     return;
5954*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_7B,CFG6_7B_REG_RESET_PKT_DEMUX0 << u32Idx);
5955*53ee8cc1Swenshuai.xi                 break;
5956*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_PVR1:
5957*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
5958*53ee8cc1Swenshuai.xi                     return;
5959*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_7C,CFG6_7C_REG_RESET_PVR1 << u32Idx);
5960*53ee8cc1Swenshuai.xi                 break;
5961*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_TIMESTAMP_SEL_PVR1:
5962*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
5963*53ee8cc1Swenshuai.xi                     return;
5964*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_7C,CFG6_7C_REG_RESET_TIMESTAMP_SEL_PVR1 << u32Idx);
5965*53ee8cc1Swenshuai.xi                 break;
5966*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_SP_D0:
5967*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
5968*53ee8cc1Swenshuai.xi                     return;
5969*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_7C,CFG6_7C_REG_RESET_SP_D0 << u32Idx);
5970*53ee8cc1Swenshuai.xi                 break;
5971*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_FILTER_NULL_PKT0:
5972*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
5973*53ee8cc1Swenshuai.xi                     return;
5974*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_7D,CFG6_7D_REG_RESET_FILTER_NULL_PKT0 << u32Idx);
5975*53ee8cc1Swenshuai.xi                 break;
5976*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_DIRECTV_130_188_0:
5977*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
5978*53ee8cc1Swenshuai.xi                     return;
5979*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_7D,CFG6_7D_REG_RESET_DIRECTV_130_188_0 << u32Idx);
5980*53ee8cc1Swenshuai.xi                 break;
5981*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_SRC_ID_PARSER0:
5982*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
5983*53ee8cc1Swenshuai.xi                     return;
5984*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_7E,CFG6_7E_REG_RESET_SRC_ID_PARSER0 << u32Idx);
5985*53ee8cc1Swenshuai.xi                 break;
5986*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_PCRFLT_0:
5987*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
5988*53ee8cc1Swenshuai.xi                     return;
5989*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_7E,CFG6_7E_REG_RESET_PCRFLT_0 << u32Idx);
5990*53ee8cc1Swenshuai.xi                 break;
5991*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_PATH0:
5992*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
5993*53ee8cc1Swenshuai.xi                     return;
5994*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_PATH0 << u32Idx);
5995*53ee8cc1Swenshuai.xi                 break;
5996*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_OTV:
5997*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_OTV);
5998*53ee8cc1Swenshuai.xi                 break;
5999*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_DEBUG_TABLE:
6000*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_DEBUG_TABLE);
6001*53ee8cc1Swenshuai.xi                 break;
6002*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_DMA_ENG:
6003*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_DMA_ENG);
6004*53ee8cc1Swenshuai.xi                 break;
6005*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_SEC_CMP:
6006*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_SEC_CMP);
6007*53ee8cc1Swenshuai.xi                 break;
6008*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_SECFLT_REG:
6009*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_SECFLT_REG);
6010*53ee8cc1Swenshuai.xi                 break;
6011*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_SEC:
6012*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_SEC);
6013*53ee8cc1Swenshuai.xi                 break;
6014*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_PID_TABLE:
6015*53ee8cc1Swenshuai.xi                 REG16_SET(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_PID_TABLE);
6016*53ee8cc1Swenshuai.xi                 break;
6017*53ee8cc1Swenshuai.xi 
6018*53ee8cc1Swenshuai.xi             default :
6019*53ee8cc1Swenshuai.xi                 printf("[%s][%s][%d] UnSupported Type : %u\n\n",__FILE__,__FUNCTION__,__LINE__, (unsigned int)ePath);
6020*53ee8cc1Swenshuai.xi                 break;
6021*53ee8cc1Swenshuai.xi         }
6022*53ee8cc1Swenshuai.xi     }
6023*53ee8cc1Swenshuai.xi     else
6024*53ee8cc1Swenshuai.xi     {
6025*53ee8cc1Swenshuai.xi         switch(ePath)
6026*53ee8cc1Swenshuai.xi         {
6027*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_PKT_CONVERTER0:
6028*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
6029*53ee8cc1Swenshuai.xi                     return;
6030*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_7A,CFG6_7A_REG_CLK_RESET_PKT_CONVERTER0 << u32Idx);
6031*53ee8cc1Swenshuai.xi                 break;
6032*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_FIQ0:
6033*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
6034*53ee8cc1Swenshuai.xi                     return;
6035*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_7A,CFG6_7A_REG_CLK_RESET_FIQ0 << u32Idx);
6036*53ee8cc1Swenshuai.xi                 break;
6037*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_VQ_TX0:
6038*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
6039*53ee8cc1Swenshuai.xi                     return;
6040*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_7B,CFG6_7B_REG_RESET_VQ_TX0 << u32Idx);
6041*53ee8cc1Swenshuai.xi                 break;
6042*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_VQ_RX:
6043*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_7B,CFG6_7B_REG_RESET_VQ_RX);
6044*53ee8cc1Swenshuai.xi                 break;
6045*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_VQ_TOP:
6046*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_7B,CFG6_7B_REG_RESET_VQ_TOP);
6047*53ee8cc1Swenshuai.xi                 break;
6048*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_PKT_DEMUX0:
6049*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
6050*53ee8cc1Swenshuai.xi                     return;
6051*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_7B,CFG6_7B_REG_RESET_PKT_DEMUX0 << u32Idx);
6052*53ee8cc1Swenshuai.xi                 break;
6053*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_PVR1:
6054*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
6055*53ee8cc1Swenshuai.xi                     return;
6056*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_7C,CFG6_7C_REG_RESET_PVR1 << u32Idx);
6057*53ee8cc1Swenshuai.xi                 break;
6058*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_TIMESTAMP_SEL_PVR1:
6059*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
6060*53ee8cc1Swenshuai.xi                     return;
6061*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_7C,CFG6_7C_REG_RESET_TIMESTAMP_SEL_PVR1 << u32Idx);
6062*53ee8cc1Swenshuai.xi                 break;
6063*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_SP_D0:
6064*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
6065*53ee8cc1Swenshuai.xi                     return;
6066*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_7C,CFG6_7C_REG_RESET_SP_D0 << u32Idx);
6067*53ee8cc1Swenshuai.xi                 break;
6068*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_FILTER_NULL_PKT0:
6069*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
6070*53ee8cc1Swenshuai.xi                     return;
6071*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_7D,CFG6_7D_REG_RESET_FILTER_NULL_PKT0 << u32Idx);
6072*53ee8cc1Swenshuai.xi                 break;
6073*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_DIRECTV_130_188_0:
6074*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
6075*53ee8cc1Swenshuai.xi                     return;
6076*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_7D,CFG6_7D_REG_RESET_DIRECTV_130_188_0 << u32Idx);
6077*53ee8cc1Swenshuai.xi                 break;
6078*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_SRC_ID_PARSER0:
6079*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
6080*53ee8cc1Swenshuai.xi                     return;
6081*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_7E,CFG6_7E_REG_RESET_SRC_ID_PARSER0 << u32Idx);
6082*53ee8cc1Swenshuai.xi                 break;
6083*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_CTRL_PCRFLT_0:
6084*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
6085*53ee8cc1Swenshuai.xi                     return;
6086*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_7E,CFG6_7E_REG_RESET_PCRFLT_0 << u32Idx);
6087*53ee8cc1Swenshuai.xi                 break;
6088*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_PATH0:
6089*53ee8cc1Swenshuai.xi                 if(u32Idx > TSP_TSIF_NUM)
6090*53ee8cc1Swenshuai.xi                     return;
6091*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_PATH0 << u32Idx);
6092*53ee8cc1Swenshuai.xi                 break;
6093*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_OTV:
6094*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_OTV);
6095*53ee8cc1Swenshuai.xi                 break;
6096*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_DEBUG_TABLE:
6097*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_DEBUG_TABLE);
6098*53ee8cc1Swenshuai.xi                 break;
6099*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_DMA_ENG:
6100*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_DMA_ENG);
6101*53ee8cc1Swenshuai.xi                 break;
6102*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_SEC_CMP:
6103*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_SEC_CMP);
6104*53ee8cc1Swenshuai.xi                 break;
6105*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_SECFLT_REG:
6106*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_SECFLT_REG);
6107*53ee8cc1Swenshuai.xi                 break;
6108*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_SEC:
6109*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_SEC);
6110*53ee8cc1Swenshuai.xi                 break;
6111*53ee8cc1Swenshuai.xi             case E_TSP_HAL_RESET_PID_TABLE:
6112*53ee8cc1Swenshuai.xi                 REG16_CLR(&_RegCtrl6->CFG6_6C,CFG6_6C_REG_RESET_PID_TABLE);
6113*53ee8cc1Swenshuai.xi                 break;
6114*53ee8cc1Swenshuai.xi 
6115*53ee8cc1Swenshuai.xi             default :
6116*53ee8cc1Swenshuai.xi                 printf("[%s][%s][%d] UnSupported Type : %u\n\n",__FILE__,__FUNCTION__,__LINE__, (unsigned int)ePath);
6117*53ee8cc1Swenshuai.xi                 break;
6118*53ee8cc1Swenshuai.xi         }
6119*53ee8cc1Swenshuai.xi     }
6120*53ee8cc1Swenshuai.xi #endif
6121*53ee8cc1Swenshuai.xi }
6122*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SetLutEn(MS_U32 fltId,MS_BOOL bEn)6123*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SetLutEn(MS_U32 fltId, MS_BOOL bEn)
6124*53ee8cc1Swenshuai.xi {
6125*53ee8cc1Swenshuai.xi     REG_PidFlt *pPidFlt = PPIDFLT0(fltId);
6126*53ee8cc1Swenshuai.xi 
6127*53ee8cc1Swenshuai.xi     if(bEn)
6128*53ee8cc1Swenshuai.xi     {
6129*53ee8cc1Swenshuai.xi         TSP32_IdrW(pPidFlt, (TSP32_IdrR(pPidFlt) | TSP_PIDFLT_OUT_LUT));
6130*53ee8cc1Swenshuai.xi     }
6131*53ee8cc1Swenshuai.xi     else
6132*53ee8cc1Swenshuai.xi     {
6133*53ee8cc1Swenshuai.xi         TSP32_IdrW(pPidFlt, (TSP32_IdrR(pPidFlt) & ~TSP_PIDFLT_OUT_LUT));
6134*53ee8cc1Swenshuai.xi     }
6135*53ee8cc1Swenshuai.xi }
6136*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SetFqLutEn(MS_U32 fltId,MS_U32 u32FqLutEng,MS_BOOL bEn)6137*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SetFqLutEn(MS_U32 fltId, MS_U32 u32FqLutEng, MS_BOOL bEn)
6138*53ee8cc1Swenshuai.xi {
6139*53ee8cc1Swenshuai.xi     REG_PidFlt *pPidFlt = PPIDFLT2(fltId);
6140*53ee8cc1Swenshuai.xi 
6141*53ee8cc1Swenshuai.xi     if(bEn)
6142*53ee8cc1Swenshuai.xi     {
6143*53ee8cc1Swenshuai.xi         TSP32_IdrW(pPidFlt, (TSP32_IdrR(pPidFlt) & ~TSP_PIDFLT_FIQ_LUT_MASK) | (((1 << u32FqLutEng) << TSP_PIDFLT_FIQ_LUT_SHIFT) & TSP_PIDFLT_FIQ_LUT_MASK));
6144*53ee8cc1Swenshuai.xi     }
6145*53ee8cc1Swenshuai.xi     else
6146*53ee8cc1Swenshuai.xi     {
6147*53ee8cc1Swenshuai.xi         TSP32_IdrW(pPidFlt, (TSP32_IdrR(pPidFlt) & ~TSP_PIDFLT_FIQ_LUT_MASK));
6148*53ee8cc1Swenshuai.xi     }
6149*53ee8cc1Swenshuai.xi }
6150*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SetMultiPvrEn(MS_U32 fltId,MS_U32 u32MultiPvrEng,MS_U32 u32MultiPvrChId,MS_BOOL bEn)6151*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SetMultiPvrEn(MS_U32 fltId, MS_U32 u32MultiPvrEng, MS_U32 u32MultiPvrChId, MS_BOOL bEn)
6152*53ee8cc1Swenshuai.xi {
6153*53ee8cc1Swenshuai.xi     REG_PidFlt *pPidFlt = PPIDFLT2(fltId);
6154*53ee8cc1Swenshuai.xi 
6155*53ee8cc1Swenshuai.xi     if(bEn)
6156*53ee8cc1Swenshuai.xi     {
6157*53ee8cc1Swenshuai.xi         TSP32_IdrW(pPidFlt, (TSP32_IdrR(pPidFlt) & ~TSP_PIDFLT_MULTI_PVR_MASK) | (((1 << u32MultiPvrChId) << TSP_PIDFLT_MULTI_PVR_SHIFT) & TSP_PIDFLT_MULTI_PVR_MASK));
6158*53ee8cc1Swenshuai.xi     }
6159*53ee8cc1Swenshuai.xi     else
6160*53ee8cc1Swenshuai.xi     {
6161*53ee8cc1Swenshuai.xi         TSP32_IdrW(pPidFlt, (TSP32_IdrR(pPidFlt) & ~TSP_PIDFLT_MULTI_PVR_MASK));
6162*53ee8cc1Swenshuai.xi     }
6163*53ee8cc1Swenshuai.xi }
6164*53ee8cc1Swenshuai.xi 
HAL_TSP_FQ_MMFI_MIU_Sel(TSP_HAL_MIU_SEL_TYPE eType,MS_U8 u8Eng,MS_PHY phyBufStart)6165*53ee8cc1Swenshuai.xi void HAL_TSP_FQ_MMFI_MIU_Sel(TSP_HAL_MIU_SEL_TYPE eType, MS_U8 u8Eng, MS_PHY phyBufStart)
6166*53ee8cc1Swenshuai.xi {
6167*53ee8cc1Swenshuai.xi     MS_U8   u8MiuSel = 0;
6168*53ee8cc1Swenshuai.xi     MS_PHY  phyMiuOffsetFileinAddr = 0;
6169*53ee8cc1Swenshuai.xi     MS_U8   u8Shift = 0;
6170*53ee8cc1Swenshuai.xi 
6171*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetFileinAddr, phyBufStart);
6172*53ee8cc1Swenshuai.xi 
6173*53ee8cc1Swenshuai.xi     switch(eType)
6174*53ee8cc1Swenshuai.xi     {
6175*53ee8cc1Swenshuai.xi         case E_TSP_HAL_MIU_SEL_MMFI:
6176*53ee8cc1Swenshuai.xi             u8Shift = u8Eng * TSP_MIU_SEL_BITS_LEN;
6177*53ee8cc1Swenshuai.xi             REG16_MSK_W(&_RegTopCtrl->CFG_TOP_09, (CFG_TOP_09_REG_MIU_SEL_MMFI_MASK << u8Shift), (u8MiuSel << (CFG_TOP_09_REG_MIU_SEL_MMFI_SHIFT + u8Shift)));
6178*53ee8cc1Swenshuai.xi             break;
6179*53ee8cc1Swenshuai.xi         case E_TSP_HAL_MIU_SEL_FQ:
6180*53ee8cc1Swenshuai.xi             if(u8Eng < TSP_FQ_MUX_START_ID)
6181*53ee8cc1Swenshuai.xi             {
6182*53ee8cc1Swenshuai.xi                 u8Shift = u8Eng * TSP_MIU_SEL_BITS_LEN;
6183*53ee8cc1Swenshuai.xi                 REG16_MSK_W(&_RegTopCtrl->CFG_TOP_07, (CFG_TOP_07_REG_MIU_SEL_FIQ_MASK << u8Shift), (u8MiuSel << (CFG_TOP_07_REG_MIU_SEL_FIQ_SHIFT + u8Shift)));
6184*53ee8cc1Swenshuai.xi             }
6185*53ee8cc1Swenshuai.xi             else
6186*53ee8cc1Swenshuai.xi             {
6187*53ee8cc1Swenshuai.xi                 u8Shift = (u8Eng - TSP_FQ_MUX_START_ID) * TSP_MIU_SEL_BITS_LEN;
6188*53ee8cc1Swenshuai.xi                 REG16_MSK_W(&_RegTopCtrl->CFG_TOP_09, (CFG_TOP_09_REG_MIU_SEL_FIQ_MUX_MASK << u8Shift), (u8MiuSel << (CFG_TOP_09_REG_MIU_SEL_FIQ_MUX_SHIFT + u8Shift)));
6189*53ee8cc1Swenshuai.xi             }
6190*53ee8cc1Swenshuai.xi             break;
6191*53ee8cc1Swenshuai.xi         default:
6192*53ee8cc1Swenshuai.xi             break;
6193*53ee8cc1Swenshuai.xi     }
6194*53ee8cc1Swenshuai.xi }
6195