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