xref: /utopia/UTPA2-700.0.x/modules/dmx/hal/maldives/tsp/halTSP.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 //    Software and any modification/derivatives thereof.
18 //    No right, ownership, or interest to MStar Software and any
19 //    modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 //    supplied together with third party`s software and the use of MStar
23 //    Software may require additional licenses from third parties.
24 //    Therefore, you hereby agree it is your sole responsibility to separately
25 //    obtain any and all third party right and license necessary for your use of
26 //    such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 //    MStar`s confidential information and you agree to keep MStar`s
30 //    confidential information in strictest confidence and not disclose to any
31 //    third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35 //    without limitation, any warranties of merchantability, non-infringement of
36 //    intellectual property rights, fitness for a particular purpose, error free
37 //    and in conformity with any international standard.  You agree to waive any
38 //    claim against MStar for any loss, damage, cost or expense that you may
39 //    incur related to your use of MStar Software.
40 //    In no event shall MStar be liable for any direct, indirect, incidental or
41 //    consequential damages, including without limitation, lost of profit or
42 //    revenues, lost or damage of data, and unauthorized system use.
43 //    You agree that this Section 4 shall still apply without being affected
44 //    even if MStar Software has been modified by MStar in accordance with your
45 //    request or instruction for your use, except otherwise agreed by both
46 //    parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 //    services in relation with MStar Software to you for your use of
50 //    MStar Software in conjunction with your or your customer`s product
51 //    ("Services").
52 //    You understand and agree that, except otherwise agreed by both parties in
53 //    writing, Services are provided on an "AS IS" basis and the warranty
54 //    disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 //    or otherwise:
58 //    (a) conferring any license or right to use MStar name, trademark, service
59 //        mark, symbol or any other identification;
60 //    (b) obligating MStar or any of its affiliates to furnish any person,
61 //        including without limitation, you and your customers, any assistance
62 //        of any kind whatsoever, or any information; or
63 //    (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 //    of Taiwan, R.O.C., excluding its conflict of law rules.
67 //    Any and all dispute arising out hereof or related hereto shall be finally
68 //    settled by arbitration referred to the Chinese Arbitration Association,
69 //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 //    Rules of the Association by three (3) arbitrators appointed in accordance
71 //    with the said Rules.
72 //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73 //    be English.
74 //    The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 ////////////////////////////////////////////////////////////////////////////////
79 //
80 // Copyright (c) 2011-2013 MStar Semiconductor, Inc.
81 // All rights reserved.
82 //
83 // Unless otherwise stipulated in writing, any and all information contained
84 // herein regardless in any format shall remain the sole proprietary of
85 // MStar Semiconductor Inc. and be kept in strict confidence
86 // ("MStar Confidential Information") by the recipient.
87 // Any unauthorized act including without limitation unauthorized disclosure,
88 // copying, use, reproduction, sale, distribution, modification, disassembling,
89 // reverse engineering and compiling of the contents of MStar Confidential
90 // Information is unlawful and strictly prohibited. MStar hereby reserves the
91 // rights to any and all damages, losses, costs and expenses resulting therefrom.
92 //
93 ////////////////////////////////////////////////////////////////////////////////
94 
95 ////////////////////////////////////////////////////////////////////////////////////////////////////
96 // file   halTSP.c
97 // @brief  Transport Stream Processer (TSP) HAL
98 // @author MStar Semiconductor,Inc.
99 ////////////////////////////////////////////////////////////////////////////////////////////////////
100 #include "halTSP.h"
101 
102 //--------------------------------------------------------------------------------------------------
103 //  Driver Compiler Option
104 //--------------------------------------------------------------------------------------------------
105 #define TSP_HAL_REG_SAFE_MODE       1                                   // Register protection access between 1 task and 1+ ISR
106 
107 //[HWBUG]
108 #define MULTI_ACCESS_SW_PATCH       1                                   // It's still risk becuase some registers like readaddr will
109 
110 // @FIXME: remove the test later
111 #define LINUX_TEST                  0
112                                                                         // cause overflow before patching to correct value.
113 #define MIU_BUS                     4
114 
115 #define VQ_PACKET_UNIT_LEN          208
116 
117 #define SWPATCH_FOR_READ_PIDFLT     1
118 
119 //--------------------------------------------------------------------------------------------------
120 //  TSP Hardware Abstraction Layer
121 //--------------------------------------------------------------------------------------------------
122 static REG_Ctrl*    _TspCtrl  = NULL;
123 static REG_Ctrl2*   _TspCtrl2 = NULL;
124 static REG_Ctrl3*   _TspCtrl3 = NULL;
125 static REG_Ctrl4*   _TspCtrl4 = NULL;
126 static REG_Ctrl5*   _TspCtrl5 = NULL;
127 
128 static REG_TS_Sample* _TspSample = NULL;
129 
130 static MS_U32       _u32RegBase = 0;
131 static MS_U32       _u32PMRegBase = 0;
132 
133 
134 extern MS_BOOL      _bIsHK;
135 static MS_S32       _s32HALTSPMutexId = -1;
136 
137 static MS_BOOL      _bTsPadUsed[3] = {FALSE, FALSE, FALSE};
138 static MS_U16       _16MobfKey = 0;
139 
140 //--------------------------------------------------------------------------------------------------
141 //  SW patch for HW can not read #64~#71 PID filters
142 //  Record PID filter value to SW table for using
143 //--------------------------------------------------------------------------------------------------
144 #if SWPATCH_FOR_READ_PIDFLT
145 static MS_U32                       _u32PidFlt_L[TSP_PIDFLT_EXT_NUM] = {[0 ... (TSP_PIDFLT_EXT_NUM-1)] = 0x1FFF};
146 static MS_U32                       _u32PidFlt_H[TSP_PIDFLT_EXT_NUM] = {[0 ... (TSP_PIDFLT_EXT_NUM-1)] = 0};
147 #endif
148 
149 //[NOTE] Jerry
150 // Some register has write order, for example, writing PCR_L will disable PCR counter
151 // writing PCR_M trigger nothing, writing PCR_H will enable PCR counter
152 #define _HAL_REG32_W(reg, value)    do { (reg)->L = ((value) & 0x0000FFFF);                          \
153                                     (reg)->H = ((value) >> 16); } while(0)
154 
155 #define _HAL_REG32L_W(reg, value)   (reg)->data = ((value) & 0x0000FFFF);
156 
157 #define _HAL_REG16_W(reg, value)    (reg)->u16data = (value);
158 
159 
160 #define _HAL_HALTSP_ENTRY()         do{ \
161                                         if(_s32HALTSPMutexId == -1)         \
162                                             _s32HALTSPMutexId = MsOS_CreateMutex(E_MSOS_FIFO, "HALTSP_Mutex", MSOS_PROCESS_SHARED); \
163                                     }while(0)
164 #define _HAL_HALTSP_EXIT()          do{  \
165                                         if(_s32HALTSPMutexId != -1)                                     \
166                                         {   \
167                                             MsOS_DeleteMutex(_s32HALTSPMutexId);    _s32HALTSPMutexId = -1; \
168                                         }   \
169                                     }while(0)
170 
171 #define _HAL_HALTSP_LOCK()              (MsOS_ObtainMutex(_s32HALTSPMutexId, MSOS_WAIT_FOREVER))
172 #define _HAL_HALTSP_UNLOCK()            (MsOS_ReleaseMutex(_s32HALTSPMutexId))
173 
174 #define _HAL_TSP_PIDFLT(EngId, FltId)     (&(_TspPid[EngId].Flt[FltId]))
175 #define _HAL_TSP_PIDFLT_H(EngId, FltId)   (&(_TspPid_H[EngId].Flt[FltId]))
176 
177 //--------------------------------------------------------------------------------------------------
178 //  Macro of bit operations
179 //--------------------------------------------------------------------------------------------------
180 #define HAS_FLAG(flag, bit)        ((flag) & (bit))
181 #define SET_FLAG(flag, bit)        ((flag)|= (bit))
182 #define RESET_FLAG(flag, bit)      ((flag)&= (~(bit)))
183 #define SET_FLAG1(flag, bit)       ((flag)|  (bit))
184 #define RESET_FLAG1(flag, bit)     ((flag)&  (~(bit)))
185 
186 //#define MASK(x)                 (((1<<(x##_BITS))-1) << x##_SHIFT)
187 //#define BIT(x)                  (1<<(x))
188 //#define BMASK(bits)                 (BIT(((1)?bits)+1)-BIT(((0)?bits)))
189 // #define BMASK_L(bits)               (BMASK(bits)&0xFFFF)
190 // #define BMASK_H(bits)               (BMASK(bits)>>16)
191 //#define BITS(bits,value)            ((BIT(((1)?bits)+1)-BIT(((0)?bits))) & (value<<((0)?bits)))
192 
193 #define PMTOP_REG(addr)             (*((volatile MS_U16*)(_u32PMRegBase + 0x3c00 + ((addr)<<2))))
194     #define REG_PMTOP_CHIPID                            0x00
195         #define REG_PMTOP_CHIPID_MASK                   0xFFFF
196     #define REG_PMTOP_CHIPVERSION                       0x01
197         #define REG_PMTOP_CHIP_VERSION_MASK             0x00FF
198         #define REG_PMTOP_CHIP_REVISION_MASK            0xFF00
199         #define REG_PMTOP_CHIP_REVISION_SHIFT           8
200 
201 #define TSP_INT_REG(addr)           (*((volatile MS_U16*)(_u32RegBase + 0x3200 + ((addr)<<2))))
202 
203 #define TSP_CLKGEN0_REG(addr)       (*((volatile MS_U16*)(_u32RegBase + 0x1600 + ((addr)<<2))))
204     #define REG_CLKGEN0_DC0_SYTNTH              0x05
205         #define REG_CLKGEN0_STC_CW_SEL          0x0002
206         #define REG_CLKGEN0_STC_CW_EN           0x0004
207     #define REG_CLKGEN0_DC0_STC_CW_L            0x06
208     #define REG_CLKGEN0_DC0_STC_CW_H            0x07
209 
210     #define REG_CLKGEN0_TSN_CLK                 0x28
211         #define REG_CLKGEN0_TSN_CLK_MASK        0x1F
212         #define REG_CLKGEN0_TSN_CLK_DEMOD       0x1C
213         #define REG_CLKGEN0_TSN_CLK_TS0_SHIFT   0
214         #define REG_CLKGEN0_TSN_CLK_TS1_SHIFT   8
215         //#define TSP_CLK_TS0                        0
216         //#define TSP_CLK_TS1                        1
217         //#define TSP_CLK_TS2                        2
218         //#define TSP_CLK_TSO_OUT                6
219         //#define TSP_CLK_INDEMOD                 7
220         // bit[4:0] -> ts0  -> 0: disable clock
221         //                     1: invert clock
222         //                     bit [4:2] -> 0: TS0
223         //                                     1: TS1
224         //                                     2: TS2
225         //                                     6: TSOOUT
226         //                                     7: Internal Demmod
227         // bit[12:8] -> ts1 -> 0: disable clock
228         //                     1: invert clock
229         //                     bit [4:2] -> 0: TS0
230         //                                     1: TS1
231         //                                     2: TS2
232         //                                     6: TSOOUT
233         //                                     7: Internal Demmod
234     #define REG_CLKGEN0_TSN_CLKTS4              0x29    //clk of S2p
235         #define REG_CLKGEN0_TSN_CLK_TS4_SHIFT   8
236         // bit[4:0] -> ts2  -> 0: disable clock
237         //                     1: invert clock
238         //                     bit [4:2] -> 0: TS0
239         //                                     1: TS1
240         //                                     2: TS2
241         //                                     6: TSOOUT
242         //                                     7: Internal Demmod
243 #define TSP_CLKGEN1_REG(addr)       (*((volatile MS_U16*)(_u32RegBase + 0x6600 + ((addr)<<2))))
244     #define REG_CLKGEN1_TSN_CLKFI               0x26
245         #define REG_CLKGEN1_TSN_CLK_TSFI_SHIFT  8
246         // bit[12:8] -> tsfi  -> 0: disable clock
247         //                     1: invert clock
248         //                     bit [4:2] -> 0: TS0
249         //                                     1: TS1
250         //                                     2: TS2
251         //                                     6: TSOOUT
252         //                                     7: Internal Demmod
253 
254 #define TSP_TOP_REG(addr)           (*((volatile MS_U16*)(_u32RegBase + 0x3c00 + ((addr)<<2))))
255 
256     #define REG_TOP_TS_OUT_MODE                 0x51    //For ts1 out configure
257         #define REG_TOP_TS_OUT_MODE_MASK                0x0100
258             #define REG_TOP_TS1_OUT_MODE_TSO            0x0100
259 
260     //#define REG_TOP_TS_TS0TS1_CFG_MASK                0x07
261     #define REG_TOP_TSCONFIG                0x51
262         #define REG_TOP_TS0CFG_SHIFT                    9
263         #define REG_TOP_TS_TS0_CFG_MASK                 0x03
264         #define REG_TOP_TS_TS0_PARALL_IN                1
265         #define REG_TOP_TS_TS0_SERIAL_IN                2
266 
267         #define REG_TOP_TS1CFG_SHIFT                    11
268         #define REG_TOP_TS_TS1_CFG_MASK                 0x07
269             #define REG_TOP_TS_TS1_PARALL_IN                1
270             #define REG_TOP_TS_TS1_PARALL_OUT               2
271             #define REG_TOP_TS_TS1_SERIAL_IN                3
272 
273     #define REG_TOP_TS2CONFIG                0x54
274         #define REG_TOP_TS2CFG_SHIFT                    4
275         #define REG_TOP_TS_TS2_CFG_MASK                 0x03
276         #define REG_TOP_TS_TS2_PARALL_IN                1
277         #define REG_TOP_TS_TS2_SERIAL_IN                2
278         #define REG_TOP_TSCFG_DISABLE_PAD               0
279 
280 
281 #define TSP_TSO0_REG(addr)           (*((volatile MS_U16*)(_u32RegBase + 0x27400UL + ((addr)<<2UL))))
282     #define REG_TSO0_CFG0                       0x1C
283         #define REG_TSO0_CFG0_S2PCFG_MASK                   0x001F
284         #define REG_TSO0_CFG0_S2PCFG_S2P_EN                 0x0001
285         #define REG_TSO0_CFG0_S2PCFG_S2P_TSSIN_C0           0x0002
286         #define REG_TSO0_CFG0_S2PCFG_S2P_TSSIN_C1           0x0004
287         #define REG_TSO0_CFG0_S2PCFG_S2P_3WIRE_MODE         0x0008
288         #define REG_TSO0_CFG0_S2PCFG_S2P_BYPASS             0x0010
289         #define REG_TSO0_CFG0_S2P0_CFG_SHIFT                0
290 
291 
292 #define TSP_TS_SAMPLE_REG(addr)           (*((volatile MS_U16*)(_u32RegBase + 0x21600 + ((addr)<<2))))
293     #define REG_TSO_OUT_CLK_SEL                 0x30
294     #define REG_TSO_OUT_CLK_SEL_MASK            1
295         #define REG_TSO_OUT_TSO                             0x0000
296         #define REG_TSO_OUT_S2P                             0x0001
297 
298 
299 #define ABS_DIFF(x1, x2)            (((x1) > (x2))? ((x1) - (x2)) : ((x2) - (x1)))
300 #define IsCover(_start1, _end1, _start2, _end2) (ABS_DIFF(_end1, _end2) < (((_end1) > (_end2))?((_end1)-(_start1)):((_end2)-(_start2))) )?TRUE:FALSE
301 //--------------------------------------------------------------------------------------------------
302 //  Forward declaration
303 //--------------------------------------------------------------------------------------------------
304 static void _HAL_TSP_FW_load(
305     MS_U32                     u32FwAddrPhys,
306     MS_U32                     u32FwSize,
307     MS_BOOL                    bFwDMA,
308     MS_BOOL                    bIQmem,
309     MS_BOOL                    bDQmem);
310 
311 static void _HAL_TSP_tsif_select(MS_U8 u8_tsif);
312 // static void _HAL_TSP_SelPad(MS_U32 u32EngId, MS_U32 PadId);
313 
314 //--------------------------------------------------------------------------------------------------
315 //  Implementation
316 //--------------------------------------------------------------------------------------------------
_delay(void)317 static void _delay(void)
318 {
319     volatile MS_U32 i;
320     for (i = 0; i< 0xFFFF; i++);
321 }
322 
_HAL_REG32_R(REG32 * reg)323 static MS_U32 _HAL_REG32_R(REG32 *reg)
324 {
325     MS_U32     value = 0;
326     value  = (reg)->H << 16;
327     value |= (reg)->L;
328     return value;
329 }
330 
_HAL_REG32L_R(REG32_L * reg)331 static MS_U16 _HAL_REG32L_R(REG32_L *reg)
332 {
333     MS_U16     value;
334     value = (reg)->data;
335     return value;
336 }
337 
_HAL_REG16_R(REG16 * reg)338 static MS_U16 _HAL_REG16_R(REG16 *reg)
339 {
340     MS_U16     value;
341     value = (reg)->u16data;
342     return value;
343 }
344 
_HAL_TSP_SECFLT(MS_U32 u32EngId,MS_U32 u32FltId)345 static REG_SecFlt* _HAL_TSP_SECFLT(MS_U32 u32EngId, MS_U32 u32FltId)
346 {
347     return (&(_TspSec1[u32EngId].Flt[u32FltId]));
348 }
349 
_HAL_TSP_tsif_select(MS_U8 u8_tsif)350 static void _HAL_TSP_tsif_select(MS_U8 u8_tsif)
351 {
352     switch(u8_tsif)
353     {
354         default:
355         case 0:
356             _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
357                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF0_ENABLE));
358             break;
359         case 1:
360             _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
361                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF1_ENABLE));
362             break;
363         case 3: //TS_FI
364             _HAL_REG16_W(&_TspCtrl5[0].Ts_If_Fi_Cfg,
365                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].Ts_If_Fi_Cfg), TSP_FIIF_EN|TSP_FIIF_MUX_LIVE_PATH));
366             break;
367     }
368 }
369 
370 #define REG16_T(addr)           (*((volatile MS_U16*)(addr)))
371 #define ADDR_INDR_CTRL          (_u32RegBase+ 0x2b20)
372 #define ADDR_INDR_ADDR0         (_u32RegBase+ 0x2b24)
373 #define ADDR_INDR_ADDR1         (_u32RegBase+ 0x2b28)
374 #define ADDR_INDR_WRITE0        (_u32RegBase+ 0x2b2c)
375 #define ADDR_INDR_WRITE1        (_u32RegBase+ 0x2b30)
376 #define ADDR_INDR_READ0         (_u32RegBase+ 0x2b34)
377 #define ADDR_INDR_READ1         (_u32RegBase+ 0x2b38)
378 
379 #define ADDR_MOBF_FILEIN        (_u32RegBase+ 0x2a2cUL)
380 
381 #if 0
382 #define XBYTE_1591              (_u32RegBase+ 0x2a0c)  // TsRec_Head21_Mid20
383 #define XBYTE_15A4              (_u32RegBase+ 0x2a10)  // TsRec_Mid21_Tail20
384 #define XBYTE_15A6              (_u32RegBase+ 0x2b48)  // TsRec_Mid
385 
386 void HAL_TSP_HW_Lock_Init(void)
387 {
388     REG16_T(XBYTE_1591) = 0;
389     REG16_T(XBYTE_15A4) = 0;
390     REG16_T(XBYTE_15A6) = 0;
391 }
392 
393 void _HAL_TSP_HW_Lock(void)
394 {
395 #ifdef MCU_HK
396     REG16_T(XBYTE_1591) = 0xFF;
397     REG16_T(XBYTE_15A4) = 0xFF;
398     while (REG16_T(XBYTE_15A4) && REG16_T(XBYTE_15A6));
399     REG16_T(XBYTE_1591) = 0xFF;
400 #else // MIPS HK
401     REG16_T(XBYTE_15A6) = 0xFF;
402     REG16_T(XBYTE_15A4) = 0x00;
403     while (REG16_T(XBYTE_1591) && (REG16_T(XBYTE_15A4)==0));
404 #endif
405 }
406 
407 void _HAL_TSP_HW_Unlock(void)
408 {
409 #ifdef MCU_HK
410     REG16_T(XBYTE_1591) = 0x00;
411 #else
412     REG16_T(XBYTE_15A6) = 0x00;
413 #endif
414 }
415 
416 #undef XBYTE_1591
417 #undef XBYTE_15A4
418 #undef XBYTE_15A6
419 
420 #else
421 
422 #define TSP_SEM_AEON              (_u32RegBase+ 0xC1480)  //sw_mail_box0
423 #define TSP_SEM_ORDER             (_u32RegBase+ 0xC1484)  // sw_mail_box1
424 #define TSP_SEM_MIPS              (_u32RegBase+ 0xC1488)  // sw_mail_box2
425 
HAL_TSP_HW_Lock_Init(void)426 void HAL_TSP_HW_Lock_Init(void)
427 {
428     REG16_T(TSP_SEM_AEON) = 0;
429     REG16_T(TSP_SEM_MIPS) = 0;
430     REG16_T(TSP_SEM_ORDER) = 0;
431 
432     _HAL_HALTSP_ENTRY();
433 }
434 
_HAL_TSP_HW_TryLock(MS_BOOL bInit)435 static MS_BOOL _HAL_TSP_HW_TryLock(MS_BOOL bInit)
436 {
437     if (_bIsHK)
438     {
439         if (bInit)
440         {
441             REG16_T(TSP_SEM_AEON) = 0xFFFF;
442             REG16_T(TSP_SEM_ORDER) = 0xFFFF;
443         }
444         if (REG16_T(TSP_SEM_ORDER) && REG16_T(TSP_SEM_MIPS))
445         {
446             // REG16_T(TSP_SEM_AEON) = 0x0000;
447             return FALSE;
448         }
449         return TRUE;
450     }
451     else
452     {
453         if (bInit)
454         {
455             REG16_T(TSP_SEM_MIPS) = 0xFFFF;
456             REG16_T(TSP_SEM_ORDER) = 0x00;
457         }
458         if ((REG16_T(TSP_SEM_ORDER) ==0) && (REG16_T(TSP_SEM_AEON)))
459         {
460             // REG16_T(TSP_SEM_MIPS) = 0x0000;
461             return FALSE;
462         }
463         return TRUE;
464     }
465 }
466 
_HAL_TSP_HW_Lock(void)467 static void _HAL_TSP_HW_Lock(void)
468 {
469     if (FALSE == _HAL_TSP_HW_TryLock(TRUE))
470     {
471         while (FALSE == _HAL_TSP_HW_TryLock(FALSE));
472     }
473 }
474 
_HAL_TSP_HW_Unlock(void)475 static void _HAL_TSP_HW_Unlock(void)
476 {
477     if (_bIsHK)
478     {
479         REG16_T(TSP_SEM_AEON) = 0x00;
480     }
481     else
482     {
483         REG16_T(TSP_SEM_MIPS) = 0x00;
484     }
485 }
486 
HAL_TSP_HW_Lock_Release(void)487 void HAL_TSP_HW_Lock_Release(void)
488 {
489     REG16_T(TSP_SEM_AEON) = 0x00;
490     REG16_T(TSP_SEM_MIPS) = 0x00;
491 
492     _HAL_HALTSP_EXIT();
493 
494 
495 }
496 
HAL_TSP_TTX_IsAccess(MS_U32 u32Try)497 MS_BOOL HAL_TSP_TTX_IsAccess(MS_U32 u32Try)
498 {
499     if(u32Try == 0)
500         return FALSE;
501 
502     if (_bIsHK)
503     {
504         if ( REG16_T(TSP_SEM_AEON))
505         {
506             return FALSE;
507         }
508     }
509     else
510     {
511         if (REG16_T(TSP_SEM_MIPS))
512         {
513             return FALSE;
514         }
515     }
516 
517     if (_HAL_TSP_HW_TryLock(TRUE))
518     {
519         return TRUE;
520     }
521 
522     _HAL_TSP_HW_Unlock();
523     return FALSE;
524 }
525 
HAL_TSP_TTX_UnlockAccess(void)526 void HAL_TSP_TTX_UnlockAccess(void)
527 {
528     _HAL_TSP_HW_Unlock();
529 }
530 
531 #undef TSP_SEM_AEON
532 #undef TSP_SEM_MIPS
533 #undef TSP_SEM_ORDER
534 
535 #endif
536 
HAL_REG32_IndR(REG32 * reg)537 MS_U32 HAL_REG32_IndR(REG32 *reg)
538 {
539     MS_U32 u32Ret;
540 
541     _HAL_TSP_HW_Lock();
542     _HAL_HALTSP_LOCK();
543 
544     // set address
545     REG16_T(ADDR_INDR_ADDR0)=   ((((MS_U32)reg)>> 1) & 0xFFFF);
546     REG16_T(ADDR_INDR_ADDR1)=   ((((MS_U32)reg)>> 17) & 0xFFFF);
547 
548     // set command
549     // REG16_T(ADDR_INDR_CTRL)=    (TSP_IDR_MCUWAIT | TSP_IDR_READ | TSP_IDR_START);
550     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) & 0xFF00;
551     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) | (TSP_IDR_MCUWAIT | TSP_IDR_READ | TSP_IDR_START);
552 
553     // get read value
554     u32Ret = ((MS_U32)(REG16_T(ADDR_INDR_READ0))| ((MS_U32)(REG16_T(ADDR_INDR_READ1)<< 16)));
555 
556     _HAL_HALTSP_UNLOCK();
557     _HAL_TSP_HW_Unlock();
558 
559     return u32Ret;
560 }
561 
HAL_REG32_IndR_tmp(REG32 * reg)562 MS_U32 HAL_REG32_IndR_tmp(REG32 *reg)
563 {
564     MS_U32 u32Ret;
565 
566     _HAL_HALTSP_LOCK();
567 
568     // set address
569     REG16_T(ADDR_INDR_ADDR0)=   ((((MS_U32)reg)>> 1) & 0xFFFF);
570     REG16_T(ADDR_INDR_ADDR1)=   ((((MS_U32)reg)>> 17) & 0xFFFF);
571 
572     // set command
573     // REG16_T(ADDR_INDR_CTRL)=    (TSP_IDR_MCUWAIT | TSP_IDR_READ | TSP_IDR_START);
574     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) & 0xFF00;
575     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) | (TSP_IDR_MCUWAIT | TSP_IDR_READ | TSP_IDR_START);
576 
577     // get read value
578     u32Ret = ((MS_U32)(REG16_T(ADDR_INDR_READ0))| ((MS_U32)(REG16_T(ADDR_INDR_READ1)<< 16)));
579 
580     _HAL_HALTSP_UNLOCK();
581 
582     return u32Ret;
583 }
HAL_REG32_IndW_tmp(REG32 * reg,MS_U32 value)584 void HAL_REG32_IndW_tmp(REG32 *reg, MS_U32 value)
585 {
586     _HAL_HALTSP_LOCK();
587 
588     // set address
589     REG16_T(ADDR_INDR_ADDR0)=   ((((MS_U32)reg)>> 1) & 0xFFFF);
590     REG16_T(ADDR_INDR_ADDR1)=   ((((MS_U32)reg)>> 17) & 0xFFFF);
591 
592     // set write value
593     REG16_T(ADDR_INDR_WRITE0)=  (value & 0xFFFF);
594     REG16_T(ADDR_INDR_WRITE1)=  ((value >> 16) & 0xFFFF);
595 
596     // set command
597     // REG16_T(ADDR_INDR_CTRL)=    (TSP_IDR_MCUWAIT | TSP_IDR_WRITE | TSP_IDR_START);
598     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) & 0xFF00;
599     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) | (TSP_IDR_MCUWAIT | TSP_IDR_WRITE | TSP_IDR_START);
600 
601     _HAL_HALTSP_UNLOCK();
602 }
603 
HAL_REG32_IndW(REG32 * reg,MS_U32 value)604 void HAL_REG32_IndW(REG32 *reg, MS_U32 value)
605 {
606     _HAL_TSP_HW_Lock();
607 
608     _HAL_HALTSP_LOCK();
609 
610     // set address
611     REG16_T(ADDR_INDR_ADDR0)=   ((((MS_U32)reg)>> 1) & 0xFFFF);
612     REG16_T(ADDR_INDR_ADDR1)=   ((((MS_U32)reg)>> 17) & 0xFFFF);
613 
614     // set write value
615     REG16_T(ADDR_INDR_WRITE0)=  (value & 0xFFFF);
616     REG16_T(ADDR_INDR_WRITE1)=  ((value >> 16) & 0xFFFF);
617 
618     // set command
619     // REG16_T(ADDR_INDR_CTRL)=    (TSP_IDR_MCUWAIT | TSP_IDR_WRITE | TSP_IDR_START);
620     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) & 0xFF00;
621     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) | (TSP_IDR_MCUWAIT | TSP_IDR_WRITE | TSP_IDR_START);
622 
623     _HAL_HALTSP_UNLOCK();
624 
625     _HAL_TSP_HW_Unlock();
626 }
627 
628 #define ADDR_HWINT2         (_u32RegBase+ 0x2db0)
_HAL_TSP_HwInt2_BitClr(MS_U16 u16ClrBit)629 static void _HAL_TSP_HwInt2_BitClr(MS_U16 u16ClrBit)
630 {
631     REG16_T(ADDR_HWINT2) = (REG16_T(ADDR_HWINT2) | 0xFF00) & ~u16ClrBit;
632 }
633 
_HAL_TSP_HwInt2_BitSet(MS_U16 u16Bit)634 static void _HAL_TSP_HwInt2_BitSet(MS_U16 u16Bit)
635 {
636     REG16_T(ADDR_HWINT2) = (REG16_T(ADDR_HWINT2) | 0xFF00) | u16Bit;
637 }
638 #undef ADDR_HWINT2
639 
640 #if (TSP_HWPCR_BY_HK == 0 && defined(HWPCR_ENABLE))
_HAL_TSP_CMD_Write_HWPCR_Reg(MS_U32 u32mask,MS_U32 u32data)641 static void _HAL_TSP_CMD_Write_HWPCR_Reg(MS_U32 u32mask, MS_U32 u32data)
642 {
643     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, u32mask);
644     _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, u32data);
645     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_HWPCR_REG_SET);
646 
647     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
648     {
649         _delay();
650     }
651 }
652 #endif
653 
654 static MS_U16 u16LastAddr0, u16LastAddr1, u16LastWrite0, u16LastWrite1, u16LastRead0, u16LastRead1;
655 
656 static MS_U32                       _u32PidFltBuf[((TSP_PIDFLT_NUM_ALL) * 2 * sizeof(REG_PidFlt))>> 3];
657 static MS_U32                       _u32SecFltBuf[TSP_SECFLT_NUM*((sizeof(REG_SecFlt)-sizeof((((REG_SecFlt*)0)->_x50)))>> 3)];
658 
659 #ifdef HWPCR_ENABLE
660 static MS_U32                       _u32PcrFltBuf[2];
661 #endif
662 
663 //[LEGACY] //[OBSOLETE]
664 MS_BOOL                             _bIsHK = TRUE;
665 //[LEGACY] //[OBSOLETE]
666 
HAL_TSP_SaveFltState(void)667 void HAL_TSP_SaveFltState(void)
668 {
669     MS_U32 u32EngId;
670     MS_U32 i, j;
671     MS_U32 u32SecEnd = ((size_t)&(((REG_SecFlt*)0)->_x50))/sizeof(REG32);
672     REG_PidFlt *pPidFilter;
673 
674     for (u32EngId = 0; u32EngId < TSP_ENGINE_NUM; u32EngId++)
675     {
676         for (i = 0; i < TSP_PIDFLT_NUM_ALL; i++)
677         {
678             j = i << 1;
679 
680             if(i < TSP_PIDFLT_NUM)
681             {
682                 pPidFilter = _HAL_TSP_PIDFLT(u32EngId, i);
683                 _u32PidFltBuf[j] = HAL_REG32_IndR(pPidFilter);
684                 pPidFilter = _HAL_TSP_PIDFLT_H(u32EngId, i);
685                 _u32PidFltBuf[j + 1] = HAL_REG32_IndR(pPidFilter);
686             }
687             else
688             {
689                 #if (SWPATCH_FOR_READ_PIDFLT == 0)
690                 pPidFilter = _HAL_TSP_PIDFLT(u32EngId, i);
691                 _u32PidFltBuf[j] = HAL_REG32_IndR(pPidFilter);
692                 pPidFilter = _HAL_TSP_PIDFLT_H(u32EngId, i);
693                 _u32PidFltBuf[j + 1] = HAL_REG32_IndR(pPidFilter);
694                 #else
695                 _u32PidFltBuf[j] = _u32PidFlt_L[i - TSP_PIDFLT_NUM];
696                 _u32PidFltBuf[j + 1] = _u32PidFlt_H[i - TSP_PIDFLT_NUM];
697                 #endif
698             }
699         }
700 #ifdef HWPCR_ENABLE
701         _u32PcrFltBuf[0] = _HAL_REG32_R(&(_TspCtrl3[0].PIDFLR_PCR[0]));
702         _u32PcrFltBuf[1] = _HAL_REG32_R(&(_TspCtrl3[0].PIDFLR_PCR[1]));
703 #endif
704         j = 0;
705         for (i = 0; i < TSP_SECFLT_NUM; i++)
706         {
707             REG32* pRegStart = (REG32*)_HAL_TSP_SECFLT(u32EngId, i);
708             REG32* pRegEnd = pRegStart + u32SecEnd;
709             REG32* pReg = pRegStart;
710             while (pReg < pRegEnd)
711             {
712                 _u32SecFltBuf[j] = HAL_REG32_IndR(pReg);
713                 j++;
714                 pReg++;
715             }
716         }
717     }
718 }
719 
HAL_TSP_RestoreFltState(void)720 void HAL_TSP_RestoreFltState(void)
721 {
722     MS_U32 u32EngId;
723     MS_U32 i, j;
724     MS_U32 u32SecEnd = ((size_t)&(((REG_SecFlt*)0)->_x50))/sizeof(REG32);
725     REG_PidFlt *pPidFilter;
726 
727     for (u32EngId = 0; u32EngId < TSP_ENGINE_NUM; u32EngId++)
728     {
729         for (i = 0; i < TSP_PIDFLT_NUM_ALL; i++)
730         {
731             j = i << 1;
732             pPidFilter = _HAL_TSP_PIDFLT(u32EngId, i);
733             HAL_REG32_IndW(pPidFilter, _u32PidFltBuf[j]);
734             pPidFilter = _HAL_TSP_PIDFLT_H(u32EngId, i);
735             HAL_REG32_IndW(pPidFilter, _u32PidFltBuf[j + 1]);
736         }
737 #ifdef HWPCR_ENABLE
738         _HAL_REG32_W(&(_TspCtrl3[0].PIDFLR_PCR[0]), _u32PcrFltBuf[0]);
739         _HAL_REG32_W(&(_TspCtrl3[0].PIDFLR_PCR[1]), _u32PcrFltBuf[1]);
740 #endif
741         j = 0;
742         for (i = 0; i < TSP_SECFLT_NUM; i++)
743         {
744             REG32* pRegStart = (REG32*) _HAL_TSP_SECFLT(u32EngId, i);
745             REG32* pRegEnd = pRegStart + u32SecEnd;
746             REG32* pReg = pRegStart;
747             while (pReg < pRegEnd)
748             {
749                 HAL_REG32_IndW(pReg, _u32SecFltBuf[j]);
750                 j++;
751                 pReg++;
752             }
753         }
754     }
755 }
756 
HAL_TSP_ISR_SAVE_ALL(void)757 void HAL_TSP_ISR_SAVE_ALL(void)
758 {
759     // save address
760     u16LastAddr0=               (MS_U16)REG16_T(ADDR_INDR_ADDR0);
761     u16LastAddr1=               (MS_U16)REG16_T(ADDR_INDR_ADDR1);
762 
763     // save write
764     u16LastWrite0=              (MS_U16)REG16_T(ADDR_INDR_WRITE0);
765     u16LastWrite1=              (MS_U16)REG16_T(ADDR_INDR_WRITE1);
766 
767     // save read
768     u16LastRead0=               (MS_U16)REG16_T(ADDR_INDR_READ0);
769     u16LastRead1=               (MS_U16)REG16_T(ADDR_INDR_READ1);
770 }
771 
HAL_TSP_ISR_RESTORE_ALL(void)772 void HAL_TSP_ISR_RESTORE_ALL(void)
773 {
774     // restore read
775     REG16_T(ADDR_INDR_READ0)=   u16LastRead0;
776     REG16_T(ADDR_INDR_READ1)=   u16LastRead1;
777 
778     // restore write
779     REG16_T(ADDR_INDR_WRITE0)=  u16LastWrite0;
780     REG16_T(ADDR_INDR_WRITE1)=  u16LastWrite1;
781 
782     // restore addr
783     REG16_T(ADDR_INDR_ADDR0)=   u16LastAddr0;
784     REG16_T(ADDR_INDR_ADDR1)=   u16LastAddr1;
785 }
786 #undef ADDR_INDR_CTRL
787 #undef ADDR_INDR_ADDR0
788 #undef ADDR_INDR_ADDR1
789 #undef ADDR_INDR_WRITE0
790 #undef ADDR_INDR_WRITE1
791 #undef ADDR_INDR_READ0
792 #undef ADDR_INDR_READ1
793 
794 //--------------------------------------------------------------------------------------------------
795 // For MISC part
796 //--------------------------------------------------------------------------------------------------
HAL_TSP_ORAcess_Optimize(MS_BOOL bEnable)797 void HAL_TSP_ORAcess_Optimize(MS_BOOL bEnable)
798 {
799     if (bEnable)
800     {
801         _HAL_REG32_W(&_TspCtrl[0].reg160C,
802                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_OPT_ORACESS_TIMING));
803     }
804     else
805     {
806         _HAL_REG32_W(&_TspCtrl[0].reg160C,
807                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_OPT_ORACESS_TIMING));
808     }
809 }
810 
HAL_TSP_CSA_Set_ScrmPath(MS_U8 u8EngId,MS_U32 u32ScrmPath)811 void HAL_TSP_CSA_Set_ScrmPath(MS_U8 u8EngId, MS_U32 u32ScrmPath)
812 {
813     //printf("[%s] u8EngId %d, u32ScrmPath %lx\n", __FUNCTION__, (int)u8EngId, u32ScrmPath);
814     switch(u8EngId)
815     {
816         case 0:
817             _HAL_REG32_W(&_TspCtrl[0].CA_CTRL, (_HAL_REG32_R(&_TspCtrl[0].CA_CTRL) & ~TSP_CA0_CTRL_MASK) | (u32ScrmPath & TSP_CA0_CTRL_MASK));
818             break;
819         case 1:
820             _HAL_REG32_W(&_TspCtrl[0].CA_CTRL, (_HAL_REG32_R(&_TspCtrl[0].CA_CTRL) & ~TSP_CA1_CTRL_MASK) | (u32ScrmPath & TSP_CA1_CTRL_MASK));
821             break;
822         default:
823             break;
824     }
825 }
826 
HAL_TSP_CSA_Get_ScrmPath(MS_U8 u8EngId)827 MS_U32 HAL_TSP_CSA_Get_ScrmPath(MS_U8 u8EngId)
828 {
829     switch(u8EngId)
830     {
831         case 0:
832             return (_HAL_REG32_R(&_TspCtrl[0].CA_CTRL) & TSP_CA0_CTRL_MASK);
833         case 1:
834             return (_HAL_REG32_R(&_TspCtrl[0].CA_CTRL) & TSP_CA1_CTRL_MASK);
835             break;
836         default:
837             break;
838     }
839 
840     return 0;
841 }
842 
HAL_TSP_CSA_Set_CACtrl(MS_U8 u8EngId,MS_U8 u8SrcTSIF,MS_U32 u32Dst)843 MS_BOOL HAL_TSP_CSA_Set_CACtrl(MS_U8 u8EngId, MS_U8 u8SrcTSIF, MS_U32 u32Dst)
844 {
845     MS_U32 u32CAInTS0Live[2]    = {TSP_CA0_INPUT_TSIF0_LIVEIN,TSP_CA1_INPUT_TSIF0_LIVEIN};
846     MS_U32 u32CAInTS0file[2]    = {TSP_CA0_INPUT_TSIF0_FILEIN,TSP_CA1_INPUT_TSIF0_FILEIN};
847     MS_U32 u32CAInTS1[2]        = {TSP_CA0_INPUT_TSIF1,TSP_CA1_INPUT_TSIF1};
848     MS_U32 u32CAOutPktDmx0L[2]  = {TSP_CA0_OUTPUT_PKTDMX0_LIVE,TSP_CA1_OUTPUT_PKTDMX0_LIVE};
849     MS_U32 u32CAOutPktDmx0F[2]  = {TSP_CA0_OUTPUT_PKTDMX0_FILE,TSP_CA1_OUTPUT_PKTDMX0_FILE};
850     MS_U32 u32CAOutPktDmx1[2]   = {TSP_CA0_OUTPUT_PKTDMX1,TSP_CA1_OUTPUT_PKTDMX1};
851     MS_U32 u32CACtrl = 0;
852 
853     if(u8EngId >= TSP_CA_ENGINE_NUM)
854     {
855         return FALSE;
856     }
857 
858     switch(u8SrcTSIF)
859     {
860         case TSP_SRC_FROM_TSIF0_LIVE:
861             u32CACtrl = u32CAInTS0Live[u8EngId];
862             break;
863         case TSP_SRC_FROM_TSIF0_FILE:
864             u32CACtrl = u32CAInTS0file[u8EngId];
865             break;
866         case TSP_SRC_FROM_TSIF1:
867             u32CACtrl = u32CAInTS1[u8EngId];
868             break;
869         default:
870             return FALSE;
871     }
872     switch(u32Dst)
873     {
874         case TSP_PKTDMX0_LIVE:
875             u32CACtrl |= u32CAOutPktDmx0L[u8EngId];
876             break;
877         case TSP_PKTDMX0_FILE:
878             u32CACtrl |= u32CAOutPktDmx0F[u8EngId];
879             break;
880         case TSP_PKTDMX1:
881             u32CACtrl |= u32CAOutPktDmx1[u8EngId];
882             break;
883         default:
884             return FALSE;
885     }
886 
887     HAL_TSP_CSA_Set_ScrmPath(u8EngId, u32CACtrl);
888 
889     return TRUE;
890 }
891 
HAL_TSP_CSA_Get_CACtrl(MS_U8 u8EngId,MS_U8 * pu8SrcTSIF,MS_U32 * pu32Dst)892 MS_BOOL HAL_TSP_CSA_Get_CACtrl(MS_U8 u8EngId, MS_U8* pu8SrcTSIF, MS_U32* pu32Dst)
893 {
894     MS_U32 u32CAInTS0Live[2]    = {TSP_CA0_INPUT_TSIF0_LIVEIN,TSP_CA1_INPUT_TSIF0_LIVEIN};
895     MS_U32 u32CAInTS0file[2]    = {TSP_CA0_INPUT_TSIF0_FILEIN,TSP_CA1_INPUT_TSIF0_FILEIN};
896     MS_U32 u32CAInTS1[2]        = {TSP_CA0_INPUT_TSIF1,TSP_CA1_INPUT_TSIF1};
897     MS_U32 u32CAOutPktDmx0L[2]  = {TSP_CA0_OUTPUT_PKTDMX0_LIVE,TSP_CA1_OUTPUT_PKTDMX0_LIVE};
898     MS_U32 u32CAOutPktDmx0F[2]  = {TSP_CA0_OUTPUT_PKTDMX0_FILE,TSP_CA1_OUTPUT_PKTDMX0_FILE};
899     MS_U32 u32CAOutPktDmx1[2]   = {TSP_CA0_OUTPUT_PKTDMX1,TSP_CA1_OUTPUT_PKTDMX1};
900     MS_U32 u32ScmbPath = 0;
901 
902     *pu8SrcTSIF = 0;
903     *pu32Dst = 0;
904 
905     if(u8EngId >= TSP_CA_ENGINE_NUM)
906     {
907         return FALSE;
908     }
909 
910     u32ScmbPath = HAL_TSP_CSA_Get_ScrmPath(u8EngId);
911 
912     if(u32ScmbPath & u32CAInTS0Live[u8EngId])
913     {
914         *pu8SrcTSIF = TSP_SRC_FROM_TSIF0_LIVE;
915     }
916     else if(u32ScmbPath & u32CAInTS0file[u8EngId])
917     {
918         *pu8SrcTSIF = TSP_SRC_FROM_TSIF0_FILE;
919     }
920     else if(u32ScmbPath & u32CAInTS1[u8EngId])
921     {
922         *pu8SrcTSIF = TSP_SRC_FROM_TSIF1;
923     }
924 
925     if(u32ScmbPath & u32CAOutPktDmx0L[u8EngId])
926     {
927         *pu32Dst = TSP_PKTDMX0_LIVE;
928     }
929     else if(u32ScmbPath & u32CAOutPktDmx0F[u8EngId])
930     {
931         *pu32Dst = TSP_PKTDMX0_FILE;
932     }
933     else if(u32ScmbPath & u32CAOutPktDmx1[u8EngId])
934     {
935         *pu32Dst = TSP_PKTDMX1;
936     }
937 
938     return TRUE;
939 }
940 
941 //--------------------------------------------------------------------------------------------------
942 // For PID filter part
943 //--------------------------------------------------------------------------------------------------
HAL_TSP_PidFlt_GetFltOutput(MS_U32 u32EngId,MS_U32 u32PidFltId)944 MS_U32 HAL_TSP_PidFlt_GetFltOutput(MS_U32 u32EngId, MS_U32 u32PidFltId)
945 {
946     if(u32PidFltId < TSP_PIDFLT_NUM)
947     {
948         REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT(u32EngId, u32PidFltId);
949         return (HAL_REG32_IndR((REG32 *)pPidFilter) & TSP_PIDFLT_OUT_MASK);
950     }
951     else
952     {
953         #if (SWPATCH_FOR_READ_PIDFLT == 0)
954         REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT(u32EngId, u32PidFltId);
955         return (HAL_REG32_IndR((REG32 *)pPidFilter) & TSP_PIDFLT_OUT_MASK);
956         #else
957         //printf("[%s][%d] u32EngId %ld, u32PidFltId %lx, PIDFLT %lx\n", __FUNCTION__, __LINE__, u32EngId, u32PidFltId, _u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM]);
958         return (_u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM] & TSP_PIDFLT_OUT_MASK);
959         #endif
960     }
961 }
962 
HAL_TSP_PidFlt_GetPid(MS_U32 u32EngId,MS_U32 u32PidFltId)963 MS_U32 HAL_TSP_PidFlt_GetPid(MS_U32 u32EngId, MS_U32 u32PidFltId)
964 {
965     MS_U32 u32PID;
966 
967     if(u32PidFltId < TSP_PIDFLT_NUM)
968     {
969         REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT(u32EngId, u32PidFltId);
970         u32PID = (HAL_REG32_IndR((REG32 *)pPidFilter) & TSP_PIDFLT_PID_MASK) >> TSP_PIDFLT_PID_SHFT;
971     }
972     else
973     {
974         #if (SWPATCH_FOR_READ_PIDFLT == 0)
975         REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT(u32EngId, u32PidFltId);
976         u32PID = (HAL_REG32_IndR((REG32 *)pPidFilter) & TSP_PIDFLT_PID_MASK) >> TSP_PIDFLT_PID_SHFT;
977         #else
978         u32PID = (_u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM] & TSP_PIDFLT_PID_MASK) >> TSP_PIDFLT_PID_SHFT;
979         //printf("[%s][%d] u32EngId %ld, u32PidFltId %lx, u32PID %lx PIDFLT %lx\n", __FUNCTION__, __LINE__, u32EngId, u32PidFltId, u32PID, _u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM]);
980         #endif
981     }
982 
983     return u32PID;
984 }
985 
HAL_TSP_PidFlt_SetPid(MS_U32 u32EngId,MS_U32 u32PidFltId,MS_U32 u32PID)986 void HAL_TSP_PidFlt_SetPid(MS_U32 u32EngId, MS_U32 u32PidFltId, MS_U32 u32PID)
987 {
988     REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT(u32EngId, u32PidFltId);
989 
990     if(u32PidFltId < TSP_PIDFLT_NUM)
991     {
992         HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_PID_MASK) | ((u32PID << TSP_PIDFLT_PID_SHFT) & TSP_PIDFLT_PID_MASK));
993     }
994     else
995     {
996         #if (SWPATCH_FOR_READ_PIDFLT == 0)
997         HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_PID_MASK) | ((u32PID << TSP_PIDFLT_PID_SHFT) & TSP_PIDFLT_PID_MASK));
998         #else
999         _u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM] = (_u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM] & ~TSP_PIDFLT_PID_MASK) | ((u32PID << TSP_PIDFLT_PID_SHFT) & TSP_PIDFLT_PID_MASK);
1000         //printf("[%s][%d] u32EngId %ld, u32PidFltId %lx, u32PID %lx PIDFLT %lx\n", __FUNCTION__, __LINE__, u32EngId, u32PidFltId, u32PID, _u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM]);
1001         HAL_REG32_IndW((REG32 *)pPidFilter, _u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM]);
1002         #endif
1003     }
1004 }
1005 
HAL_TSP_PidFlt_SelFltOutput(MS_U32 u32EngId,MS_U32 u32PidFltId,MS_U32 u32FltOutput)1006 void HAL_TSP_PidFlt_SelFltOutput(MS_U32 u32EngId, MS_U32 u32PidFltId, MS_U32 u32FltOutput)
1007 {
1008     REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT(u32EngId, u32PidFltId);
1009 
1010     if(u32PidFltId < TSP_PIDFLT_NUM)
1011     {
1012         HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_OUT_MASK) | (u32FltOutput & TSP_PIDFLT_OUT_MASK));
1013     }
1014     else
1015     {
1016         #if (SWPATCH_FOR_READ_PIDFLT == 0)
1017         HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_OUT_MASK) | (u32FltOutput & TSP_PIDFLT_OUT_MASK));
1018         #else
1019         _u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM] = (_u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM] & ~TSP_PIDFLT_OUT_MASK) | (u32FltOutput & TSP_PIDFLT_OUT_MASK);
1020         //printf("[%s][%d] u32EngId %ld, u32PidFltId %lx, u32FltOutput %lx PIDFLT %lx\n", __FUNCTION__, __LINE__, u32EngId, u32PidFltId, u32FltOutput, _u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM]);
1021         HAL_REG32_IndW((REG32 *)pPidFilter, _u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM]);
1022         #endif
1023     }
1024 }
1025 
HAL_TSP_PidFlt_SelSecFlt(MS_U32 u32EngId,MS_U32 u32PidFltId,MS_U32 u32SecFltId)1026 void HAL_TSP_PidFlt_SelSecFlt(MS_U32 u32EngId, MS_U32 u32PidFltId, MS_U32 u32SecFltId)
1027 {
1028     REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT_H(u32EngId, u32PidFltId);
1029 
1030     if(u32PidFltId < TSP_PIDFLT_NUM)
1031     {
1032         HAL_REG32_IndW((REG32 *)pPidFilter,
1033             (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_SECFLT_MASK) | ((u32SecFltId << TSP_PIDFLT_SECFLT_SHFT) & TSP_PIDFLT_SECFLT_MASK));
1034     }
1035     else
1036     {
1037         #if (SWPATCH_FOR_READ_PIDFLT == 0)
1038         HAL_REG32_IndW((REG32 *)pPidFilter,
1039             (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_SECFLT_MASK) | ((u32SecFltId << TSP_PIDFLT_SECFLT_SHFT) & TSP_PIDFLT_SECFLT_MASK));
1040         #else
1041         _u32PidFlt_H[u32PidFltId-TSP_PIDFLT_NUM] = (_u32PidFlt_H[u32PidFltId-TSP_PIDFLT_NUM] & ~TSP_PIDFLT_SECFLT_MASK) | ((u32SecFltId << TSP_PIDFLT_SECFLT_SHFT) & TSP_PIDFLT_SECFLT_MASK);
1042         //printf("[%s][%d] u32EngId %ld, u32PidFltId %lx, u32SecFltId %lx PIDFLT %lx\n", __FUNCTION__, __LINE__, u32EngId, u32PidFltId, u32SecFltId, _u32PidFlt_H[u32PidFltId-TSP_PIDFLT_NUM]);
1043         HAL_REG32_IndW((REG32 *)pPidFilter, _u32PidFlt_H[u32PidFltId-TSP_PIDFLT_NUM]);
1044         #endif
1045     }
1046 }
1047 
HAL_TSP_PidFlt_GetSecFlt(MS_U32 u32EngId,MS_U32 u32PidFltId)1048 MS_U32 HAL_TSP_PidFlt_GetSecFlt(MS_U32 u32EngId, MS_U32 u32PidFltId)
1049 {
1050     if(u32PidFltId < TSP_PIDFLT_NUM)
1051     {
1052         REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT_H(u32EngId, u32PidFltId);
1053         return ((HAL_REG32_IndR((REG32 *)pPidFilter) & TSP_PIDFLT_SECFLT_MASK) >> TSP_PIDFLT_SECFLT_SHFT);
1054     }
1055     else
1056     {
1057         #if (SWPATCH_FOR_READ_PIDFLT == 0)
1058         REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT_H(u32EngId, u32PidFltId);
1059         return ((HAL_REG32_IndR((REG32 *)pPidFilter) & TSP_PIDFLT_SECFLT_MASK) >> TSP_PIDFLT_SECFLT_SHFT);
1060         #else
1061         //printf("[%s][%d] u32EngId %ld, u32PidFltId %lx, PIDFLT %lx\n", __FUNCTION__, __LINE__, u32EngId, u32PidFltId, _u32PidFlt_H[u32PidFltId-TSP_PIDFLT_NUM]);
1062         return ((_u32PidFlt_H[u32PidFltId-TSP_PIDFLT_NUM] & TSP_PIDFLT_SECFLT_MASK) >> TSP_PIDFLT_SECFLT_SHFT);
1063         #endif
1064     }
1065 }
1066 
HAL_TSP_PidFlt_SelFltSource(MS_U32 u32EngId,MS_U32 u32PidFltId,MS_U32 u32FltSource)1067 void HAL_TSP_PidFlt_SelFltSource(MS_U32 u32EngId, MS_U32 u32PidFltId, MS_U32 u32FltSource)
1068 {
1069     REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT(u32EngId, u32PidFltId);
1070 
1071     if(u32PidFltId < TSP_PIDFLT_NUM)
1072     {
1073         HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_IN_MASK) | (u32FltSource & TSP_PIDFLT_IN_MASK));
1074     }
1075     else
1076     {
1077         #if (SWPATCH_FOR_READ_PIDFLT == 0)
1078         HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_IN_MASK) | (u32FltSource & TSP_PIDFLT_IN_MASK));
1079         #else
1080         _u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM] = ((_u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM] & ~TSP_PIDFLT_IN_MASK) | (u32FltSource & TSP_PIDFLT_IN_MASK));
1081         //printf("[%s][%d] u32EngId %ld, u32PidFltId %lx, u32FltSource %lx PIDFLT %lx\n", __FUNCTION__, __LINE__, u32EngId, u32PidFltId, u32FltSource, _u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM]);
1082         HAL_REG32_IndW((REG32 *)pPidFilter, _u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM]);
1083         #endif
1084     }
1085 }
1086 
HAL_TSP_PidFlt_SetFltSrcStreamID(MS_U32 u32EngId,MS_U32 u32PidFltId,MS_U32 u32SrcStrId)1087 void HAL_TSP_PidFlt_SetFltSrcStreamID(MS_U32 u32EngId, MS_U32 u32PidFltId, MS_U32 u32SrcStrId)
1088 {
1089     REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT_H(u32EngId, u32PidFltId);
1090 
1091     if(u32PidFltId < TSP_PIDFLT_NUM)
1092     {
1093         HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_IN_SRC_MASK) | ((u32SrcStrId << TSP_PIDFLT_IN_SRC_SHFT) & TSP_PIDFLT_IN_SRC_MASK));
1094     }
1095     else
1096     {
1097         #if (SWPATCH_FOR_READ_PIDFLT == 0)
1098         HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_IN_SRC_MASK) | ((u32SrcStrId << TSP_PIDFLT_IN_SRC_SHFT) & TSP_PIDFLT_IN_SRC_MASK));
1099         #else
1100         _u32PidFlt_H[u32PidFltId-TSP_PIDFLT_NUM] = (_u32PidFlt_H[u32PidFltId-TSP_PIDFLT_NUM] & ~TSP_PIDFLT_IN_SRC_MASK) | ((u32SrcStrId << TSP_PIDFLT_IN_SRC_SHFT) & TSP_PIDFLT_IN_SRC_MASK);
1101 
1102         //printf("[%s][%d] u32EngId %ld, u32PidFltId %lx, u32SrcStrId %lx PIDFLT %lx\n", __FUNCTION__, __LINE__, u32EngId, u32PidFltId, u32SrcStrId, _u32PidFlt_L[u32PidFltId-TSP_PIDFLT_NUM]);
1103         HAL_REG32_IndW((REG32 *)pPidFilter, _u32PidFlt_H[u32PidFltId-TSP_PIDFLT_NUM]);
1104         #endif
1105     }
1106 }
1107 
HAL_TSP_PidFlt_SetHWPcrPid(MS_U32 u32EngId,MS_U32 u32PID)1108 void HAL_TSP_PidFlt_SetHWPcrPid(MS_U32 u32EngId, MS_U32 u32PID)
1109 {
1110     _HAL_REG32_W(&(_TspCtrl3[0].PIDFLR_PCR[u32EngId]), (_HAL_REG32_R(&(_TspCtrl3[0].PIDFLR_PCR[u32EngId])) & ~TSP_PIDFLT_PCR_PID_MASK) | u32PID);
1111 }
1112 
HAL_TSP_PidFlt_GetHWPcrPid(MS_U32 u32EngId)1113 MS_U32  HAL_TSP_PidFlt_GetHWPcrPid(MS_U32 u32EngId)
1114 {
1115     return (_HAL_REG32_R(&_TspCtrl3[0].PIDFLR_PCR[u32EngId]) & TSP_PIDFLT_PCR_PID_MASK);
1116 }
1117 
HAL_TSP_PidFlt_HWPcrFlt_Enable(MS_U32 u32EngId,MS_BOOL bEnable)1118 void HAL_TSP_PidFlt_HWPcrFlt_Enable(MS_U32 u32EngId, MS_BOOL bEnable)
1119 {
1120     if(bEnable)
1121     {
1122         _HAL_REG32_W(&(_TspCtrl3[0].PIDFLR_PCR[u32EngId]),
1123                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl3[0].PIDFLR_PCR[u32EngId]), TSP_PIDFLT_PCR_EN));
1124     }
1125     else
1126     {
1127         _HAL_REG32_W(&(_TspCtrl3[0].PIDFLR_PCR[u32EngId]),
1128                 RESET_FLAG1(_HAL_REG32_R(&(_TspCtrl3[0].PIDFLR_PCR[u32EngId])), TSP_PIDFLT_PCR_EN));
1129     }
1130 }
1131 
1132 //--------------------------------------------------------------------------------------------------
1133 // For section filter part
1134 //--------------------------------------------------------------------------------------------------
HAL_TSP_SecFlt_SetType(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_U32 u32FltType)1135 void HAL_TSP_SecFlt_SetType(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_U32 u32FltType)
1136 {
1137     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1138     HAL_REG32_IndW((REG32 *)&pSecFilter->Ctrl, (HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) & ~TSP_SECFLT_TYPE_MASK) | (u32FltType << TSP_SECFLT_TYPE_SHFT));
1139 }
1140 
HAL_TSP_SecFlt_ResetState(MS_U32 u32EngId,MS_U32 u32SecFltId)1141 void HAL_TSP_SecFlt_ResetState(MS_U32 u32EngId, MS_U32 u32SecFltId)
1142 {
1143     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1144     HAL_REG32_IndW((REG32 *)&pSecFilter->Ctrl, HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) & ~(TSP_SECFLT_STATE_MASK));
1145 }
1146 
HAL_TSP_SecFlt_SetRmnCount(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_U32 u32RmnCount)1147 void HAL_TSP_SecFlt_SetRmnCount(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_U32 u32RmnCount)
1148 {
1149     REG_SecFlt* pSecFilter = (REG_SecFlt *)_HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1150     HAL_REG32_IndW((REG32 *)&pSecFilter->RmnReqCnt, (HAL_REG32_IndR((REG32 *)&pSecFilter->RmnReqCnt) & ~TSP_SECFLT_RMNCNT_MASK) |
1151                                     ((u32RmnCount << TSP_SECFLT_RMNCNT_SHFT) & TSP_SECFLT_RMNCNT_MASK));
1152 }
1153 
HAL_TSP_SecFlt_ClrCtrl(MS_U32 u32EngId,MS_U32 u32SecFltId)1154 void HAL_TSP_SecFlt_ClrCtrl(MS_U32 u32EngId, MS_U32 u32SecFltId)
1155 {
1156     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1157     HAL_REG32_IndW((REG32 *)&pSecFilter->Ctrl, 0);
1158 }
1159 
1160 #define ADDR_SWINT2_L           (_u32RegBase+ 0x2db4)
1161 #define ADDR_SWINT2_H           (_u32RegBase+ 0x2db8)
HAL_TSP_SW_INT_STATUS(void)1162 MS_U32 HAL_TSP_SW_INT_STATUS(void)
1163 {
1164     if (_bIsHK)
1165     {
1166         return _HAL_REG32_R(&_TspCtrl[0].SwInt_Stat);
1167     }
1168     else
1169     {
1170         MS_U32 u32SwIntStatus = (MS_U32)(REG16_T(ADDR_SWINT2_L) & 0xFFFF);
1171         u32SwIntStatus |= (((MS_U32)(REG16_T(ADDR_SWINT2_H) & 0xFFFF)) << 16);
1172         return u32SwIntStatus;
1173     }
1174 }
1175 #undef ADDR_SWINT2_L
1176 #undef ADDR_SWINT2_H
1177 
1178 // match mask --> 0 will compare
HAL_TSP_SecFlt_SetMask(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_U8 * pu8Mask)1179 void HAL_TSP_SecFlt_SetMask(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_U8 *pu8Mask)
1180 {
1181     MS_U32 i;
1182     MS_U32 u32Temp;
1183     MS_U32 j;
1184     REG_SecFlt* pSecFilter = (REG_SecFlt *)_HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1185     for (i = 0; i < (TSP_FILTER_DEPTH/sizeof(MS_U32)); i++)
1186     {
1187         j = (i<< 2);
1188         u32Temp =  (pu8Mask[j]) | (pu8Mask[j+ 1] << 8  ) | (pu8Mask[j+ 2] << 16  )| (pu8Mask[j+ 3] << 24);
1189         HAL_REG32_IndW((REG32 *)&pSecFilter->Mask[i], u32Temp);
1190     }
1191 }
1192 
1193 // not match mask --> 1 will compare
HAL_TSP_SecFlt_SetNMask(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_U8 * pu8NMask)1194 void HAL_TSP_SecFlt_SetNMask(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_U8 *pu8NMask)
1195 {
1196     MS_U32 u32Temp;
1197 
1198     // fix using #17 section filter, fw als using filter #17 for NMask pattern writing
1199     REG_SecFlt* ptempSecFlt = _HAL_TSP_SECFLT(u32EngId, TSP_NMATCH_FLTID);
1200 
1201     u32Temp =  (pu8NMask[0x0]) | (pu8NMask[0x1] << 8  ) | (pu8NMask[0x2] << 16  )| (pu8NMask[0x3] << 24);
1202     HAL_REG32_IndW(&(ptempSecFlt->Match[0]), u32Temp);
1203 
1204     u32Temp =  (pu8NMask[0x4]) | (pu8NMask[0x5] << 8  ) | (pu8NMask[0x6] << 16  )| (pu8NMask[0x7] << 24);
1205     HAL_REG32_IndW(&(ptempSecFlt->Match[1]), u32Temp);
1206 
1207     u32Temp =  (pu8NMask[0x8]) | (pu8NMask[0x9] << 8  ) | (pu8NMask[0xa] << 16  )| (pu8NMask[0xb] << 24);
1208     HAL_REG32_IndW(&(ptempSecFlt->Match[2]), u32Temp);
1209 
1210     u32Temp =  (pu8NMask[0xc]) | (pu8NMask[0xd] << 8  ) | (pu8NMask[0xe] << 16  )| (pu8NMask[0xf] << 24);
1211     HAL_REG32_IndW(&(ptempSecFlt->Match[3]), u32Temp);
1212 
1213     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_NMATCH | u32SecFltId);
1214 
1215     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
1216 }
1217 
HAL_TSP_SecFlt_SetMatch(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_U8 * pu8Match)1218 void HAL_TSP_SecFlt_SetMatch(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_U8 *pu8Match)
1219 {
1220     MS_U32 i;
1221     MS_U32 u32Temp;
1222     MS_U32 j;
1223 
1224     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1225     for (i = 0; i < (TSP_FILTER_DEPTH/sizeof(MS_U32)); i++)
1226     {
1227         j = (i<< 2);
1228         u32Temp =  (pu8Match[j]) | (pu8Match[j+ 1] << 8  ) | (pu8Match[j+ 2] << 16  )| (pu8Match[j+ 3] << 24);
1229         HAL_REG32_IndW((REG32 *)&pSecFilter->Match[i], u32Temp);
1230     }
1231 }
1232 
HAL_TSP_SecFlt_SetReqCount(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_U32 u32ReqCount)1233 void HAL_TSP_SecFlt_SetReqCount(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_U32 u32ReqCount)
1234 {
1235     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1236 
1237     HAL_REG32_IndW((REG32 *)&pSecFilter->RmnReqCnt, (HAL_REG32_IndR((REG32 *)&pSecFilter->RmnReqCnt) & ~TSP_SECFLT_REQCNT_MASK) |
1238                                     ((u32ReqCount << TSP_SECFLT_REQCNT_SHFT) & TSP_SECFLT_REQCNT_MASK));
1239 }
1240 
HAL_TSP_SecFlt_SetMode(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_U32 u32SecFltMode)1241 void HAL_TSP_SecFlt_SetMode(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_U32 u32SecFltMode)
1242 {
1243     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1244     HAL_REG32_IndW((REG32 *)&pSecFilter->Ctrl, (HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) & ~TSP_SECFLT_MODE_MASK) | ((u32SecFltMode << TSP_SECFLT_MODE_SHFT) & TSP_SECFLT_MODE_MASK));
1245 }
1246 
HAL_TSP_SecFlt_GetCRC32(MS_U32 u32EngId,MS_U32 u32SecFltId)1247 MS_U32 HAL_TSP_SecFlt_GetCRC32(MS_U32 u32EngId, MS_U32 u32SecFltId)
1248 {
1249     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1250     return HAL_REG32_IndR((REG32 *)&pSecFilter->CRC32);
1251 }
1252 
HAL_TSP_SecFlt_GetState(MS_U32 u32EngId,MS_U32 u32SecFltId)1253 MS_U32 HAL_TSP_SecFlt_GetState(MS_U32 u32EngId, MS_U32 u32SecFltId)
1254 {
1255     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1256     return ((HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) & TSP_SECFLT_STATE_MASK) >> TSP_SECFLT_STATE_SHFT);
1257 }
1258 
HAL_TSP_SecFlt_GetMode(MS_U32 u32EngId,MS_U32 u32SecFltId)1259 MS_U32 HAL_TSP_SecFlt_GetMode(MS_U32 u32EngId, MS_U32 u32SecFltId)
1260 {
1261     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1262     return ((HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) & TSP_SECFLT_MODE_MASK) >> TSP_SECFLT_MODE_SHFT);
1263 }
1264 
HAL_TSP_SecFlt_PcrReset(MS_U32 u32EngId,MS_U32 u32SecFltId)1265 void HAL_TSP_SecFlt_PcrReset(MS_U32 u32EngId, MS_U32 u32SecFltId)
1266 {
1267     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1268     HAL_REG32_IndW((REG32 *)&pSecFilter->Ctrl, HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) | TSP_SECFLT_PCRRST);
1269 }
1270 
HAL_TSP_SecFlt_VerReset(MS_U32 u32SecFltId)1271 void HAL_TSP_SecFlt_VerReset(MS_U32 u32SecFltId)
1272 {
1273     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_VER_RESET | u32SecFltId);
1274     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
1275 }
1276 
HAL_TSP_SecFlt_SetDataAddr(MS_U32 u32DataAddr)1277 void HAL_TSP_SecFlt_SetDataAddr(MS_U32 u32DataAddr)
1278 {
1279     MS_U32 u32cmd = TSP_MCU_CMD_MEM_HIGH_ADDR | ((u32DataAddr & 0xFFFF0000) >> 16);
1280 
1281     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, u32cmd);
1282     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
1283 
1284     u32cmd = TSP_MCU_CMD_MEM_LOW_ADDR | (u32DataAddr & 0xFFFF);
1285     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, u32cmd);
1286     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
1287 }
1288 
1289 
1290 //--------------------------------------------------------------------------------------------------
1291 //  For section buffer part
1292 //--------------------------------------------------------------------------------------------------
1293 // To avoid SW read hidden HW byte enable information.
1294 #define _TSP_SEC_BUF_ADDR_START(pSecFilter)     (TSP_SECFLT_BUFSTART_MASK & HAL_REG32_IndR((REG32 *)&((pSecFilter)->BufStart)))
1295 
HAL_TSP_SecBuf_SetBuffer(MS_U32 u32EngId,MS_U32 u32SecBufId,MS_U32 u32StartAddr,MS_U32 u32BufSize)1296 void HAL_TSP_SecBuf_SetBuffer(MS_U32 u32EngId, MS_U32 u32SecBufId, MS_U32 u32StartAddr, MS_U32 u32BufSize)
1297 {
1298     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1299     HAL_REG32_IndW((REG32 *)&pSecBuf->BufStart, u32StartAddr);
1300     HAL_REG32_IndW((REG32 *)&pSecBuf->BufEnd, u32StartAddr + u32BufSize);
1301 }
1302 
HAL_TSP_SecBuf_SetBufRead(MS_U32 u32EngId,MS_U32 u32SecBufId,MS_U32 u32ReadAddr)1303 void HAL_TSP_SecBuf_SetBufRead(MS_U32 u32EngId, MS_U32 u32SecBufId, MS_U32 u32ReadAddr)
1304 {
1305     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1306     HAL_REG32_IndW((REG32 *)&pSecBuf->BufRead, u32ReadAddr);
1307 }
1308 
HAL_TSP_SecBuf_GetBufStart(MS_U32 u32EngId,MS_U32 u32SecBufId)1309 MS_U32 HAL_TSP_SecBuf_GetBufStart(MS_U32 u32EngId, MS_U32 u32SecBufId)
1310 {
1311     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1312     return _TSP_SEC_BUF_ADDR_START(pSecBuf);
1313 }
1314 
HAL_TSP_SecBuf_GetBufEnd(MS_U32 u32EngId,MS_U32 u32SecBufId)1315 MS_U32 HAL_TSP_SecBuf_GetBufEnd(MS_U32 u32EngId, MS_U32 u32SecBufId)
1316 {
1317     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1318     return HAL_REG32_IndR((REG32 *)&pSecBuf->BufEnd);
1319 }
1320 
HAL_TSP_SecBuf_GetBufCur(MS_U32 u32EngId,MS_U32 u32SecBufId)1321 MS_U32 HAL_TSP_SecBuf_GetBufCur(MS_U32 u32EngId, MS_U32 u32SecBufId)
1322 {
1323     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1324     return HAL_REG32_IndR((REG32 *)&pSecBuf->BufCur);
1325 }
1326 
HAL_TSP_SecBuf_ResetBuffer(MS_U32 u32EngId,MS_U32 u32SecBufId)1327 void HAL_TSP_SecBuf_ResetBuffer(MS_U32 u32EngId, MS_U32 u32SecBufId)
1328 {
1329     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1330 
1331     HAL_REG32_IndW((REG32 *)&pSecBuf->BufCur, _TSP_SEC_BUF_ADDR_START(pSecBuf));
1332     HAL_REG32_IndW((REG32 *)&pSecBuf->BufRead, _TSP_SEC_BUF_ADDR_START(pSecBuf));
1333     HAL_REG32_IndW((REG32 *)&pSecBuf->BufWrite, _TSP_SEC_BUF_ADDR_START(pSecBuf));
1334 }
1335 
HAL_TSP_SecBuf_GetBufRead(MS_U32 u32EngId,MS_U32 u32SecBufId)1336 MS_U32  HAL_TSP_SecBuf_GetBufRead(MS_U32 u32EngId, MS_U32 u32SecBufId)
1337 {
1338     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1339     return HAL_REG32_IndR((REG32 *)&pSecBuf->BufRead);
1340 }
1341 
HAL_TSP_SecBuf_GetBufWrite(MS_U32 u32EngId,MS_U32 u32SecBufId)1342 MS_U32  HAL_TSP_SecBuf_GetBufWrite(MS_U32 u32EngId, MS_U32 u32SecBufId)
1343 {
1344     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1345     return HAL_REG32_IndR((REG32 *)&pSecBuf->BufWrite);
1346 }
1347 
1348 #undef _TSP_SEC_BUF_ADDR_START
1349 
HAL_TSP_SecBuf_SetBufRead_tmp(MS_U32 u32EngId,MS_U32 u32SecBufId,MS_U32 u32ReadAddr)1350 void HAL_TSP_SecBuf_SetBufRead_tmp(MS_U32 u32EngId, MS_U32 u32SecBufId, MS_U32 u32ReadAddr)
1351 {
1352     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1353     HAL_REG32_IndW_tmp((REG32 *)&pSecBuf->BufRead, u32ReadAddr);
1354 }
1355 
HAL_TSP_SecBuf_GetBufWrite_tmp(MS_U32 u32EngId,MS_U32 u32SecBufId)1356 MS_U32  HAL_TSP_SecBuf_GetBufWrite_tmp(MS_U32 u32EngId, MS_U32 u32SecBufId)
1357 {
1358     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1359     return HAL_REG32_IndR_tmp((REG32 *)&pSecBuf->BufWrite);
1360 }
1361 
1362 //--------------------------------------------------------------------------------------------------
1363 // For DMA part
1364 //--------------------------------------------------------------------------------------------------
1365 //[HW LIMIT][HW TODO] TsDma pause can not be access by TSP CPU
1366 //[HW LIMIT][HW TODO] TsDma pause it hard to control because read/write in different register
1367 //[HW LIMIT][HW TODO] When setting TsDma it should be disable interrupt
HAL_TSP_TsDma_SetDelay(MS_U32 u32Delay)1368 void HAL_TSP_TsDma_SetDelay(MS_U32 u32Delay)
1369 {
1370     // Richard: the file in timer in Uranus is 24 bits.
1371     //          to simplify the process, writing 32 bits directly.
1372     //          HW will truncate the high 8 bits out, and use low 24 bits only (from Albert Lin)
1373     if(u32Delay == 0)
1374     {
1375         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
1376             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_FILEIN_BYTETIMER_ENABLE));
1377     }
1378     else
1379     {
1380         _HAL_REG32_W(&_TspCtrl[0].TsFileIn_Timer, (u32Delay & TSP_FILE_TIMER_MASK));
1381         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
1382             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_FILEIN_BYTETIMER_ENABLE));
1383     }
1384 
1385 }
1386 
HAL_TSP_CmdQ_TsDma_SetAddr(MS_U32 u32StreamAddr)1387 void HAL_TSP_CmdQ_TsDma_SetAddr(MS_U32 u32StreamAddr)
1388 {
1389     _HAL_REG32_W(&_TspCtrl[0].TsDma_Addr, u32StreamAddr);
1390 }
1391 
HAL_TSP_CmdQ_TsDma_SetSize(MS_U32 u32StreamSize)1392 MS_BOOL HAL_TSP_CmdQ_TsDma_SetSize(MS_U32 u32StreamSize)
1393 {
1394     _HAL_REG32_W(&_TspCtrl[0].TsDma_Size, u32StreamSize);
1395     return TRUE;
1396 }
1397 
HAL_TSP_CmdQ_TsDma_Start(MS_U32 u32TsDmaCtrl)1398 void HAL_TSP_CmdQ_TsDma_Start(MS_U32 u32TsDmaCtrl)
1399 {
1400     // enable filein byte timer
1401     //_HAL_REG32_W(&_TspCtrl[0].reg15b4,
1402     //        SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_FILEIN_BYTETIMER_ENABLE));
1403     REG16_T(ADDR_MOBF_FILEIN) = _16MobfKey;
1404     _HAL_REG32_W(&_TspCtrl[0].TsDma_Ctrl_CmdQ, TSP_TSDMA_CTRL_START);
1405 }
1406 
HAL_TSP_TsDma_Pause(void)1407 void HAL_TSP_TsDma_Pause(void)
1408 {
1409     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
1410             SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILEIN_PAUSE));
1411 }
1412 
HAL_TSP_TsDma_Resume(void)1413 void HAL_TSP_TsDma_Resume(void)
1414 {
1415     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
1416             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILEIN_PAUSE));
1417 }
1418 
HAL_TSP_CmdQ_TsDma_GetState(void)1419 MS_U32 HAL_TSP_CmdQ_TsDma_GetState(void)
1420 {
1421     return (HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ), TSP_TSDMA_CTRL_START) |
1422             (MS_U32)HAS_FLAG(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILEIN_PAUSE));
1423 }
1424 
HAL_TSP_CmdQ_EmptyCount(void)1425 MS_U32 HAL_TSP_CmdQ_EmptyCount(void)
1426 {
1427     return (TSP_CMDQ_SIZE - ((_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ) & TSP_CMDQ_CNT_MASK)>>TSP_CMDQ_CNT_SHFT));
1428 }
1429 
HAL_TSP_SetCtrlMode(MS_U32 u32EngId,MS_U32 u32Mode,MS_U32 u32TsIfId)1430 void HAL_TSP_SetCtrlMode(MS_U32 u32EngId, MS_U32 u32Mode, MS_U32 u32TsIfId)
1431 {
1432     // Control bits:
1433     // TSP_CTRL_CPU_EN
1434     // TSP_CTRL_SW_RST
1435     // TSP_CTRL_MEM_DMA_EN
1436 
1437     // for file in related setting
1438     if(u32Mode == 0)
1439     {
1440         _HAL_REG32_W(&_TspCtrl[u32EngId].TSP_Ctrl,
1441                 (_HAL_REG32_R(&_TspCtrl[u32EngId].TSP_Ctrl) & ~(TSP_CTRL_CPU_EN   |
1442                                                                 TSP_CTRL_SW_RST   |
1443                                                                 TSP_CTRL_TSFILE_EN)));
1444         HAL_TSP_filein_enable(FALSE);
1445     }
1446     else
1447     {
1448         _HAL_REG32_W(&_TspCtrl[u32EngId].TSP_Ctrl,
1449                 (_HAL_REG32_R(&_TspCtrl[u32EngId].TSP_Ctrl) & ~(TSP_CTRL_CPU_EN   |
1450                                                                 TSP_CTRL_SW_RST   |
1451                                                                 //TSP_CTRL_TSFILE_EN |
1452 //[URANUS]                                                      TSP_CTRL_CLK_GATING_DISABLE |
1453 // @FIXME: Richard ignore this at this stage
1454                                                                 0                  )) | u32Mode);
1455         if(HAS_FLAG(u32Mode, TSP_CTRL_TSFILE_EN))
1456             HAL_TSP_filein_enable(TRUE);
1457     }
1458 
1459     if (TSP_IF_NUM > u32TsIfId)
1460     {
1461         _HAL_TSP_tsif_select(HAS_FLAG(u32Mode, (MS_U8)(u32TsIfId & 0xFF)));
1462     }
1463 }
1464 
1465 //--------------------------------------------------------------------------------------------------
1466 //  For PVR part
1467 //  0: PVR1      1: PVR2      2: PVR_CB
1468 //--------------------------------------------------------------------------------------------------
HAL_TSP_PVR_SetBuffer(MS_U8 u8PVRId,MS_U32 u32BufStart0,MS_U32 u32BufStart1,MS_U32 u32BufSize0,MS_U32 u32BufSize1)1469 void HAL_TSP_PVR_SetBuffer(MS_U8 u8PVRId, MS_U32 u32BufStart0, MS_U32 u32BufStart1, MS_U32 u32BufSize0, MS_U32 u32BufSize1)
1470 {
1471     MS_U32  u32BufEnd = u32BufStart0+ u32BufSize0;
1472 
1473     switch(u8PVRId)
1474     {
1475         case 0:
1476         default:
1477             _HAL_REG32_W(&_TspCtrl[0].TsRec_Head, (u32BufStart0>> MIU_BUS) & TSP_STR2MI2_ADDR_MASK);
1478             _HAL_REG32_W(&_TspCtrl[0].TsRec_Tail, (u32BufEnd>> MIU_BUS) & TSP_STR2MI2_ADDR_MASK);
1479 
1480             u32BufEnd = u32BufStart1+ u32BufSize1;
1481 
1482 #define ADDR_PVR_HEAD20         (_u32RegBase+ 0x2a04)
1483 #define ADDR_PVR_HEAD21         (_u32RegBase+ 0x2a08)
1484 #define ADDR_PVR_MID20          (_u32RegBase+ 0x2a0c)
1485 #define ADDR_PVR_MID21          (_u32RegBase+ 0x2a10)
1486 #define ADDR_PVR_TAIL20         (_u32RegBase+ 0x2a14)
1487 #define ADDR_PVR_TAIL21         (_u32RegBase+ 0x2a18)
1488     REG16_T(ADDR_PVR_HEAD20)=   (u32BufStart1>> MIU_BUS) & (TSP_HW_PVR_BUF_HEAD20_MASK >> TSP_HW_PVR_BUF_HEAD20_SHFT);
1489     REG16_T(ADDR_PVR_HEAD21)=   (u32BufStart1>> (MIU_BUS+ 16)) & TSP_HW_PVR_BUF_HEAD21_MASK;
1490     REG16_T(ADDR_PVR_TAIL20)=   (u32BufEnd>> MIU_BUS) & (TSP_HW_PVR_BUF_TAIL20_MASK >> TSP_HW_PVR_BUF_TAIL20_SHFT);
1491     REG16_T(ADDR_PVR_TAIL21)=   (u32BufEnd>> (MIU_BUS+ 16)) & TSP_HW_PVR_BUF_TAIL21_MASK;
1492 #undef ADDR_PVR_HEAD20
1493 #undef ADDR_PVR_HEAD21
1494 #undef ADDR_PVR_MID20
1495 #undef ADDR_PVR_MID21
1496 #undef ADDR_PVR_TAIL20
1497 #undef ADDR_PVR_TAIL21
1498 
1499             _HAL_REG32_W(&_TspCtrl[0].reg15b4,
1500                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_PVR1_PINGPONG));
1501             break;
1502         case 1:
1503             _HAL_REG32_W(&_TspCtrl[0].Str2mi_head1_pvr2, (u32BufStart0>> MIU_BUS) & TSP_STR2MI2_ADDR_MASK);
1504             _HAL_REG32_W(&_TspCtrl[0].Str2mi_tail1_pvr2, (u32BufEnd>> MIU_BUS) & TSP_STR2MI2_ADDR_MASK);
1505             _HAL_REG32_W(&_TspCtrl[0].Str2mi_head2_pvr2, (u32BufStart1>> MIU_BUS) & TSP_STR2MI2_ADDR_MASK);
1506             u32BufEnd = u32BufStart1+ u32BufSize1;
1507             _HAL_REG32_W(&_TspCtrl[0].Str2mi_tail2_pvr2, (u32BufEnd>> MIU_BUS) & TSP_STR2MI2_ADDR_MASK);
1508 
1509             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config,
1510                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR2_REG_PINGPONG_EN));
1511             break;
1512 
1513     }
1514 
1515     // flush PVR buffer
1516     HAL_TSP_PVR_WaitFlush(u8PVRId);
1517 
1518 }
1519 
HAL_TSP_PVR_Enable(MS_U8 u8PVRId,MS_BOOL bEnable)1520 void HAL_TSP_PVR_Enable(MS_U8 u8PVRId, MS_BOOL bEnable)
1521 {
1522     REG32 *pRegPVREn = 0;
1523     REG32 *pRegTSIFEn = 0;
1524     REG32 *pRegBurstLen = 0;
1525     MS_U32 u32PVRFlag = 0, u32TSIFFlag = 0, u32BurstLen = 0, u32BurstMask = 0;
1526 
1527     //set burst len = 1
1528     switch(u8PVRId)
1529     {
1530         case 0:
1531         default:
1532             pRegBurstLen = &_TspCtrl[0].reg15b4;
1533             u32BurstLen  = TSP_BURST_LEN_4;
1534             u32BurstMask = TSP_BURST_LEN_MASK;
1535             pRegPVREn = &_TspCtrl[0].Hw_Config4;
1536             u32PVRFlag = TSP_HW_CFG4_PVR_ENABLE;
1537             pRegTSIFEn = &_TspCtrl[0].Hw_Config4;
1538             u32TSIFFlag = TSP_HW_CFG4_TSIF1_ENABLE;
1539             break;
1540         case 1:
1541             pRegBurstLen = &_TspCtrl[0].PVR2_Config;
1542             u32BurstLen  = TSP_PVR2_BURST_LEN_4;
1543             u32BurstMask = TSP_PVR2_BURST_LEN_MASK;
1544             pRegPVREn = &_TspCtrl[0].PVR2_Config;
1545             u32PVRFlag = TSP_PVR2_STR2MIU_EN;
1546             pRegTSIFEn = &_TspCtrl[0].PVR2_Config;
1547             u32TSIFFlag = TSP_TSIF2_ENABLE;
1548             break;
1549     }
1550 
1551     if (bEnable)
1552     {
1553         _HAL_REG32_W(pRegBurstLen, (_HAL_REG32_R(pRegBurstLen) & ~u32BurstMask) | u32BurstLen);
1554         _HAL_REG32_W(pRegPVREn, SET_FLAG1(_HAL_REG32_R(pRegPVREn), u32PVRFlag));
1555         _HAL_REG32_W(pRegTSIFEn, SET_FLAG1(_HAL_REG32_R(pRegTSIFEn), u32TSIFFlag));
1556     }
1557     else
1558     {
1559         _HAL_REG32_W(pRegPVREn, RESET_FLAG1(_HAL_REG32_R(pRegPVREn), u32PVRFlag));
1560         //_HAL_REG32_W(pRegTSIFEn, RESET_FLAG1(_HAL_REG32_R(pRegTSIFEn), u32TSIFFlag));
1561     }
1562 }
1563 
HAL_TSP_PVR_Reset(MS_U8 u8PVRIndex)1564 void HAL_TSP_PVR_Reset(MS_U8 u8PVRIndex)
1565 {
1566     // Richard: @FIXME:
1567     // Don't know PVR "reset" definition. call flush instead.
1568     HAL_TSP_PVR_WaitFlush(u8PVRIndex);
1569 }
1570 
1571 //Only PVR1 support Old record all mode, and must disable remove packet demux bit
1572 //0: PVR1   1: PVR2     3: PVRCB
HAL_TSP_PVR_All(MS_U8 u8PVRId,MS_BOOL bPvrAll,MS_BOOL bWithNull,MS_BOOL bOldMode)1573 void HAL_TSP_PVR_All(MS_U8 u8PVRId, MS_BOOL bPvrAll, MS_BOOL bWithNull, MS_BOOL bOldMode)
1574 {
1575     REG32 *pReg = 0;
1576     MS_U32 u32flag = 0;
1577     REG32 *pRegPidBypass = 0;
1578     MS_U32 u32PidBypassFlag = 0;
1579 
1580     switch(u8PVRId)
1581     {
1582         case 0:
1583         default:
1584             pRegPidBypass = &_TspCtrl[0].reg15b4;
1585             u32PidBypassFlag = TSP_PVR_PID_BYPASS;
1586             pReg = &_TspCtrl[0].HW2_Config3;
1587             if(bOldMode)
1588                 u32flag = TSP_REC_ALL_OLD;
1589             else
1590             {
1591                 u32flag = TSP_PVR1_REC_ALL_EN;
1592                 if(bWithNull)
1593                     u32flag |= TSP_REC_NULL;
1594             }
1595             break;
1596         case 1:
1597             pRegPidBypass = &_TspCtrl[0].reg15b4;
1598             u32PidBypassFlag = TSP_PVR_PID_BYPASS2;
1599             pReg = &_TspCtrl[0].HW2_Config3;
1600             u32flag = TSP_PVR2_REC_ALL_EN;
1601             if(bWithNull)
1602                 u32flag |= TSP_REC_NULL;
1603             break;
1604     }
1605 
1606     _HAL_REG32_W(pRegPidBypass, SET_FLAG1(_HAL_REG32_R(pRegPidBypass), u32PidBypassFlag));
1607 
1608     if (bPvrAll)
1609     {
1610         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32flag));
1611     }
1612     else
1613     {
1614         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32flag));
1615     }
1616 }
1617 
HAL_TSP_PVR_BypassHeader_En(MS_U8 u8PVRId,MS_BOOL bBypassHD)1618 void HAL_TSP_PVR_BypassHeader_En(MS_U8 u8PVRId, MS_BOOL bBypassHD)
1619 {
1620     MS_U32 u32flag = 0;
1621 
1622     switch(u8PVRId)
1623     {
1624         case 0:
1625             u32flag = TSP_PVR_PID_BYPASS;
1626             break;
1627         case 1:
1628             u32flag = TSP_PVR_PID_BYPASS2;
1629             break;
1630         default:
1631             return;
1632     }
1633 
1634     if(bBypassHD)
1635     {
1636         _HAL_REG32_W(&_TspCtrl[0].reg15b4, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), u32flag));
1637     }
1638     else
1639     {
1640         _HAL_REG32_W(&_TspCtrl[0].reg15b4, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), u32flag));
1641     }
1642 }
1643 
HAL_TSP_SetPKTSize(MS_U32 u32PKTSize)1644 void HAL_TSP_SetPKTSize(MS_U32 u32PKTSize)
1645 {
1646     if(u32PKTSize == 0x82) // RVU
1647     {
1648         _HAL_REG32_W(&_TspCtrl[0].reg163C,
1649                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg163C), (TSP_PKT130_EN | TSP_PKT130_TEI_EN)));
1650 
1651     }
1652     else if(u32PKTSize == 0x86) // RVU with timestamp
1653     {
1654         _HAL_REG32_W(&_TspCtrl[0].reg163C,
1655                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg163C), (TSP_PKT130_EN | TSP_PKT130_TEI_EN)));
1656 
1657         _HAL_REG32_W(&_TspCtrl[0].reg160C,
1658                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_FILEIN192_EN));
1659     }
1660     else
1661     {
1662         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_ALT_TS_SIZE));
1663         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, (_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein)&~TSP_PKT_SIZE_MASK)|(TSP_PKT_SIZE_MASK&u32PKTSize));
1664     }
1665 }
1666 
1667 // Set 1 to disable file-in timestamp block scheme, bypass timestamp
HAL_TSP_FileIn_192BlockScheme_En(MS_BOOL bEnable)1668 void HAL_TSP_FileIn_192BlockScheme_En(MS_BOOL bEnable)
1669 {
1670     if (!bEnable)
1671     {
1672         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | TSP_PKT192_BLK_DIS_FIN);
1673     }
1674     else
1675     {
1676         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) & ~TSP_PKT192_BLK_DIS_FIN);
1677     }
1678 }
1679 
HAL_TSP_STC64_Mode_En(MS_BOOL bEnable)1680 void HAL_TSP_STC64_Mode_En(MS_BOOL bEnable)
1681 {
1682     if (bEnable)
1683     {
1684         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | TSP_SYSTIME_MODE_STC64);
1685     }
1686     else
1687     {
1688         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) & ~TSP_SYSTIME_MODE_STC64);
1689     }
1690 }
1691 
1692 // For MIPS highway issue (last_done_Z), HW update PVR write pointer only when DMA done,
1693 // So buffer start address will not update to write pointer at first time.
HAL_TSP_PVR_GetBufWrite(MS_U8 u8PVRId)1694 MS_U32  HAL_TSP_PVR_GetBufWrite(MS_U8 u8PVRId)
1695 {
1696     MS_U32 u32value = 0;
1697 
1698     _HAL_REG32_W(&_TspCtrl[0].CH_BW_CTRL,
1699         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].CH_BW_CTRL), TSP_CH_BW_WP_LD));
1700     switch(u8PVRId)
1701     {
1702         case 0:
1703             u32value = _HAL_REG32_R(&_TspCtrl[0].TsRec_Mid_PVR1_WPTR);
1704             break;
1705         case 1:
1706             u32value = _HAL_REG32_R(&_TspCtrl[0].Str2mi_mid1_wptr_pvr2);
1707             break;
1708     }
1709     _HAL_REG32_W(&_TspCtrl[0].CH_BW_CTRL,
1710         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].CH_BW_CTRL), TSP_CH_BW_WP_LD));
1711 
1712     return (u32value << MIU_BUS);
1713 
1714 }
1715 
HAL_TSP_PVR_WaitFlush(MS_U8 u8PVRId)1716 void HAL_TSP_PVR_WaitFlush(MS_U8 u8PVRId)
1717 {
1718     REG32 *pReg = 0;
1719     MS_U32 u32flag = 0;
1720 
1721     switch(u8PVRId)
1722     {
1723         default:
1724         case 0:
1725             pReg = &_TspCtrl[0].Hw_Config4;
1726             u32flag = TSP_HW_CFG4_PVR_FLUSH;
1727             break;
1728         case 1:
1729             pReg = &_TspCtrl[0].PVR2_Config;
1730             u32flag = TSP_PVR2_STR2MIU_RST_WADR;
1731             break;
1732     }
1733 
1734     _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32flag));
1735     _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32flag));
1736 }
1737 
HAL_TSP_PVR_Src_Select(MS_U8 u8PVRId,MS_U32 u32Src)1738 void HAL_TSP_PVR_Src_Select(MS_U8 u8PVRId, MS_U32 u32Src)
1739 {
1740 #if (TSP_HWPCR_BY_HK == 1 || !defined(HWPCR_ENABLE))
1741         switch(u8PVRId)
1742         {
1743             case 0:
1744                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_PVR1_SRC_MASK)| (u32Src << TSP_PVR1_SRC_SHIFT));
1745                 break;
1746             case 1:
1747                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_PVR2_SRC_MASK)| (u32Src << TSP_PVR2_SRC_SHIFT));
1748                 break;
1749             default:
1750                 return;
1751         }
1752 #else
1753         switch(u8PVRId)
1754         {
1755             case 0:
1756                 _HAL_TSP_CMD_Write_HWPCR_Reg(TSP_PVR1_SRC_MASK, (u32Src << TSP_PVR1_SRC_SHIFT));
1757                 break;
1758             case 1:
1759                 _HAL_TSP_CMD_Write_HWPCR_Reg(TSP_PVR2_SRC_MASK, (u32Src << TSP_PVR2_SRC_SHIFT));
1760                 break;
1761             default:
1762                 return;
1763         }
1764 #endif
1765 
1766 }
1767 
HAL_TSP_PVR_StartingEngs_Get(MS_U32 u32PktDmxSrc)1768 MS_U32 HAL_TSP_PVR_StartingEngs_Get(MS_U32 u32PktDmxSrc)
1769 {
1770     MS_U32 u32Flag = 0;
1771     MS_U32 u32Src;
1772 
1773     u32Src = 1 << ((_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & TSP_PVR1_SRC_MASK) >> TSP_PVR1_SRC_SHIFT);
1774     if(u32PktDmxSrc & u32Src)
1775     {
1776         if(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4) & TSP_HW_CFG4_PVR_ENABLE)
1777             u32Flag = 1;
1778     }
1779     u32Src = 1 << ((_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & TSP_PVR2_SRC_MASK) >> TSP_PVR2_SRC_SHIFT);
1780     if(u32PktDmxSrc & u32Src)
1781     {
1782         if(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config) & TSP_PVR2_STR2MIU_EN)
1783             u32Flag |= 2;
1784     }
1785 
1786     return u32Flag;
1787 }
1788 
HAL_TSP_PVR_IsEnabled(MS_U32 u32EngId)1789 MS_BOOL HAL_TSP_PVR_IsEnabled(MS_U32 u32EngId)
1790 {
1791     if(u32EngId == 0)
1792     {
1793         return ((_HAL_REG32_R(&_TspCtrl[0].Hw_Config4) & TSP_HW_CFG4_PVR_ENABLE) > 0);
1794     }
1795     else if(u32EngId == 1)
1796     {
1797         return ((_HAL_REG32_R(&_TspCtrl[0].PVR2_Config) & TSP_PVR2_STR2MIU_EN) > 0);
1798     }
1799     else
1800     {
1801         return FALSE;
1802     }
1803 
1804 }
1805 
1806 static MS_U32 _u32FlowPadMap[TSP_IF_NUM] = { 0x0, 0x0, 0x0}; //TS0, TS1, TSFI
1807 //--------------------------------------------------------------------------------------------------
1808 // For pad select part
1809 //--------------------------------------------------------------------------------------------------
HAL_TSP_TsOutPadCfg(MS_U32 u32OutPad,MS_U32 u32OutPadMode,MS_U32 u32InPad,MS_BOOL bInParallel)1810 MS_BOOL HAL_TSP_TsOutPadCfg(MS_U32 u32OutPad, MS_U32 u32OutPadMode, MS_U32 u32InPad, MS_BOOL bInParallel)
1811 {
1812     MS_U16 u16Data = 0;
1813     MS_U16 u16S2pCfg = 0, u16clk = 0;
1814 
1815     //printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
1816     //printf("[%s\[%d] u32OutPad %ld u32InPad %ld bInParallel %d\n", __FUNCTION__, __LINE__, u32OutPad, u32InPad, (int)bInParallel);
1817 
1818     if(u32OutPad != TSP_MUX_TS1)
1819     {
1820         return FALSE;
1821     }
1822 
1823     // S2P setting
1824     if((u32InPad != TSP_MUX_INDEMOD) && (u32InPad != TSP_MUX_TSO))
1825     {
1826         u16S2pCfg = TSP_TSO0_REG(REG_TSO0_CFG0) | ((REG_TSO0_CFG0_S2PCFG_S2P_EN|REG_TSO0_CFG0_S2PCFG_S2P_TSSIN_C0) << REG_TSO0_CFG0_S2P0_CFG_SHIFT);
1827 
1828         if(u32InPad == TSP_MUX_NONE)
1829         {
1830             TSP_TSO0_REG(REG_TSO0_CFG0) &= ~(REG_TSO0_CFG0_S2PCFG_S2P_EN << REG_TSO0_CFG0_S2P0_CFG_SHIFT);
1831             return TRUE;
1832         }
1833 
1834         //BYPASS_S2P setting select
1835         if(bInParallel)
1836         {
1837             u16S2pCfg |= REG_TSO0_CFG0_S2PCFG_S2P_BYPASS;
1838         }
1839         else
1840         {
1841             u16S2pCfg &= ~REG_TSO0_CFG0_S2PCFG_S2P_BYPASS;
1842         }
1843 
1844         //S2p input pad select
1845         switch(u32InPad)
1846         {
1847             case TSP_MUX_TS0:
1848                 u16Data = TSP_MUX_TS0;
1849                 u16clk = TSP_CLK_TS0;
1850                 break;
1851             case TSP_MUX_TS1:
1852                 u16Data = TSP_MUX_TS1;
1853                 u16clk = TSP_CLK_TS1;
1854                 break;
1855             case TSP_MUX_TS2:
1856                 u16Data = TSP_MUX_TS2;
1857                 u16clk = TSP_CLK_TS2;
1858                 break;
1859             default:
1860                 return FALSE;
1861         }
1862 
1863         _HAL_REG16_W(&(_TspCtrl5[0].TS_MUX_CFG_S2P), ((_HAL_REG16_R(&(_TspCtrl5[0].TS_MUX_CFG_S2P)) & ~TS_MUX_CFG_S2P0_MUX_MASK) | u16Data));
1864         TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLKTS4) =
1865             (TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLKTS4) & ~(REG_CLKGEN0_TSN_CLK_MASK<<REG_CLKGEN0_TSN_CLK_TS4_SHIFT)) | (u16clk<<REG_CLKGEN0_TSN_CLK_TS4_SHIFT);
1866         TSP_TSO0_REG(REG_TSO0_CFG0) = u16S2pCfg;
1867         TSP_TS_SAMPLE_REG(REG_TSO_OUT_CLK_SEL) = ((TSP_TS_SAMPLE_REG(REG_TSO_OUT_CLK_SEL) & ~REG_TSO_OUT_CLK_SEL_MASK) | REG_TSO_OUT_S2P);  //s2p out
1868     }
1869 
1870     if(u32InPad == TSP_MUX_INDEMOD)
1871     { // Internal Demod out
1872         TSP_TOP_REG(REG_TOP_TS_OUT_MODE) = TSP_TOP_REG(REG_TOP_TS_OUT_MODE) & ~REG_TOP_TS_OUT_MODE_MASK;
1873         TSP_TOP_REG(REG_TOP_TSCONFIG) = (TSP_TOP_REG(REG_TOP_TSCONFIG) & ~(REG_TOP_TS_TS1_CFG_MASK << REG_TOP_TS1CFG_SHIFT)) | (REG_TOP_TS_TS1_PARALL_OUT << REG_TOP_TS1CFG_SHIFT);
1874     }
1875     else
1876     {
1877         TSP_TOP_REG(REG_TOP_TS_OUT_MODE) = (TSP_TOP_REG(REG_TOP_TS_OUT_MODE) & ~REG_TOP_TS_OUT_MODE_MASK) | REG_TOP_TS1_OUT_MODE_TSO;
1878         TSP_TOP_REG(REG_TOP_TSCONFIG) = TSP_TOP_REG(REG_TOP_TSCONFIG) & ~(REG_TOP_TS_TS1_CFG_MASK << REG_TOP_TS1CFG_SHIFT);
1879     }
1880 
1881     u16Data = 0;
1882     switch(u32InPad)
1883     {
1884         case TSP_MUX_TS0:
1885         case TSP_MUX_TS2:
1886             u16Data = TS_MUX_CFG_TSOOUT_FROM_S2P;
1887             break;
1888         case TSP_MUX_TSO:
1889             u16Data = TS_MUX_CFG_TSOOUT_FROM_TSO;
1890             break;
1891         default:
1892             break;
1893     }
1894     _HAL_REG16_W(&(_TspCtrl5[0].TS_MUX_CFG_TSOOUT), ((_HAL_REG16_R(&(_TspCtrl5[0].TS_MUX_CFG_TSOOUT)) & ~TS_MUX_CFG_TSOOUT_MASK) | u16Data));
1895 
1896     return TRUE;
1897 }
1898 
HAL_TSP_SelPad(MS_U32 u32EngId,MS_U32 u32Flow,MS_U32 u32Pad,MS_BOOL bParl)1899 void HAL_TSP_SelPad(MS_U32 u32EngId, MS_U32 u32Flow, MS_U32 u32Pad, MS_BOOL bParl)
1900 {
1901     MS_U16 u16data = 0;
1902     MS_U16 u16Shift = 0;
1903     MS_U16 u16padsel = 0;
1904     MS_U16 u16Reg = 0;
1905     MS_U16 u16Mask = 0;
1906     MS_U16 u16ShiftSet[TSP_IF_NUM] = {TS_MUX_CFG_TS0_MUX_SHIFT,TS_MUX_CFG_TS1_MUX_SHIFT,TS_MUX_CFG_TSFI_MUX_SHIFT};
1907 
1908     //printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
1909     //printf("[%s\[%d] u32Flow %ld u32Pad %ld bParl %d\n", __FUNCTION__, __LINE__, u32Flow, u32Pad, (int)bParl);
1910 
1911     MS_ASSERT(9 > u32Pad);
1912 
1913     if(u32Flow == 0x80) //E_DRVTSP_IF_FI
1914     {
1915         u32Flow = TSP_IF_NUM - 1;
1916     }
1917     else if(u32Flow >= TSP_IF_NUM)
1918     {
1919         return;
1920     }
1921 
1922     if((u32Pad == TSP_MUX_TS0) && (_bTsPadUsed[0] == FALSE))
1923     {
1924         //TSP_TOP_REG(REG_TOP_TS0_PE) = TSP_TOP_REG(REG_TOP_TS0_PE)| REG_TOP_TS0_PE_MASK;
1925         _bTsPadUsed[0] = TRUE;
1926     }
1927     if((u32Pad == TSP_MUX_TS1) && (_bTsPadUsed[1] == FALSE))
1928     {
1929         //TSP_TOP_REG(REG_TOP_TS1_PE) = TSP_TOP_REG(REG_TOP_TS1_PE) | REG_TOP_TS1_PE_MASK;
1930         _bTsPadUsed[1] = TRUE;
1931     }
1932     if((u32Pad == TSP_MUX_TS2) && (_bTsPadUsed[2] == FALSE))
1933     {
1934         //TSP_TOP_REG(REG_TOP_TS2_PE) = TSP_TOP_REG(REG_TOP_TS2_PE)| REG_TOP_TS2_PE_MASK;
1935         _bTsPadUsed[2] = TRUE;
1936     }
1937 
1938     _u32FlowPadMap[u32Flow] = u32Pad;
1939     u16padsel = (MS_U16)u32Pad;
1940     u16Shift = u16ShiftSet[u32Flow];
1941 
1942     u16data = (_HAL_REG16_R(&(_TspCtrl5[0].TS_MUX_CFG0)) & ~(TS_MUX_CFG_TS0_MUX_MASK << u16Shift)) | (u16padsel<< u16Shift);
1943     _HAL_REG16_W(&(_TspCtrl5[0].TS_MUX_CFG0), u16data);
1944 
1945 
1946     u16Shift = 0;
1947     switch(u16padsel)
1948     {
1949         case TSP_MUX_TS0:
1950             u16Reg = REG_TOP_TSCONFIG;
1951             u16Shift = REG_TOP_TS0CFG_SHIFT;
1952             u16Mask = REG_TOP_TS_TS0_CFG_MASK;
1953             break;
1954         case TSP_MUX_TS1:
1955             TSP_TOP_REG(REG_TOP_TS_OUT_MODE) = TSP_TOP_REG(REG_TOP_TS_OUT_MODE) & ~REG_TOP_TS_OUT_MODE_MASK; //disable ts1 out mode
1956             u16Reg = REG_TOP_TSCONFIG;
1957             u16Shift = REG_TOP_TS1CFG_SHIFT;
1958             u16Mask = REG_TOP_TS_TS1_CFG_MASK;
1959             break;
1960         case TSP_MUX_TS2:
1961             u16Reg = REG_TOP_TS2CONFIG;
1962             u16Shift = REG_TOP_TS2CFG_SHIFT;
1963             u16Mask = REG_TOP_TS_TS2_CFG_MASK;
1964             break;
1965         default:
1966             break;
1967     }
1968 
1969     if(bParl == FALSE)
1970     {
1971         switch(u16padsel)
1972         {
1973             case TSP_MUX_TS0:
1974                 u16data = REG_TOP_TS_TS0_SERIAL_IN;
1975                 break;
1976             case TSP_MUX_TS2:
1977                 u16data = REG_TOP_TS_TS2_SERIAL_IN;
1978                 break;
1979             case TSP_MUX_TS1:
1980                 u16data = REG_TOP_TS_TS1_SERIAL_IN;
1981                 break;
1982             default:
1983                 break;
1984         }
1985     }
1986     else
1987     {
1988         if( (u16padsel == TSP_MUX_TS0) || (u16padsel == TSP_MUX_TS1) || (u16padsel == TSP_MUX_TS2) )
1989         {
1990             u16data = 1;
1991         }
1992     }
1993 
1994     //printf("[%s\[%d] u16Reg %x u16Mask %x u16Shift %x\n", __FUNCTION__, __LINE__, u16Reg, u16Mask, u16Shift);
1995     TSP_TOP_REG(u16Reg) = (TSP_TOP_REG(u16Reg) & ~(u16Mask<<u16Shift)) | (u16data << u16Shift);
1996 
1997 }
1998 
HAL_TSP_SelPad_ClkInv(MS_U32 u32EngId,MS_U32 u32Flow,MS_BOOL bClkInv)1999 void HAL_TSP_SelPad_ClkInv(MS_U32 u32EngId, MS_U32 u32Flow, MS_BOOL bClkInv)
2000 {
2001     MS_U32 u32Clk = 0;
2002     MS_U32 u32data = 0;
2003 
2004     if(u32Flow == 0x80) //E_DRVTSP_IF_FI
2005     {
2006         u32Flow = TSP_IF_NUM - 1;
2007     }
2008     else if(u32Flow >= TSP_IF_NUM)
2009     {
2010         return;
2011     }
2012 
2013     switch(_u32FlowPadMap[u32Flow])
2014     {
2015         case TSP_MUX_INDEMOD:
2016             u32Clk = TSP_CLK_INDEMOD;
2017             break;
2018         case TSP_MUX_TS0:
2019             u32Clk = TSP_CLK_TS0;
2020             break;
2021         case TSP_MUX_TS1:
2022             u32Clk = TSP_CLK_TS1;
2023             break;
2024         case TSP_MUX_TS2:
2025             u32Clk = TSP_CLK_TS2;
2026             break;
2027         case TSP_MUX_TSO:
2028             u32Clk = TSP_CLK_TSOOUT;
2029             break;
2030         default:
2031             return;
2032     }
2033 
2034     if (bClkInv)
2035         u32Clk |= TSP_CLK_INVERSE;
2036 
2037     switch(u32Flow)
2038     {
2039         case 0:
2040             u32data = TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) & ~(REG_CLKGEN0_TSN_CLK_MASK<< REG_CLKGEN0_TSN_CLK_TS0_SHIFT);
2041             u32data |= (u32Clk<< REG_CLKGEN0_TSN_CLK_TS0_SHIFT);
2042             TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) = u32data;
2043             break;
2044         case 1:
2045             u32data = TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) & ~(REG_CLKGEN0_TSN_CLK_MASK<< REG_CLKGEN0_TSN_CLK_TS1_SHIFT);
2046             u32data |= (u32Clk<< REG_CLKGEN0_TSN_CLK_TS1_SHIFT);
2047             TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) = u32data;
2048             break;
2049         case 2:
2050             u32data = TSP_CLKGEN1_REG(REG_CLKGEN1_TSN_CLKFI) & ~(REG_CLKGEN0_TSN_CLK_MASK<< REG_CLKGEN1_TSN_CLK_TSFI_SHIFT);
2051             u32data |= (u32Clk<< REG_CLKGEN1_TSN_CLK_TSFI_SHIFT);
2052             TSP_CLKGEN1_REG(REG_CLKGEN1_TSN_CLKFI) = u32data;
2053             break;
2054         default:
2055             return;
2056     }
2057 
2058 }
2059 
HAL_INT_Force(MS_U16 u16value)2060 void HAL_INT_Force(MS_U16 u16value)
2061 {
2062     TSP_INT_REG(0x31) = TSP_INT_REG(0x31) | u16value;
2063     printf("HAL_INT_Force 0x%x\n", (int)(TSP_INT_REG(0x31)))  ;
2064 
2065 }
2066 
HAL_TSP_SelPad_ExtSync(MS_U32 u32EngId,MS_BOOL bExtSync,MS_U32 u32Flow)2067 void HAL_TSP_SelPad_ExtSync(MS_U32 u32EngId, MS_BOOL bExtSync, MS_U32 u32Flow)
2068 {
2069     REG32* pReg = NULL;
2070     MS_U32 u32ExtSync = 0;
2071 
2072     if(u32Flow == 0x80) //E_DRVTSP_IF_FI
2073     {
2074         u32Flow = TSP_IF_NUM - 1;
2075     }
2076     else if(u32Flow >= TSP_IF_NUM)
2077     {
2078         return;
2079     }
2080 
2081     switch(u32Flow)
2082     {
2083         case 0:
2084             pReg = &(_TspCtrl[0].Hw_Config0);
2085             u32ExtSync = TSP_HW_CFG0_TSIF0_EXTSYNC;
2086             break;
2087         case 1:
2088             pReg = &(_TspCtrl[0].Hw_Config2);
2089             u32ExtSync = TSP_HW_CFG2_TSIF1_EXTSYNC;
2090             break;
2091         case 2:
2092             if (bExtSync)
2093             {
2094                 _HAL_REG16_W(&(_TspCtrl5[0].Ts_If_Fi_Cfg), SET_FLAG1(_HAL_REG16_R(&(_TspCtrl5[0].Ts_If_Fi_Cfg)), TSP_FIIF_EXT_SYNC_SEL));
2095             }
2096             else
2097             {
2098                 _HAL_REG16_W(&(_TspCtrl5[0].Ts_If_Fi_Cfg), RESET_FLAG1(_HAL_REG16_R(&(_TspCtrl5[0].Ts_If_Fi_Cfg)), TSP_FIIF_EXT_SYNC_SEL));
2099             }
2100             return;
2101         default:
2102             return;
2103     }
2104 
2105     if (bExtSync)
2106     {
2107         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32ExtSync));
2108     }
2109     else
2110     {
2111         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32ExtSync));
2112     }
2113 }
2114 
HAL_TSP_SelPad_Parl(MS_U32 u32EngId,MS_BOOL bParl,MS_U32 u32Flow)2115 void HAL_TSP_SelPad_Parl(MS_U32 u32EngId, MS_BOOL bParl, MS_U32 u32Flow)
2116 {
2117     REG32* pReg = NULL;
2118     MS_U32 u32Parl = 0;
2119 
2120     if(u32Flow == 0x80) //E_DRVTSP_IF_FI
2121     {
2122         u32Flow = TSP_IF_NUM - 1;
2123     }
2124     else if(u32Flow >= TSP_IF_NUM)
2125     {
2126         return;
2127     }
2128 
2129     switch(u32Flow)
2130     {
2131         case 0:
2132             pReg = &(_TspCtrl[0].Hw_Config0);
2133             u32Parl = TSP_HW_CFG0_TSIF0_PARL;
2134             break;
2135         case 1:
2136             pReg = &(_TspCtrl[0].Hw_Config2);
2137             u32Parl = TSP_HW_CFG2_TSIF1_PARL;
2138             break;
2139         case 2:
2140             if (bParl)
2141             {
2142                 _HAL_REG16_W(&(_TspCtrl5[0].Ts_If_Fi_Cfg), SET_FLAG1(_HAL_REG16_R(&(_TspCtrl5[0].Ts_If_Fi_Cfg)), TSP_FIIF_P_SEL));
2143             }
2144             else
2145             {
2146                 _HAL_REG16_W(&(_TspCtrl5[0].Ts_If_Fi_Cfg), RESET_FLAG1(_HAL_REG16_R(&(_TspCtrl5[0].Ts_If_Fi_Cfg)), TSP_FIIF_P_SEL));
2147             }
2148             return;
2149         default:
2150             return;
2151     }
2152 
2153     if (bParl)  // parallel
2154     {
2155         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32Parl));
2156     }
2157     else        // serial
2158     {
2159         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32Parl));
2160     }
2161 }
2162 
HAL_TSP_TsOuOutClockPhase(MS_U16 u16OutPad,MS_U16 u16Val,MS_BOOL bEnable,MS_U32 u32S2pOpt)2163 MS_BOOL HAL_TSP_TsOuOutClockPhase(MS_U16 u16OutPad, MS_U16 u16Val, MS_BOOL bEnable, MS_U32 u32S2pOpt)
2164 {
2165     if(bEnable == FALSE)
2166     {
2167         _HAL_REG16_W(&_TspSample[0].S2P_Out_Clk_Sample,
2168             RESET_FLAG1(_HAL_REG16_R(&_TspSample[0].S2P_Out_Clk_Sample), S2P_PHASE_ADJUST_EN));
2169     }
2170     else
2171     {
2172         _HAL_REG16_W(&_TspSample[0].S2P_Out_Clk_Sample,
2173             (_HAL_REG16_R(&_TspSample[0].S2P_Out_Clk_Sample) & ~S2P_PHASE_ADJUST_COUNT_MASK) | (u16Val & S2P_PHASE_ADJUST_COUNT_MASK) | S2P_PHASE_ADJUST_EN);
2174     }
2175 
2176     // Set S2P clk invert config
2177     if(u32S2pOpt & HAL_S2P_CLK_OPT_INVERT)
2178     {
2179         _HAL_REG16_W(&_TspSample[0].S2P_Out_Clk_Sample,
2180             SET_FLAG1(_HAL_REG16_R(&_TspSample[0].S2P_Out_Clk_Sample), S2P_CLK_INVERT));
2181     }
2182     if(u32S2pOpt & HAL_S2P_CLK_OPT_NON_INVERT)
2183     {
2184         _HAL_REG16_W(&_TspSample[0].S2P_Out_Clk_Sample,
2185             RESET_FLAG1(_HAL_REG16_R(&_TspSample[0].S2P_Out_Clk_Sample), S2P_CLK_INVERT));
2186     }
2187 
2188     return TRUE;
2189 }
2190 
HAL_TSP_TSOut_En(MS_BOOL bEnable)2191 void HAL_TSP_TSOut_En(MS_BOOL bEnable)
2192 {
2193     return;
2194 }
2195 
HAL_TSP_Parl_BitOrderSwap(MS_U32 u32EngId,MS_U32 u32Flow,MS_BOOL bInvert)2196 void HAL_TSP_Parl_BitOrderSwap(MS_U32 u32EngId, MS_U32 u32Flow, MS_BOOL bInvert)
2197 {
2198     REG32* pReg = &(_TspCtrl[0].Hw_Config4);
2199     MS_U32 u32Invert = 0;
2200 
2201     if(u32Flow == 0x80) //E_DRVTSP_IF_FI
2202     {
2203         u32Flow = TSP_IF_NUM-1;
2204     }
2205     else if(u32Flow >= TSP_IF_NUM)
2206     {
2207         return;
2208     }
2209 
2210     switch(u32Flow)
2211     {
2212         case 0:
2213             pReg = &(_TspCtrl[0].Hw_Config4);
2214             u32Invert = TSP_HW_CFG4_TS_DATA0_SWAP;
2215             break;
2216         case 1:
2217             pReg = &(_TspCtrl[0].Hw_Config4);
2218             u32Invert = TSP_HW_CFG4_TS_DATA1_SWAP;
2219             break;
2220         case 2:
2221             if (bInvert)
2222             {
2223                 _HAL_REG16_W(&(_TspCtrl5[0].Ts_If_Fi_Cfg), SET_FLAG1(_HAL_REG16_R(&(_TspCtrl5[0].Ts_If_Fi_Cfg)), TSP_FIIF_DATA_SWAP));
2224             }
2225             else
2226             {
2227                 _HAL_REG16_W(&(_TspCtrl5[0].Ts_If_Fi_Cfg), RESET_FLAG1(_HAL_REG16_R(&(_TspCtrl5[0].Ts_If_Fi_Cfg)), TSP_FIIF_DATA_SWAP));
2228             }
2229             return;
2230         default:
2231             return;
2232     }
2233 
2234     if(bInvert)
2235     {
2236         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32Invert));
2237     }
2238     else
2239     {
2240         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32Invert));
2241     }
2242 }
2243 
HAL_TSP_GetCap(MS_U32 u32Cap,void * pData)2244 MS_BOOL HAL_TSP_GetCap(MS_U32 u32Cap, void* pData)
2245 {
2246     MS_BOOL bRet = TRUE;
2247 
2248     switch (u32Cap)
2249     {
2250     case HAL_TSP_CAP_PID_FILTER_NUM:
2251         *((MS_U32*)pData) = TSP_PIDFLT_NUM_ALL;
2252         break;
2253     case HAL_TSP_CAP_PVR_FILTER_NUM:
2254     case HAL_TSP_CAP_PVR1_FILTER_NUM:
2255         *((MS_U32*)pData) = TSP_PIDFLT_NUM_ALL;
2256         break;
2257     case HAL_TSP_CAP_SEC_FILTER_NUM:
2258         *((MS_U32*)pData) = TSP_SECFLT_NUM;
2259         break;
2260     case HAL_TSP_CAP_SEC_BUF_NUM:
2261         *((MS_U32*)pData) = TSP_SECBUF_NUM;
2262         break;
2263     case HAL_TSP_CAP_PVR_ENG_NUM:
2264         *((MS_U32*)pData) = TSP_PVR_IF_NUM;
2265         break;
2266     case HAL_TSP_CAP_MMFI0_FILTER_NUM:
2267         *((MS_U32*)pData) = TSP_MMFI0_FILTER_NUM;
2268         break;
2269     case HAL_TSP_CAP_MMFI1_FILTER_NUM:
2270         *((MS_U32*)pData) = TSP_MMFI1_FILTER_NUM;
2271         break;
2272     case HAL_TSP_CAP_TSIF_NUM:
2273         *((MS_U32*)pData) = TSP_IF_NUM;
2274         break;
2275     case HAL_TSP_CAP_DEMOD_NUM:
2276         *((MS_U32*)pData) = TSP_DEMOD_NUM;
2277         break;
2278     case HAL_TSP_CAP_VFIFO_NUM:
2279         *((MS_U32*)pData) = TSP_VFIFO_NUM;
2280         break;
2281     case HAL_TSP_CAP_AFIFO_NUM:
2282         *((MS_U32*)pData) = TSP_AFIFO_NUM;
2283         break;
2284     case HAL_TSP_CAP_TS_PAD_NUM:
2285         *((MS_U32*)pData) = TSP_TS_PAD_NUM;
2286         break;
2287     case HAL_TSP_CAP_VQ_NUM:
2288         *((MS_U32*)pData) = TSP_VQ_NUM;
2289         break;
2290     case HAL_TSP_CAP_CA_FLT_NUM:
2291         *((MS_U32*)pData) = TSP_CA_FLT_NUM;
2292         break;
2293     case HAL_TSP_CAP_CA_KEY_NUM:
2294         *((MS_U32*)pData) = TSP_CA_KEY_NUM;
2295         break;
2296     case HAL_TSP_CAP_FW_ALIGN:
2297         *((MS_U32*)pData) = (1L << (MIU_BUS+TSP_DNLD_ADDR_ALI_SHIFT));
2298         break;
2299     case HAL_TSP_CAP_VQ_ALIGN:
2300     case HAL_TSP_CAP_SEC_BUF_ALIGN:
2301     case HAL_TSP_CAP_PVR_ALIGN:
2302         *((MS_U32*)pData) = (1L << MIU_BUS);
2303         break;
2304     case HAL_TSP_CAP_VQ_PITCH:
2305         *((MS_U32*)pData) = VQ_PACKET_UNIT_LEN;
2306         break;
2307     case HAL_TSP_CAP_PVRCA_PATH_NUM:
2308         *((MS_U32*)pData) = TSP_CA_ENGINE_NUM;
2309         break;
2310     case HAL_TSP_CAP_SHAREKEY_FLT_RANGE:
2311         *((MS_U32*)pData) = DSCMB_FLT_SHAREKEY_START_ID;
2312         *((MS_U32*)pData + 1) = DSCMB_FLT_SHAREKEY_END_ID;
2313         break;
2314     case HAL_TSP_CAP_CA0_FLT_RANGE:
2315         *((MS_U32*)pData) = DSCMB_FLT_START_ID;
2316         *((MS_U32*)pData + 1) = DSCMB_FLT_END_ID;
2317         break;
2318     case HAL_TSP_CAP_CA1_FLT_RANGE:
2319         *((MS_U32*)pData) = DSCMB1_FLT_START_ID;
2320         *((MS_U32*)pData + 1) = DSCMB1_FLT_END_ID;
2321         break;
2322     case HAL_TSP_CAP_SHAREKEY_FLT1_RANGE:
2323         *((MS_U32*)pData) = DSCMB_FLT_SHAREKEY1_START_ID;
2324         *((MS_U32*)pData + 1) = DSCMB_FLT_SHAREKEY1_END_ID;
2325         break;
2326     case HAL_TSP_CAP_HW_TYPE:
2327         *((MS_U32*)pData) = 0x00001006;
2328         break;
2329     case HAL_TSP_CAP_HWPCR_SUPPORT:
2330         *((MS_U32*)pData) = TSP_HWPCR_BY_HK;
2331         break;
2332     case HAL_TSP_CAP_PCRFLT_START_IDX:
2333         *((MS_U32*)pData) = TSP_PIDFLT_NUM;
2334         break;
2335     case HAL_TSP_CAP_HWWP_SET_NUM:
2336         *((MS_U32*)pData) = TSP_WP_SET_NUM;
2337         break;
2338     case HAL_TSP_CAP_DSCMB_ENG_NUM:
2339         *((MS_U32*)pData) = TSP_CA_ENGINE_NUM;
2340         break;
2341     case HAL_TSP_CAP_MERGESTR_NUM:
2342         *((MS_U32*)pData) = TSP_MERGESTR_MUM;
2343         break;
2344     case HAL_TSP_CAP_MAX_SEC_FLT_DEPTH:
2345         *((MS_U32*)pData) = TSP_SEC_FLT_DEPTH;
2346         break;
2347     case HAL_TSP_CAP_FW_BUF_SIZE:
2348         *((MS_U32*)pData) = TSP_FW_BUF_SIZE;
2349         break;
2350     case HAL_TSP_CAP_FW_BUF_RANGE:
2351         *((MS_U32*)pData) = TSP_FW_BUF_LOW_BUD;
2352         *((MS_U32*)pData+1) = TSP_FW_BUF_UP_BUD;
2353         break;
2354     case HAL_TSP_CAP_VQ_BUF_RANGE:
2355         *((MS_U32*)pData) = TSP_VQ_BUF_LOW_BUD;
2356         *((MS_U32*)pData+1) = TSP_VQ_BUF_UP_BUD;
2357         break;
2358     case HAL_TSP_CAP_SEC_BUF_RANGE:
2359         *((MS_U32*)pData) = TSP_SEC_BUF_LOW_BUD;
2360         *((MS_U32*)pData+1) = TSP_SEC_BUF_UP_BUD;
2361         break;
2362     case HAL_TSP_CAP_FIQ_NUM:
2363         *((MS_U32*)pData) = TSP_FIQ_NUM;
2364         break;
2365     default:
2366         *((MS_U32*)pData) = 0xFFFFFFFF;
2367         bRet = FALSE;
2368         break;
2369     }
2370     return bRet;
2371 }
2372 
2373 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2374 // Macro function
2375 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
_HAL_TSP_FW_load(MS_U32 u32FwAddrPhys,MS_U32 u32FwSize,MS_BOOL bFwDMA,MS_BOOL bIQmem,MS_BOOL bDQmem)2376 static void _HAL_TSP_FW_load(
2377     MS_U32                     u32FwAddrPhys,
2378     MS_U32                     u32FwSize,
2379     MS_BOOL                    bFwDMA,
2380     MS_BOOL                    bIQmem,
2381     MS_BOOL                    bDQmem)
2382 {
2383     MS_U32 u32Value = 0x0;
2384     // bDQmem is always true
2385     MS_ASSERT(bDQmem);
2386 
2387     // @FIXME: Richard: Only allow TSP FW running in DRAM at this first stage.
2388     // improve this afterward.
2389      _HAL_REG32_W(&_TspCtrl[0].Cpu_Base, 0/*u32FwAddrPhys >> 3*/); // 16 bytes address unit
2390 
2391     if (bFwDMA)
2392     {
2393         MS_U32              u32DnldCtrl  = 0;
2394         MS_U32              u32DnldCtrl1 = 0;
2395         u32DnldCtrl  =      ((u32FwAddrPhys >> MIU_BUS) >> TSP_DNLD_ADDR_ALI_SHIFT) & TSP_DNLD_ADDR_MASK;
2396         u32DnldCtrl1 =      (((u32FwAddrPhys >> MIU_BUS) >> TSP_DNLD_ADDR_ALI_SHIFT) >> 16) & TSP_DMA_RADDR_MSB_MASK;
2397         printf("firmware 111 0x%08lx 0x%08lx 0x%08lx\n", u32FwAddrPhys, u32DnldCtrl1, u32DnldCtrl);
2398 
2399         u32DnldCtrl |=      (_TSP_QMEM_SIZE << TSP_DNLD_NUM_SHFT);
2400 
2401         _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl, u32DnldCtrl);
2402         _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2, (_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2) & ~TSP_DMA_RADDR_MSB_MASK) | u32DnldCtrl1);
2403         _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
2404                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_DNLD_START| TSP_CTRL_DNLD_DONE));
2405         _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
2406                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_DNLD_START));
2407         while (!HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_DNLD_DONE));//printf(".");
2408         _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
2409                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_DNLD_START| TSP_CTRL_DNLD_DONE));
2410     }
2411 
2412     u32Value = _HAL_REG32_R(&_TspCtrl[0].Qmem_Imask) | _TSP_QMEM_I_MASK;
2413     _HAL_REG32_W(&_TspCtrl[0].Qmem_Imask, u32Value);
2414     if (bIQmem)
2415     {
2416         _HAL_REG32_W(&_TspCtrl[0].Qmem_Ibase,
2417                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Qmem_Ibase), _TSP_QMEM_I_ADDR_HIT));
2418     }
2419     else
2420     {
2421         _HAL_REG32_W(&_TspCtrl[0].Qmem_Ibase, _TSP_QMEM_I_ADDR_MISS);
2422         _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
2423                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_ICACHE_EN));
2424     }
2425 
2426     u32Value = _HAL_REG32_R(&_TspCtrl[0].Qmem_Dmask) | _TSP_QMEM_D_MASK;
2427     _HAL_REG32_W(&_TspCtrl[0].Qmem_Dmask,u32Value);
2428 
2429     u32Value = _HAL_REG32_R(&_TspCtrl[0].Qmem_Dbase) | _TSP_QMEM_D_ADDR_HIT;
2430     _HAL_REG32_W(&_TspCtrl[0].Qmem_Dbase,u32Value);
2431 
2432 }
2433 
HAL_TSP_filein_enable(MS_BOOL b_enable)2434 void HAL_TSP_filein_enable(MS_BOOL b_enable)
2435 {
2436     // Richard: enable/disable file in timer as well
2437     //          file in could only walk through pid filter set 0.
2438     if (b_enable)
2439     {
2440         // Set Data port enable for audio bypass
2441         //_HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2442         //        SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
2443         //_HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2444         //        SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILEIN_ENABLE| TSP_CTRL1_FILEIN_TIMER_ENABLE));
2445 
2446         _HAL_REG16_W(&_TspCtrl5[0].Ts_If_Fi_Cfg,
2447             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].Ts_If_Fi_Cfg), TSP_FIIF_MUX_LIVE_PATH));
2448         _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2449                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_PVR_CMD_QUEUE_ENABLE));
2450     }
2451     else
2452     {
2453         //_HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2454         //        RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
2455         //_HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2456         //        RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILEIN_ENABLE| TSP_CTRL1_FILEIN_TIMER_ENABLE));
2457 
2458         _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2459                 RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_PVR_CMD_QUEUE_ENABLE));
2460     }
2461     //_HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2462                 //RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
2463 }
2464 
HAL_TSP_PS_Path_Disable(void)2465 void HAL_TSP_PS_Path_Disable(void)
2466 {
2467     // set PS VID/AUD enable while video/audio/audio2 bypass mode
2468     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2469             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_VID_EN|TSP_HW_CFG4_PS_AUD_EN|TSP_HW_CFG4_PS_AUD2_EN)));
2470     _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2471             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), (TSP_PS_VID3D_EN)));
2472     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2473             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
2474 }
2475 
HAL_TSP_PS_Path_Enable(MS_U32 u32TsDmaCtrl)2476 void HAL_TSP_PS_Path_Enable(MS_U32 u32TsDmaCtrl)
2477 {
2478     switch (u32TsDmaCtrl)
2479     {
2480         case TSP_TSDMA_CTRL_VPES0:
2481             if((_HAL_REG32_R(&_TspCtrl[0].Hw_Config4) & TSP_HW_CFG4_PS_VID_EN) == 0)
2482             {
2483                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2484                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_AUD_EN|TSP_HW_CFG4_PS_AUD2_EN)));
2485                 _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2486                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), (TSP_PS_VID3D_EN)));
2487 
2488                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2489                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PS_VID_EN));
2490 
2491                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_VID_SRC_MASK)| (TSP_SRC_FROM_PKTDMXFL << TSP_VID_SRC_SHIFT));
2492 
2493                 // File in PS mode, fifo block mode enable
2494                 HAL_TSP_AVFIFO_Block_Disable(TSP_FIFO_VD, FALSE);
2495             }
2496 
2497             break;
2498         case TSP_TSDMA_CTRL_APES0:
2499             if((_HAL_REG32_R(&_TspCtrl[0].Hw_Config4) & TSP_HW_CFG4_PS_AUD_EN) == 0)
2500             {
2501                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2502                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_VID_EN|TSP_HW_CFG4_PS_AUD2_EN)));
2503                 _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2504                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), (TSP_PS_VID3D_EN)));
2505 
2506                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2507                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PS_AUD_EN));
2508 
2509                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_AUD_SRC_MASK)| (TSP_SRC_FROM_PKTDMXFL << TSP_AUD_SRC_SHIFT));
2510 
2511                 // File in PS mode, fifo block mode enable
2512                 HAL_TSP_AVFIFO_Block_Disable(TSP_FIFO_AU, FALSE);
2513             }
2514 
2515             break;
2516         case TSP_TSDMA_CTRL_A2PES0:
2517             if((_HAL_REG32_R(&_TspCtrl[0].Hw_Config4) & TSP_HW_CFG4_PS_AUD2_EN) == 0)
2518             {
2519                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2520                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_VID_EN|TSP_HW_CFG4_PS_AUD_EN)));
2521                 _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2522                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), (TSP_PS_VID3D_EN )));
2523 
2524                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2525                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PS_AUD2_EN));
2526 
2527                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_AUDB_SRC_MASK)| (TSP_SRC_FROM_PKTDMXFL << TSP_AUDB_SRC_SHIFT));
2528 
2529                 // File in PS mode, fifo block mode enable
2530                 HAL_TSP_AVFIFO_Block_Disable(TSP_FIFO_AUB, FALSE);
2531             }
2532 
2533             break;
2534         case TSP_TSDMA_CTRL_V3DPES0:
2535             if((_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2) & TSP_PS_VID3D_EN) == 0)
2536             {
2537                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2538                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_VID_EN|TSP_HW_CFG4_PS_AUD_EN|TSP_HW_CFG4_PS_AUD2_EN)));
2539                 _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2540                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PS_VID3D_EN));
2541 
2542                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_VID3D_SRC_MASK)| (TSP_SRC_FROM_PKTDMXFL << TSP_VID3D_SRC_SHIFT));
2543 
2544                 // File in PS mode, fifo block mode enable
2545                 HAL_TSP_AVFIFO_Block_Disable(TSP_FIFO_V3D, FALSE);
2546 
2547             }
2548 
2549             break;
2550         default:
2551             _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2552                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_VID_EN|TSP_HW_CFG4_PS_AUD_EN|TSP_HW_CFG4_PS_AUD2_EN)));
2553             _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2554                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), (TSP_PS_VID3D_EN)));
2555             _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2556                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
2557 
2558             break;
2559     }
2560 }
2561 
HAL_TSP_GetCtrlMode(MS_U32 u32EngId)2562 MS_U32 HAL_TSP_GetCtrlMode(MS_U32 u32EngId)
2563 {
2564     return (_HAL_REG32_R(&_TspCtrl[u32EngId].TSP_Ctrl));
2565 }
2566 
HAL_TSP_Flush_AV_FIFO(MS_U32 u32StreamId,MS_BOOL bFlush)2567 void HAL_TSP_Flush_AV_FIFO(MS_U32 u32StreamId, MS_BOOL bFlush)
2568 {
2569     MS_U32 u32Flag;
2570     REG32* pReg = NULL;
2571 
2572     switch(u32StreamId)
2573     {
2574         default:
2575         case 0:
2576             pReg = &_TspCtrl[0].reg160C;
2577             u32Flag = TSP_RESET_VFIFO;
2578             break;
2579         case 1:
2580             pReg = &_TspCtrl[0].reg160C;
2581             u32Flag = TSP_RESET_AFIFO;
2582             break;
2583         case 2:
2584             pReg = &_TspCtrl[0].reg160C;
2585             u32Flag = TSP_RESET_AFIFO2;
2586             break;
2587         case 3:
2588             pReg = &_TspCtrl[0].reg160C;
2589             u32Flag = TSP_RESET_VFIFO3D;
2590             break;
2591     }
2592 
2593     if (bFlush)
2594     {
2595         _HAL_REG32_W(pReg,
2596                 SET_FLAG1(_HAL_REG32_R(pReg), u32Flag));
2597     }
2598     else
2599     {
2600         _HAL_REG32_W(pReg,
2601                 RESET_FLAG1(_HAL_REG32_R(pReg), u32Flag));
2602     }
2603 }
2604 
HAL_TSP_Get_AVFifoLevel(MS_U32 u32StreamId)2605 MS_U32 HAL_TSP_Get_AVFifoLevel(MS_U32 u32StreamId)
2606 {
2607     switch (u32StreamId)
2608     {
2609         case 0: // return VFifo status
2610             return ((_HAL_REG32_R(&_TspCtrl[0].Pkt_Info2) & TSP_VFIFO_STATUS) >> TSP_VFIFO_STATUS_SHFT);
2611         case 1: // return AFifo 0 status
2612             return ((_HAL_REG32_R(&_TspCtrl[0].Pkt_Info2) & TSP_AFIFO_STATUS) >> TSP_AFIFO_STATUS_SHFT);
2613         case 2: // return AFifo 1 status
2614             return ((_HAL_REG32_R(&_TspCtrl[0].Pkt_Info2) & TSP_AFIFOB_STATUS) >> TSP_AFIFOB_STATUS_SHFT);
2615         case 3: // return V3D Fifo status
2616             return ((_HAL_REG32_R(&_TspCtrl[0].Pkt_Info2) & TSP_VFIFO3D_STATUS) >> TSP_VFIFO3D_STATUS_SHFT);
2617         default:
2618             return -1;
2619     }
2620 }
2621 
HAL_TSP_AVFIFO_Src_Select(MS_U32 u32Fifo,MS_U32 u32Src)2622 void HAL_TSP_AVFIFO_Src_Select(MS_U32 u32Fifo, MS_U32 u32Src)
2623 {
2624 #if (TSP_HWPCR_BY_HK == 1 || !defined(HWPCR_ENABLE))
2625 
2626         switch(u32Fifo)
2627         {
2628             case TSP_FIFO_AU:
2629                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_AUD_SRC_MASK)| (u32Src << TSP_AUD_SRC_SHIFT));
2630                 break;
2631             case TSP_FIFO_AUB:
2632                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_AUDB_SRC_MASK)| (u32Src << TSP_AUDB_SRC_SHIFT));
2633                 break;
2634             case TSP_FIFO_VD:
2635                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_VID_SRC_MASK)| (u32Src << TSP_VID_SRC_SHIFT));
2636                 break;
2637             case TSP_FIFO_V3D:
2638                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_VID3D_SRC_MASK)| (u32Src << TSP_VID3D_SRC_SHIFT));
2639                 break;
2640             default:
2641                 return;
2642         }
2643 
2644 #else
2645         switch(u32Fifo)
2646         {
2647             case TSP_FIFO_AU:
2648                 _HAL_TSP_CMD_Write_HWPCR_Reg(TSP_AUD_SRC_MASK, (u32Src << TSP_AUD_SRC_SHIFT));
2649                 break;
2650             case TSP_FIFO_AUB:
2651                 _HAL_TSP_CMD_Write_HWPCR_Reg(TSP_AUDB_SRC_MASK, (u32Src << TSP_AUDB_SRC_SHIFT));
2652                 break;
2653             case TSP_FIFO_VD:
2654                 _HAL_TSP_CMD_Write_HWPCR_Reg(TSP_VID_SRC_MASK, (u32Src << TSP_VID_SRC_SHIFT));
2655                 break;
2656             case TSP_FIFO_V3D:
2657                 _HAL_TSP_CMD_Write_HWPCR_Reg(TSP_VID3D_SRC_MASK, (u32Src << TSP_VID3D_SRC_SHIFT));
2658                 break;
2659             default:
2660                 return;
2661         }
2662 #endif
2663 
2664 }
2665 
HAL_TSP_AVFIFO_Block_Disable(MS_U32 u32Fifo,MS_BOOL bDisable)2666 void HAL_TSP_AVFIFO_Block_Disable(MS_U32 u32Fifo, MS_BOOL bDisable)
2667 {
2668     if(bDisable)
2669     {
2670         switch(u32Fifo)
2671         {
2672             case TSP_FIFO_AU:
2673                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_AUD_BLOCK_DIS));
2674                 break;
2675             case TSP_FIFO_AUB:
2676                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_AUDB_BLOCK_DIS));
2677                 break;
2678             case TSP_FIFO_VD:
2679                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_V_BLOCK_DIS));
2680                 break;
2681             case TSP_FIFO_V3D:
2682                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_V3D_BLOCK_DIS));
2683                 break;
2684         }
2685         return;
2686     }
2687 
2688     switch(u32Fifo)
2689     {
2690         case TSP_FIFO_AU:
2691             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_AUD_BLOCK_DIS));
2692             break;
2693         case TSP_FIFO_AUB:
2694             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_AUDB_BLOCK_DIS));
2695             break;
2696         case TSP_FIFO_VD:
2697             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_V_BLOCK_DIS));
2698             break;
2699         case TSP_FIFO_V3D:
2700             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_V3D_BLOCK_DIS));
2701             break;
2702     }
2703 }
2704 
HAL_TSP_TSIF_Enable(MS_U8 u8_tsif,MS_BOOL bEnable)2705 MS_BOOL HAL_TSP_TSIF_Enable(MS_U8 u8_tsif, MS_BOOL bEnable)
2706 {
2707     if(bEnable)
2708         _HAL_TSP_tsif_select(u8_tsif);
2709     else
2710     {
2711         switch(u8_tsif)
2712         {
2713             default:
2714             case 0:
2715                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2716                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF0_ENABLE));
2717                 break;
2718             case 1:
2719                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2720                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF1_ENABLE));
2721                 break;
2722             case 3: //file_FI
2723                 _HAL_REG16_W(&_TspCtrl5[0].Ts_If_Fi_Cfg,
2724                     RESET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].Ts_If_Fi_Cfg), TSP_FIIF_EN));
2725                 break;
2726         }
2727     }
2728 
2729     return TRUE;
2730 }
2731 
HAL_TSP_SelMatchPidSrc(MS_U32 u32Src)2732 void HAL_TSP_SelMatchPidSrc(MS_U32 u32Src)
2733 {
2734     _HAL_REG32_W(&_TspCtrl[0].reg15b4, (_HAL_REG32_R(&_TspCtrl[0].reg15b4) & ~TSP_MATCH_PID_SRC_MASK)| (u32Src << TSP_MATCH_PID_SRC_SHIFT));
2735 }
2736 
2737 //Select TS1/TS2 PID filter source from TS1/TS2 or MMFI0/MMFI1
HAL_TSP_PidFlt_Src_Select(MS_U32 u32Src)2738 MS_BOOL HAL_TSP_PidFlt_Src_Select(MS_U32 u32Src)
2739 {
2740     switch(u32Src)
2741     {
2742         case TSP_PIDFLT1_USE_TSIF1:
2743             _HAL_REG32_W(&_TspCtrl[0].Hw_Config2, (_HAL_REG32_R(&_TspCtrl[0].Hw_Config2) & ~(TSP_HW_CFG2_PIDFLT1_SOURCE_TSIF_MMFI0)));
2744             break;
2745         case TSP_PIDFLT1_USE_TSIF_MMFI0:
2746             _HAL_REG32_W(&_TspCtrl[0].Hw_Config2, (_HAL_REG32_R(&_TspCtrl[0].Hw_Config2) | (TSP_HW_CFG2_PIDFLT1_SOURCE_TSIF_MMFI0)));
2747             break;
2748         default:
2749             break;
2750     }
2751     return TRUE;
2752 }
2753 
HAL_TSP_Ind_Enable(void)2754 void HAL_TSP_Ind_Enable(void)
2755 {
2756     _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
2757             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_SW_RST));
2758 }
2759 
HAL_TSP_HW_INT_STATUS(void)2760 MS_U32 HAL_TSP_HW_INT_STATUS(void)
2761 {
2762     return (MS_U32)(_HAL_REG16_R(&_TspCtrl[0].HwInt_Stat) & TSP_HWINT_STATUS_MASK);
2763 }
2764 
HAL_TSP_HW_INT2_STATUS(void)2765 MS_U32 HAL_TSP_HW_INT2_STATUS(void)
2766 {
2767     return (MS_U32)(_HAL_REG16_R(&_TspCtrl[0].SwInt_Stat1_L) & TSP_HWINT2_STATUS_MASK);
2768 }
2769 
HAL_TSP_SetBank(MS_U32 u32BankAddr,MS_U32 u32PMBankAddr)2770 void HAL_TSP_SetBank(MS_U32 u32BankAddr, MS_U32 u32PMBankAddr)
2771 {
2772     _u32RegBase = u32BankAddr;
2773     _u32PMRegBase = u32PMBankAddr;
2774     _TspCtrl   = (REG_Ctrl*)(_u32RegBase+ REG_CTRL_BASE);
2775     _TspCtrl2  = (REG_Ctrl2*)(_u32RegBase + REG_CTRL_MMFIBASE);
2776     _TspCtrl3  = (REG_Ctrl3*)(_u32RegBase + REG_CTRL_TSP3);
2777     _TspCtrl4  = (REG_Ctrl4*)(_u32RegBase + REG_CTRL_TSP4);
2778     _TspCtrl5  = (REG_Ctrl5*)(_u32RegBase + REG_CTRL_TSP5);
2779     _TspSample = (REG_TS_Sample*)(_u32RegBase + REG_CTRL_TS_SAMPLE);
2780 }
2781 
HAL_TSP_Reset(MS_U32 u32EngId)2782 void HAL_TSP_Reset(MS_U32 u32EngId)
2783 {
2784     _HAL_REG32_W(&_TspCtrl[u32EngId].TSP_Ctrl, 0);
2785 }
2786 
HAL_TSP_HwPatch(void)2787 void HAL_TSP_HwPatch(void)
2788 {
2789     _HAL_REG16_W(&_TspCtrl3[0].HWeco0,
2790                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl3[0].HWeco0), HW_ECO_RVU|HW_ECO_NEW_SYNCP_IN_ECO|HW_ECO_FIX_SEC_NULLPKT_ERR));
2791 
2792     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2793             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_BYTE_ADDR_DMA|TSP_HW_CFG4_ALT_TS_SIZE|TSP_HW_CFG4_ISYNC_PATCH_EN));
2794 
2795     // Bad initial value of TSP_CTRL1
2796     // Suppose Standby mode for TSP should NOT be enabled.
2797     // Enabling TSP standby mode cause TSP section registers (SRAM in AEON) malfunction.
2798     // Disable it by SW at this stage.
2799     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2800             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_STANDBY));
2801 
2802     //enable PVR record to bypass header
2803     _HAL_REG32_W(&_TspCtrl[0].reg15b4,
2804             _HAL_REG32_R(&_TspCtrl[0].reg15b4)|(TSP_PVR_PID_BYPASS|TSP_PVR_PID_BYPASS2));
2805 
2806     //_HAL_REG32_W(&_TspCtrl[0].reg163C,
2807     //        SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg163C), TSP_ALL_VALID_EN));
2808     _HAL_REG32_W(&_TspCtrl[0].HW2_Config3, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), (/*TSP_VQ2PINGPONG_EN |*/ TSP_PVR1_ALIGN_EN|TSP_RM_PKT_DEMUX_PIPE)));
2809 
2810     //Disable all live pathes block mechanism
2811     _HAL_REG32_W(&_TspCtrl[0].reg160C, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), (TSP_RM_DMA_GLITCH|TSP_VQTX0_BLOCK_DIS|TSP_VQTX2_BLOCK_DIS)));
2812 
2813     //enable ECO bit for section DMA burst mode
2814     _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein,
2815         _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | TSP_SEC_DMA_BURST_EN | TSP_REMOVE_DUP_AV_PKT | TSP_HW_STANDBY_MODE);
2816 
2817     //Disable pvr1 & pvr2 block mechanism
2818     //DisableAV FIFO block mechanism for live path
2819     _HAL_REG32_W(&_TspCtrl[0].PVR2_Config,
2820         _HAL_REG32_R(&_TspCtrl[0].PVR2_Config)|(TSP_PVR2_PVR_ALIGN_EN|TSP_PVR1_BLOCK_DIS|TSP_PVR2_BLOCK_DIS|TSP_V_BLOCK_DIS|TSP_AUD_BLOCK_DIS|TSP_AUDB_BLOCK_DIS|TSP_V3D_BLOCK_DIS));
2821 
2822     // Set filein segment bit to 0
2823     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2824             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_PVR_CMD_QUEUE_ENABLE));
2825 
2826     _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | (TSP_SYSTIME_MODE_STC64));
2827 
2828     _HAL_REG16_W(&_TspCtrl3[0].HW3_Cfg0, _HAL_REG16_R(&_TspCtrl3[0].HW3_Cfg0) | (PREVENT_SRAM_COLLISION | PUSI_THREE_BYTE_MODE));
2829 
2830     //sync byte
2831     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif0[0]), 0x4747);
2832     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif0[1]), 0x4747);
2833     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif0[2]), 0x4747);
2834     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif0[3]), 0x4747);
2835     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_file[0]), 0x4747);
2836     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_file[1]), 0x4747);
2837     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_file[2]), 0x4747);
2838     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_file[3]), 0x4747);
2839     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif1[0]), 0x4747);
2840     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif1[1]), 0x4747);
2841     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif1[2]), 0x4747);
2842     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif1[3]), 0x4747);
2843 
2844     //source id
2845     _HAL_REG16_W(&(_TspCtrl3[0].SourceId_tsif0[0]), 0x3210);
2846     _HAL_REG16_W(&(_TspCtrl3[0].SourceId_tsif0[1]), 0x7654);
2847     _HAL_REG16_W(&(_TspCtrl3[0].SourceId_file[0]), 0x3210);
2848     _HAL_REG16_W(&(_TspCtrl3[0].SourceId_file[1]), 0x7654);
2849     _HAL_REG16_W(&(_TspCtrl3[0].SourceId_tsif1[0]), 0x3210);
2850     _HAL_REG16_W(&(_TspCtrl3[0].SourceId_tsif1[1]), 0x7654);
2851 
2852     //drop scmb packet
2853     _HAL_REG16_W(&_TspCtrl3[0].HW3_Cfg1, _HAL_REG16_R(&_TspCtrl3[0].HW3_Cfg1) | (MASK_SCR_VID_EN|MASK_SCR_VID_3D_EN|MASK_SCR_AUD_EN|MASK_SCR_AUD_B_EN));
2854 
2855     //ENBLE to not check
2856      _HAL_REG32_W(&_TspCtrl[0].DMAW_ERR_WADDR_SRC_SEL, _HAL_REG32_R(&_TspCtrl[0].DMAW_ERR_WADDR_SRC_SEL) | (TSP_BLK_AF_SCRMB_BIT));
2857 
2858     //Enable eco bit: 192 file-in timer 0 fail
2859     _HAL_REG16_W(&_TspCtrl5[0].TSP5_Eco, _HAL_REG16_R(&_TspCtrl5[0].TSP5_Eco) | (TSP_192_TIMER_0_EN));
2860 
2861     //VQ parameters
2862     _HAL_REG32_W(&_TspCtrl[0].VQ0_CTRL,   (_HAL_REG32_R(&_TspCtrl[0].VQ0_CTRL)  & ~TSP_VQ0_FORCE_FIRE_CNT_1K_MASK) | (0x0C << TSP_VQ0_FORCE_FIRE_CNT_1K_SHIFT));
2863     _HAL_REG32_W(&_TspCtrl[0].VQ1_Config, (_HAL_REG32_R(&_TspCtrl[0].VQ1_Config) & ~TSP_VQ1_FORCEFIRE_CNT_1K_MASK) | (0x0C << TSP_VQ1_FORCEFIRE_CNT_1K_SHIFT));
2864     _HAL_REG32_W(&_TspCtrl[0].VQ2_Config, (_HAL_REG32_R(&_TspCtrl[0].VQ2_Config) & ~TSP_VQ2_FORCEFIRE_CNT_1K_MASK) | (0x0C << TSP_VQ2_FORCEFIRE_CNT_1K_SHIFT));
2865 
2866 }
2867 
2868 //  Default value of low bound is 0, default value of up bound is 0xFFFFFFFF, means no protection
2869 //  If set both low bound and up bound to be 0, means protection all
2870 //  The range can be written:  u32StartAddr <= x < u32EndAddr
2871 //  Protection range: x >= u32EndAddr && x < u32StartAddr
HAL_TSP_OrzWriteProtect_Enable(MS_BOOL bEnable,MS_U32 u32StartAddr,MS_U32 u32EndAddr)2872 void HAL_TSP_OrzWriteProtect_Enable(MS_BOOL bEnable, MS_U32 u32StartAddr, MS_U32 u32EndAddr)
2873 {
2874     MS_U32  lbnd, ubnd;
2875 
2876     if (bEnable)
2877     {
2878         if(u32StartAddr == u32EndAddr)
2879             u32StartAddr += (1 << MIU_BUS);
2880 
2881         lbnd  = (u32StartAddr >>  MIU_BUS) & TSP_ORZ_DMAW_LBND_MASK;
2882         ubnd  = (u32EndAddr >>  MIU_BUS) & TSP_ORZ_DMAW_UBND_MASK;
2883         _HAL_REG32_W(&_TspCtrl[0].ORZ_DMAW_LBND, lbnd);
2884         _HAL_REG32_W(&_TspCtrl[0].ORZ_DMAW_UBND, ubnd);
2885         _HAL_REG32_W(&_TspCtrl[0].reg160C, _HAL_REG32_R(&_TspCtrl[0].reg160C) | TSP_ORZ_DMAW_PROT_EN);
2886     }
2887     else
2888     {
2889         _HAL_REG32_W(&_TspCtrl[0].reg160C, _HAL_REG32_R(&_TspCtrl[0].reg160C) & ~TSP_ORZ_DMAW_PROT_EN);
2890     }
2891 }
2892 
HAL_TSP_RemoveDupAVPkt(MS_BOOL bEnable)2893 void HAL_TSP_RemoveDupAVPkt(MS_BOOL bEnable)
2894 {
2895     if(bEnable)
2896     {
2897         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | TSP_REMOVE_DUP_AV_PKT);
2898     }
2899     else
2900     {
2901         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) & ~TSP_REMOVE_DUP_AV_PKT);
2902     }
2903 }
2904 
HAL_TSP_RemoveDupAVFifoPkt(MS_U32 u32StreamId,MS_BOOL bEnable)2905 void HAL_TSP_RemoveDupAVFifoPkt(MS_U32 u32StreamId, MS_BOOL bEnable)
2906 {
2907     MS_U32 u32Flag[6] = {TSP_REMOVE_DUP_VIDEO_PKT, TSP_REMOVE_DUP_AUDIO_PKT, TSP_REMOVE_DUP_AUDIOB_PKT, TSP_REMOVE_DUP_VIDEO3D_PKT};
2908 
2909     if(bEnable)
2910     {
2911         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein,
2912             _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | u32Flag[u32StreamId]);
2913     }
2914     else
2915     {
2916         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein,
2917             _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) & ~u32Flag[u32StreamId]);
2918     }
2919 }
2920 
HAL_TSP_TEI_RemoveErrorPkt(MS_U32 u32PktType,MS_BOOL bEnable)2921 void HAL_TSP_TEI_RemoveErrorPkt(MS_U32 u32PktType, MS_BOOL bEnable)
2922 {
2923     // don't implement yet
2924 }
2925 
HAL_TSP_GetTSIF_Status(MS_U8 u8TsIfId,MS_U16 * pu16Pad,MS_U16 * pu16Clk,MS_BOOL * pbExtSync,MS_BOOL * pbParl)2926 MS_BOOL HAL_TSP_GetTSIF_Status(MS_U8 u8TsIfId, MS_U16* pu16Pad, MS_U16* pu16Clk, MS_BOOL* pbExtSync, MS_BOOL* pbParl)
2927 {
2928     MS_U16 u16dta;
2929     MS_U32 u32data;
2930 
2931     *pu16Pad = 0xFFFF;
2932     *pu16Clk = TSP_CLK_DISABLE;
2933     *pbExtSync = FALSE;
2934     *pbParl = FALSE;
2935 
2936     if(u8TsIfId == 0x80)
2937     {
2938         *pu16Pad = (_HAL_REG16_R(&(_TspCtrl5[0].TS_MUX_CFG0)) >> TS_MUX_CFG_TSFI_MUX_SHIFT) & TS_MUX_CFG_TS0_MUX_MASK;
2939         *pu16Clk = (TSP_CLKGEN1_REG(REG_CLKGEN1_TSN_CLKFI) >> REG_CLKGEN1_TSN_CLK_TSFI_SHIFT) & REG_CLKGEN0_TSN_CLK_MASK;
2940         u16dta = _HAL_REG16_R(&_TspCtrl5[0].Ts_If_Fi_Cfg);
2941         *pbExtSync = (MS_BOOL)(u16dta & TSP_FIIF_EXT_SYNC_SEL);
2942         *pbParl = (MS_BOOL)(u16dta & TSP_FIIF_P_SEL);
2943         return TRUE;
2944     }
2945     else if(u8TsIfId >= TSP_IF_NUM)
2946     {
2947         return FALSE;
2948     }
2949 
2950     u16dta = _HAL_REG16_R(&(_TspCtrl5[0].TS_MUX_CFG0));
2951 
2952     switch(u8TsIfId)
2953     {
2954         case 0:
2955         default:
2956             u16dta >>= TS_MUX_CFG_TS0_MUX_SHIFT;
2957             *pu16Clk = (TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) >> REG_CLKGEN0_TSN_CLK_TS0_SHIFT) & REG_CLKGEN0_TSN_CLK_MASK;
2958             u32data = _HAL_REG32_R(&_TspCtrl[0].Hw_Config0);
2959             *pbExtSync = ((u32data & TSP_HW_CFG0_TSIF0_EXTSYNC) == TSP_HW_CFG0_TSIF0_EXTSYNC);
2960             *pbParl = ((u32data & TSP_HW_CFG0_TSIF0_PARL) == TSP_HW_CFG0_TSIF0_PARL);
2961             break;
2962         case 1:
2963             u16dta >>= TS_MUX_CFG_TS1_MUX_SHIFT;
2964             *pu16Clk = (TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) >> REG_CLKGEN0_TSN_CLK_TS1_SHIFT) & REG_CLKGEN0_TSN_CLK_MASK;
2965             u32data = _HAL_REG32_R(&_TspCtrl[0].Hw_Config2);
2966             *pbExtSync = ((u32data & TSP_HW_CFG2_TSIF1_EXTSYNC) == TSP_HW_CFG2_TSIF1_EXTSYNC);
2967             *pbParl = ((u32data & TSP_HW_CFG2_TSIF1_PARL) == TSP_HW_CFG2_TSIF1_PARL);
2968             break;
2969     }
2970 
2971     *pu16Pad = u16dta & TS_MUX_CFG_TS0_MUX_MASK;
2972 
2973     return TRUE;
2974 }
2975 
HAL_TSP_Check_FIFO_Overflow(MS_U32 u32StreamId)2976 MS_BOOL HAL_TSP_Check_FIFO_Overflow(MS_U32 u32StreamId)
2977 {
2978     MS_U32 u32data = _HAL_REG32_R(&_TspCtrl[0].Idr_Read1);
2979 
2980     switch (u32StreamId)
2981     {
2982         case 0: // return VFifo status
2983             return ((u32data & TSP_VD_FIFO_OVERFLOW) == TSP_VD_FIFO_OVERFLOW);
2984         case 1: // return AFifo 0 status
2985             return ((u32data & TSP_AU_FIFO_OVERFLOW) == TSP_AU_FIFO_OVERFLOW);
2986         case 2: // return AFifo 1 status
2987             return ((u32data & TSP_AUB_FIFO_OVERFLOW) == TSP_AUB_FIFO_OVERFLOW);
2988         case 3: // return V3D Fifo status
2989             return ((u32data & TSP_V3D_FIFO_OVERFLOW) == TSP_V3D_FIFO_OVERFLOW);
2990         default:
2991             return FALSE;
2992     }
2993 }
2994 
HAL_TSP_HWPcr_SetSrcId(MS_U32 u32EngId,MS_U32 u32SrcId)2995 void HAL_TSP_HWPcr_SetSrcId(MS_U32 u32EngId, MS_U32 u32SrcId)
2996 {
2997     _HAL_REG32_W(&_TspCtrl3[0].PIDFLR_PCR[u32EngId],
2998                 (_HAL_REG32_R(&_TspCtrl3[0].PIDFLR_PCR[u32EngId]) & ~TSP_PIDFLT_PCR_SOURCE_MASK) | (u32SrcId << TSP_PIDFLT_PCR_SOURCE_SHIFT));
2999 }
3000 
HAL_TSP_HWPcr_SelSrc(MS_U32 u32EngId,MS_U32 u32Src)3001 void HAL_TSP_HWPcr_SelSrc(MS_U32 u32EngId, MS_U32 u32Src)
3002 {
3003 #if (TSP_HWPCR_BY_HK == 1 || !defined(HWPCR_ENABLE))
3004 
3005     _HAL_REG32_W(&_TspCtrl[0].FIFO_Src,
3006                 (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_PCR0_SRC_MASK) | (u32Src << TSP_PCR0_SRC_SHIFT));
3007 #else
3008     _HAL_TSP_CMD_Write_HWPCR_Reg(TSP_PCR0_SRC_MASK, (u32Src << TSP_PCR0_SRC_SHIFT));
3009 #endif
3010 
3011 }
3012 
HAL_TSP_HWPcr_Reset(MS_U32 u32EngId,MS_BOOL bReset)3013 void HAL_TSP_HWPcr_Reset(MS_U32 u32EngId, MS_BOOL bReset)
3014 {
3015     MS_U32 u32value = TSP_PCR0_RESET;
3016 
3017 #if (TSP_HWPCR_BY_HK == 1 || !defined(HWPCR_ENABLE))
3018 
3019     if(bReset)
3020     {
3021         _HAL_REG32_W(&_TspCtrl[0].FIFO_Src,
3022                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].FIFO_Src), u32value));
3023     }
3024     else
3025     {
3026         _HAL_REG32_W(&_TspCtrl[0].FIFO_Src,
3027                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].FIFO_Src), u32value));
3028     }
3029 #else
3030     if(bReset)
3031     {
3032         _HAL_TSP_CMD_Write_HWPCR_Reg(u32value, 0);
3033     }
3034     else
3035     {
3036         _HAL_TSP_CMD_Write_HWPCR_Reg(u32value, 1);
3037     }
3038 #endif
3039 
3040 }
3041 
HAL_TSP_HWPcr_Read(MS_U32 u32EngId,MS_U32 * pu32Pcr,MS_U32 * pu32Pcr_32)3042 void HAL_TSP_HWPcr_Read(MS_U32 u32EngId, MS_U32 *pu32Pcr, MS_U32 *pu32Pcr_32)
3043 {
3044     MS_U32 u32Mask = TSP_PCR0_READ;
3045     MS_U16 u16value = TSP_HWINT2_PCR0_UPDATE_END;
3046 
3047     _HAL_REG32_W(&_TspCtrl[0].FIFO_Src,
3048             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].FIFO_Src), u32Mask));
3049 
3050     *pu32Pcr = _HAL_REG32_R(&_TspCtrl[0].HWPCR0_L);
3051     *pu32Pcr_32 = _HAL_REG32_R(&_TspCtrl[0].HWPCR0_H) & 0x00000001;
3052 
3053     _HAL_TSP_HwInt2_BitClr(u16value);
3054 
3055     _HAL_REG32_W(&_TspCtrl[0].FIFO_Src,
3056             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].FIFO_Src), u32Mask));
3057 }
3058 
HAL_TSP_HWPcr_Int_Enable(MS_U32 u32EngId,MS_BOOL bEnable)3059 void HAL_TSP_HWPcr_Int_Enable(MS_U32 u32EngId, MS_BOOL bEnable)
3060 {
3061     MS_U16 u16Mask = TSP_HWINT2_PCR0_UPDATE_END;
3062 
3063     if(bEnable)
3064     {
3065         _HAL_TSP_HwInt2_BitSet(u16Mask);
3066     }
3067     else
3068     {
3069         _HAL_TSP_HwInt2_BitClr(u16Mask);
3070     }
3071 }
3072 
3073 //--------------------------------------------------------------------------------------------------
3074 // For STC part
3075 //--------------------------------------------------------------------------------------------------
HAL_TSP_Stc_ctrl(MS_U32 u32EngId,MS_U32 u32Sync)3076 void HAL_TSP_Stc_ctrl(MS_U32 u32EngId, MS_U32 u32Sync)
3077 {
3078     MS_U32 u32value = 0;
3079 
3080     /////////////Set STC control by HK////////////////
3081     // select synth from chip top : bit 1 -> 0 -> controlled by HK
3082     u32value = REG_CLKGEN0_STC_CW_SEL;
3083     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~u32value;
3084 
3085     // set HK STC synth CW
3086      //if CLK_MPLL_SYN is 432MHz, set 0x28000000;if CLK_MPLL_SYN is 216MHz, set 0x14000000
3087     u32value = REG_CLKGEN0_DC0_STC_CW_L;
3088     TSP_CLKGEN0_REG(u32value) = (MS_U16)(u32Sync & 0xFFFF);
3089     u32value = REG_CLKGEN0_DC0_STC_CW_H;
3090     TSP_CLKGEN0_REG(u32value) = (MS_U16)(u32Sync >> 16);
3091 
3092     // set STC synth
3093     u32value = REG_CLKGEN0_STC_CW_EN;
3094     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~u32value;
3095     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) |= u32value;
3096     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~u32value;
3097 
3098     /////////////Set STC control by TSP////////////////
3099     // select synth from TSP      : bit 1 -> 1 -> controlled by TSP
3100     u32value = REG_CLKGEN0_STC_CW_SEL;
3101     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) |= u32value;
3102 
3103     // set TSP STC synth CW
3104     //if CLK_MPLL_SYN is 432MHz, set 0x28000000;if CLK_MPLL_SYN is 216MHz, set 0x14000000
3105     u32value = 0x0021024c;
3106     HAL_REG32_IndW((REG32 *)(u32value<<1), u32Sync);
3107 
3108     // t2 , t3 had no 0x0021025c, it was add after t4, eanble synthesizer
3109     u32value = 0x01;
3110     HAL_REG32_IndW((REG32 *)(0x0021025c<<1), HAL_REG32_IndR((REG32 *)(0x0021025c<<1))|u32value);
3111     HAL_REG32_IndW((REG32 *)(0x0021025c<<1), HAL_REG32_IndR((REG32 *)(0x0021025c<<1))& ~u32value);
3112 }
3113 
3114 // GET MCU STC synth CW
HAL_TSP_GetSTCSynth(MS_U32 u32EngId)3115 MS_U32 HAL_TSP_GetSTCSynth(MS_U32 u32EngId)
3116 {
3117     MS_U32 u32value = 0, u32sync = 0;
3118 
3119     u32value = REG_CLKGEN0_DC0_STC_CW_L;
3120     u32sync = (MS_U32)TSP_CLKGEN0_REG(u32value);
3121     u32value = REG_CLKGEN0_DC0_STC_CW_H;
3122     u32sync |= (((MS_U32)TSP_CLKGEN0_REG(u32value)) << 16);
3123 
3124     return u32sync;
3125 }
3126 
HAL_TSP_STC_Update_Disable(MS_U32 u32EngId,MS_BOOL bDisable)3127 void HAL_TSP_STC_Update_Disable(MS_U32 u32EngId, MS_BOOL bDisable)
3128 {
3129     if(bDisable)
3130     {
3131         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
3132                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_cnt_33b_ld));
3133     }
3134     else
3135     {
3136         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
3137                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_cnt_33b_ld));
3138     }
3139 }
3140 
HAL_TSP_GetSTC(MS_U32 u32EngId)3141 MS_U32 HAL_TSP_GetSTC(MS_U32 u32EngId)
3142 {
3143     if(HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein), TSP_SYSTIME_MODE_STC64))
3144     {
3145         MS_U32 u32temp;
3146 
3147         u32temp = (_HAL_REG32_R(&_TspCtrl[0].TsRec_Tail2_Pcr1) & TSP_PCR64_L16_MASK) >> TSP_PCR64_L16_SHFT;
3148         u32temp |= ((_HAL_REG32_R(&_TspCtrl[0].Pcr1) & 0xFFFF) << 16);
3149         return u32temp ;
3150     }
3151     else
3152     {
3153         return HAL_REG32_IndR((REG32 *)(0x00210244<< 1));
3154     }
3155 
3156     return 0;
3157 }
3158 
HAL_TSP_GetSTC_32(MS_U32 u32EngId)3159 MS_U32 HAL_TSP_GetSTC_32(MS_U32 u32EngId)
3160 {
3161     if(HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein), TSP_SYSTIME_MODE_STC64))
3162     {
3163         MS_U32 u32temp;
3164 
3165         u32temp = (_HAL_REG32_R(&_TspCtrl[0].Pcr1) >> 16)& 0xFFFF;
3166         u32temp |= (((_HAL_REG32_R(&_TspCtrl[0].Pcr64_H) & TSP_PCR64_H16_MASK) & 0xFFFF) << 16);
3167         return u32temp ;
3168     }
3169     else
3170     {
3171         return (HAL_REG32_IndR((REG32 *)(0x00210248<< 1)) & 0x01);
3172     }
3173 }
3174 
HAL_TSP_SetSTC(MS_U32 u32EngId,MS_U32 u32STC,MS_U32 u32STC_32)3175 void HAL_TSP_SetSTC(MS_U32 u32EngId, MS_U32 u32STC, MS_U32 u32STC_32)
3176 {
3177     if(HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein), TSP_SYSTIME_MODE_STC64))
3178     {
3179         MS_U32 u32temp;
3180 
3181         u32temp = ((u32STC & 0xFFFF) << TSP_PCR64_L16_SHFT) |
3182                 (_HAL_REG32_R(&_TspCtrl[0].TsRec_Tail2_Pcr1) & ~TSP_PCR64_L16_MASK);
3183         _HAL_REG32_W(&_TspCtrl[0].TsRec_Tail2_Pcr1, u32temp);
3184 
3185         u32temp = ((u32STC >> 16) & 0xFFFF) | ((u32STC_32 & 0xFFFF) << 16);
3186         _HAL_REG32_W(&_TspCtrl[0].Pcr1, u32temp);
3187 
3188         u32temp = (_HAL_REG32_R(&_TspCtrl[0].Pcr64_H) & ~TSP_PCR64_H16_MASK) | ((u32STC_32 >> 16) & TSP_PCR64_H16_MASK);
3189         _HAL_REG32_W(&_TspCtrl[0].Pcr64_H, u32temp);
3190     }
3191     else
3192     {
3193         HAL_REG32_IndW((REG32 *)(0x00210244<< 1), u32STC);
3194         HAL_REG32_IndW((REG32 *)(0x00210248<< 1), u32STC_32  & 0x01);
3195     }
3196 }
3197 
HAL_TSP_SelectSTCEng(MS_U32 u32FltSrc,MS_U32 u32Eng)3198 MS_BOOL HAL_TSP_SelectSTCEng(MS_U32 u32FltSrc, MS_U32 u32Eng)
3199 {
3200     MS_U32 u32cmd = TSP_MCU_CMD_SEL_STC_ENG|((u32FltSrc >> TSP_PIDFLT_IN_SHIFT) << TSP_MCU_CMD_SEL_STC_ENG_FLTSRC_SHIFT)|u32Eng;
3201 
3202     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, u32cmd);
3203 
3204     while(_HAL_REG32_R(&_TspCtrl[0].MCU_Cmd) != 0);
3205 
3206     return TRUE;
3207 }
3208 
3209 #if 0
3210 void HAL_TSP_SetSTC_32(MS_U32 u32EngId, MS_U32 u32STC_32)
3211 {
3212     if(u32EngId == 1)
3213     {
3214         _HAL_REG32_W(&_TspCtrl[0].PCR64_2_H, u32STC_32);
3215         return;
3216     }
3217 
3218     if(HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein), TSP_SYSTIME_MODE_STC64))
3219     {
3220         MS_U32 u32temp;
3221 
3222         u32temp = (_HAL_REG32_R(&_TspCtrl[0].Pcr1) & ~ 0xFFFF0000) | ((u32STC_32 & 0xFFFF) << 16);
3223         _HAL_REG32_W(&_TspCtrl[0].Pcr1, u32temp);
3224         u32temp = (_HAL_REG32_R(&_TspCtrl[0].Pcr64_H) & ~TSP_PCR64_H16_MASK) | ((u32STC_32 >> 16) & TSP_PCR64_H16_MASK);
3225         _HAL_REG32_W(&_TspCtrl[0].Pcr64_H, u32temp);
3226     }
3227     else
3228     {
3229         HAL_REG32_IndW((REG32 *)(0x00210248<< 1), u32STC_32  & 0x01);
3230     }
3231 }
3232 #endif
3233 
HAL_TSP_CmdQ_SetSTC(MS_U32 u32EngId,MS_U32 u32STC)3234 void HAL_TSP_CmdQ_SetSTC(MS_U32 u32EngId, MS_U32 u32STC)
3235 {
3236     _HAL_REG32_W(&_TspCtrl[0].Pcr.ML, u32STC);
3237 }
3238 
HAL_TSP_CmdQ_SetSTC_32(MS_U32 u32EngId,MS_U32 u32STC_32)3239 void HAL_TSP_CmdQ_SetSTC_32(MS_U32 u32EngId, MS_U32 u32STC_32)
3240 {
3241     _HAL_REG32L_W(&_TspCtrl[0].Pcr.H32, u32STC_32 & 0x01);
3242 }
3243 
HAL_TSP_CmdQ_GetSTC(MS_U32 u32EngId)3244 MS_U32 HAL_TSP_CmdQ_GetSTC(MS_U32 u32EngId)
3245 {
3246     return (_HAL_REG32_R(&_TspCtrl[0].Pcr.ML));
3247 }
3248 
HAL_TSP_CmdQ_GetSTC_32(MS_U32 u32EngId)3249 MS_U32  HAL_TSP_CmdQ_GetSTC_32(MS_U32 u32EngId)
3250 {
3251     return (_HAL_REG32L_R(&_TspCtrl[0].Pcr.H32) & 0x01);
3252 }
3253 
HAL_TSP_STC_UpdateCtrl(MS_U8 u8Eng,MS_U8 u8Opt)3254 MS_BOOL HAL_TSP_STC_UpdateCtrl(MS_U8 u8Eng, MS_U8 u8Opt)
3255 {
3256     MS_U32 i = 0;
3257     MS_U32 u32Enable = 0;
3258     MS_U32 u32Cmd = 0;
3259 
3260     if(u8Opt & HAL_TSP_STC_UPDATE_HK)
3261     {
3262         u32Enable = 1;
3263     }
3264     if(u8Opt & HAL_TSP_STC_UPDATE_UPDATEONCE)
3265     {
3266         u32Cmd = TSP_MCU_CMD_CTRL_STC_UPDATE_ONCE;
3267     }
3268 
3269     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, u32Enable);
3270 
3271     u32Cmd |= TSP_MCU_CMD_CTRL_STC_UPDATE;
3272     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, u32Cmd);
3273 
3274     while (i< 4)
3275     {
3276         if (0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
3277         {
3278             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
3279             return TRUE;
3280         }
3281         i++;
3282         _delay();
3283     }
3284     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
3285     return FALSE;
3286 }
3287 
HAL_TSP_GetPcr(MS_U32 u32EngId,MS_U32 * pu32Pcr_32,MS_U32 * pu32Pcr)3288 MS_BOOL HAL_TSP_GetPcr(MS_U32 u32EngId, MS_U32 *pu32Pcr_32, MS_U32 *pu32Pcr)
3289 {
3290     MS_U32 i = 0;
3291 
3292     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
3293     _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, 0);
3294     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_PCR_GET | (u32EngId << TSP_MCU_CMD_NMATCH_FLT_SHFT));
3295     while (i< 4)
3296     {
3297         if (0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
3298         {
3299             *pu32Pcr = _HAL_REG32_R(&_TspCtrl[0].MCU_Data0);
3300             *pu32Pcr_32 = _HAL_REG32_R(&_TspCtrl[0].MCU_Data1);
3301             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
3302             _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, 0);
3303             return ((0!= *pu32Pcr) || (0!= *pu32Pcr_32))? TRUE: FALSE;
3304         }
3305         i++;
3306         _delay();
3307     }
3308     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
3309     return FALSE;
3310 }
3311 
HAL_TSP_SetSTCOffset(MS_U32 u32EngId,MS_U32 u32Offset,MS_BOOL bAdd)3312 MS_BOOL HAL_TSP_SetSTCOffset(MS_U32 u32EngId, MS_U32 u32Offset, MS_BOOL bAdd)
3313 {
3314     MS_U32 u32opt = ((MS_U32)bAdd & 0xFF) << TSP_MCU_CMD_SET_STC_OFFSET_OPTION_SHIFT;
3315 
3316     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, u32Offset);
3317     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_SET_STC_OFFSET | u32opt | u32EngId);
3318 
3319     while(_HAL_REG32_R(&_TspCtrl[0].MCU_Cmd) != 0);
3320 
3321     return TRUE;
3322 }
3323 
3324 
HAL_TSP_CmdQ_IsEmpty(void)3325 MS_BOOL HAL_TSP_CmdQ_IsEmpty(void)
3326 {
3327     if (_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ) & TSP_CMDQ_EMPTY)
3328     {
3329         return TRUE;
3330     }
3331     return FALSE;
3332 }
3333 
HAL_TSP_Int_Disable(MS_U32 u32Mask)3334 void HAL_TSP_Int_Disable(MS_U32 u32Mask)
3335 {
3336     _HAL_REG16_W(&_TspCtrl[0].HwInt_Stat,
3337             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].HwInt_Stat)|0xFF00, (MS_U16)(u32Mask>>8)));
3338 }
3339 
HAL_TSP_Int2_Disable(MS_U32 u32Mask)3340 void HAL_TSP_Int2_Disable(MS_U32 u32Mask)
3341 {
3342     _HAL_TSP_HwInt2_BitClr((MS_U16)(u32Mask >> 8));
3343 }
3344 
HAL_TSP_Int_Enable(MS_U32 u32Mask)3345 void HAL_TSP_Int_Enable(MS_U32 u32Mask)
3346 {
3347     _HAL_REG16_W(&_TspCtrl[0].HwInt_Stat,
3348             SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].HwInt_Stat)|0xFF00, (MS_U16)(u32Mask>>8)));
3349 }
3350 
HAL_TSP_Int2_Enable(MS_U32 u32Mask)3351 void HAL_TSP_Int2_Enable(MS_U32 u32Mask)
3352 {
3353     _HAL_TSP_HwInt2_BitSet((MS_U16)(u32Mask>>8));
3354 }
3355 
3356 #define ADDR_SWINT2_L           (_u32RegBase+ 0x2db4)
3357 #define ADDR_SWINT2_H           (_u32RegBase+ 0x2db8)
HAL_TSP_Int_ClearSw(void)3358 void HAL_TSP_Int_ClearSw(void)
3359 {
3360     if (_bIsHK)
3361     {
3362         _HAL_REG32_W(&_TspCtrl[0].SwInt_Stat, 0);
3363     }
3364     else
3365     {
3366         REG16_T(ADDR_SWINT2_L) = 0;
3367         REG16_T(ADDR_SWINT2_H) = 0;
3368     }
3369 }
3370 #undef ADDR_SWINT2_L
3371 #undef ADDR_SWINT2_H
3372 
HAL_TSP_Int_ClearHw(MS_U32 u32Mask)3373 void HAL_TSP_Int_ClearHw(MS_U32 u32Mask)
3374 {
3375     _HAL_REG16_W(&_TspCtrl[0].HwInt_Stat,
3376             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].HwInt_Stat)|0xff00, (MS_U16)u32Mask));
3377 }
3378 
HAL_TSP_Int_ClearHw2(MS_U32 u32Mask)3379 void HAL_TSP_Int_ClearHw2(MS_U32 u32Mask)
3380 {
3381     _HAL_TSP_HwInt2_BitClr((MS_U16)u32Mask);
3382 }
3383 
HAL_TSP_CmdQ_CmdCount(void)3384 MS_U32 HAL_TSP_CmdQ_CmdCount(void)
3385 {
3386     return (((_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ) & TSP_CMDQ_CNT_MASK)>>TSP_CMDQ_CNT_SHFT));
3387 }
3388 
HAL_TSP_CmdQ_TsDma_Reset(void)3389 void HAL_TSP_CmdQ_TsDma_Reset(void)
3390 {
3391     _HAL_REG32_W(&_TspCtrl[0].TsDma_Ctrl_CmdQ, 0);
3392 }
3393 
HAL_TSP_CmdQ_Reset(void)3394 MS_BOOL HAL_TSP_CmdQ_Reset(void)
3395 {
3396     int ii = 0;
3397     _HAL_TSP_HW_Lock();
3398     _HAL_HALTSP_LOCK();
3399     //_HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
3400     //    SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FORCE_XIU_WRDY));
3401     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
3402             SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_CMDQ_RESET));
3403     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
3404             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_CMDQ_RESET));
3405     //_HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
3406     //    RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FORCE_XIU_WRDY));
3407 
3408     _HAL_TSP_HW_Unlock();
3409     _HAL_HALTSP_UNLOCK();
3410 
3411     //reset the last data that hw is excuting --> HW new design
3412     _HAL_REG16_W(&_TspCtrl5[0].S2PCfg1,
3413                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].S2PCfg1), TSP_S2PCFG1_WB_FSM_RST));
3414 
3415     for(ii = 0; ii < 100; ii++)
3416     {
3417         if(_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ) & TSP_TSDMA_CTRL_DONE)
3418         {
3419             break;
3420         }
3421         MsOS_DelayTask(1);
3422     }
3423     _HAL_REG16_W(&_TspCtrl5[0].S2PCfg1,
3424                 RESET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].S2PCfg1), TSP_S2PCFG1_WB_FSM_RST));
3425 
3426     if(ii == 100)
3427     {
3428         return FALSE;
3429     }
3430 
3431     //rst_ts_fin
3432     _HAL_REG32_W(&_TspCtrl[0].reg160C, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_TIMESTAMP_RESET));
3433     _HAL_REG32_W(&_TspCtrl[0].reg160C, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_TIMESTAMP_RESET));
3434 
3435     return TRUE;
3436 
3437 }
3438 
HAL_TSP_Get_CmdQFifoLevel(void)3439 MS_U8 HAL_TSP_Get_CmdQFifoLevel(void)
3440 {
3441     return (MS_U8)((_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ) & TSP_CMDQ_WR_LEVEL_MASK) >> TSP_CMDQ_WR_LEVEL_SHFT);
3442 }
3443 
HAL_TSP_WbDmaEnable(MS_BOOL bEnable)3444 void HAL_TSP_WbDmaEnable(MS_BOOL bEnable)
3445 {
3446     if (bEnable)
3447     {
3448         _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
3449                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
3450     }
3451     else
3452     {
3453         _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
3454                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
3455     }
3456 }
3457 
3458 // u32TSSrc: 0 -> TS0, 1 -> File, 2 -> TS1
3459 // u32GroupId: 0 -> filter0~filter31, 1 -> filter32~filter63
HAL_TSP_Scmb_Status(MS_U32 u32TSSrc,MS_U32 u32GroupId,MS_U32 u32PidFltId)3460 MS_U32 HAL_TSP_Scmb_Status(MS_U32 u32TSSrc, MS_U32 u32GroupId, MS_U32 u32PidFltId)
3461 {
3462     MS_U32              u32PIDFltMask = u32PidFltId;
3463     MS_U32              u32ScmbSts = 0;
3464 
3465     _HAL_REG32_W(&_TspCtrl[0].reg15b4,
3466         (_HAL_REG32_R(&_TspCtrl[0].reg15b4) & ~TSP_MATCH_PID_SRC_MASK) | (u32TSSrc << TSP_MATCH_PID_SRC_SHIFT));
3467 
3468     if(u32PidFltId != 0xFFFFFFFF)
3469     {
3470         u32PIDFltMask = (1 << (u32PidFltId & 0x1F));
3471     }
3472 
3473     _HAL_REG16_W(&_TspCtrl5[0].S2PCfg,
3474         (_HAL_REG16_R(&_TspCtrl5[0].S2PCfg) & ~TSP_MATCH_PID_SEL_MASK) | ((MS_U16)u32GroupId << TSP_MATCH_PID_SEL_SHIFT));
3475 
3476     _HAL_REG32_W(&_TspCtrl[0].reg15b4,
3477             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_MATCH_PID_LD));
3478 
3479     u32ScmbSts = HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].TsPidScmbStatTsin), u32PIDFltMask);
3480 
3481     _HAL_REG32_W(&_TspCtrl[0].reg15b4,
3482             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_MATCH_PID_LD));
3483 
3484     if(u32PIDFltMask != 0xFFFFFFFF)
3485     {
3486         u32ScmbSts = ((u32ScmbSts > 0) ? 1: 0);
3487     }
3488 
3489     return u32ScmbSts;
3490 }
3491 
3492 
3493 #if 0
3494 void HAL_TSP_CPU_SetBase(MS_U32 u32Addr, MS_U32 u32Size)
3495 {
3496 #if (!LINUX_TEST)
3497     // TSP FW running in QMEM
3498     _HAL_TSP_FW_load(u32Addr, u32Size, TRUE, TRUE, TRUE);
3499 #else
3500     // only for linux
3501     // @FIXME: abstract this later
3502     void* pBuf = NULL;
3503     MS_U32 u32PhysAddr = 0;
3504 
3505 #if 0
3506     if (NULL == (pBuf = MsOS_AllocateMemory (u32Size, gs32NonCachedPoolID)))
3507     {
3508         MS_ASSERT(0);
3509     }
3510 
3511     memcpy(pBuf, (void*)u32Addr, u32Size);
3512     u32PhysAddr = (MS_U32)VA2PA(pBuf);
3513     printf("firmware 0x%08x 0x%08x\n", (MS_U32)pBuf, u32Addr);
3514     _HAL_TSP_FW_load(u32PhysAddr, u32Size, TRUE, TRUE, TRUE);
3515     MsOS_FreeMemory(pBuf, gs32NonCachedPoolID);
3516 #else
3517     if (NULL == (pBuf = MsOS_AllocateMemory (72*1024*1024, gs32NonCachedPoolID)))
3518     {
3519         MS_ASSERT(0);
3520     }
3521     u32PhysAddr = 60*1024*1024;
3522     memcpy(PA2KSEG1(u32PhysAddr), (void*)u32Addr, u32Size);
3523     printf("firmware 0x%08x 0x%08x\n", (MS_U32)PA2KSEG1(u32PhysAddr), u32PhysAddr);
3524     _HAL_TSP_FW_load(u32PhysAddr, u32Size, TRUE, TRUE, TRUE);
3525     MsOS_FreeMemory(pBuf, gs32NonCachedPoolID);
3526 #endif
3527 #endif
3528 }
3529 #else
HAL_TSP_CPU_SetBase(MS_U32 u32Addr,MS_U32 u32Size)3530 void HAL_TSP_CPU_SetBase(MS_U32 u32Addr, MS_U32 u32Size)
3531 {
3532     printf("[%s][%d] load firmware (address, size) = (0x%08x, 0x%08x)\n", __FUNCTION__, __LINE__, (int)u32Addr, (int)u32Size);
3533     _HAL_TSP_FW_load(u32Addr, u32Size, TRUE, TRUE, TRUE);
3534 }
3535 
3536 #endif // #if 0
3537 
HAL_TSP_Alive(void)3538 MS_BOOL HAL_TSP_Alive(void)
3539 {
3540     MS_U32 i = 0;
3541     MS_U32 u32Data;
3542 
3543     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
3544     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_ALIVE);
3545     while (i< 4)
3546     {
3547         if (0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
3548         {
3549             u32Data = _HAL_REG32_R(&_TspCtrl[0].MCU_Data0);
3550             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
3551             return (TSP_MCU_DATA_ALIVE == u32Data)? TRUE: FALSE;
3552         }
3553         i++;
3554         _delay();
3555     }
3556     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
3557     return FALSE;
3558 }
3559 
HAL_TSP_SetOwner(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_BOOL bOwner)3560 void HAL_TSP_SetOwner(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_BOOL bOwner)
3561 {
3562     MS_U32 u32HkId;
3563     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
3564 
3565     if (_bIsHK)
3566     {
3567         u32HkId = (bOwner)? 0: 1;
3568     }
3569     else
3570     {
3571         u32HkId = (bOwner)? 1: 0;
3572     }
3573     HAL_REG32_IndW((REG32 *)&pSecFilter->RmnReqCnt, (HAL_REG32_IndR((REG32 *)&pSecFilter->RmnReqCnt) & ~TSP_SECFLT_OWNER_MASK) |
3574                                     ((u32HkId << TSP_SECFLT_OWNER_SHFT) & TSP_SECFLT_OWNER_MASK));
3575 }
3576 
HAL_TSP_FileIn_Set(MS_BOOL bset)3577 void HAL_TSP_FileIn_Set(MS_BOOL bset)
3578 {
3579     if (bset)
3580     {
3581         _HAL_REG32_W(&_TspCtrl[0].reg160C,
3582                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_FILEIN192_EN));
3583     }
3584     else
3585     {
3586         _HAL_REG32_W(&_TspCtrl[0].reg160C,
3587                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_FILEIN192_EN));
3588     }
3589 }
3590 
3591 //Reset file-in timestamp
HAL_TSP_ResetTimeStamp(void)3592 void HAL_TSP_ResetTimeStamp(void)
3593 {
3594     _HAL_REG32_W(&_TspCtrl[0].reg160C,
3595         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_TIMESTAMP_RESET));
3596     _HAL_REG32_W(&_TspCtrl[0].reg160C,
3597         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_TIMESTAMP_RESET));
3598 }
3599 
HAL_TSP_GetPVRTimeStamp(MS_U8 u8PVRId)3600 MS_U32  HAL_TSP_GetPVRTimeStamp(MS_U8 u8PVRId)
3601 {
3602     MS_U32 u32lpcr = 0;
3603 
3604     switch(u8PVRId)
3605     {
3606         case 0:
3607         default:
3608             _HAL_REG32_W(&_TspCtrl[0].reg160C,
3609                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_PVR1_LPCR1_RLD));
3610             u32lpcr = _HAL_REG32_R(&_TspCtrl[0].PVR1_LPcr1);
3611             _HAL_REG32_W(&_TspCtrl[0].reg160C,
3612                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_PVR1_LPCR1_RLD));
3613             break;
3614         case 1:
3615             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config,
3616                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR2_LPCR1_RLD));
3617             u32lpcr = _HAL_REG32_R(&_TspCtrl[0].PVR2_LPCR1);
3618             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config,
3619                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR2_LPCR1_RLD));
3620             break;
3621     }
3622 
3623     return u32lpcr;
3624 }
3625 
HAL_TSP_SetPVRTimeStamp(MS_U8 u8PVRId,MS_U32 u32Stamp)3626 void HAL_TSP_SetPVRTimeStamp(MS_U8 u8PVRId, MS_U32 u32Stamp)
3627 {
3628     switch(u8PVRId)
3629     {
3630         case 0:
3631         default:
3632             _HAL_REG32_W(&_TspCtrl[0].reg160C,
3633                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_PVR1_LPCR1_WLD));
3634             _HAL_REG32_W(&_TspCtrl[0].PVR1_LPcr1,u32Stamp);
3635             _HAL_REG32_W(&_TspCtrl[0].reg160C,
3636                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_PVR1_LPCR1_WLD));
3637             break;
3638         case 1:
3639             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config,
3640                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR2_LPCR1_WLD));
3641             _HAL_REG32_W(&_TspCtrl[0].PVR2_LPCR1,u32Stamp);
3642             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config,
3643                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR2_LPCR1_WLD));
3644             break;
3645     }
3646 }
3647 
HAL_TSP_SetPVRTimeStampClk(MS_U8 u8PVRId,MS_U32 u32ClkSrc)3648 void HAL_TSP_SetPVRTimeStampClk(MS_U8 u8PVRId, MS_U32 u32ClkSrc)
3649 {
3650     MS_U32 u32Flag = 0;
3651     switch (u8PVRId)
3652     {
3653         case 0:
3654             u32Flag = TSP_PVR1_CLK_STAMP_27_EN;
3655             break;
3656         case 1:
3657             u32Flag = TSP_PVR2_CLK_STAMP_27_EN;
3658             break;
3659         default:
3660             break;
3661     }
3662     if(u32ClkSrc == 0x0) // 90K
3663     {
3664         _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
3665             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), u32Flag));
3666     }
3667     else // 27M
3668     {
3669         _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
3670             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), u32Flag));
3671     }
3672 
3673 }
3674 
HAL_TSP_GetPlayBackTimeStamp(void)3675 MS_U32 HAL_TSP_GetPlayBackTimeStamp(void)
3676 {
3677     MS_U32 u32value = 0;
3678 
3679     _HAL_REG32_W(&_TspCtrl[0].reg160C,
3680         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR2_RLD));
3681 
3682     u32value = _HAL_REG32_R(&_TspCtrl[0].LPcr2);
3683 
3684     _HAL_REG32_W(&_TspCtrl[0].reg160C,
3685         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR2_RLD));
3686 
3687 
3688     return u32value;
3689 }
3690 
HAL_TSP_SetPlayBackTimeStamp(MS_U32 u32Stamp)3691 void HAL_TSP_SetPlayBackTimeStamp(MS_U32 u32Stamp)
3692 {
3693     _HAL_REG32_W(&_TspCtrl[0].reg160C,
3694         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR2_WLD));
3695     _HAL_REG32_W(&_TspCtrl[0].LPcr2,u32Stamp);
3696     _HAL_REG32_W(&_TspCtrl[0].reg160C,
3697         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR2_WLD));
3698 }
3699 
HAL_TSP_SetPlayBackTimeStampClk(MS_U8 u8Id,MS_U32 u32ClkSrc)3700 void HAL_TSP_SetPlayBackTimeStampClk(MS_U8 u8Id, MS_U32 u32ClkSrc)
3701 {
3702     if(u32ClkSrc == 0x0) // 90K
3703     {
3704         _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
3705             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_TSIF0_CLK_STAMP_27_EN));
3706     }
3707     else // 27M
3708     {
3709         _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
3710             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_TSIF0_CLK_STAMP_27_EN));
3711     }
3712 }
3713 
HAL_TSP_GetFileInTimeStamp(void)3714 MS_U32 HAL_TSP_GetFileInTimeStamp(void)
3715 {
3716     return _HAL_REG32_R(&_TspCtrl[0].TimeStamp_FileIn);
3717 }
3718 
HAL_TSP_GetFilinReadAddr(MS_PHYADDR * pu32ReadAddr)3719 MS_BOOL HAL_TSP_GetFilinReadAddr(MS_PHYADDR* pu32ReadAddr)
3720 {
3721     _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
3722         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_FILEIN_RADDR_READ));
3723 
3724     *pu32ReadAddr = (_HAL_REG32_R(&_TspCtrl[0].TsFileIn_RPtr) << MIU_BUS);
3725 
3726     _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
3727         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_FILEIN_RADDR_READ));
3728 
3729     return TRUE;
3730 }
3731 
HAL_TSP_SetDMABurstLen(MS_U32 u32Len)3732 void HAL_TSP_SetDMABurstLen(MS_U32 u32Len)
3733 {
3734     MS_U32 u32data = 0;
3735 
3736     switch(u32Len)
3737     {
3738         case 1:
3739             u32data = 0;
3740             break;
3741         case 2:
3742             u32data = 1;
3743             break;
3744         case 4:
3745             u32data = 2;
3746             break;
3747         default:
3748             return;
3749     }
3750 
3751     if((u32Len == 2) || (u32Len == 4))
3752     {
3753         _HAL_REG16_W(&_TspCtrl3[0].HWeco0,
3754             SET_FLAG1(_HAL_REG16_R(&_TspCtrl3[0].HWeco0), HW_ECO_BURST_NEW_MODE0|HW_ECO_BURST_NEW_MODE1));
3755     }
3756     else
3757     {
3758         _HAL_REG16_W(&_TspCtrl3[0].HWeco0,
3759             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl3[0].HWeco0), HW_ECO_BURST_NEW_MODE0|HW_ECO_BURST_NEW_MODE1));
3760     }
3761 
3762     _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein,
3763             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein), TSP_SEC_DMA_BURST_EN));
3764 
3765     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
3766         _HAL_REG32_R(&_TspCtrl[0].Hw_Config4) | ((u32Len<<TSP_HW_DMA_MODE_SHIFT)&TSP_HW_DMA_MODE_MASK));
3767 }
3768 
HAL_TSP_PVR_PacketMode(MS_U8 u8PVRId,MS_BOOL bSet)3769 void HAL_TSP_PVR_PacketMode(MS_U8 u8PVRId, MS_BOOL bSet)
3770 {
3771     REG32 *pReg = 0;
3772     MS_U32 u32Flag = 0;
3773 
3774     switch(u8PVRId)
3775     {
3776         case 0:
3777         default:
3778             pReg = &_TspCtrl[0].reg160C;
3779             u32Flag = TSP_RECORD192_EN;
3780             break;
3781         case 1:
3782             pReg = &_TspCtrl[0].PVR2_Config;
3783             u32Flag = TSP_PVR2_PKT192_EN;
3784             break;
3785     }
3786 
3787     if (bSet)
3788     {
3789         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32Flag));
3790     }
3791     else
3792     {
3793         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32Flag));
3794     }
3795 }
3796 
HAL_TSP_PVR_Fifo_Block_Disable(MS_U8 u8PVRId,MS_BOOL bDisable)3797 MS_BOOL HAL_TSP_PVR_Fifo_Block_Disable(MS_U8 u8PVRId, MS_BOOL bDisable)
3798 {
3799     if(bDisable == TRUE)
3800     {
3801         switch(u8PVRId)
3802         {
3803             case 0:
3804                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR1_BLOCK_DIS));
3805                 break;
3806             case 1:
3807                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR2_BLOCK_DIS));
3808                 break;
3809             default:
3810                 return FALSE;
3811         }
3812     }
3813     else
3814     {
3815         switch(u8PVRId)
3816         {
3817             case 0:
3818                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR1_BLOCK_DIS));
3819                 break;
3820             case 1:
3821                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR2_BLOCK_DIS));
3822                 break;
3823             default:
3824                 return FALSE;
3825         }
3826     }
3827 
3828     return TRUE;
3829 }
3830 
HAL_ResetAll(void)3831 void HAL_ResetAll(void)
3832 {
3833     printf("Reset ALL registers\n");
3834     //_HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
3835     //    SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_CPU_EN));
3836     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
3837         SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_DMA_RST));
3838     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
3839         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
3840     _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
3841         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_SW_RST));
3842 
3843     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
3844         RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_DMA_RST));
3845     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
3846         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
3847     _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
3848         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_SW_RST));
3849 }
3850 
3851 #define CKG_CLK_STCSYN         0x160C       //0x03
3852     #define CKG_CLK_STCSYN_MASK         0x0003
3853     #define CKG_CLK_STCSYN_432M         0x0001
3854 #define CKG_TS0_TS1             0x16A0       //0x28
3855     #define CLK_TS0_DISABLE             0x0001
3856     #define CLK_TS0_INVERT              0x0002
3857     #define CLK_TS0_CLK_MASK            0x001C
3858     #define CLK_TS1_DISABLE             0x0100
3859     #define CLK_TS1_INVERT              0x0200
3860     #define CLK_TS1_CLK_MASK            0x1C00
3861 #define CKG_TS2_TS4             0x16A4       //0x29   //s2P
3862     #define CLK_TS4_DISABLE             0x0100
3863     #define CLK_TS4_INVERT              0x0200
3864     #define CLK_TS4_CLK_MASK            0x1C00
3865     #define CKG_TSP_GPONLY_MASK         0x4000
3866 #define CKG_TSP_STC0            0x16A8    //0x2a
3867     #define CLK_TSP_DISABLE             0x0001
3868     #define CLK_TSP_INVERT              0x0002
3869     #define CLK_TSP_CLK_MASK            0x000C
3870     #define CLK_PAR_DISABLE             0x0010
3871     #define CLK_PAR_INVERT              0x0020
3872     #define CLK_PAR_CLK_MASK            0x0040
3873     #define CLK_STC_DISABLE             0x0100
3874     #define CLK_STC_INVERT              0x0200
3875     #define CLK_STC_CLK_MASK            0x0C00
3876 #define CKG_TSP_STAMP           0x16AC    //0x2b
3877     #define CLK_STAM_DISABLE            0x0010
3878     #define CLK_STAM_INVERT             0x0020
3879     #define CLK_STAM_CLK_MASK           0x00C0
3880 #define CKG1_TS_SAMPLE          0x6688    //0x22
3881     #define CLK_TS_SAMPLE_DISABLE       0x0010
3882     #define CLK_TS_SAMPLE_INVERT        0x0020
3883 #define CKG_TSP_TSFI            0x6698    //0x26
3884     #define CKG_TSP_TSFI_DISABLE        0x0100
3885     #define CKG_TSP_TSFI_INVERT         0x0200
3886     #define CKG_TSP_TSFI_CLK_MASK       0x1C00
3887 #define CKG_TSP_SW_CLK          0x17E0  // 0x78
3888     #define CKG_TSP_SW_CLK_MASK         0x0001
3889 #define CHIP_TSP_BOOT_CLK_SEL   0x3D50 //0x54
3890     #define CHIP_TSP_BOOT_CLK_SEL_MASK  0x0100
3891 
HAL_TSP_PowerCtrl(MS_BOOL bOn)3892 void HAL_TSP_PowerCtrl(MS_BOOL bOn)
3893 {
3894     if (bOn)
3895     {
3896         // Enable Gate Clock
3897         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_TS2_TS4), RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_TS2_TS4)), CKG_TSP_GPONLY_MASK));
3898 
3899         // Enable TSP Clock
3900         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_TSP_STC0),
3901             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_TSP_STC0)), (CLK_TSP_DISABLE|CLK_TSP_INVERT|CLK_TSP_CLK_MASK)));
3902 
3903         //TSP select SRAM
3904         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CHIP_TSP_BOOT_CLK_SEL), RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CHIP_TSP_BOOT_CLK_SEL)), CHIP_TSP_BOOT_CLK_SEL_MASK));
3905 
3906         //Select SRAM
3907         _HAL_REG16_W(&(_TspCtrl2[0].Qmem_Dbg), SET_FLAG1(_HAL_REG16_R(&(_TspCtrl2[0].Qmem_Dbg)), QMEM_DBG_TSP_SEL_SRAM));
3908 
3909         // Set TSP SW clock
3910         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_TSP_SW_CLK), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_TSP_SW_CLK)), CKG_TSP_SW_CLK_MASK));
3911 
3912         // Select STC Sync 432M
3913          _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_CLK_STCSYN),
3914             (_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_CLK_STCSYN)) & ~CKG_CLK_STCSYN_MASK) | CKG_CLK_STCSYN_432M);
3915 
3916         // Enable CLK_PARSER clock
3917         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_TSP_STC0),
3918             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_TSP_STC0)), (CLK_PAR_DISABLE|CLK_PAR_INVERT|CLK_PAR_CLK_MASK)));
3919 
3920         // Enable TS0 clock
3921         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_TS0_TS1),
3922             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_TS0_TS1)), (CLK_TS0_DISABLE|CLK_TS0_INVERT|CLK_TS0_CLK_MASK)));
3923 
3924         // Enable TS1 clock
3925         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_TS0_TS1),
3926             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_TS0_TS1)), (CLK_TS1_DISABLE|CLK_TS1_INVERT|CLK_TS1_CLK_MASK)));
3927 
3928         // Enable STC clock
3929         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_TSP_STC0),
3930             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_TSP_STC0)), (CLK_STC_DISABLE|CLK_STC_INVERT|CLK_STC_CLK_MASK)));
3931 
3932         // Enable TIMESTAMP clock
3933         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_TSP_STAMP),
3934             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_TSP_STAMP)), (CLK_STAM_DISABLE|CLK_STAM_INVERT|CLK_STAM_CLK_MASK)));
3935 
3936         //Enable TS sample clock
3937         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG1_TS_SAMPLE),
3938             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG1_TS_SAMPLE)), (CLK_TS_SAMPLE_DISABLE|CLK_TS_SAMPLE_INVERT)));
3939 
3940     }
3941     else
3942     {
3943         // DISABLE Gate Clock
3944         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_TS2_TS4), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_TS2_TS4)), CKG_TSP_GPONLY_MASK));
3945 
3946         // Disable TS sample clock
3947         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG1_TS_SAMPLE), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG1_TS_SAMPLE)), CLK_TS_SAMPLE_DISABLE));
3948 
3949         // Disable TS0 clock
3950         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_TS0_TS1), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_TS0_TS1)), CLK_TS0_DISABLE));
3951 
3952         // Disable TS1 clock
3953         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_TS0_TS1), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_TS0_TS1)), CLK_TS1_DISABLE));
3954 
3955         // Disable STC clock
3956         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_TSP_STC0), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_TSP_STC0)), CLK_STC_DISABLE));
3957 
3958         // Disable CLK_PARSER clock
3959         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_TSP_STC0), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_TSP_STC0)), CLK_PAR_DISABLE));
3960 
3961         // Disable TIMESTAMP clock
3962         _HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_TSP_STAMP), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_TSP_STAMP)), CLK_STAM_DISABLE));
3963 
3964         // Disable TSP clock
3965         //_HAL_REG32L_W((REG32_L *)(_u32RegBase+CKG_TSP_STC0), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_u32RegBase+CKG_TSP_STC0)), CLK_TSP_DISABLE));
3966 
3967         //Reset PE Pad
3968         if(_bTsPadUsed[0] == TRUE)
3969         {
3970             //TSP_TOP_REG(REG_TOP_TS0_PE) &= ~REG_TOP_TS0_PE_MASK;
3971             _bTsPadUsed[0] = FALSE;
3972         }
3973         if(_bTsPadUsed[1] == TRUE)
3974         {
3975             //TSP_TOP_REG(REG_TOP_TS1_PE) &= ~REG_TOP_TS1_PE_MASK;
3976             _bTsPadUsed[1] = FALSE;
3977         }
3978         if(_bTsPadUsed[2] == TRUE)
3979         {
3980             //TSP_TOP_REG(REG_TOP_TS2_PE) &= ~REG_TOP_TS2_PE_MASK;
3981             _bTsPadUsed[2] = FALSE;
3982         }
3983     }
3984 }
3985 #undef CKG_CLK_MPLLSYN
3986     #undef CKG_CLK_MPLLSYN_MASK
3987     #undef CKG_CLK_MPLLSYN_432M
3988 #undef CKG_TS0_TS1
3989     #undef CLK_TS0_DISABLE
3990     #undef CLK_TS0_INVERT
3991     #undef CLK_TS0_CLK_MASK
3992     #undef CLK_TS1_DISABLE
3993     #undef CLK_TS1_INVERT
3994     #undef CLK_TS1_CLK_MASK
3995 #undef CKG_TS2_TS4
3996     #undef CLK_TS4_DISABLE
3997     #undef CLK_TS4_INVERT
3998     #undef CLK_TS4_CLK_MASK
3999     #undef CKG_TSP_GPONLY_MASK
4000 #undef CKG_TSP_STC0
4001     #undef CLK_TSP_DISABLE
4002     #undef CLK_TSP_INVERT
4003     #undef CLK_TSP_CLK_MASK
4004     #undef CLK_PAR_DISABLE
4005     #undef CLK_PAR_INVERT
4006     #undef CLK_PAR_CLK_MASK
4007     #undef CLK_STC_DISABLE
4008     #undef CLK_STC_INVERT
4009     #undef CLK_STC_CLK_MASK
4010 #undef CKG_TSP_STAMP
4011     #undef CLK_STAM_DISABLE
4012     #undef CLK_STAM_INVERT
4013     #undef CLK_STAM_CLK_MASK
4014 #undef CKG1_TS_SAMPLE
4015     #undef CLK_TS_SAMPLE_DISABLE
4016     #undef CLK_TS_SAMPLE_INVERT
4017 #undef CKG_TSP_TSFI
4018     #undef CKG_TSP_TSFI_DISABLE
4019     #undef CKG_TSP_TSFI_INVERT
4020     #undef CKG_TSP_TSFI_CLK_MASK
4021 #undef CKG_TSP_SW_CLK
4022     #undef CKG_TSP_SW_CLK_MASK
4023 #undef CHIP_TSP_BOOT_CLK_SEL
4024     #undef CHIP_TSP_BOOT_CLK_SEL_MASK
4025 
HAL_TSP_GetDBGPortInfo(MS_U32 u32dbgsel)4026 MS_U32 HAL_TSP_GetDBGPortInfo(MS_U32 u32dbgsel)
4027 {
4028     _HAL_REG32_W(&_TspCtrl[0].PKT_CNT, (TSP_DBG_SEL_MASK&(u32dbgsel<<TSP_DBG_SEL_SHIFT)));
4029     return (_HAL_REG32_R(&_TspCtrl[0].TSP_Debug)&TSP_DEBUG_MASK);
4030 }
4031 
HAL_TSP_Enable_ValidSync_Dectect(void)4032 void HAL_TSP_Enable_ValidSync_Dectect(void)
4033 {
4034     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
4035         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_VALID_FALLING_DETECT));
4036     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
4037         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_SYNC_RISING_DETECT));
4038 }
4039 
HAL_Reset_WB(void)4040 void HAL_Reset_WB(void)
4041 {
4042     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
4043         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
4044     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
4045         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
4046     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
4047         SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_DMA_RST));
4048     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
4049         RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_DMA_RST));
4050 }
4051 
4052 //0: VQ0, 1: VQ_file, 2: VQ1, 3: VQ_2
HAL_TSP_SetVQBuffer(MS_U8 u8VQId,MS_PHYADDR u32BaseAddr,MS_U32 u32BufLen)4053 void HAL_TSP_SetVQBuffer(MS_U8 u8VQId, MS_PHYADDR u32BaseAddr, MS_U32 u32BufLen)
4054 {
4055     REG32 *pReg = 0;
4056 
4057     switch(u8VQId)
4058     {
4059         case 0:
4060         default:
4061             pReg = &(_TspCtrl[0].VQ0_BASE);
4062             break;
4063         case 1:
4064             pReg = &(_TspCtrl[0].VQ1_Base);
4065             break;
4066         case 2:
4067             pReg = &(_TspCtrl[0].VQ2_Base);
4068             break;
4069     }
4070     _HAL_REG32_W(pReg, (u32BaseAddr >> MIU_BUS));
4071 
4072     switch(u8VQId)
4073     {
4074         case 0:
4075         default:
4076             pReg = &(_TspCtrl[0].VQ0_CTRL);
4077             break;
4078         case 1:
4079             pReg = &(_TspCtrl[0].VQ1_Config);
4080             break;
4081         case 2:
4082             pReg = &(_TspCtrl[0].VQ2_Config);
4083             break;
4084     }
4085     _HAL_REG32_W(pReg, (_HAL_REG32_R(pReg) & ~TSP_VQ0_SIZE_208PK_MASK)
4086         | ((u32BufLen/VQ_PACKET_UNIT_LEN) << TSP_VQ0_SIZE_208PK_SHIFT));
4087 
4088 }
4089 
HAL_TSP_VQueue_Enable(MS_BOOL bEnable)4090 void HAL_TSP_VQueue_Enable(MS_BOOL bEnable)
4091 {
4092     if (bEnable)
4093     {
4094         // Reset VQ before VQ enable.
4095         _HAL_REG32_W(&_TspCtrl[0].VQ0_CTRL, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ0_CTRL), TSP_VQ0_RESET));
4096         _HAL_REG32_W(&_TspCtrl[0].VQ0_CTRL, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ0_CTRL), TSP_VQ0_RESET));
4097 
4098         _HAL_REG32_W(&_TspCtrl[0].VQ1_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ1_Config), TSP_VQ1_RESET));
4099         _HAL_REG32_W(&_TspCtrl[0].VQ1_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ1_Config), TSP_VQ1_RESET));
4100 
4101         _HAL_REG32_W(&_TspCtrl[0].VQ2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ2_Config), TSP_VQ2_RESET));
4102         _HAL_REG32_W(&_TspCtrl[0].VQ2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ2_Config), TSP_VQ2_RESET));
4103 
4104         //_HAL_REG32_W(&_TspCtrl[0].reg163C,
4105         //  SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg163C), TSP_ALL_VALID_EN));
4106         _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
4107           SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), (TSP_VQ_EN/*|TSP_VQ2PINGPONG_EN*/)));
4108     }
4109     else
4110     {
4111         _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
4112                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_VQ_EN));
4113     }
4114 }
4115 
HAL_TSP_VQueue_Reset(MS_U8 u8VQId)4116 void HAL_TSP_VQueue_Reset(MS_U8 u8VQId)
4117 {
4118     REG32 *pReg = &_TspCtrl[0].VQ0_BASE;
4119     MS_U32 u32flag = 0;
4120 
4121     switch(u8VQId)
4122     {
4123         case 0:
4124         default:
4125             pReg = &_TspCtrl[0].VQ0_CTRL;
4126             u32flag = TSP_VQ0_RESET;
4127             break;
4128         case 1:
4129             pReg = &_TspCtrl[0].VQ1_Config;
4130             u32flag = TSP_VQ1_RESET;
4131             break;
4132         case 2:
4133             pReg = &_TspCtrl[0].VQ2_Config;
4134             u32flag = TSP_VQ2_RESET;
4135             break;
4136     }
4137 
4138     _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32flag));
4139     _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32flag));
4140 }
4141 
HAL_TSP_VQueue_OverflowInt_En(MS_U8 u8VQId,MS_BOOL bEnable)4142 void HAL_TSP_VQueue_OverflowInt_En(MS_U8 u8VQId, MS_BOOL bEnable)
4143 {
4144     REG32 *pReg = &_TspCtrl[0].VQ0_BASE;
4145     MS_U32 u32flag = 0;
4146 
4147     switch(u8VQId)
4148     {
4149         case 0:
4150         default:
4151             pReg = &_TspCtrl[0].VQ0_CTRL;
4152             u32flag = TSP_VQ0_OVERFLOW_INT_EN;
4153             break;
4154         case 1:
4155             pReg = &_TspCtrl[0].VQ1_Config;
4156             u32flag = TSP_VQ1_OVF_INT_EN;
4157             break;
4158         case 2:
4159             pReg = &_TspCtrl[0].VQ2_Config;
4160             u32flag = TSP_VQ2_OVF_INT_EN;
4161             break;
4162     }
4163 
4164     if (bEnable)
4165     {
4166         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32flag));
4167         _HAL_TSP_HwInt2_BitSet(TSP_HWINT2_VQ0_VQ1_VQ2_VQ3_OVERFLOW >> TSP_HWINT2_STATUS_SHIFT);
4168     }
4169     else
4170     {
4171         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32flag));
4172         _HAL_TSP_HwInt2_BitClr(TSP_HWINT2_VQ0_VQ1_VQ2_VQ3_OVERFLOW >> TSP_HWINT2_STATUS_SHIFT);
4173     }
4174 }
4175 
HAL_TSP_VQueue_Clr_OverflowInt(MS_U8 u8VQId)4176 void HAL_TSP_VQueue_Clr_OverflowInt(MS_U8 u8VQId)
4177 {
4178     REG32 *pReg = 0;
4179     MS_U32 u32flag = 0;
4180     MS_U32 u32data = 0;
4181 
4182     switch(u8VQId)
4183     {
4184         case 0:
4185         default:
4186             pReg = &_TspCtrl[0].VQ0_CTRL;
4187             u32flag = TSP_VQ0_CLR_OVERFLOW_INT;
4188             break;
4189         case 1:
4190             pReg = &_TspCtrl[0].VQ1_Config;
4191             u32flag = TSP_VQ1_CLR_OVF_INT;
4192             break;
4193         case 2:
4194             pReg = &_TspCtrl[0].VQ2_Config;
4195             u32flag = TSP_VQ2_CLR_OVF_INT;
4196             break;
4197     }
4198     u32data = _HAL_REG32_R(pReg);
4199 
4200     _HAL_REG32_W(pReg, u32data | u32flag);
4201     _HAL_REG32_W(pReg, u32data & ~u32flag);
4202 
4203     _HAL_TSP_HwInt2_BitClr(TSP_HWINT2_VQ0_VQ1_VQ2_VQ3_OVERFLOW);
4204 
4205 }
4206 
HAL_TSP_Set_Req_VQ_RX_Threshold(MS_U8 u8req_len)4207 void HAL_TSP_Set_Req_VQ_RX_Threshold(MS_U8 u8req_len)
4208 {
4209     MS_U32 u32Value = TSP_REQ_VQ_RX_THRESHOLD_LEN1;
4210 
4211     switch(u8req_len)
4212     {
4213         case 1:
4214             u32Value = TSP_REQ_VQ_RX_THRESHOLD_LEN1;
4215             break;
4216         case 2:
4217             u32Value = TSP_REQ_VQ_RX_THRESHOLD_LEN2;
4218             break;
4219         case 4:
4220             u32Value = TSP_REQ_VQ_RX_THRESHOLD_LEN4;
4221             break;
4222         case 8:
4223             u32Value = TSP_REQ_VQ_RX_THRESHOLD_LEN8;
4224             break;
4225         default:
4226             break;
4227     }
4228 
4229     _HAL_REG32_W(&_TspCtrl[0].VQ_PIDFLT_CTRL,
4230         (_HAL_REG32_R(&_TspCtrl[0].VQ_PIDFLT_CTRL) & ~TSP_REQ_VQ_RX_THRESHOLD_MASKE) | u32Value);
4231 }
4232 
HAL_TSP_Get_VQStatus(void)4233 MS_U32 HAL_TSP_Get_VQStatus(void)
4234 {
4235     return (_HAL_REG32_R(&_TspCtrl[0].VQ_STATUS) & TSP_VQ_STATUS_MASK);
4236 }
4237 
HAL_TSP_VQBlock_Disable(MS_U8 u8VQId,MS_BOOL bDisable)4238 void HAL_TSP_VQBlock_Disable(MS_U8 u8VQId, MS_BOOL bDisable)
4239 {
4240     MS_U32 u32Value = 0;
4241 
4242     switch(u8VQId)
4243     {
4244         case 1: u32Value = TSP_VQTX0_BLOCK_DIS;
4245             break;
4246         case 2: u32Value = TSP_VQTX1_BLOCK_DIS;
4247             break;
4248         case 4: u32Value = TSP_VQTX2_BLOCK_DIS;
4249             break;
4250     }
4251 
4252     if(bDisable)
4253     {
4254         _HAL_REG32_W(&_TspCtrl[0].reg160C,
4255                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), u32Value));
4256     }
4257     else
4258     {
4259         _HAL_REG32_W(&_TspCtrl[0].reg160C,
4260                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), u32Value));
4261     }
4262 }
4263 
4264 // Addr[0]                         -----> PVr1
4265 // Addr[1]                         -----> Section
4266 // Addr[2]                         -----> Section
4267 // Addr[3]                         -----> PVR2
4268 // The range can be written:  u32StartAddr <= x < u32EndAddr
4269 // Protection range: x >= u32EndAddr && x < u32StartAddr
HAL_TSP_WriteProtect_Enable(MS_BOOL bEnable,MS_U32 * pu32StartAddr,MS_U32 * pu32EndAddr)4270 MS_BOOL HAL_TSP_WriteProtect_Enable(MS_BOOL bEnable, MS_U32* pu32StartAddr, MS_U32* pu32EndAddr)
4271 {
4272     MS_U8 u8ii;
4273 
4274     if (bEnable)
4275     {
4276         for(u8ii = 0; u8ii < 4; u8ii++)
4277         {
4278             if(pu32StartAddr[u8ii] == pu32EndAddr[u8ii])
4279                 pu32StartAddr[u8ii] += (1 << MIU_BUS);
4280         }
4281 
4282         _HAL_REG32_W(&_TspCtrl[0].DMAW_LBND0, pu32StartAddr[0] >> MIU_BUS);
4283         _HAL_REG32_W(&_TspCtrl[0].DMAW_UBND0, pu32EndAddr[0] >> MIU_BUS);
4284         _HAL_REG32_W(&_TspCtrl[0].DMAW_LBND1, pu32StartAddr[1] >> MIU_BUS);
4285         _HAL_REG32_W(&_TspCtrl[0].DMAW_UBND1, pu32EndAddr[1] >> MIU_BUS);
4286         _HAL_REG32_W(&_TspCtrl[0].DMAW_LBND2, pu32StartAddr[2] >> MIU_BUS);
4287         _HAL_REG32_W(&_TspCtrl[0].DMAW_UBND2, pu32EndAddr[2] >> MIU_BUS);
4288         _HAL_REG32_W(&_TspCtrl[0].DMAW_LBND4, pu32StartAddr[3] >> MIU_BUS);
4289         _HAL_REG32_W(&_TspCtrl[0].DMAW_UBND4, pu32EndAddr[3] >> MIU_BUS);
4290 
4291         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
4292             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_SEC_CB_PVR2_DAMW_PROTECT_EN)); // pvr1,VQ2_tx, VQ3_tx protect
4293     }
4294     else
4295     {
4296         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
4297             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_SEC_CB_PVR2_DAMW_PROTECT_EN));
4298     }
4299 
4300     return TRUE;
4301 
4302 }
4303 
HAL_TSP_Get_FW_VER(void)4304 MS_U32 HAL_TSP_Get_FW_VER(void)
4305 {
4306     MS_U32 i = 0;
4307     MS_U32 u32Data = 0;
4308 
4309     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
4310     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_VERSION_GET);
4311     while (i< 4)
4312     {
4313         if (0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
4314         {
4315             u32Data = _HAL_REG32_R(&_TspCtrl[0].MCU_Data0);
4316             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
4317             return u32Data;
4318         }
4319         i++;
4320         _delay();
4321     }
4322     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
4323     return u32Data;
4324 }
4325 
HAL_TSP_Check_FW_VER(void)4326 MS_BOOL HAL_TSP_Check_FW_VER(void)
4327 {
4328     MS_U32  u32FWVer;
4329 
4330     u32FWVer = HAL_TSP_Get_FW_VER();
4331     if((u32FWVer >> 16) != TSP_FW_DEVICE_ID)
4332     {
4333         printf("\nWarning: TSP FW not match!! FW version: 0x%08lx\n\n", u32FWVer);
4334         return FALSE;
4335     }
4336 
4337     return TRUE;
4338 }
4339 
HAL_TSP_SetFwDbgMem(MS_PHYADDR phyAddr,MS_U32 u32Size)4340 MS_BOOL HAL_TSP_SetFwDbgMem(MS_PHYADDR phyAddr, MS_U32 u32Size)
4341 {
4342     MS_U32 i = 0;
4343 
4344     if(IsCover(phyAddr, phyAddr + u32Size, OPENRISC_IP_1_ADDR, OPENRISC_IP_1_ADDR + OPENRISC_IP_1_SIZE) ||
4345     IsCover(phyAddr, phyAddr + u32Size, OPENRISC_IP_2_ADDR, OPENRISC_IP_2_ADDR + OPENRISC_IP_2_SIZE) ||
4346     IsCover(phyAddr, phyAddr + u32Size, OPENRISC_IP_3_ADDR, OPENRISC_IP_3_ADDR + OPENRISC_IP_3_SIZE) ||
4347     IsCover(phyAddr, phyAddr + u32Size, OPENRISC_QMEM_ADDR, OPENRISC_QMEM_ADDR + OPENRISC_QMEM_SIZE))
4348     {
4349         printf("[%s][%d] invalid physical address 0x%x\n", __FUNCTION__, __LINE__, (unsigned int)phyAddr);
4350         return FALSE;
4351     }
4352     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, phyAddr);
4353     _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, u32Size);
4354     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_DBG_MEM);
4355     while(i<4)
4356     {
4357         if(0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
4358         {
4359             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
4360             _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, 0);
4361             return TRUE;
4362         }
4363         i++;
4364         _delay();
4365     }
4366     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
4367     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
4368     _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, 0);
4369 
4370     return FALSE;
4371 }
4372 
HAL_TSP_SetFwDbgWord(MS_U32 u32Word)4373 MS_BOOL HAL_TSP_SetFwDbgWord(MS_U32 u32Word)
4374 {
4375     MS_U32 i = 0;
4376 
4377     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, u32Word);
4378     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_DBG_WORD);
4379     while(i<4)
4380     {
4381         if(0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
4382         {
4383             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
4384             return TRUE;
4385         }
4386         i++;
4387         _delay();
4388     }
4389     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
4390     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
4391     return FALSE;
4392 }
4393 
4394 // Model : 0 -> File, 1 -> PVR1, 2 -> PVR2
4395 // u8MobfIndex0: 0 -> Disable, 1~31
4396 // u8MobfIndex1: 0 -> Disable, 1~31
HAL_TSP_MOBF_Select(MS_U8 u8Model,MS_U8 u8MobfIndex0,MS_U8 u8MobfIndex1)4397 void HAL_TSP_MOBF_Select(MS_U8 u8Model, MS_U8 u8MobfIndex0, MS_U8 u8MobfIndex1)
4398 {
4399     REG32 *pReg = 0;
4400     MS_U32 u32value = 0;
4401 
4402     switch(u8Model)
4403     {
4404         case 0:
4405             _16MobfKey = (MS_U16)u8MobfIndex0;  //set mobf key with filein Start
4406             break;
4407         case 1:
4408             pReg = &_TspCtrl[0].MOBF_PVR1_Index;
4409             u32value = (_HAL_REG32_R(pReg) & ~TSP_MOBF_PVR1_INDEX0_MASK) |
4410                          ((MS_U32)(u8MobfIndex0&0xFF) << TSP_MOBF_PVR1_INDEX0_SHIFT);
4411             break;
4412         case 2:
4413             pReg = &_TspCtrl[0].MOBF_PVR2_Index;
4414             u32value = (_HAL_REG32_R(pReg) & ~TSP_MOBF_PVR2_INDEX0_MASK) |
4415                          ((MS_U32)(u8MobfIndex0&0xFF) << TSP_MOBF_PVR2_INDEX0_SHIFT);
4416             break;
4417         default:
4418             break;;
4419     }
4420 
4421     switch(u8Model)
4422     {
4423         case 0:
4424             break;
4425         case 1:
4426             u32value &= ~TSP_MOBF_PVR1_INDEX1_MASK;
4427             u32value |= ((MS_U32)(u8MobfIndex1&0xFF) << TSP_MOBF_PVR1_INDEX1_SHIFT);
4428             break;
4429         case 2:
4430             u32value &= ~TSP_MOBF_PVR2_INDEX1_MASK;
4431             u32value |= ((MS_U32)(u8MobfIndex1&0xFF) << TSP_MOBF_PVR2_INDEX1_SHIFT);
4432             break;
4433         default:
4434             return;
4435     }
4436 
4437     if(u8Model != 0)
4438         _HAL_REG32_W(pReg, u32value);
4439 
4440 }
4441 //---------------------------------------------------------
4442 
HAL_TSP_PVR_Alignment_Enable(MS_U8 u8PVRId,MS_BOOL bEnable)4443 MS_BOOL HAL_TSP_PVR_Alignment_Enable(MS_U8 u8PVRId, MS_BOOL bEnable)
4444 {
4445     REG32 *pReg = 0;
4446     MS_U32 u32flag = 0;
4447 
4448     switch(u8PVRId)
4449     {
4450         case 0:
4451             pReg = &_TspCtrl[0].HW2_Config3;
4452             u32flag = TSP_PVR1_ALIGN_EN;
4453             break;
4454         case 1:
4455             pReg = &_TspCtrl[0].PVR2_Config;
4456             u32flag = TSP_PVR2_PVR_ALIGN_EN;
4457             break;
4458         default:
4459             return FALSE;
4460     }
4461 
4462     if(bEnable)
4463     {
4464         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32flag));
4465     }
4466     else
4467     {
4468         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32flag));
4469     }
4470     return TRUE;
4471 }
4472 
HAL_TSP_PVR_ForceSync_Enable(MS_U8 u8PVRId,MS_BOOL bEnable)4473 MS_BOOL HAL_TSP_PVR_ForceSync_Enable(MS_U8 u8PVRId, MS_BOOL bEnable)
4474 {
4475     REG32 *pReg = 0;
4476     MS_U32 u32flag = 0;
4477 
4478     switch(u8PVRId)
4479     {
4480         case 0:
4481         case 1:
4482             pReg = &_TspCtrl[0].HW2_Config3;
4483             u32flag = TSP_REC_AT_SYNC_DIS;
4484             _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
4485                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_REC_AT_SYNC_DIS));
4486             break;
4487         default:
4488             return FALSE;
4489     }
4490 
4491     if(bEnable)
4492     {
4493         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32flag));
4494     }
4495     else
4496     {
4497         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32flag));
4498     }
4499     return TRUE;
4500 }
4501 
HAL_TSP_DupPktCnt_Clear(void)4502 MS_BOOL HAL_TSP_DupPktCnt_Clear(void)
4503 {
4504     _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
4505         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_DUP_PKT_CNT_CLR));
4506 
4507     _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
4508         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_DUP_PKT_CNT_CLR));
4509 
4510     return TRUE;
4511 }
4512 
HAL_TSP_Read_DropPktCnt(MS_U16 * pu16ADropCnt,MS_U16 * pu16VDropCnt)4513 MS_BOOL HAL_TSP_Read_DropPktCnt(MS_U16* pu16ADropCnt, MS_U16* pu16VDropCnt)
4514 {
4515     return FALSE;
4516 }
4517 
HAL_TSP_TSIF0_Enable(MS_BOOL bEnable)4518 void HAL_TSP_TSIF0_Enable(MS_BOOL bEnable)
4519 {
4520     if (bEnable)
4521     {
4522         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
4523                      SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF0_ENABLE));
4524     }
4525     else
4526     {
4527         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
4528                      RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF0_ENABLE));
4529     }
4530 }
4531 
HAL_TSP_TSIF1_Enable(MS_BOOL bEnable)4532 void HAL_TSP_TSIF1_Enable(MS_BOOL bEnable)
4533 {
4534     if (bEnable)
4535     {
4536         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
4537                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF1_ENABLE));
4538     }
4539     else
4540     {
4541         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
4542                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF1_ENABLE));
4543     }
4544 }
4545 
HAL_TSP_TSIFFI_SrcSelect(MS_BOOL bFileMode)4546 void HAL_TSP_TSIFFI_SrcSelect(MS_BOOL bFileMode)
4547 {
4548     if(bFileMode == TRUE)
4549     {
4550         _HAL_REG16_W(&_TspCtrl5[0].Ts_If_Fi_Cfg,
4551             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].Ts_If_Fi_Cfg), TSP_FIIF_MUX_LIVE_PATH));
4552     }
4553     else
4554     {
4555         _HAL_REG16_W(&_TspCtrl5[0].Ts_If_Fi_Cfg,
4556             SET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].Ts_If_Fi_Cfg), TSP_FIIF_MUX_LIVE_PATH));
4557     }
4558 }
4559 
HAL_TSP_AU_BD_Mode_Enable(MS_BOOL bEnable)4560 MS_BOOL HAL_TSP_AU_BD_Mode_Enable(MS_BOOL bEnable)
4561 {
4562     if (bEnable) {
4563         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
4564                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_BD_AUD_EN));
4565     }
4566     else {
4567         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
4568                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_BD_AUD_EN));
4569     }
4570 
4571     return TRUE;
4572 }
4573 
HAL_TSP_CMD_Run(MS_U32 u32Cmd,MS_U32 u32Config0,MS_U32 u32Config1,MS_U32 * pData)4574 MS_BOOL HAL_TSP_CMD_Run(MS_U32 u32Cmd, MS_U32 u32Config0, MS_U32 u32Config1, MS_U32* pData)
4575 {
4576     switch (u32Cmd)
4577     {
4578         case HAL_CMD_ONEWAY:
4579             _HAL_REG32_W(&_TspCtrl[0].REG_ONEWAY,
4580                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].REG_ONEWAY), u32Config0));
4581             break;
4582         default:
4583             return FALSE;
4584     }
4585 
4586     return TRUE;
4587 }
4588 
HAL_TSP_Get_PesScmb_Sts(MS_U8 u8FltId)4589 MS_U8 HAL_TSP_Get_PesScmb_Sts(MS_U8 u8FltId)
4590 {
4591     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, (TSP_MCU_CMD_SCMSTS_GET | (MS_U32)(u8FltId & 0xFF)));
4592     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
4593     return (MS_U8)(_HAL_REG32_R(&_TspCtrl[0].MCU_Data0));
4594 }
4595 
HAL_TSP_Get_TsScmb_Sts(MS_U8 u8FltId)4596 MS_U8 HAL_TSP_Get_TsScmb_Sts(MS_U8 u8FltId)
4597 {
4598     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, (TSP_MCU_CMD_SCMSTS_GET | (MS_U32)(u8FltId & 0xFF)));
4599     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
4600     return (MS_U8)(_HAL_REG32_R(&_TspCtrl[0].MCU_Data0) >> 8);
4601 }
4602 
4603 //-------------------------------------------------------------------------------
4604 // @u16Mode : TSP_DEBUG_MODE_DIS_CONT     => discontinuous packet count
4605 //                   TSP_DEBUG_MODE_DROP_COUNT => drop packet count
4606 // @u16Src  : TBD
4607 // @u16Fifo  : TBD
4608 //-------------------------------------------------------------------------------
_HAL_TSP_Get_PktCnt(TSP_DEBUG_MODE u16Mode,TSP_DEBUG_SRC TspSrc,TSP_DEBUG_FIFO TspFifo)4609 static MS_U32 _HAL_TSP_Get_PktCnt(TSP_DEBUG_MODE u16Mode, TSP_DEBUG_SRC TspSrc, TSP_DEBUG_FIFO TspFifo)
4610 {
4611     MS_U16 u16Cfg  = 0;
4612     MS_U16 u16DropPktmode  = 0;
4613     REG16 *pReg = 0;
4614     MS_U32 u32PktCnt = 0;
4615 
4616 
4617     switch(TspFifo)
4618     {
4619         case TSP_DEBUG_FIFO_VIDEO:
4620             pReg = &_TspCtrl4[0].PktCnt_video;
4621             u16Cfg = ((u16Mode==TSP_DEBUG_MODE_DIS_CONT)?V_DIS_CNTR_PKT_CNT_LOAD:V_DROP_PKT_CNT_LOAD);
4622             break;
4623         case TSP_DEBUG_FIFO_AUDIO:
4624             pReg = &_TspCtrl4[0].PktCnt_aud;
4625             u16Cfg = ((u16Mode==TSP_DEBUG_MODE_DIS_CONT)?AUD_DIS_CNTR_PKT_CNT_LOAD:AUD_DROP_PKT_CNT_LOAD);
4626             break;
4627         case TSP_DEBUG_FIFO_VIDEO3D:
4628             pReg = &_TspCtrl4[0].PktCnt_v3d;
4629             u16Cfg = ((u16Mode==TSP_DEBUG_MODE_DIS_CONT)?V3D_DIS_CNTR_PKT_CNT_LOAD:V3D_DROP_PKT_CNT_LOAD);
4630             break;
4631         case TSP_DEBUG_FIFO_AUDIOB:
4632             pReg = &_TspCtrl4[0].PktCnt_audB;
4633             u16Cfg = ((u16Mode==TSP_DEBUG_MODE_DIS_CONT)?AUDB_DIS_CNTR_PKT_CNT_LOAD:AUDB_DROP_PKT_CNT_LOAD);
4634             break;
4635         default:
4636             return (MS_U32)(_HAL_REG16_R(pReg)); // direct return
4637     }
4638 
4639     if(u16Mode == TSP_DEBUG_MODE_DIS_CONT)
4640         u16DropPktmode = 0;
4641     else
4642         u16DropPktmode = 1;
4643 
4644     _HAL_REG16_W(&(_TspCtrl4[0].DebugSrcSel),
4645             (_HAL_REG16_R(&(_TspCtrl4[0].DebugSrcSel)) & (~DROP_PKT_MODE_MASK) ) |  u16DropPktmode << 1 );
4646 
4647     _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad1),
4648             (_HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad1)) & (~u16Cfg) ));
4649 
4650     u32PktCnt = (MS_U32)(_HAL_REG16_R(pReg));
4651 
4652     _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad1),
4653             (_HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad1)) | u16Cfg ));
4654 
4655     return u32PktCnt;
4656 }
4657 
4658 //-------------------------------------------------------------------------------
4659 // @ u16Src : TBD
4660 // @ u16Fifo : TBD
4661 // @ return value : 0 ~ 15
4662 //-------------------------------------------------------------------------------
HAL_TSP_Get_DisContiCnt(TSP_DisconPktCnt_Info * TspDisconPktCntInfo)4663 MS_U32 HAL_TSP_Get_DisContiCnt(TSP_DisconPktCnt_Info* TspDisconPktCntInfo)
4664 {
4665     if(TspDisconPktCntInfo->TspCmd == TSP_DEBUG_CMD_CLEAR)
4666     {
4667         _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr1),
4668             _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr1)) | (V_DIS_CNTR_PKT_CNT_CLR | V3D_DIS_CNTR_PKT_CNT_CLR | AUD_DIS_CNTR_PKT_CNT_CLR | AUDB_DIS_CNTR_PKT_CNT_CLR));
4669         _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr1),
4670             _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr1)) & ~(V_DIS_CNTR_PKT_CNT_CLR | V3D_DIS_CNTR_PKT_CNT_CLR | AUD_DIS_CNTR_PKT_CNT_CLR | AUDB_DIS_CNTR_PKT_CNT_CLR));
4671     }
4672     return _HAL_TSP_Get_PktCnt(TSP_DEBUG_MODE_DIS_CONT, TspDisconPktCntInfo->TspSrc, TspDisconPktCntInfo->TspFifo);
4673 }
4674 
4675 //-------------------------------------------------------------------------------
4676 // @ u16Src : TBD
4677 // @ u16Fifo : TBD
4678 // @ return value : 0 ~ 15
4679 //-------------------------------------------------------------------------------
HAL_TSP_Get_DropPktCnt(TSP_DropPktCnt_Info * TspDropCntInfo)4680 MS_U32 HAL_TSP_Get_DropPktCnt(TSP_DropPktCnt_Info* TspDropCntInfo)
4681 {
4682     if(TspDropCntInfo->TspCmd == TSP_DEBUG_CMD_CLEAR)
4683     {
4684         _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr1),
4685             _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr1)) | (V_DROP_PKT_CNT_CLR | V3D_DROP_PKT_CNT_CLR | AUD_DROP_PKT_CNT_CLR | AUDB_DROP_PKT_CNT_CLR));
4686         _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr1),
4687             _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr1)) & ~(V_DROP_PKT_CNT_CLR | V3D_DROP_PKT_CNT_CLR | AUD_DROP_PKT_CNT_CLR | AUDB_DROP_PKT_CNT_CLR));
4688     }
4689     return _HAL_TSP_Get_PktCnt(TSP_DEBUG_MODE_DROP_CONT, TspDropCntInfo->TspSrc, TspDropCntInfo->TspFifo);
4690 }
4691 
4692 //-------------------------------------------------------------------------------
4693 // @u16Tsif : TBD
4694 // @ return value : 0 ~ 15
4695 //-------------------------------------------------------------------------------
HAL_TSP_Get_LockPktCnt(TSP_LockPktCnt_info * TspLockCntInfo)4696 MS_U32 HAL_TSP_Get_LockPktCnt(TSP_LockPktCnt_info* TspLockCntInfo)
4697 {
4698     MS_U16 u16Clr=0,u16Load=0,u16Src=0;
4699     MS_U32 u32LockPktCnt = 0;
4700 
4701     switch (TspLockCntInfo->TspTsif)
4702     {
4703         case TSP_DEBUG_TSIF0: // TS0
4704             u16Clr = LOCK_PKT_CNT_0_CLR;
4705             u16Load = LOCK_PKT_CNT_0_LOAD;
4706             u16Src = TSIF_SRC_SEL_TSIF0;
4707             break;
4708         case TSP_DEBUG_TSIF1: // TS1
4709             u16Clr = LOCK_PKT_CNT_1_CLR;
4710             u16Load = LOCK_PKT_CNT_1_LOAD;
4711             u16Src = TSIF_SRC_SEL_TSIF1;
4712             break;
4713         case TSP_DEBUG_TSIFFI: // TSFI
4714             u16Clr = LOCK_PKT_CNT_FI_CLR;
4715             u16Load = LOCK_PKT_CNT_FI_LOAD;
4716             u16Src = TSIF_SRC_SEL_TSIF_FI;
4717             break;
4718         default:
4719             break;
4720     }
4721 
4722     if(TspLockCntInfo->TspCmd == TSP_DEBUG_CMD_CLEAR)
4723     {
4724         _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
4725             _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) | u16Clr);
4726         _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
4727             _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) & (~u16Clr));
4728     }
4729 
4730     _HAL_REG16_W(&(_TspCtrl4[0].DebugSrcSel),
4731             (_HAL_REG16_R(&(_TspCtrl4[0].DebugSrcSel)) & (~TSIF_SRC_SEL_MASK)) | (u16Src << TSIF_SRC_SEL_SHIFT));
4732 
4733     _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
4734         _HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad)) & (~u16Load));
4735 
4736     u32LockPktCnt = (MS_U32)(_HAL_REG16_R(&(_TspCtrl4[0].LockedPktCnt)));
4737 
4738     _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
4739         _HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad)) | u16Load);
4740 
4741     return u32LockPktCnt;
4742 }
4743 
4744 //-------------------------------------------------------------------------------
4745 // @ u16Fifo : TBD
4746 // @ return value : 0 ~ 15
4747 //-------------------------------------------------------------------------------
HAL_TSP_GetAVPktCnt(TSP_AVPktCnt_info * TspAVCntInfo)4748 MS_U32 HAL_TSP_GetAVPktCnt(TSP_AVPktCnt_info* TspAVCntInfo)
4749 {
4750     MS_U32 u32PktCnt = 0;
4751 
4752     if(TspAVCntInfo->TspCmd == TSP_DEBUG_CMD_CLEAR)
4753     {
4754         switch (TspAVCntInfo->TspFifo)
4755         {
4756             case TSP_DEBUG_FIFO_VIDEO: // VIDEO
4757                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
4758                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) | (V_PKT_CNT_CLR));
4759                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
4760                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) & (~V_PKT_CNT_CLR));
4761 
4762                 break;
4763             case TSP_DEBUG_FIFO_AUDIO:
4764                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
4765                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) | (AUD_PKT_CNT_CLR));
4766                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
4767                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) & (~AUD_PKT_CNT_CLR));
4768                 break;
4769             case TSP_DEBUG_FIFO_VIDEO3D:
4770                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
4771                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) | (V3D_PKT_CNT_CLR));
4772                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
4773                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) & (~V3D_PKT_CNT_CLR));
4774                 break;
4775             case TSP_DEBUG_FIFO_AUDIOB:
4776                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
4777                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) | (AUDB_PKT_CNT_CLR));
4778                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
4779                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) & (~AUDB_PKT_CNT_CLR));
4780                 break;
4781             default:
4782                 break;
4783         }
4784 
4785     }
4786 
4787 
4788     switch (TspAVCntInfo->TspFifo)
4789     {
4790         case TSP_DEBUG_FIFO_VIDEO: // VIDEO
4791             _HAL_REG16_W(&(_TspCtrl4[0].DebugSrcSel),
4792                 (_HAL_REG16_R(&(_TspCtrl4[0].DebugSrcSel)) & (~AV_PKT_SRC_SEL_MASK)) | (AV_PKT_SRC_VID << AV_PKT_SRC_SEL_SHIFT));
4793             _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
4794                 (_HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad))) & (~V_PKT_CNT_LOAD));
4795 
4796             u32PktCnt = (MS_U32)(_HAL_REG16_R(&(_TspCtrl4[0].AVPktCnt)));
4797 
4798             _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
4799                 (_HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad))) | V_PKT_CNT_LOAD);
4800 
4801         case TSP_DEBUG_FIFO_AUDIO: // AUDIO
4802             _HAL_REG16_W(&(_TspCtrl4[0].DebugSrcSel),
4803                 (_HAL_REG16_R(&(_TspCtrl4[0].DebugSrcSel)) & (~AV_PKT_SRC_SEL_MASK)) | (AV_PKT_SRC_AUD << AV_PKT_SRC_SEL_SHIFT));
4804             _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
4805                 _HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad)) & (~AUD_PKT_CNT_LOAD));
4806 
4807             u32PktCnt = (MS_U32)(_HAL_REG16_R(&(_TspCtrl4[0].AVPktCnt)));
4808 
4809             _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
4810                 _HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad)) | AUD_PKT_CNT_LOAD);
4811         case TSP_DEBUG_FIFO_VIDEO3D: // V3D
4812             _HAL_REG16_W(&(_TspCtrl4[0].DebugSrcSel),
4813                 (_HAL_REG16_R(&(_TspCtrl4[0].DebugSrcSel)) & (~AV_PKT_SRC_SEL_MASK)) | (AV_PKT_SRC_V3D << AV_PKT_SRC_SEL_SHIFT));
4814             _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
4815                 _HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad)) & (~V3D_PKT_CNT_LOAD));
4816 
4817             u32PktCnt = (MS_U32)(_HAL_REG16_R(&(_TspCtrl4[0].AVPktCnt1)));
4818 
4819             _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
4820                 _HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad)) | V3D_PKT_CNT_LOAD);
4821 
4822         case TSP_DEBUG_FIFO_AUDIOB: // AUDIOB
4823             _HAL_REG16_W(&(_TspCtrl4[0].DebugSrcSel),
4824                 (_HAL_REG16_R(&(_TspCtrl4[0].DebugSrcSel)) & (~AV_PKT_SRC_SEL_MASK)) | (AV_PKT_SRC_AUDB << AV_PKT_SRC_SEL_SHIFT));
4825             _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
4826                 _HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad)) & (~AUDB_PKT_CNT_LOAD));
4827 
4828             u32PktCnt = (MS_U32)(_HAL_REG16_R(&(_TspCtrl4[0].AVPktCnt1)));
4829 
4830             _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
4831                 _HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad)) | AUDB_PKT_CNT_LOAD);
4832 
4833         default:
4834             return 0;
4835     }
4836     return u32PktCnt;
4837 }
4838 
HAL_TSP_Get_SecTEI_PktCount(MS_U32 u32PktSrc)4839 MS_U32 HAL_TSP_Get_SecTEI_PktCount(MS_U32 u32PktSrc)
4840 {
4841     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_TEI_COUNT_GET | u32PktSrc);
4842     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
4843     return (_HAL_REG32_R(&_TspCtrl[0].MCU_Data0));
4844 }
4845 
HAL_TSP_Reset_SecTEI_PktCount(MS_U32 u32PktSrc)4846 MS_BOOL HAL_TSP_Reset_SecTEI_PktCount(MS_U32 u32PktSrc)
4847 {
4848     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_TEI_COUNT_GET | TSP_MCU_CMD_TEI_COUNT_OPTION_RESET | u32PktSrc);
4849     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
4850     return TRUE;
4851 }
4852 
HAL_TSP_Get_SecDisCont_PktCount(MS_U32 u32FltId)4853 MS_U32 HAL_TSP_Get_SecDisCont_PktCount(MS_U32 u32FltId)
4854 {
4855     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_DISCONT_COUNT_GET | u32FltId);
4856     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
4857     return (_HAL_REG32_R(&_TspCtrl[0].MCU_Data0));
4858 }
4859 
HAL_TSP_Reset_SecDisCont_PktCount(MS_U32 u32FltId)4860 MS_BOOL HAL_TSP_Reset_SecDisCont_PktCount(MS_U32 u32FltId)
4861 {
4862     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_DISCONT_COUNT_GET | TSP_MCU_CMD_DISCONT_COUNT_OPTION_RESET | u32FltId);
4863     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
4864     return TRUE;
4865 }
4866 
HAL_TSP_DropScmbPkt(MS_U32 u32StreamId,MS_BOOL bEnable)4867 MS_BOOL HAL_TSP_DropScmbPkt(MS_U32 u32StreamId,MS_BOOL bEnable)
4868 {
4869     MS_U16 u32Flag;
4870 
4871     switch(u32StreamId)
4872     {
4873         default:
4874         case 0:
4875             u32Flag = MASK_SCR_VID_EN;
4876             break;
4877         case 1:
4878             u32Flag = MASK_SCR_AUD_EN;
4879             break;
4880         case 2:
4881             u32Flag = MASK_SCR_AUD_B_EN;
4882             break;
4883         case 3:
4884             u32Flag = MASK_SCR_VID_3D_EN;
4885             break;
4886         case 6:
4887             u32Flag = MASK_SCR_PVR1_EN;
4888             break;
4889         case 7:
4890             u32Flag = MASK_SCR_PVR2_EN;
4891             break;
4892     }
4893 
4894     if (bEnable)
4895     {
4896         _HAL_REG16_W(&_TspCtrl3[0].HW3_Cfg1,
4897                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl3[0].HW3_Cfg1), u32Flag));
4898     }
4899     else
4900     {
4901         _HAL_REG16_W(&_TspCtrl3[0].HW3_Cfg1,
4902                 RESET_FLAG1(_HAL_REG16_R(&_TspCtrl3[0].HW3_Cfg1), u32Flag));
4903     }
4904     return TRUE;
4905 }
4906 
4907 
4908 // -------------------------------------------------------------
4909 // Merge Stream
4910 // -------------------------------------------------------------
HAL_TSP_Set_Sync_Byte(MS_U8 u8Path,MS_U8 u8Id,MS_U8 * pu8SyncByte,MS_BOOL bSet)4911 MS_BOOL HAL_TSP_Set_Sync_Byte(MS_U8 u8Path, MS_U8 u8Id, MS_U8 *pu8SyncByte, MS_BOOL bSet)
4912 {
4913     REG16 *SynReg=0;
4914     MS_U16 u16Mask = 0x00FF, u16Sync = 0, u16Shift = 0;
4915 
4916     switch(u8Path)
4917     {
4918         case TSP_SRC_FROM_TSIF0_LIVE:
4919             SynReg = &(_TspCtrl3[0].SyncByte_tsif0[u8Id>>1]);
4920             break;
4921         case TSP_SRC_FROM_TSIF0_FILE:
4922             SynReg = &(_TspCtrl3[0].SyncByte_file[u8Id>>1]);
4923             break;
4924         case TSP_SRC_FROM_TSIF1:
4925             SynReg = &(_TspCtrl3[0].SyncByte_tsif1[u8Id>>1]);
4926             break;
4927         default:
4928             return FALSE;
4929     }
4930 
4931     if(u8Id & 0x1)
4932     {
4933         u16Shift = 8;
4934     }
4935 
4936     if(bSet == TRUE)
4937     {
4938         u16Sync = (MS_U16)(*pu8SyncByte & 0xFF);
4939         _HAL_REG16_W(SynReg,((_HAL_REG16_R(SynReg) & ~(u16Mask << u16Shift)) | (u16Sync << u16Shift)));
4940     }
4941     else
4942     {
4943         u16Sync = (_HAL_REG16_R(SynReg) & (u16Mask << u16Shift)) >> u16Shift;
4944         *pu8SyncByte = (MS_U8)u16Sync;
4945     }
4946 
4947     return TRUE;
4948 
4949 }
4950 
HAL_TSP_Set_Src_Id(MS_U8 u8Path,MS_U8 u8Id,MS_U8 * pu8SrcId,MS_BOOL bSet)4951 MS_BOOL HAL_TSP_Set_Src_Id(MS_U8 u8Path, MS_U8 u8Id, MS_U8 *pu8SrcId, MS_BOOL bSet)
4952 {
4953     REG16 *SrcIdReg =0;
4954     MS_U16 u16SrcId = 0, u16Mask = 0x000F, u16Shift = 0;
4955 
4956     switch(u8Path)
4957     {
4958         case TSP_SRC_FROM_TSIF0_LIVE:
4959             SrcIdReg = &(_TspCtrl3[0].SourceId_tsif0[u8Id>>2]);
4960             break;
4961         case TSP_SRC_FROM_TSIF0_FILE:
4962             SrcIdReg = &(_TspCtrl3[0].SourceId_file[u8Id>>2]);
4963             break;
4964         case TSP_SRC_FROM_TSIF1:
4965             SrcIdReg = &(_TspCtrl3[0].SourceId_tsif1[u8Id>>2]);
4966             break;
4967         default:
4968             return FALSE;
4969     }
4970 
4971     switch(u8Id & 0x3)
4972     {
4973         case 0x1:
4974             u16Shift = 4;
4975             u16SrcId <<= 4;
4976             u16Mask <<= 4;
4977             break;
4978         case 0x2:
4979             u16Shift = 8;
4980             u16SrcId <<= 8;
4981             u16Mask <<= 8;
4982             break;
4983         case 0x3:
4984             u16Shift = 12;
4985             u16SrcId <<= 12;
4986             u16Mask <<= 12;
4987             break;
4988     }
4989 
4990     if(bSet == TRUE)
4991     {
4992         u16SrcId = (MS_U16)(*pu8SrcId & 0xFF);
4993         _HAL_REG16_W(SrcIdReg,((_HAL_REG16_R(SrcIdReg) & ~(u16Mask << u16Shift)) | (u16SrcId << u16Shift)));
4994     }
4995     else
4996     {
4997         u16SrcId = (_HAL_REG16_R(SrcIdReg) & (u16Mask << u16Shift)) >> u16Shift;
4998         *pu8SrcId = (MS_U8)u16SrcId;
4999     }
5000 
5001     return TRUE;
5002 }
5003 
HAL_TSP_Set_ATS_AdjPeriod(MS_U16 u16Value)5004 MS_BOOL HAL_TSP_Set_ATS_AdjPeriod(MS_U16 u16Value)
5005 {
5006     _HAL_REG16_W(&(_TspCtrl5[0].ATS_Adj_Period),
5007                 (_HAL_REG16_R(&(_TspCtrl5[0].ATS_Adj_Period)) & (~TSP_ATS_ADJ_PERIOD_MASK)) | u16Value);
5008 
5009     return TRUE;
5010 }
5011 
HAL_TSP_Set_ATS_AdjEnable(MS_BOOL bEnable)5012 MS_BOOL HAL_TSP_Set_ATS_AdjEnable(MS_BOOL bEnable)
5013 {
5014     if(bEnable == TRUE)
5015     {
5016         _HAL_REG16_W(&(_TspCtrl5[0].AtsCfg),
5017                 _HAL_REG16_R(&(_TspCtrl5[0].AtsCfg)) | TSP_ATS_MODE_FI_ENABLE);
5018     }
5019     else
5020     {
5021         _HAL_REG16_W(&(_TspCtrl5[0].AtsCfg),
5022                 (_HAL_REG16_R(&(_TspCtrl5[0].AtsCfg)) & (~TSP_ATS_MODE_FI_ENABLE)));
5023     }
5024     return TRUE;
5025 }
5026 
HAL_TSP_Set_ATS_AdjOffset(MS_BOOL bIncreased,MS_U16 u16Offset)5027 MS_BOOL HAL_TSP_Set_ATS_AdjOffset(MS_BOOL bIncreased, MS_U16 u16Offset)
5028 {
5029     if(bIncreased == TRUE)
5030     {
5031         _HAL_REG16_W(&(_TspCtrl5[0].AtsCfg),
5032                 (_HAL_REG16_R(&(_TspCtrl5[0].AtsCfg)) & (~TSP_ATS_OFFSET_FI_NEGATIVE)));
5033     }
5034     else
5035     {
5036         _HAL_REG16_W(&(_TspCtrl5[0].AtsCfg),
5037                 _HAL_REG16_R(&(_TspCtrl5[0].AtsCfg)) | TSP_ATS_OFFSET_FI_NEGATIVE);
5038     }
5039 
5040     _HAL_REG16_W(&(_TspCtrl5[0].AtsCfg),
5041                 (_HAL_REG16_R(&(_TspCtrl5[0].AtsCfg)) & (~TSP_ATS_OFFSET_FI_MASK)) | ((u16Offset << TSP_ATS_OFFSET_FI_SHIFT) & TSP_ATS_OFFSET_FI_MASK));
5042 
5043     _HAL_REG16_W(&(_TspCtrl5[0].AtsCfg),
5044                 _HAL_REG16_R(&(_TspCtrl5[0].AtsCfg)) | TSP_ATS_OFFSET_FI_ENABLE);
5045     _HAL_REG16_W(&(_TspCtrl5[0].AtsCfg),
5046                 (_HAL_REG16_R(&(_TspCtrl5[0].AtsCfg)) & (~TSP_ATS_OFFSET_FI_ENABLE)));
5047 
5048     return FALSE;
5049 }
5050 
5051 
5052