xref: /utopia/UTPA2-700.0.x/modules/dmx/hal/k7u/tso/halTSO.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2*53ee8cc1Swenshuai.xi //
3*53ee8cc1Swenshuai.xi // Copyright (c) 2011-2013 MStar Semiconductor, Inc.
4*53ee8cc1Swenshuai.xi // All rights reserved.
5*53ee8cc1Swenshuai.xi //
6*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
7*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
8*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
9*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
10*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
11*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
12*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
13*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
14*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
17*53ee8cc1Swenshuai.xi 
18*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
19*53ee8cc1Swenshuai.xi // file   halTSO.c
20*53ee8cc1Swenshuai.xi // @brief  TS I/O HAL
21*53ee8cc1Swenshuai.xi // @author MStar Semiconductor,Inc.
22*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
23*53ee8cc1Swenshuai.xi #include "MsCommon.h"
24*53ee8cc1Swenshuai.xi #include "regTSO.h"
25*53ee8cc1Swenshuai.xi #include "halTSO.h"
26*53ee8cc1Swenshuai.xi #include "halCHIP.h"
27*53ee8cc1Swenshuai.xi #include "drvSYS.h"
28*53ee8cc1Swenshuai.xi 
29*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_CLKM
30*53ee8cc1Swenshuai.xi     #include "drvCLKM.h"
31*53ee8cc1Swenshuai.xi #endif
32*53ee8cc1Swenshuai.xi 
33*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
34*53ee8cc1Swenshuai.xi //  Driver Compiler Option
35*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
36*53ee8cc1Swenshuai.xi #define TSP_HAL_REG_SAFE_MODE       1             // Register protection access between 1 task and 1+ ISR
37*53ee8cc1Swenshuai.xi 
38*53ee8cc1Swenshuai.xi #define MIU_BUS                     4
39*53ee8cc1Swenshuai.xi 
40*53ee8cc1Swenshuai.xi 
41*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
42*53ee8cc1Swenshuai.xi //  TSP Hardware Abstraction Layer
43*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
44*53ee8cc1Swenshuai.xi static REG_Ctrl_TSO*  _TSOCtrl  = NULL;
45*53ee8cc1Swenshuai.xi static REG_Ctrl_TSO1* _TSOCtrl1 = NULL;
46*53ee8cc1Swenshuai.xi static REG_Ctrl_TSO2* _TSOCtrl2 = NULL;
47*53ee8cc1Swenshuai.xi static REG_Ctrl_TSO4* _TSOCtrl4 = NULL;
48*53ee8cc1Swenshuai.xi 
49*53ee8cc1Swenshuai.xi static MS_VIRT   _u32TSORegBase = 0;
50*53ee8cc1Swenshuai.xi 
51*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
52*53ee8cc1Swenshuai.xi //  Debug Message
53*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
54*53ee8cc1Swenshuai.xi typedef enum
55*53ee8cc1Swenshuai.xi {
56*53ee8cc1Swenshuai.xi     E_HAL_TSO_DBG_LEVEL_NONE,   // no debug message shown
57*53ee8cc1Swenshuai.xi     E_HAL_TSO_DBG_LEVEL_ERR,    // only shows error message that can't be recover
58*53ee8cc1Swenshuai.xi     E_HAL_TSO_DBG_LEVEL_WARN,   // error case can be recover, like retry
59*53ee8cc1Swenshuai.xi     E_HAL_TSO_DBG_LEVEL_EVENT,  // event that is okay but better known, ex: timestamp ring, file circular, etc.
60*53ee8cc1Swenshuai.xi     E_HAL_TSO_DBG_LEVEL_INFO,   // information for internal parameter
61*53ee8cc1Swenshuai.xi     E_HAL_TSO_DBG_LEVEL_FUNC,   // Function trace and input parameter trace
62*53ee8cc1Swenshuai.xi     E_HAL_TSO_DBG_LEVEL_TRACE,  // debug trace
63*53ee8cc1Swenshuai.xi } EN_HAL_TSO_DBGMSG_LEVEL;
64*53ee8cc1Swenshuai.xi 
65*53ee8cc1Swenshuai.xi typedef enum
66*53ee8cc1Swenshuai.xi {
67*53ee8cc1Swenshuai.xi     E_HAL_TSO_DBG_MODEL_NONE,   // @temporarily , need to refine
68*53ee8cc1Swenshuai.xi     E_HAL_TSO_DBG_MODEL_ALL,
69*53ee8cc1Swenshuai.xi } EN_HAL_TSO_DBGMSG_MODEL;
70*53ee8cc1Swenshuai.xi 
71*53ee8cc1Swenshuai.xi #define HAL_TSO_DBGMSG(_level,_model,_f) do {if(_u32TSODbgLevel >= (_level)&&((_u32TSODbgModel&_model)!=0)) (_f);} while(0)
72*53ee8cc1Swenshuai.xi static MS_U32  _u32TSODbgLevel = E_HAL_TSO_DBG_LEVEL_ERR;
73*53ee8cc1Swenshuai.xi static MS_U32  _u32TSODbgModel = E_HAL_TSO_DBG_MODEL_ALL;
74*53ee8cc1Swenshuai.xi 
75*53ee8cc1Swenshuai.xi 
76*53ee8cc1Swenshuai.xi //[NOTE] Jerry
77*53ee8cc1Swenshuai.xi // Some register has write order, for example, writing PCR_L will disable PCR counter
78*53ee8cc1Swenshuai.xi // writing PCR_M trigger nothing, writing PCR_H will enable PCR counter
79*53ee8cc1Swenshuai.xi #define _HAL_REG32_W(reg, value)    do { (reg)->L = ((value) & 0x0000FFFF);                          \
80*53ee8cc1Swenshuai.xi                                          (reg)->H = ((value) >> 16); } while(0)
81*53ee8cc1Swenshuai.xi 
82*53ee8cc1Swenshuai.xi #define _HAL_REG16_W(reg, value)    { (reg)->data = (MS_U16)((value) & 0xFFFF); }
83*53ee8cc1Swenshuai.xi 
84*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
85*53ee8cc1Swenshuai.xi //  Macro of bit operations
86*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
87*53ee8cc1Swenshuai.xi #define HAS_FLAG(flag, bit)        ((flag) &   (bit))
88*53ee8cc1Swenshuai.xi #define SET_FLAG(flag, bit)        ((flag) |=  (bit))
89*53ee8cc1Swenshuai.xi #define RESET_FLAG(flag, bit)      ((flag) &=  (~(bit)))
90*53ee8cc1Swenshuai.xi #define SET_FLAG1(flag, bit)       ((flag) |   (bit))
91*53ee8cc1Swenshuai.xi #define RESET_FLAG1(flag, bit)     ((flag) &   (~(bit)))
92*53ee8cc1Swenshuai.xi 
93*53ee8cc1Swenshuai.xi 
94*53ee8cc1Swenshuai.xi #define _REG16_SET(reg, value);    _HAL_REG16_W(reg, SET_FLAG1(_HAL_REG16_R(reg), value));
95*53ee8cc1Swenshuai.xi #define _REG32_SET(reg, value);    _HAL_REG32_W(reg, SET_FLAG1(_HAL_REG32_R(reg), value));
96*53ee8cc1Swenshuai.xi #define _REG16_CLR(reg, value);    _HAL_REG16_W(reg, RESET_FLAG1(_HAL_REG16_R(reg), value));
97*53ee8cc1Swenshuai.xi #define _REG32_CLR(reg, value);    _HAL_REG32_W(reg, RESET_FLAG1(_HAL_REG32_R(reg), value));
98*53ee8cc1Swenshuai.xi 
99*53ee8cc1Swenshuai.xi 
100*53ee8cc1Swenshuai.xi 
101*53ee8cc1Swenshuai.xi 
102*53ee8cc1Swenshuai.xi #define TSO_CLKGEN0_REG(addr)       (*((volatile MS_U16*)(_u32TSORegBase + 0x1600UL + ((addr)<<2))))
103*53ee8cc1Swenshuai.xi     #define REG_CLKGEN0_TSO_IN                               0x27
104*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSO_IN_MASK                      0x001F
105*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSO_IN_SHIFT                     2
106*53ee8cc1Swenshuai.xi             #define REG_CLKGEN0_TSO_IN_DISABLE               0x0001
107*53ee8cc1Swenshuai.xi             #define REG_CLKGEN0_TSO_IN_INVERT                0x0002
108*53ee8cc1Swenshuai.xi             // bit[4:0]  ->                                  0: disable clock
109*53ee8cc1Swenshuai.xi             //                                               1: invert clock
110*53ee8cc1Swenshuai.xi             //                                               bit [3:2] ->    000: select TS0_CLK
111*53ee8cc1Swenshuai.xi             //                                               001: select TS1_CLK
112*53ee8cc1Swenshuai.xi             //                                               010: from demod 0
113*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSO_TRACE_MASK                   0x0F00
114*53ee8cc1Swenshuai.xi             #define REG_CLKGEN0_TSO_TRACE_DISABLE            0x0100
115*53ee8cc1Swenshuai.xi             #define REG_CLKGEN0_TSO_TRACE_INVERT             0x0200
116*53ee8cc1Swenshuai.xi             #define REG_CLKGEN0_TSO_TRACE_216M               0x0000
117*53ee8cc1Swenshuai.xi 
118*53ee8cc1Swenshuai.xi     #define REG_CLKGEN0_TSO_OUT_PHASE                        0x2D
119*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSO_OUT_PH_TUN_NUM_MASK          0x001F
120*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSO_OUT_PH_TUN_NUM_SHIFT         0
121*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSO_OUT_PHASE_TUN_EN_MASK        0x0020
122*53ee8cc1Swenshuai.xi             #define REG_CLKGEN0_TSO_OUT_PHASE_TUN_ENABLE     0x0020
123*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSO_OUT_DIV_SEL_MASK             0x0040
124*53ee8cc1Swenshuai.xi             #define HAL_TSO_OUT_DIV_SEL_172M_2N              0x0000
125*53ee8cc1Swenshuai.xi             #define HAL_TSO_OUT_DIV_SEL_288M_2N              0x0040
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi     #define REG_CLKGEN0_TSO_OUT_DIVNUM                       0x2E
128*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSO_OUT_DIVNUM_MASK              0x07C0
129*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSO_OUT_DIVNUM_SHIFT             6
130*53ee8cc1Swenshuai.xi         #define REG_CLKGEN_TSO_P_TSO_OUT_MASK                0xF800
131*53ee8cc1Swenshuai.xi         #define REG_CLKGEN_TSO_P_TSO_OUT_SHIFT               13
132*53ee8cc1Swenshuai.xi 
133*53ee8cc1Swenshuai.xi     #define REG_CLKGEN0_TSO_OUT_CLK                          0x2F
134*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSO_OUT_CLK_MASK                 0x001F
135*53ee8cc1Swenshuai.xi             #define REG_CLKGEN0_TSO_OUT_CLK_DISABLE          0x0001
136*53ee8cc1Swenshuai.xi             #define REG_CLKGEN0_TSO_OUT_CLK_INVERT           0x0002
137*53ee8cc1Swenshuai.xi             #define REG_CLKGEN0_TSO_OUT_CLK_SRC_SHIFT        2
138*53ee8cc1Swenshuai.xi             // bit[4:0]  ->      0: disable clock
139*53ee8cc1Swenshuai.xi             //                        1: invert clock
140*53ee8cc1Swenshuai.xi             //                        bit [4:2] ->     000: from demod 0, clk_dvbtc_ts_p
141*53ee8cc1Swenshuai.xi             //                                              001: 62MHz
142*53ee8cc1Swenshuai.xi             //                                              010: 54MHz
143*53ee8cc1Swenshuai.xi             //                                              011: clk_p_tso_out (live in)
144*53ee8cc1Swenshuai.xi             //                                              100: clk_p_tso_out_div8 (live in)
145*53ee8cc1Swenshuai.xi             //                                              101: tso_out_div (clock/(N+1))
146*53ee8cc1Swenshuai.xi             //                                              110: 86MHz
147*53ee8cc1Swenshuai.xi 
148*53ee8cc1Swenshuai.xi     #define TSO_CLKGEN1_REG(addr)       (*((volatile MS_U16*)(_u32TSORegBase + 0x6600UL + ((addr)<<2))))
149*53ee8cc1Swenshuai.xi     #define REG_CLKGEN1_DEMOD0_OUT_CLK                   0x00
150*53ee8cc1Swenshuai.xi         #define REG_CLKGEN1_DVBTM0_TS_DIVNUM_MASK 0x001F //demod0 div num of output clk
151*53ee8cc1Swenshuai.xi         #define REG_CLKGEN1_DVBTM0_TS_DIVNUM_SHIFT 0
152*53ee8cc1Swenshuai.xi         #define REG_CLKGEN1_ATSC_DVB0_DIV_SEL_MASK 0x0100 //demod0 div src of output clk
153*53ee8cc1Swenshuai.xi         #define REG_CLKGEN1_ATSC_DVB0_DIV_SEL_SHIFT 8
154*53ee8cc1Swenshuai.xi         // bit[8]    ->  0: CLK_DMPLLDIV2
155*53ee8cc1Swenshuai.xi         //               1: CLK_DMPLLDIV3
156*53ee8cc1Swenshuai.xi 
157*53ee8cc1Swenshuai.xi #define TSO_CLKGEN2_REG(addr)       (*((volatile MS_U16*)(_u32TSORegBase + 0x1400UL + ((addr)<<2))))
158*53ee8cc1Swenshuai.xi     #define REG_CLKGEN2_TSO1_IN                             0x06
159*53ee8cc1Swenshuai.xi     #define REG_CLKGEN2_TSO2_IN                             0x07
160*53ee8cc1Swenshuai.xi     #define REG_CLKGEN2_TSO3_IN                             0x08
161*53ee8cc1Swenshuai.xi     #define REG_CLKGEN2_TSO4_IN                             0x09
162*53ee8cc1Swenshuai.xi     #define REG_CLKGEN2_TSO5_IN                             0x0a
163*53ee8cc1Swenshuai.xi 
164*53ee8cc1Swenshuai.xi #define TSP_TOP_REG(addr)           (*((volatile MS_U16*)(_u32TSORegBase + 0x3c00UL + ((addr)<<2))))
165*53ee8cc1Swenshuai.xi     #define REG_TOP_TSO_MUX                         0x3A
166*53ee8cc1Swenshuai.xi         #define REG_TOP_TSO_MUX_MASK                0x0007
167*53ee8cc1Swenshuai.xi         #define REG_TOP_TSO1_MUX_SHIFT              0
168*53ee8cc1Swenshuai.xi         #define REG_TOP_TSO2_MUX_SHIFT              4
169*53ee8cc1Swenshuai.xi         #define REG_TOP_TSO3_MUX_SHIFT              8
170*53ee8cc1Swenshuai.xi         #define REG_TOP_TSO4_MUX_SHIFT              12
171*53ee8cc1Swenshuai.xi 
172*53ee8cc1Swenshuai.xi     #define REG_TOP_TSO1_MUX                        0x3B
173*53ee8cc1Swenshuai.xi         #define REG_TOP_TSO5_MUX_SHIFT              0
174*53ee8cc1Swenshuai.xi         #define REG_TOP_TSO6_MUX_SHIFT              4
175*53ee8cc1Swenshuai.xi         // bit[2:0]  ->        000: PAD_TS0
176*53ee8cc1Swenshuai.xi         //                     001: PAD_TS1
177*53ee8cc1Swenshuai.xi         //                     0111: DEMOD
178*53ee8cc1Swenshuai.xi 
179*53ee8cc1Swenshuai.xi #if 0 // Not used
180*53ee8cc1Swenshuai.xi     #define REG_TOP_MIU_GP1_i64                         0x21
181*53ee8cc1Swenshuai.xi         #define REG_TOP_MIU_GP1_i64_TSO_MASK            0x0080
182*53ee8cc1Swenshuai.xi         #define REG_TOP_MIU_GP1_i64_TSO_128BIT_CLIENT   0x0000
183*53ee8cc1Swenshuai.xi         #define REG_TOP_MIU_GP1_i64_TSO_64BIT_CLIENT    0x0080
184*53ee8cc1Swenshuai.xi     #define REG_TOP_TS_CONFIG                           0x57
185*53ee8cc1Swenshuai.xi         #define REG_TOP_TS0_CONFIG_MASK                 0x0700
186*53ee8cc1Swenshuai.xi             #define REG_TOP_TS0_CONFIG_PARALLEL_IN      0x0100
187*53ee8cc1Swenshuai.xi             #define REG_TOP_TS0_CONFIG_SERIAL_IN        0x0200
188*53ee8cc1Swenshuai.xi         #define REG_TOP_TS1_CONFIG_MASK                 0x3800
189*53ee8cc1Swenshuai.xi             #define REG_TOP_TS1_CONFIG_PARALLEL_IN      0x0800
190*53ee8cc1Swenshuai.xi             #define REG_TOP_TS1_CONFIG_PARALLEL_OUT     0x1000
191*53ee8cc1Swenshuai.xi             #define REG_TOP_TS1_CONFIG_SERIAL_IN        0x1800
192*53ee8cc1Swenshuai.xi         #define REG_TOP_TS2_CONFIG_MASK                 0x4000
193*53ee8cc1Swenshuai.xi             #define REG_TOP_TS2_CONFIG_PARALLEL_IN      0x4000
194*53ee8cc1Swenshuai.xi         #define REG_TOP_TSCB_CONFIG_MASK                0x8000
195*53ee8cc1Swenshuai.xi             #define REG_TOP_TSCB_CONFIG_SERIAL_IN       0x8000
196*53ee8cc1Swenshuai.xi     #define REG_TOP_TS_OUT_MODE                         0x6E
197*53ee8cc1Swenshuai.xi         #define REG_TOP_TS_OUT_MODE_MASK                0x0300
198*53ee8cc1Swenshuai.xi             #define REG_TOP_TS_OUT_MODE_TSO             0x0200
199*53ee8cc1Swenshuai.xi #endif
200*53ee8cc1Swenshuai.xi 
201*53ee8cc1Swenshuai.xi #define TSO_MIUDIG0_REG(addr)       (*((volatile MS_U16*)(_u32TSORegBase + 0x0C00UL + ((addr)<<2))))
202*53ee8cc1Swenshuai.xi #define TSO_MIUDIG1_REG(addr)       (*((volatile MS_U16*)(_u32TSORegBase + 0x2400UL + ((addr)<<2))))
203*53ee8cc1Swenshuai.xi     #define REG_MIUDIG_MIU_SEL1                         0x79
204*53ee8cc1Swenshuai.xi         #define REG_MIUDIG_MIU_SEL1_TSO_SEL_MASK        0x0080
205*53ee8cc1Swenshuai.xi 
206*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
207*53ee8cc1Swenshuai.xi //  Implementation
208*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
_HAL_REG32_R(REG32_TSO * reg)209*53ee8cc1Swenshuai.xi static MS_U32 _HAL_REG32_R(REG32_TSO *reg)
210*53ee8cc1Swenshuai.xi {
211*53ee8cc1Swenshuai.xi     MS_U32     value = 0;
212*53ee8cc1Swenshuai.xi     value  = (reg)->L;
213*53ee8cc1Swenshuai.xi     value |= (reg)->H << 16;
214*53ee8cc1Swenshuai.xi     return value;
215*53ee8cc1Swenshuai.xi }
216*53ee8cc1Swenshuai.xi 
_HAL_REG16_R(REG16_TSO * reg)217*53ee8cc1Swenshuai.xi static MS_U16 _HAL_REG16_R(REG16_TSO *reg)
218*53ee8cc1Swenshuai.xi {
219*53ee8cc1Swenshuai.xi     MS_U16              value = 0;
220*53ee8cc1Swenshuai.xi     value = (reg)->data;
221*53ee8cc1Swenshuai.xi     return value;
222*53ee8cc1Swenshuai.xi }
223*53ee8cc1Swenshuai.xi 
HAL_TSO_SetBank(MS_VIRT u32BankAddr)224*53ee8cc1Swenshuai.xi void HAL_TSO_SetBank(MS_VIRT u32BankAddr)
225*53ee8cc1Swenshuai.xi {
226*53ee8cc1Swenshuai.xi     _u32TSORegBase = u32BankAddr;
227*53ee8cc1Swenshuai.xi     _TSOCtrl  = (REG_Ctrl_TSO*)(_u32TSORegBase+ REG_CTRL_BASE_TSO);      // 0x1706
228*53ee8cc1Swenshuai.xi     _TSOCtrl1 = (REG_Ctrl_TSO1*)(_u32TSORegBase+ REG_CTRL_BASE_TSO1);   // 0x1612
229*53ee8cc1Swenshuai.xi     _TSOCtrl2 = (REG_Ctrl_TSO2*)(_u32TSORegBase+ REG_CTRL_BASE_TSO2);   // 0x1539
230*53ee8cc1Swenshuai.xi     //_TSOCtrl3 = (REG_Ctrl_TSO3*)(_u32TSORegBase+ REG_CTRL_BASE_TSO3);   // 0x171D
231*53ee8cc1Swenshuai.xi     _TSOCtrl4 = (REG_Ctrl_TSO4*)(_u32TSORegBase+ REG_CTRL_BASE_TSO4);   // 0x1215
232*53ee8cc1Swenshuai.xi }
233*53ee8cc1Swenshuai.xi 
234*53ee8cc1Swenshuai.xi //
235*53ee8cc1Swenshuai.xi // General API
236*53ee8cc1Swenshuai.xi //
HAL_TSO_Init(void)237*53ee8cc1Swenshuai.xi void HAL_TSO_Init(void)
238*53ee8cc1Swenshuai.xi {
239*53ee8cc1Swenshuai.xi     //select MIU0, and 128bit MIU bus
240*53ee8cc1Swenshuai.xi     /*
241*53ee8cc1Swenshuai.xi     TSO_MIUDIG0_REG(REG_MIUDIG_MIU_SEL1) &= ~REG_MIUDIG_MIU_SEL1_TSO_SEL_MASK; //select miu0
242*53ee8cc1Swenshuai.xi     TSO_MIUDIG1_REG(REG_MIUDIG_MIU_SEL1) &= ~REG_MIUDIG_MIU_SEL1_TSO_SEL_MASK; //select miu0
243*53ee8cc1Swenshuai.xi     TSP_TOP_REG(REG_TOP_MIU_GP1_i64) =
244*53ee8cc1Swenshuai.xi         (TSP_TOP_REG(REG_TOP_MIU_GP1_i64) & ~REG_TOP_MIU_GP1_i64_TSO_MASK) | REG_TOP_MIU_GP1_i64_TSO_128BIT_CLIENT;
245*53ee8cc1Swenshuai.xi     */
246*53ee8cc1Swenshuai.xi 
247*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl->TSO_CONFIG5), TSO_CONFIG5_FIXED_MIU_REG_FLUSH);
248*53ee8cc1Swenshuai.xi 
249*53ee8cc1Swenshuai.xi }
250*53ee8cc1Swenshuai.xi 
HAL_TSO_Reset_All(MS_U8 u8Eng)251*53ee8cc1Swenshuai.xi void HAL_TSO_Reset_All(MS_U8 u8Eng)
252*53ee8cc1Swenshuai.xi {
253*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSOCtrl->SW_RSTZ), TSO_SW_RSTZ);//low active
254*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl->SW_RSTZ), TSO_SW_RSTZ);
255*53ee8cc1Swenshuai.xi 
256*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl->SW_RSTZ), TSO_SW_RST_ALL | TSO_SW_RST_ALL1);
257*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSOCtrl->SW_RSTZ), TSO_SW_RST_ALL | TSO_SW_RST_ALL1);
258*53ee8cc1Swenshuai.xi }
259*53ee8cc1Swenshuai.xi 
HAL_TSO_Reset(MS_U8 u8Eng)260*53ee8cc1Swenshuai.xi void HAL_TSO_Reset(MS_U8 u8Eng)
261*53ee8cc1Swenshuai.xi {
262*53ee8cc1Swenshuai.xi     //@TODO not find in register table
263*53ee8cc1Swenshuai.xi     /*
264*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl[u8Eng].SW_RSTZ), _HAL_REG16_R(&(_TSOCtrl[u8Eng].SW_RSTZ)) & ~TSO_SW_RSTZ_DISABLE);
265*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl[u8Eng].SW_RSTZ), _HAL_REG16_R(&(_TSOCtrl[u8Eng].SW_RSTZ)) | TSO_SW_RSTZ_DISABLE);
266*53ee8cc1Swenshuai.xi     */
267*53ee8cc1Swenshuai.xi }
268*53ee8cc1Swenshuai.xi 
HAL_TSO_Reset_SubItem(MS_U8 u8Eng,MS_U16 u16RstItem)269*53ee8cc1Swenshuai.xi void HAL_TSO_Reset_SubItem(MS_U8 u8Eng, MS_U16 u16RstItem)
270*53ee8cc1Swenshuai.xi {
271*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl[u8Eng].SW_RSTZ), (_HAL_REG16_R(&(_TSOCtrl[u8Eng].SW_RSTZ)) | u16RstItem));
272*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl[u8Eng].SW_RSTZ), (_HAL_REG16_R(&(_TSOCtrl[u8Eng].SW_RSTZ)) & ~u16RstItem));
273*53ee8cc1Swenshuai.xi }
274*53ee8cc1Swenshuai.xi 
HAL_TSO_HWInt_Enable(MS_U8 u8Eng,MS_BOOL bEnable,MS_U16 u16init)275*53ee8cc1Swenshuai.xi void HAL_TSO_HWInt_Enable(MS_U8 u8Eng, MS_BOOL bEnable, MS_U16 u16init)
276*53ee8cc1Swenshuai.xi {
277*53ee8cc1Swenshuai.xi     REG16_TSO *reg = (u8Eng == 0)? &(_TSOCtrl->INTERRUPT) : &(_TSOCtrl->INTERRUPT1);
278*53ee8cc1Swenshuai.xi     MS_U16 u16data = _HAL_REG16_R(reg);
279*53ee8cc1Swenshuai.xi 
280*53ee8cc1Swenshuai.xi     if(bEnable)
281*53ee8cc1Swenshuai.xi     {
282*53ee8cc1Swenshuai.xi         _HAL_REG16_W(reg, (u16data | u16init));
283*53ee8cc1Swenshuai.xi     }
284*53ee8cc1Swenshuai.xi     else
285*53ee8cc1Swenshuai.xi     {
286*53ee8cc1Swenshuai.xi         _HAL_REG16_W(reg, (u16data & ~u16init));
287*53ee8cc1Swenshuai.xi     }
288*53ee8cc1Swenshuai.xi }
289*53ee8cc1Swenshuai.xi 
HAL_TSO_HWInt_Clear(MS_U8 u8Eng,MS_U16 u16Int)290*53ee8cc1Swenshuai.xi void HAL_TSO_HWInt_Clear(MS_U8 u8Eng, MS_U16 u16Int)
291*53ee8cc1Swenshuai.xi {
292*53ee8cc1Swenshuai.xi     REG16_TSO *reg = (u8Eng == 0)? &(_TSOCtrl->INTERRUPT) : &(_TSOCtrl->INTERRUPT1);
293*53ee8cc1Swenshuai.xi 
294*53ee8cc1Swenshuai.xi     _HAL_REG16_W(reg, (_HAL_REG16_R(reg) & ~u16Int));
295*53ee8cc1Swenshuai.xi }
296*53ee8cc1Swenshuai.xi 
HAL_TSO_HWInt_Status(MS_U8 u8Eng)297*53ee8cc1Swenshuai.xi MS_U16 HAL_TSO_HWInt_Status(MS_U8 u8Eng)
298*53ee8cc1Swenshuai.xi {
299*53ee8cc1Swenshuai.xi     REG16_TSO *reg = (u8Eng == 0)? &(_TSOCtrl->INTERRUPT) : &(_TSOCtrl->INTERRUPT1);
300*53ee8cc1Swenshuai.xi 
301*53ee8cc1Swenshuai.xi     return (_HAL_REG16_R(reg) & TSO_INT_STS_MASK);
302*53ee8cc1Swenshuai.xi }
303*53ee8cc1Swenshuai.xi 
HAL_TSO_3WirePadMapping(MS_U8 u8Pad3WireId,MS_U16 * u16Pad,MS_U16 * u16Clk)304*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_3WirePadMapping(MS_U8 u8Pad3WireId, MS_U16 *u16Pad, MS_U16 *u16Clk)
305*53ee8cc1Swenshuai.xi {
306*53ee8cc1Swenshuai.xi     switch(u8Pad3WireId)
307*53ee8cc1Swenshuai.xi     {
308*53ee8cc1Swenshuai.xi         case 3:
309*53ee8cc1Swenshuai.xi             *u16Pad = HAL_TSOIN_MUX_TS3;
310*53ee8cc1Swenshuai.xi             *u16Clk = TSO_CLKIN_TS3;
311*53ee8cc1Swenshuai.xi             break;
312*53ee8cc1Swenshuai.xi         case 4:
313*53ee8cc1Swenshuai.xi             *u16Pad = HAL_TSOIN_MUX_TS4;
314*53ee8cc1Swenshuai.xi             *u16Clk = TSO_CLKIN_TS4;
315*53ee8cc1Swenshuai.xi             break;
316*53ee8cc1Swenshuai.xi         case 5:
317*53ee8cc1Swenshuai.xi             *u16Pad = HAL_TSOIN_MUX_TS5;
318*53ee8cc1Swenshuai.xi             *u16Clk = TSO_CLKIN_TS5;
319*53ee8cc1Swenshuai.xi             break;
320*53ee8cc1Swenshuai.xi         case 6:
321*53ee8cc1Swenshuai.xi             *u16Pad = HAL_TSOIN_MUX_TS6;
322*53ee8cc1Swenshuai.xi             *u16Clk = TSO_CLKIN_TS6;
323*53ee8cc1Swenshuai.xi             break;
324*53ee8cc1Swenshuai.xi         default:
325*53ee8cc1Swenshuai.xi             printf("[%s][%d]: Not support !!\n", __FUNCTION__, __LINE__);
326*53ee8cc1Swenshuai.xi             return FALSE;
327*53ee8cc1Swenshuai.xi     }
328*53ee8cc1Swenshuai.xi 
329*53ee8cc1Swenshuai.xi     return TRUE;
330*53ee8cc1Swenshuai.xi }
331*53ee8cc1Swenshuai.xi 
332*53ee8cc1Swenshuai.xi 
HAL_TSO_SelPad(MS_U8 u8Eng,MS_U8 u8TsIf,MS_U16 u16InPadSel,MS_BOOL bParallel)333*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_SelPad(MS_U8 u8Eng, MS_U8 u8TsIf, MS_U16 u16InPadSel, MS_BOOL bParallel)
334*53ee8cc1Swenshuai.xi {
335*53ee8cc1Swenshuai.xi     MS_U16 u16Reg, u16RegShift;
336*53ee8cc1Swenshuai.xi 
337*53ee8cc1Swenshuai.xi     switch(u8TsIf)
338*53ee8cc1Swenshuai.xi     {
339*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
340*53ee8cc1Swenshuai.xi             u16Reg = REG_TOP_TSO_MUX;
341*53ee8cc1Swenshuai.xi             u16RegShift = REG_TOP_TSO1_MUX_SHIFT;
342*53ee8cc1Swenshuai.xi             break;
343*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
344*53ee8cc1Swenshuai.xi             u16Reg = REG_TOP_TSO_MUX;
345*53ee8cc1Swenshuai.xi             u16RegShift = REG_TOP_TSO2_MUX_SHIFT;
346*53ee8cc1Swenshuai.xi             break;
347*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
348*53ee8cc1Swenshuai.xi             u16Reg = REG_TOP_TSO_MUX;
349*53ee8cc1Swenshuai.xi             u16RegShift = REG_TOP_TSO3_MUX_SHIFT;
350*53ee8cc1Swenshuai.xi             break;
351*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
352*53ee8cc1Swenshuai.xi             u16Reg = REG_TOP_TSO_MUX;
353*53ee8cc1Swenshuai.xi             u16RegShift = REG_TOP_TSO4_MUX_SHIFT;
354*53ee8cc1Swenshuai.xi             break;
355*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
356*53ee8cc1Swenshuai.xi             u16Reg = REG_TOP_TSO1_MUX;
357*53ee8cc1Swenshuai.xi             u16RegShift = REG_TOP_TSO5_MUX_SHIFT;
358*53ee8cc1Swenshuai.xi             break;
359*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
360*53ee8cc1Swenshuai.xi             u16Reg = REG_TOP_TSO1_MUX;
361*53ee8cc1Swenshuai.xi             u16RegShift = REG_TOP_TSO6_MUX_SHIFT;
362*53ee8cc1Swenshuai.xi             break;
363*53ee8cc1Swenshuai.xi         default:
364*53ee8cc1Swenshuai.xi             printf("Not support !!\n");
365*53ee8cc1Swenshuai.xi             return FALSE;
366*53ee8cc1Swenshuai.xi     }
367*53ee8cc1Swenshuai.xi 
368*53ee8cc1Swenshuai.xi     TSP_TOP_REG(u16Reg) = (TSP_TOP_REG(u16Reg) & ~(REG_TOP_TSO_MUX_MASK << u16RegShift)) | (u16InPadSel << u16RegShift);
369*53ee8cc1Swenshuai.xi 
370*53ee8cc1Swenshuai.xi     //@NOTE: no need to change input pad mode dynamically (Mboot handle it...)
371*53ee8cc1Swenshuai.xi 
372*53ee8cc1Swenshuai.xi     return TRUE;
373*53ee8cc1Swenshuai.xi }
374*53ee8cc1Swenshuai.xi 
HAL_TSO_OutPad(MS_U8 u8Eng,MS_U16 * pu16OutPad,MS_BOOL bSet)375*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_OutPad(MS_U8 u8Eng, MS_U16* pu16OutPad, MS_BOOL bSet)
376*53ee8cc1Swenshuai.xi {
377*53ee8cc1Swenshuai.xi     //@TODO not implement
378*53ee8cc1Swenshuai.xi     return TRUE;
379*53ee8cc1Swenshuai.xi }
380*53ee8cc1Swenshuai.xi 
381*53ee8cc1Swenshuai.xi 
HAL_TSO_GetInputTSIF_Status(MS_U8 u8Eng,MS_U8 u8TsIf,MS_U16 * pu16Pad,MS_BOOL * pbClkInvert,MS_BOOL * pbExtSync,MS_BOOL * pbParl)382*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_GetInputTSIF_Status(MS_U8 u8Eng, MS_U8 u8TsIf, MS_U16* pu16Pad, MS_BOOL* pbClkInvert, MS_BOOL* pbExtSync, MS_BOOL* pbParl)
383*53ee8cc1Swenshuai.xi {
384*53ee8cc1Swenshuai.xi     MS_U16 u16Reg, u16RegShift;
385*53ee8cc1Swenshuai.xi     MS_U16 u16data = 0;
386*53ee8cc1Swenshuai.xi     REG16_TSO* reg16 = 0;
387*53ee8cc1Swenshuai.xi 
388*53ee8cc1Swenshuai.xi     // Set pad mux
389*53ee8cc1Swenshuai.xi     switch(u8TsIf)
390*53ee8cc1Swenshuai.xi     {
391*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
392*53ee8cc1Swenshuai.xi             u16Reg = REG_TOP_TSO_MUX;
393*53ee8cc1Swenshuai.xi             u16RegShift = REG_TOP_TSO1_MUX_SHIFT;
394*53ee8cc1Swenshuai.xi             break;
395*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
396*53ee8cc1Swenshuai.xi             u16Reg = REG_TOP_TSO_MUX;
397*53ee8cc1Swenshuai.xi             u16RegShift = REG_TOP_TSO2_MUX_SHIFT;
398*53ee8cc1Swenshuai.xi             break;
399*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
400*53ee8cc1Swenshuai.xi             u16Reg = REG_TOP_TSO_MUX;
401*53ee8cc1Swenshuai.xi             u16RegShift = REG_TOP_TSO3_MUX_SHIFT;
402*53ee8cc1Swenshuai.xi             break;
403*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
404*53ee8cc1Swenshuai.xi             u16Reg = REG_TOP_TSO_MUX;
405*53ee8cc1Swenshuai.xi             u16RegShift = REG_TOP_TSO4_MUX_SHIFT;
406*53ee8cc1Swenshuai.xi             break;
407*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
408*53ee8cc1Swenshuai.xi             u16Reg = REG_TOP_TSO1_MUX;
409*53ee8cc1Swenshuai.xi             u16RegShift = REG_TOP_TSO5_MUX_SHIFT;
410*53ee8cc1Swenshuai.xi             break;
411*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
412*53ee8cc1Swenshuai.xi             u16Reg = REG_TOP_TSO1_MUX;
413*53ee8cc1Swenshuai.xi             u16RegShift = REG_TOP_TSO6_MUX_SHIFT;
414*53ee8cc1Swenshuai.xi             break;
415*53ee8cc1Swenshuai.xi         default:
416*53ee8cc1Swenshuai.xi             printf("Not support !!\n");
417*53ee8cc1Swenshuai.xi             return FALSE;
418*53ee8cc1Swenshuai.xi     }
419*53ee8cc1Swenshuai.xi 
420*53ee8cc1Swenshuai.xi     *pu16Pad = (TSP_TOP_REG(u16Reg) >> u16RegShift) & REG_TOP_TSO_MUX_MASK;
421*53ee8cc1Swenshuai.xi 
422*53ee8cc1Swenshuai.xi     switch(u8TsIf)
423*53ee8cc1Swenshuai.xi     {
424*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
425*53ee8cc1Swenshuai.xi             u16data = TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) & REG_CLKGEN0_TSO_IN_MASK;
426*53ee8cc1Swenshuai.xi             reg16 = &(_TSOCtrl->CHANNEL0_IF1_CONFIG2);
427*53ee8cc1Swenshuai.xi             break;
428*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
429*53ee8cc1Swenshuai.xi             u16data = TSO_CLKGEN2_REG(REG_CLKGEN2_TSO1_IN) & REG_CLKGEN0_TSO_IN_MASK;
430*53ee8cc1Swenshuai.xi             reg16 = &(_TSOCtrl->CHANNEL0_IF2_CONFIG2);
431*53ee8cc1Swenshuai.xi             break;
432*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
433*53ee8cc1Swenshuai.xi             u16data = TSO_CLKGEN2_REG(REG_CLKGEN2_TSO2_IN) & REG_CLKGEN0_TSO_IN_MASK;
434*53ee8cc1Swenshuai.xi             reg16 = &(_TSOCtrl->CHANNEL0_IF3_CONFIG2);
435*53ee8cc1Swenshuai.xi             break;
436*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
437*53ee8cc1Swenshuai.xi             u16data = TSO_CLKGEN2_REG(REG_CLKGEN2_TSO3_IN) & REG_CLKGEN0_TSO_IN_MASK;
438*53ee8cc1Swenshuai.xi             reg16 = &(_TSOCtrl->CHANNEL0_IF4_CONFIG2);
439*53ee8cc1Swenshuai.xi             break;
440*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
441*53ee8cc1Swenshuai.xi             u16data = TSO_CLKGEN2_REG(REG_CLKGEN2_TSO4_IN) & REG_CLKGEN0_TSO_IN_MASK;
442*53ee8cc1Swenshuai.xi             reg16 = &(_TSOCtrl->CHANNEL0_IF5_CONFIG2);
443*53ee8cc1Swenshuai.xi             break;
444*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
445*53ee8cc1Swenshuai.xi             u16data = TSO_CLKGEN2_REG(REG_CLKGEN2_TSO5_IN) & REG_CLKGEN0_TSO_IN_MASK;
446*53ee8cc1Swenshuai.xi             reg16 = &(_TSOCtrl->CHANNEL0_IF6_CONFIG2);
447*53ee8cc1Swenshuai.xi             break;
448*53ee8cc1Swenshuai.xi         default:
449*53ee8cc1Swenshuai.xi             printf("Not support !!\n");
450*53ee8cc1Swenshuai.xi             return FALSE;
451*53ee8cc1Swenshuai.xi     }
452*53ee8cc1Swenshuai.xi 
453*53ee8cc1Swenshuai.xi     *pbExtSync = ((_HAL_REG16_R(reg16) & TSO_CHCFG_EXT_SYNC_SEL) == TSO_CHCFG_EXT_SYNC_SEL);
454*53ee8cc1Swenshuai.xi     *pbParl = ((_HAL_REG16_R(reg16) & TSO_CHCFG_P_SEL) == TSO_CHCFG_P_SEL);
455*53ee8cc1Swenshuai.xi     *pbClkInvert = ((u16data & REG_CLKGEN0_TSO_IN_INVERT) == REG_CLKGEN0_TSO_IN_INVERT);
456*53ee8cc1Swenshuai.xi 
457*53ee8cc1Swenshuai.xi     return TRUE;
458*53ee8cc1Swenshuai.xi }
459*53ee8cc1Swenshuai.xi 
HAL_TSO_Set_InClk(MS_U8 u8Eng,MS_U8 u8TsIf,MS_U16 u16ClkSel,MS_BOOL bClkInvert,MS_BOOL bEnable)460*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_Set_InClk(MS_U8 u8Eng, MS_U8 u8TsIf, MS_U16 u16ClkSel, MS_BOOL bClkInvert, MS_BOOL bEnable)
461*53ee8cc1Swenshuai.xi {
462*53ee8cc1Swenshuai.xi     MS_BOOL isCLKGEN0 = FALSE;
463*53ee8cc1Swenshuai.xi     MS_U16  u16Reg;
464*53ee8cc1Swenshuai.xi     MS_U16  u16value = 0;
465*53ee8cc1Swenshuai.xi 
466*53ee8cc1Swenshuai.xi     switch(u8TsIf)
467*53ee8cc1Swenshuai.xi     {
468*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
469*53ee8cc1Swenshuai.xi             isCLKGEN0 = TRUE;
470*53ee8cc1Swenshuai.xi             u16Reg = REG_CLKGEN0_TSO_IN;
471*53ee8cc1Swenshuai.xi             break;
472*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
473*53ee8cc1Swenshuai.xi             u16Reg = REG_CLKGEN2_TSO1_IN;
474*53ee8cc1Swenshuai.xi             break;
475*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
476*53ee8cc1Swenshuai.xi             u16Reg = REG_CLKGEN2_TSO2_IN;
477*53ee8cc1Swenshuai.xi             break;
478*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
479*53ee8cc1Swenshuai.xi             u16Reg = REG_CLKGEN2_TSO3_IN;
480*53ee8cc1Swenshuai.xi             break;
481*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
482*53ee8cc1Swenshuai.xi             u16Reg = REG_CLKGEN2_TSO4_IN;
483*53ee8cc1Swenshuai.xi             break;
484*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
485*53ee8cc1Swenshuai.xi             u16Reg = REG_CLKGEN2_TSO5_IN;
486*53ee8cc1Swenshuai.xi             break;
487*53ee8cc1Swenshuai.xi         default:
488*53ee8cc1Swenshuai.xi             printf("Not support !!\n");
489*53ee8cc1Swenshuai.xi             return FALSE;
490*53ee8cc1Swenshuai.xi     }
491*53ee8cc1Swenshuai.xi 
492*53ee8cc1Swenshuai.xi     if(u16ClkSel == 0xFFFF)
493*53ee8cc1Swenshuai.xi     {
494*53ee8cc1Swenshuai.xi         return FALSE;
495*53ee8cc1Swenshuai.xi     }
496*53ee8cc1Swenshuai.xi 
497*53ee8cc1Swenshuai.xi     if(isCLKGEN0)
498*53ee8cc1Swenshuai.xi     {
499*53ee8cc1Swenshuai.xi         u16value = TSO_CLKGEN0_REG(u16Reg) & ~REG_CLKGEN0_TSO_IN_MASK;
500*53ee8cc1Swenshuai.xi     }
501*53ee8cc1Swenshuai.xi     else
502*53ee8cc1Swenshuai.xi     {
503*53ee8cc1Swenshuai.xi         u16value = TSO_CLKGEN2_REG(u16Reg) & ~REG_CLKGEN0_TSO_IN_MASK;
504*53ee8cc1Swenshuai.xi     }
505*53ee8cc1Swenshuai.xi 
506*53ee8cc1Swenshuai.xi     if(!bEnable)
507*53ee8cc1Swenshuai.xi     {
508*53ee8cc1Swenshuai.xi         u16value |= REG_CLKGEN0_TSO_IN_DISABLE;
509*53ee8cc1Swenshuai.xi     }
510*53ee8cc1Swenshuai.xi     else
511*53ee8cc1Swenshuai.xi     {
512*53ee8cc1Swenshuai.xi #ifndef CONFIG_MSTAR_CLKM
513*53ee8cc1Swenshuai.xi         u16value |= (u16ClkSel << REG_CLKGEN0_TSO_IN_SHIFT);
514*53ee8cc1Swenshuai.xi #endif
515*53ee8cc1Swenshuai.xi 
516*53ee8cc1Swenshuai.xi         if(bClkInvert)
517*53ee8cc1Swenshuai.xi         {
518*53ee8cc1Swenshuai.xi             u16value |= REG_CLKGEN0_TSO_IN_INVERT;
519*53ee8cc1Swenshuai.xi         }
520*53ee8cc1Swenshuai.xi     }
521*53ee8cc1Swenshuai.xi 
522*53ee8cc1Swenshuai.xi     if(isCLKGEN0)
523*53ee8cc1Swenshuai.xi     {
524*53ee8cc1Swenshuai.xi         TSO_CLKGEN0_REG(u16Reg) = u16value;
525*53ee8cc1Swenshuai.xi     }
526*53ee8cc1Swenshuai.xi     else
527*53ee8cc1Swenshuai.xi     {
528*53ee8cc1Swenshuai.xi         TSO_CLKGEN2_REG(u16Reg) = u16value;
529*53ee8cc1Swenshuai.xi     }
530*53ee8cc1Swenshuai.xi 
531*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_CLKM
532*53ee8cc1Swenshuai.xi 
533*53ee8cc1Swenshuai.xi     MS_S32 s32Handle;
534*53ee8cc1Swenshuai.xi     char   u8ClkSrcName[20] = "";
535*53ee8cc1Swenshuai.xi     MS_U8  u8Idx = u8TsIf - 1;
536*53ee8cc1Swenshuai.xi 
537*53ee8cc1Swenshuai.xi     switch(u16ClkSel)
538*53ee8cc1Swenshuai.xi     {
539*53ee8cc1Swenshuai.xi         case TSO_CLKIN_TS0:
540*53ee8cc1Swenshuai.xi             sprintf(u8ClkSrcName, "CLK_TSOIN%u_PAD0", u8Idx);
541*53ee8cc1Swenshuai.xi             break;
542*53ee8cc1Swenshuai.xi         case TSO_CLKIN_TS1:
543*53ee8cc1Swenshuai.xi             sprintf(u8ClkSrcName, "CLK_TSOIN%u_PAD1", u8Idx);
544*53ee8cc1Swenshuai.xi             break;
545*53ee8cc1Swenshuai.xi         case TSO_CLKIN_TS2:
546*53ee8cc1Swenshuai.xi             sprintf(u8ClkSrcName, "CLK_TSOIN%u_PAD2", u8Idx);
547*53ee8cc1Swenshuai.xi             break;
548*53ee8cc1Swenshuai.xi         case TSO_CLKIN_TS3:
549*53ee8cc1Swenshuai.xi             sprintf(u8ClkSrcName, "CLK_TSOIN%u_PAD3", u8Idx);
550*53ee8cc1Swenshuai.xi             break;
551*53ee8cc1Swenshuai.xi         case TSO_CLKIN_TS4:
552*53ee8cc1Swenshuai.xi             sprintf(u8ClkSrcName, "CLK_TSOIN%u_PAD4", u8Idx);
553*53ee8cc1Swenshuai.xi             break;
554*53ee8cc1Swenshuai.xi         case TSO_CLKIN_TS5:
555*53ee8cc1Swenshuai.xi             sprintf(u8ClkSrcName, "CLK_TSOIN%u_PAD5", u8Idx);
556*53ee8cc1Swenshuai.xi             break;
557*53ee8cc1Swenshuai.xi         default:
558*53ee8cc1Swenshuai.xi             printf("[%s][%d] Not support !!\n", __FUNCTION__, __LINE__);
559*53ee8cc1Swenshuai.xi             return FALSE;
560*53ee8cc1Swenshuai.xi     }
561*53ee8cc1Swenshuai.xi 
562*53ee8cc1Swenshuai.xi     switch(u8TsIf)
563*53ee8cc1Swenshuai.xi     {
564*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
565*53ee8cc1Swenshuai.xi             s32Handle = Drv_Clkm_Get_Handle("g_clk_tso_in");
566*53ee8cc1Swenshuai.xi             Drv_Clkm_Set_Clk_Source(s32Handle, u8ClkSrcName);
567*53ee8cc1Swenshuai.xi             break;
568*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
569*53ee8cc1Swenshuai.xi             s32Handle = Drv_Clkm_Get_Handle("g_clk_tso1_in");
570*53ee8cc1Swenshuai.xi             Drv_Clkm_Set_Clk_Source(s32Handle, u8ClkSrcName);
571*53ee8cc1Swenshuai.xi             break;
572*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
573*53ee8cc1Swenshuai.xi             s32Handle = Drv_Clkm_Get_Handle("g_clk_tso2_in");
574*53ee8cc1Swenshuai.xi             Drv_Clkm_Set_Clk_Source(s32Handle, u8ClkSrcName);
575*53ee8cc1Swenshuai.xi             break;
576*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
577*53ee8cc1Swenshuai.xi             s32Handle = Drv_Clkm_Get_Handle("g_clk_tso3_in");
578*53ee8cc1Swenshuai.xi             Drv_Clkm_Set_Clk_Source(s32Handle, u8ClkSrcName);
579*53ee8cc1Swenshuai.xi             break;
580*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
581*53ee8cc1Swenshuai.xi             s32Handle = Drv_Clkm_Get_Handle("g_clk_tso4_in");
582*53ee8cc1Swenshuai.xi             Drv_Clkm_Set_Clk_Source(s32Handle, u8ClkSrcName);
583*53ee8cc1Swenshuai.xi             break;
584*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
585*53ee8cc1Swenshuai.xi             s32Handle = Drv_Clkm_Get_Handle("g_clk_tso5_in");
586*53ee8cc1Swenshuai.xi             Drv_Clkm_Set_Clk_Source(s32Handle, u8ClkSrcName);
587*53ee8cc1Swenshuai.xi             break;
588*53ee8cc1Swenshuai.xi         default:
589*53ee8cc1Swenshuai.xi             printf("Not support !!\n");
590*53ee8cc1Swenshuai.xi             return FALSE;
591*53ee8cc1Swenshuai.xi     }
592*53ee8cc1Swenshuai.xi 
593*53ee8cc1Swenshuai.xi #endif
594*53ee8cc1Swenshuai.xi 
595*53ee8cc1Swenshuai.xi     return TRUE;
596*53ee8cc1Swenshuai.xi }
597*53ee8cc1Swenshuai.xi 
598*53ee8cc1Swenshuai.xi #if 0
599*53ee8cc1Swenshuai.xi #define NPM_REG_ANAMISC                         0x10C00 //0x110c00 //ana misc
600*53ee8cc1Swenshuai.xi #define NPM_REG_MIPS_PLLCLK                     (NPM_REG_ANAMISC+0x0002)
601*53ee8cc1Swenshuai.xi static MS_U32  _HAL_TSO_CPU_QueryClock(void)
602*53ee8cc1Swenshuai.xi {
603*53ee8cc1Swenshuai.xi     MS_U32 u32Count = 0;
604*53ee8cc1Swenshuai.xi     MS_U32 u32Speed = 0;
605*53ee8cc1Swenshuai.xi     //here we assum that _u32TSORegBase is the same as non-PM bank
606*53ee8cc1Swenshuai.xi     u32Speed = (MS_U32)((volatile MS_U16*)(_u32TSORegBase))[NPM_REG_MIPS_PLLCLK];
607*53ee8cc1Swenshuai.xi     u32Count = ((u32Speed & 0xFF00) >> 8) * 12000000;
608*53ee8cc1Swenshuai.xi 
609*53ee8cc1Swenshuai.xi     return u32Count;
610*53ee8cc1Swenshuai.xi }
611*53ee8cc1Swenshuai.xi 
612*53ee8cc1Swenshuai.xi static void _HAL_TSO_Delay(MS_U32 u32Us)
613*53ee8cc1Swenshuai.xi {
614*53ee8cc1Swenshuai.xi     MS_U32 u32CPUClk = _HAL_TSO_CPU_QueryClock();
615*53ee8cc1Swenshuai.xi     register MS_U32 u32Loop = (((u32CPUClk/1000000)/3)*(u32Us));// 3 cycles / loop
616*53ee8cc1Swenshuai.xi     while(u32Loop--);
617*53ee8cc1Swenshuai.xi }
618*53ee8cc1Swenshuai.xi #endif
619*53ee8cc1Swenshuai.xi 
HAL_TSO_OutClk_DefSelect(MS_U8 u8Eng,MS_U16 u16PadSel,MS_BOOL bSet,HalTSOOutClk * pstOutClkSet)620*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_OutClk_DefSelect(MS_U8 u8Eng, MS_U16 u16PadSel, MS_BOOL bSet, HalTSOOutClk* pstOutClkSet)
621*53ee8cc1Swenshuai.xi {
622*53ee8cc1Swenshuai.xi     if((u16PadSel == 0xFFFF) || (bSet == TRUE))
623*53ee8cc1Swenshuai.xi     {
624*53ee8cc1Swenshuai.xi         return FALSE; //not support yet
625*53ee8cc1Swenshuai.xi     }
626*53ee8cc1Swenshuai.xi 
627*53ee8cc1Swenshuai.xi     switch(u16PadSel)
628*53ee8cc1Swenshuai.xi     {
629*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_TS0:
630*53ee8cc1Swenshuai.xi             pstOutClkSet->u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT;
631*53ee8cc1Swenshuai.xi             pstOutClkSet->u16PreTsoOutClk = HAL_PRE_TSO_OUT_SEL_TS0IN;
632*53ee8cc1Swenshuai.xi             break;
633*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_TS1:
634*53ee8cc1Swenshuai.xi             pstOutClkSet->u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT;
635*53ee8cc1Swenshuai.xi             pstOutClkSet->u16PreTsoOutClk = HAL_PRE_TSO_OUT_SEL_TS1IN;
636*53ee8cc1Swenshuai.xi             break;
637*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_TS2:
638*53ee8cc1Swenshuai.xi             pstOutClkSet->u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT;
639*53ee8cc1Swenshuai.xi             pstOutClkSet->u16PreTsoOutClk = HAL_PRE_TSO_OUT_SEL_TS2IN;
640*53ee8cc1Swenshuai.xi             break;
641*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_TS3:
642*53ee8cc1Swenshuai.xi             pstOutClkSet->u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT;
643*53ee8cc1Swenshuai.xi             pstOutClkSet->u16PreTsoOutClk = HAL_PRE_TSO_OUT_SEL_TS3IN;
644*53ee8cc1Swenshuai.xi             break;
645*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_TS4:
646*53ee8cc1Swenshuai.xi             pstOutClkSet->u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT;
647*53ee8cc1Swenshuai.xi             pstOutClkSet->u16PreTsoOutClk = HAL_PRE_TSO_OUT_SEL_TS4IN;
648*53ee8cc1Swenshuai.xi             break;
649*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_TS5:
650*53ee8cc1Swenshuai.xi             pstOutClkSet->u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT;
651*53ee8cc1Swenshuai.xi             pstOutClkSet->u16PreTsoOutClk = HAL_PRE_TSO_OUT_SEL_TS5IN;
652*53ee8cc1Swenshuai.xi             break;
653*53ee8cc1Swenshuai.xi         /*
654*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_TSDEMOD0:
655*53ee8cc1Swenshuai.xi             pstOutClkSet->u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_FROM_DEMOD;
656*53ee8cc1Swenshuai.xi             break;
657*53ee8cc1Swenshuai.xi         */
658*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_MEM:
659*53ee8cc1Swenshuai.xi         case HAL_TSOIN_MUX_MEM1:
660*53ee8cc1Swenshuai.xi             pstOutClkSet->u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_DIV;
661*53ee8cc1Swenshuai.xi             pstOutClkSet->u16OutDivSrc = HAL_TSO_OUT_DIV_SEL_172M_2N;
662*53ee8cc1Swenshuai.xi             pstOutClkSet->u16OutDivNum = 0x1F; //default: 172.8/(31+1) = 5.4M
663*53ee8cc1Swenshuai.xi             break;
664*53ee8cc1Swenshuai.xi         default:
665*53ee8cc1Swenshuai.xi             return FALSE;
666*53ee8cc1Swenshuai.xi     }
667*53ee8cc1Swenshuai.xi 
668*53ee8cc1Swenshuai.xi     return TRUE;
669*53ee8cc1Swenshuai.xi }
670*53ee8cc1Swenshuai.xi 
671*53ee8cc1Swenshuai.xi 
HAL_TSO_TSOOutDiv(MS_U8 u8Eng,MS_U16 * pu16ClkOutDivSrcSel,MS_U16 * pu16ClkOutDivNum,MS_BOOL bSet)672*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_TSOOutDiv(MS_U8 u8Eng, MS_U16 *pu16ClkOutDivSrcSel, MS_U16 *pu16ClkOutDivNum, MS_BOOL bSet)
673*53ee8cc1Swenshuai.xi {
674*53ee8cc1Swenshuai.xi     //clock source for clock divide
675*53ee8cc1Swenshuai.xi     if(bSet == TRUE)
676*53ee8cc1Swenshuai.xi     {
677*53ee8cc1Swenshuai.xi         /*
678*53ee8cc1Swenshuai.xi         TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) =
679*53ee8cc1Swenshuai.xi             (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) & ~REG_CLKGEN0_TSO_TRACE_MASK) | REG_CLKGEN0_TSO_TRACE_216M;
680*53ee8cc1Swenshuai.xi         */
681*53ee8cc1Swenshuai.xi 
682*53ee8cc1Swenshuai.xi         TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE) =
683*53ee8cc1Swenshuai.xi             (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE) & ~REG_CLKGEN0_TSO_OUT_DIV_SEL_MASK) | (*pu16ClkOutDivSrcSel);
684*53ee8cc1Swenshuai.xi 
685*53ee8cc1Swenshuai.xi         TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_DIVNUM) =
686*53ee8cc1Swenshuai.xi             (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_DIVNUM) & ~REG_CLKGEN0_TSO_OUT_DIVNUM_MASK) | (*pu16ClkOutDivNum << REG_CLKGEN0_TSO_OUT_DIVNUM_SHIFT);
687*53ee8cc1Swenshuai.xi     }
688*53ee8cc1Swenshuai.xi     else
689*53ee8cc1Swenshuai.xi     {
690*53ee8cc1Swenshuai.xi         *pu16ClkOutDivSrcSel = TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE) & REG_CLKGEN0_TSO_OUT_DIV_SEL_MASK;
691*53ee8cc1Swenshuai.xi         *pu16ClkOutDivNum = (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_DIVNUM) & REG_CLKGEN0_TSO_OUT_DIVNUM_MASK) >> REG_CLKGEN0_TSO_OUT_DIVNUM_SHIFT;
692*53ee8cc1Swenshuai.xi     }
693*53ee8cc1Swenshuai.xi 
694*53ee8cc1Swenshuai.xi     return TRUE;
695*53ee8cc1Swenshuai.xi }
696*53ee8cc1Swenshuai.xi 
HAL_TSO_PreTsoOutClk(MS_U8 u8Eng,MS_U16 * pu16PreTsoOutSel,MS_BOOL bSet)697*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_PreTsoOutClk(MS_U8 u8Eng, MS_U16* pu16PreTsoOutSel, MS_BOOL bSet)
698*53ee8cc1Swenshuai.xi {
699*53ee8cc1Swenshuai.xi     if(bSet == TRUE)
700*53ee8cc1Swenshuai.xi     {
701*53ee8cc1Swenshuai.xi         if(*pu16PreTsoOutSel > HAL_PRE_TSO_OUT_SEL_TS6IN)
702*53ee8cc1Swenshuai.xi         {
703*53ee8cc1Swenshuai.xi             return FALSE;
704*53ee8cc1Swenshuai.xi         }
705*53ee8cc1Swenshuai.xi 
706*53ee8cc1Swenshuai.xi         TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_DIVNUM) =
707*53ee8cc1Swenshuai.xi             (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_DIVNUM) & ~REG_CLKGEN_TSO_P_TSO_OUT_MASK) | ((*pu16PreTsoOutSel) << REG_CLKGEN_TSO_P_TSO_OUT_SHIFT);
708*53ee8cc1Swenshuai.xi     }
709*53ee8cc1Swenshuai.xi     else
710*53ee8cc1Swenshuai.xi     {
711*53ee8cc1Swenshuai.xi         *pu16PreTsoOutSel = (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_DIVNUM) & REG_CLKGEN_TSO_P_TSO_OUT_MASK) >> REG_CLKGEN_TSO_P_TSO_OUT_SHIFT;
712*53ee8cc1Swenshuai.xi     }
713*53ee8cc1Swenshuai.xi 
714*53ee8cc1Swenshuai.xi     return TRUE;
715*53ee8cc1Swenshuai.xi }
716*53ee8cc1Swenshuai.xi 
HAL_TSO_OutputClk(MS_U8 u8Eng,HalTSOOutClk * pstOutClkSet,MS_BOOL bSet)717*53ee8cc1Swenshuai.xi void HAL_TSO_OutputClk(MS_U8 u8Eng, HalTSOOutClk* pstOutClkSet, MS_BOOL bSet)
718*53ee8cc1Swenshuai.xi {
719*53ee8cc1Swenshuai.xi     if(bSet == TRUE)
720*53ee8cc1Swenshuai.xi     {
721*53ee8cc1Swenshuai.xi         if(pstOutClkSet->bEnable == FALSE)
722*53ee8cc1Swenshuai.xi         {
723*53ee8cc1Swenshuai.xi             HAL_TSO_OutClk(u8Eng, &(pstOutClkSet->u16OutClk), &(pstOutClkSet->bClkInvert), &(pstOutClkSet->bEnable), TRUE);
724*53ee8cc1Swenshuai.xi             return;
725*53ee8cc1Swenshuai.xi         }
726*53ee8cc1Swenshuai.xi 
727*53ee8cc1Swenshuai.xi         switch(pstOutClkSet->u16OutClk)
728*53ee8cc1Swenshuai.xi         {
729*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_DIV:
730*53ee8cc1Swenshuai.xi                 HAL_TSO_TSOOutDiv(u8Eng, &(pstOutClkSet->u16OutDivSrc), &(pstOutClkSet->u16OutDivNum), TRUE);
731*53ee8cc1Swenshuai.xi                 break;
732*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_27MHz:
733*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_62MHz:
734*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_86MHz:
735*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_108MHz:
736*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_123MHz:
737*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_FROM_DEMOD:
738*53ee8cc1Swenshuai.xi                 break;
739*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT:
740*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT_DIV8:
741*53ee8cc1Swenshuai.xi                 HAL_TSO_PreTsoOutClk(u8Eng, &(pstOutClkSet->u16PreTsoOutClk), TRUE);
742*53ee8cc1Swenshuai.xi                 break;
743*53ee8cc1Swenshuai.xi             default:
744*53ee8cc1Swenshuai.xi                 return;
745*53ee8cc1Swenshuai.xi         }
746*53ee8cc1Swenshuai.xi 
747*53ee8cc1Swenshuai.xi         HAL_TSO_Set_TSOOut_Phase_Tune(u8Eng, 0, FALSE); //default -> no phase tuning
748*53ee8cc1Swenshuai.xi         HAL_TSO_OutClk(u8Eng, &(pstOutClkSet->u16OutClk), &(pstOutClkSet->bClkInvert), &(pstOutClkSet->bEnable), TRUE); //always need TSO out clock
749*53ee8cc1Swenshuai.xi     }
750*53ee8cc1Swenshuai.xi     else
751*53ee8cc1Swenshuai.xi     {
752*53ee8cc1Swenshuai.xi         HAL_TSO_OutClk(u8Eng, &(pstOutClkSet->u16OutClk), &(pstOutClkSet->bClkInvert), &(pstOutClkSet->bEnable), FALSE);
753*53ee8cc1Swenshuai.xi         if(pstOutClkSet->u16OutClk == HAL_TSO_OUT_SEL_TSO_OUT_DIV)
754*53ee8cc1Swenshuai.xi         {
755*53ee8cc1Swenshuai.xi             HAL_TSO_TSOOutDiv(u8Eng, &(pstOutClkSet->u16OutDivSrc), &(pstOutClkSet->u16OutDivNum), FALSE);
756*53ee8cc1Swenshuai.xi         }
757*53ee8cc1Swenshuai.xi         else if((pstOutClkSet->u16OutClk == HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT) || (pstOutClkSet->u16OutClk == HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT_DIV8))
758*53ee8cc1Swenshuai.xi         {
759*53ee8cc1Swenshuai.xi             HAL_TSO_PreTsoOutClk(u8Eng, &(pstOutClkSet->u16PreTsoOutClk), FALSE);
760*53ee8cc1Swenshuai.xi         }
761*53ee8cc1Swenshuai.xi     }
762*53ee8cc1Swenshuai.xi }
763*53ee8cc1Swenshuai.xi 
HAL_TSO_Set_TSOOut_Phase_Tune(MS_U8 u8Eng,MS_U16 u16ClkOutPhase,MS_BOOL bPhaseEnable)764*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_Set_TSOOut_Phase_Tune(MS_U8 u8Eng, MS_U16 u16ClkOutPhase, MS_BOOL bPhaseEnable)
765*53ee8cc1Swenshuai.xi {
766*53ee8cc1Swenshuai.xi     MS_U16 u16value = 0;
767*53ee8cc1Swenshuai.xi     if(u8Eng == 0)
768*53ee8cc1Swenshuai.xi     {
769*53ee8cc1Swenshuai.xi         if(!bPhaseEnable)
770*53ee8cc1Swenshuai.xi         {
771*53ee8cc1Swenshuai.xi             TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE) &= ~REG_CLKGEN0_TSO_OUT_PHASE_TUN_ENABLE;
772*53ee8cc1Swenshuai.xi         }
773*53ee8cc1Swenshuai.xi         else
774*53ee8cc1Swenshuai.xi         {
775*53ee8cc1Swenshuai.xi             u16value = (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE) & ~REG_CLKGEN0_TSO_OUT_PH_TUN_NUM_MASK)
776*53ee8cc1Swenshuai.xi                         | (u16ClkOutPhase << REG_CLKGEN0_TSO_OUT_PH_TUN_NUM_SHIFT);
777*53ee8cc1Swenshuai.xi 
778*53ee8cc1Swenshuai.xi             TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE) = u16value;
779*53ee8cc1Swenshuai.xi             TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE) |= REG_CLKGEN0_TSO_OUT_PHASE_TUN_ENABLE;
780*53ee8cc1Swenshuai.xi         }
781*53ee8cc1Swenshuai.xi     }
782*53ee8cc1Swenshuai.xi     else
783*53ee8cc1Swenshuai.xi     {
784*53ee8cc1Swenshuai.xi         return FALSE;
785*53ee8cc1Swenshuai.xi     }
786*53ee8cc1Swenshuai.xi 
787*53ee8cc1Swenshuai.xi     return TRUE;
788*53ee8cc1Swenshuai.xi }
789*53ee8cc1Swenshuai.xi 
HAL_TSO_Set_PreTsoOutClk(MS_U8 u8Eng,MS_U16 u16PreTsoOutSel)790*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_Set_PreTsoOutClk(MS_U8 u8Eng, MS_U16 u16PreTsoOutSel)
791*53ee8cc1Swenshuai.xi {
792*53ee8cc1Swenshuai.xi     TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE) =
793*53ee8cc1Swenshuai.xi         (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE) & ~REG_CLKGEN_TSO_P_TSO_OUT_MASK) | (u16PreTsoOutSel << REG_CLKGEN_TSO_P_TSO_OUT_SHIFT);
794*53ee8cc1Swenshuai.xi 
795*53ee8cc1Swenshuai.xi     return TRUE;
796*53ee8cc1Swenshuai.xi }
797*53ee8cc1Swenshuai.xi 
HAL_TSO_OutClk(MS_U8 u8Eng,MS_U16 * pu16ClkOutSel,MS_BOOL * pbClkInvert,MS_BOOL * pbEnable,MS_BOOL bSet)798*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_OutClk(MS_U8 u8Eng, MS_U16* pu16ClkOutSel, MS_BOOL* pbClkInvert, MS_BOOL* pbEnable, MS_BOOL bSet)
799*53ee8cc1Swenshuai.xi {
800*53ee8cc1Swenshuai.xi     MS_U16 u16Clk = TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) & ~REG_CLKGEN0_TSO_OUT_CLK_MASK;
801*53ee8cc1Swenshuai.xi 
802*53ee8cc1Swenshuai.xi     if(bSet == TRUE)
803*53ee8cc1Swenshuai.xi     {
804*53ee8cc1Swenshuai.xi         if(*pbEnable == FALSE)
805*53ee8cc1Swenshuai.xi         {
806*53ee8cc1Swenshuai.xi             u16Clk |= REG_CLKGEN0_TSO_OUT_CLK_DISABLE;
807*53ee8cc1Swenshuai.xi         }
808*53ee8cc1Swenshuai.xi         else
809*53ee8cc1Swenshuai.xi         {
810*53ee8cc1Swenshuai.xi             /*
811*53ee8cc1Swenshuai.xi             TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) =
812*53ee8cc1Swenshuai.xi                 (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) & ~REG_CLKGEN0_TSO_TRACE_MASK) | REG_CLKGEN0_TSO_TRACE_216M;
813*53ee8cc1Swenshuai.xi             */
814*53ee8cc1Swenshuai.xi #ifndef CONFIG_MSTAR_CLKM
815*53ee8cc1Swenshuai.xi             u16Clk |= (*pu16ClkOutSel << REG_CLKGEN0_TSO_OUT_CLK_SRC_SHIFT);
816*53ee8cc1Swenshuai.xi #endif
817*53ee8cc1Swenshuai.xi 
818*53ee8cc1Swenshuai.xi             if(*pbClkInvert)
819*53ee8cc1Swenshuai.xi                 u16Clk |= REG_CLKGEN0_TSO_OUT_CLK_INVERT;
820*53ee8cc1Swenshuai.xi         }
821*53ee8cc1Swenshuai.xi 
822*53ee8cc1Swenshuai.xi         TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) = u16Clk;
823*53ee8cc1Swenshuai.xi 
824*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_CLKM
825*53ee8cc1Swenshuai.xi 
826*53ee8cc1Swenshuai.xi         MS_S32 s32Handle;
827*53ee8cc1Swenshuai.xi         MS_U8  u8NameIdx = 0;
828*53ee8cc1Swenshuai.xi         char* u8ClkSrcNames[] =
829*53ee8cc1Swenshuai.xi         {
830*53ee8cc1Swenshuai.xi             "CLK_TSOOUT_27M",
831*53ee8cc1Swenshuai.xi             "CLK_TSOOUT_62M",
832*53ee8cc1Swenshuai.xi             "CLK_TSOOUT_108M",
833*53ee8cc1Swenshuai.xi             "CLK_TSOOUT_FROMPAD",
834*53ee8cc1Swenshuai.xi             "CLK_TSOOUT_DIV8",
835*53ee8cc1Swenshuai.xi             "CLK_TSOOUT_DIV",
836*53ee8cc1Swenshuai.xi             "CLK_TSOOUT_86M",
837*53ee8cc1Swenshuai.xi             "CLK_TSOOUT_123M"
838*53ee8cc1Swenshuai.xi         };
839*53ee8cc1Swenshuai.xi 
840*53ee8cc1Swenshuai.xi         switch(*pu16ClkOutSel)
841*53ee8cc1Swenshuai.xi         {
842*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_27MHz:
843*53ee8cc1Swenshuai.xi                 u8NameIdx = 0;
844*53ee8cc1Swenshuai.xi                 break;
845*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_62MHz:
846*53ee8cc1Swenshuai.xi                 u8NameIdx = 1;
847*53ee8cc1Swenshuai.xi                 break;
848*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_108MHz:
849*53ee8cc1Swenshuai.xi                 u8NameIdx = 2;
850*53ee8cc1Swenshuai.xi                 break;
851*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT:
852*53ee8cc1Swenshuai.xi                 u8NameIdx = 3;
853*53ee8cc1Swenshuai.xi                 break;
854*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT_DIV8:
855*53ee8cc1Swenshuai.xi                 u8NameIdx = 4;
856*53ee8cc1Swenshuai.xi                 break;
857*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_DIV:
858*53ee8cc1Swenshuai.xi                 u8NameIdx = 5;
859*53ee8cc1Swenshuai.xi                 break;
860*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_86MHz:
861*53ee8cc1Swenshuai.xi                 u8NameIdx = 6;
862*53ee8cc1Swenshuai.xi                 break;
863*53ee8cc1Swenshuai.xi             case HAL_TSO_OUT_SEL_TSO_OUT_123MHz:
864*53ee8cc1Swenshuai.xi                 u8NameIdx = 7;
865*53ee8cc1Swenshuai.xi                 break;
866*53ee8cc1Swenshuai.xi             default:
867*53ee8cc1Swenshuai.xi                 printf("[%s][%d] Not support !!\n", __FUNCTION__, __LINE__);
868*53ee8cc1Swenshuai.xi                 return FALSE;
869*53ee8cc1Swenshuai.xi         }
870*53ee8cc1Swenshuai.xi 
871*53ee8cc1Swenshuai.xi         s32Handle = Drv_Clkm_Get_Handle("g_clk_tso_out");
872*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32Handle, u8ClkSrcNames[u8NameIdx]);
873*53ee8cc1Swenshuai.xi 
874*53ee8cc1Swenshuai.xi #endif
875*53ee8cc1Swenshuai.xi     }
876*53ee8cc1Swenshuai.xi     else
877*53ee8cc1Swenshuai.xi     {
878*53ee8cc1Swenshuai.xi         *pbEnable = ((u16Clk & REG_CLKGEN0_TSO_OUT_CLK_DISABLE) == 0);
879*53ee8cc1Swenshuai.xi         *pbClkInvert = ((u16Clk & REG_CLKGEN0_TSO_OUT_CLK_INVERT) == REG_CLKGEN0_TSO_OUT_CLK_INVERT);
880*53ee8cc1Swenshuai.xi         *pu16ClkOutSel = u16Clk >> REG_CLKGEN0_TSO_OUT_CLK_SRC_SHIFT;
881*53ee8cc1Swenshuai.xi     }
882*53ee8cc1Swenshuai.xi 
883*53ee8cc1Swenshuai.xi     return TRUE;
884*53ee8cc1Swenshuai.xi }
885*53ee8cc1Swenshuai.xi 
HAL_TSO_Set_PidBypass(MS_U8 u8Eng,MS_BOOL bEnable)886*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_Set_PidBypass(MS_U8 u8Eng, MS_BOOL bEnable)
887*53ee8cc1Swenshuai.xi {
888*53ee8cc1Swenshuai.xi     if(bEnable)
889*53ee8cc1Swenshuai.xi     {
890*53ee8cc1Swenshuai.xi         switch(u8Eng)
891*53ee8cc1Swenshuai.xi         {
892*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE1:
893*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl->CHANNEL0_IF1_CONFIG2),TSO_CHCFG_PIDFLT_REC_ALL);
894*53ee8cc1Swenshuai.xi                 break;
895*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE2:
896*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl->CHANNEL0_IF2_CONFIG2),TSO_CHANNEL0_IF2_CONFIG2_PIDFLT_REC_ALL);
897*53ee8cc1Swenshuai.xi                 break;
898*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE3:
899*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl->CHANNEL0_IF3_CONFIG2),TSO_CHANNEL0_IF3_CONFIG2_PIDFLT_REC_ALL);
900*53ee8cc1Swenshuai.xi                 break;
901*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE4:
902*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl->CHANNEL0_IF4_CONFIG2),TSO_CHANNEL0_IF4_CONFIG2_PIDFLT_REC_ALL);
903*53ee8cc1Swenshuai.xi                 break;
904*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE5:
905*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl->CHANNEL0_IF5_CONFIG2),TSO_CHANNEL0_IF5_CONFIG2_PIDFLT_REC_ALL);
906*53ee8cc1Swenshuai.xi                 break;
907*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE6:
908*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl->CHANNEL0_IF6_CONFIG2),TSO_CHANNEL0_IF6_CONFIG2_PIDFLT_REC_ALL);
909*53ee8cc1Swenshuai.xi                 break;
910*53ee8cc1Swenshuai.xi             default:
911*53ee8cc1Swenshuai.xi                 printf("Not support !!\n");
912*53ee8cc1Swenshuai.xi                 break;
913*53ee8cc1Swenshuai.xi         }
914*53ee8cc1Swenshuai.xi     }
915*53ee8cc1Swenshuai.xi     else
916*53ee8cc1Swenshuai.xi     {
917*53ee8cc1Swenshuai.xi         switch(u8Eng)
918*53ee8cc1Swenshuai.xi         {
919*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE1:
920*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl->CHANNEL0_IF1_CONFIG2),TSO_CHCFG_PIDFLT_REC_ALL);
921*53ee8cc1Swenshuai.xi                 break;
922*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE2:
923*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl->CHANNEL0_IF2_CONFIG2),TSO_CHANNEL0_IF2_CONFIG2_PIDFLT_REC_ALL);
924*53ee8cc1Swenshuai.xi                 break;
925*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE3:
926*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl->CHANNEL0_IF3_CONFIG2),TSO_CHANNEL0_IF3_CONFIG2_PIDFLT_REC_ALL);
927*53ee8cc1Swenshuai.xi                 break;
928*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE4:
929*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl->CHANNEL0_IF4_CONFIG2),TSO_CHANNEL0_IF4_CONFIG2_PIDFLT_REC_ALL);
930*53ee8cc1Swenshuai.xi                 break;
931*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE5:
932*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl->CHANNEL0_IF5_CONFIG2),TSO_CHANNEL0_IF5_CONFIG2_PIDFLT_REC_ALL);
933*53ee8cc1Swenshuai.xi                 break;
934*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE6:
935*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl->CHANNEL0_IF6_CONFIG2),TSO_CHANNEL0_IF6_CONFIG2_PIDFLT_REC_ALL);
936*53ee8cc1Swenshuai.xi                 break;
937*53ee8cc1Swenshuai.xi             default:
938*53ee8cc1Swenshuai.xi                 printf("Not support !!\n");
939*53ee8cc1Swenshuai.xi                 break;
940*53ee8cc1Swenshuai.xi         }
941*53ee8cc1Swenshuai.xi     }
942*53ee8cc1Swenshuai.xi 
943*53ee8cc1Swenshuai.xi     return TRUE;
944*53ee8cc1Swenshuai.xi }
945*53ee8cc1Swenshuai.xi 
946*53ee8cc1Swenshuai.xi // ------------------------------------------------------
947*53ee8cc1Swenshuai.xi //  APIS
948*53ee8cc1Swenshuai.xi //-------------------------------------------------------
949*53ee8cc1Swenshuai.xi #define TSO_PIDFLT_ADDR(FltId)  (REG_PIDFLT_BASE + ((FltId) << 2))
950*53ee8cc1Swenshuai.xi 
_HAL_TSO_PageTableIndW_withSid(MS_U32 u32Addr,MS_U16 u16Wdata,MS_U8 u8Sid)951*53ee8cc1Swenshuai.xi static void _HAL_TSO_PageTableIndW_withSid(MS_U32 u32Addr, MS_U16 u16Wdata, MS_U8 u8Sid)
952*53ee8cc1Swenshuai.xi {
953*53ee8cc1Swenshuai.xi     // addr
954*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->PDTABLE_ADDR_L), (u32Addr & 0x0000FFFF));
955*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->PDTABLE_ADDR_H), (u32Addr >> 16));
956*53ee8cc1Swenshuai.xi 
957*53ee8cc1Swenshuai.xi     // Wdata
958*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->PDTABLE_WDATA_L), u16Wdata);
959*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->PDTABLE_WDATA_H), (u8Sid & 0x003F));
960*53ee8cc1Swenshuai.xi 
961*53ee8cc1Swenshuai.xi     // Wen
962*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->PDTABLE_EN), TSO_PDTABLE_W_EN);
963*53ee8cc1Swenshuai.xi }
964*53ee8cc1Swenshuai.xi 
_HAL_TSO_PageTableIndW(MS_U32 u32Addr,MS_U16 u16Wdata)965*53ee8cc1Swenshuai.xi static void _HAL_TSO_PageTableIndW(MS_U32 u32Addr, MS_U16 u16Wdata)
966*53ee8cc1Swenshuai.xi {
967*53ee8cc1Swenshuai.xi     // addr
968*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->PDTABLE_ADDR_L), (u32Addr & 0x0000FFFF));
969*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->PDTABLE_ADDR_H), (u32Addr >> 16));
970*53ee8cc1Swenshuai.xi 
971*53ee8cc1Swenshuai.xi     // Wdata
972*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->PDTABLE_WDATA_L), u16Wdata);
973*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->PDTABLE_WDATA_H), 0x0000);
974*53ee8cc1Swenshuai.xi 
975*53ee8cc1Swenshuai.xi     // Wen
976*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->PDTABLE_EN), TSO_PDTABLE_W_EN);
977*53ee8cc1Swenshuai.xi }
978*53ee8cc1Swenshuai.xi 
_HAL_TSO_PageTableIndR(MS_U32 u32Addr)979*53ee8cc1Swenshuai.xi static MS_U16 _HAL_TSO_PageTableIndR(MS_U32 u32Addr)
980*53ee8cc1Swenshuai.xi {
981*53ee8cc1Swenshuai.xi     // addr
982*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->PDTABLE_ADDR_L), (u32Addr & 0x0000FFFF));
983*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->PDTABLE_ADDR_H), (u32Addr >> 16));
984*53ee8cc1Swenshuai.xi 
985*53ee8cc1Swenshuai.xi     // Ren
986*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->PDTABLE_EN), TSO_PDTABLE_R_EN);
987*53ee8cc1Swenshuai.xi 
988*53ee8cc1Swenshuai.xi     // Rdata
989*53ee8cc1Swenshuai.xi     return _HAL_REG16_R(&(_TSOCtrl->PDTABLE_RDATA));
990*53ee8cc1Swenshuai.xi }
991*53ee8cc1Swenshuai.xi 
HAL_TSO_Flt_SetPid(MS_U8 u8Eng,MS_U16 u16FltId,MS_U16 u16PID)992*53ee8cc1Swenshuai.xi void HAL_TSO_Flt_SetPid(MS_U8 u8Eng, MS_U16 u16FltId, MS_U16 u16PID)
993*53ee8cc1Swenshuai.xi {
994*53ee8cc1Swenshuai.xi     MS_U16 u16Temp = 0;
995*53ee8cc1Swenshuai.xi 
996*53ee8cc1Swenshuai.xi     u16Temp = _HAL_TSO_PageTableIndR(TSO_PIDFLT_ADDR(u16FltId));
997*53ee8cc1Swenshuai.xi     u16Temp = (u16Temp & (TSO_PIDFLT_IN_MASK << TSO_PIDFLT_IN_SHIFT)) | (u16PID & TSO_PIDFLT_PID_MASK);
998*53ee8cc1Swenshuai.xi     _HAL_TSO_PageTableIndW(TSO_PIDFLT_ADDR(u16FltId), u16Temp);
999*53ee8cc1Swenshuai.xi }
1000*53ee8cc1Swenshuai.xi 
HAL_TSO_Set_Filein_ReadAddr(MS_U8 u8Eng,MS_U8 u8FileEng,MS_U32 u32Addr)1001*53ee8cc1Swenshuai.xi void HAL_TSO_Set_Filein_ReadAddr(MS_U8 u8Eng, MS_U8 u8FileEng, MS_U32 u32Addr)
1002*53ee8cc1Swenshuai.xi {
1003*53ee8cc1Swenshuai.xi     REG32_TSO   *FileInRaddr;
1004*53ee8cc1Swenshuai.xi     MS_U8       u8MiuSel;
1005*53ee8cc1Swenshuai.xi     MS_PHY      phyMiuOffsetFileinBuf;
1006*53ee8cc1Swenshuai.xi 
1007*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phyMiuOffsetFileinBuf, u32Addr);
1008*53ee8cc1Swenshuai.xi 
1009*53ee8cc1Swenshuai.xi     if(u8FileEng == 0)
1010*53ee8cc1Swenshuai.xi     {
1011*53ee8cc1Swenshuai.xi         FileInRaddr = &(_TSOCtrl->CFG_TSO_60_63[0]);
1012*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TSOCtrl1->REG_TSO_MIU_SEL_1, (_HAL_REG16_R(&_TSOCtrl1->REG_TSO_MIU_SEL_1) & (~REG_MIU_SEL_CH5FILEIN_MASK)) | ((u8MiuSel << REG_MIU_SEL_CH5FILEIN_SHIFT) & REG_MIU_SEL_CH5FILEIN_MASK));
1013*53ee8cc1Swenshuai.xi     }
1014*53ee8cc1Swenshuai.xi     else
1015*53ee8cc1Swenshuai.xi     {
1016*53ee8cc1Swenshuai.xi         FileInRaddr = &(_TSOCtrl->CFG_TSO_65_68[0]);
1017*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TSOCtrl1->REG_TSO_MIU_SEL_2, (_HAL_REG16_R(&_TSOCtrl1->REG_TSO_MIU_SEL_2) & (~REG_MIU_SEL_CH6FILEIN_MASK)) | ((u8MiuSel << REG_MIU_SEL_CH6FILEIN_SHIFT) & REG_MIU_SEL_CH6FILEIN_MASK));
1018*53ee8cc1Swenshuai.xi     }
1019*53ee8cc1Swenshuai.xi 
1020*53ee8cc1Swenshuai.xi     _HAL_REG32_W(FileInRaddr, phyMiuOffsetFileinBuf);
1021*53ee8cc1Swenshuai.xi }
1022*53ee8cc1Swenshuai.xi 
HAL_TSO_Set_Filein_ReadLen(MS_U8 u8Eng,MS_U8 u8FileEng,MS_U32 u32len)1023*53ee8cc1Swenshuai.xi void HAL_TSO_Set_Filein_ReadLen(MS_U8 u8Eng, MS_U8 u8FileEng, MS_U32 u32len)
1024*53ee8cc1Swenshuai.xi {
1025*53ee8cc1Swenshuai.xi     REG32_TSO *FileInRlen = (u8FileEng == 0)? &(_TSOCtrl->CFG_TSO_60_63[1]) : &(_TSOCtrl->CFG_TSO_65_68[1]);
1026*53ee8cc1Swenshuai.xi 
1027*53ee8cc1Swenshuai.xi     _HAL_REG32_W(FileInRlen, u32len);
1028*53ee8cc1Swenshuai.xi }
1029*53ee8cc1Swenshuai.xi 
HAL_TSO_Get_Filein_ReadAddr(MS_U8 u8Eng,MS_U8 u8FileEng)1030*53ee8cc1Swenshuai.xi MS_U32 HAL_TSO_Get_Filein_ReadAddr(MS_U8 u8Eng, MS_U8 u8FileEng)
1031*53ee8cc1Swenshuai.xi {
1032*53ee8cc1Swenshuai.xi     MS_U32 u32temp = 0;
1033*53ee8cc1Swenshuai.xi     REG32_TSO *TSO2MI_RADDR = (u8FileEng == 0)? &(_TSOCtrl->TSO2MI_RADDR) : &(_TSOCtrl->TSO2MI_RADDR1);
1034*53ee8cc1Swenshuai.xi     REG16_TSO *FILE_CONFIG = (u8FileEng == 0)? &(_TSOCtrl->TSO_FILE_CONFIG) : &(_TSOCtrl->TSO_FILE_CONFIG1);
1035*53ee8cc1Swenshuai.xi 
1036*53ee8cc1Swenshuai.xi 
1037*53ee8cc1Swenshuai.xi     _REG16_SET(FILE_CONFIG,TSO_FILE_CONFIG_TSO_RADDR_READ);
1038*53ee8cc1Swenshuai.xi     u32temp = (_HAL_REG32_R(TSO2MI_RADDR) << TSO_MIU_BUS);
1039*53ee8cc1Swenshuai.xi     _REG16_CLR(FILE_CONFIG,TSO_FILE_CONFIG_TSO_RADDR_READ);
1040*53ee8cc1Swenshuai.xi 
1041*53ee8cc1Swenshuai.xi     return u32temp;
1042*53ee8cc1Swenshuai.xi }
1043*53ee8cc1Swenshuai.xi 
HAL_TSO_Set_Filein_Ctrl(MS_U8 u8Eng,MS_U8 u8FileEng,MS_U16 u16ctrl)1044*53ee8cc1Swenshuai.xi void HAL_TSO_Set_Filein_Ctrl(MS_U8 u8Eng, MS_U8 u8FileEng, MS_U16 u16ctrl)
1045*53ee8cc1Swenshuai.xi {
1046*53ee8cc1Swenshuai.xi     REG16_TSO *FileinCtrl = (u8FileEng == 0)? &(_TSOCtrl->TSO_Filein_Ctrl) : &(_TSOCtrl->TSO_Filein_Ctrl1);
1047*53ee8cc1Swenshuai.xi 
1048*53ee8cc1Swenshuai.xi     _HAL_REG16_W(FileinCtrl, (_HAL_REG16_R(FileinCtrl) & ~TSO_FILEIN_CTRL_MASK) | u16ctrl);
1049*53ee8cc1Swenshuai.xi }
1050*53ee8cc1Swenshuai.xi 
HAL_TSO_Get_Filein_Ctrl(MS_U8 u8Eng,MS_U8 u8FileEng)1051*53ee8cc1Swenshuai.xi MS_U16 HAL_TSO_Get_Filein_Ctrl(MS_U8 u8Eng, MS_U8 u8FileEng)
1052*53ee8cc1Swenshuai.xi {
1053*53ee8cc1Swenshuai.xi     REG16_TSO *FileinCtrl = (u8FileEng == 0)? &(_TSOCtrl->TSO_Filein_Ctrl) : &(_TSOCtrl->TSO_Filein_Ctrl1);
1054*53ee8cc1Swenshuai.xi 
1055*53ee8cc1Swenshuai.xi     return (_HAL_REG16_R(FileinCtrl) & TSO_FILEIN_CTRL_MASK);
1056*53ee8cc1Swenshuai.xi }
1057*53ee8cc1Swenshuai.xi 
HAL_TSO_Filein_Enable(MS_U8 u8Eng,MS_U8 u8FileEng,MS_BOOL bEnable)1058*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_Filein_Enable(MS_U8 u8Eng, MS_U8 u8FileEng, MS_BOOL bEnable)
1059*53ee8cc1Swenshuai.xi {
1060*53ee8cc1Swenshuai.xi     MS_U16 u16ChIf = (u8FileEng == 0)? TSO_CFG1_TSO_TSIF5_EN : TSO_CFG1_TSO_TSIF6_EN;
1061*53ee8cc1Swenshuai.xi 
1062*53ee8cc1Swenshuai.xi     HAL_TSO_Cfg1_Enable(0, u16ChIf, bEnable);
1063*53ee8cc1Swenshuai.xi     HAL_TSO_File_Cfg1_Enable(u8FileEng, (TSO_FILE_CONFIG_TSO_FILE_IN|TSO_FILE_CONFIG_TSP_FILE_SEGMENT|TSO_FILE_CONFIG_TS_DATA_PORT_SEL), bEnable);
1064*53ee8cc1Swenshuai.xi 
1065*53ee8cc1Swenshuai.xi     return TRUE;
1066*53ee8cc1Swenshuai.xi }
1067*53ee8cc1Swenshuai.xi 
HAL_TSO_FileinTimer_Enable(MS_U8 u8Eng,MS_U8 u8FileEng,MS_BOOL bEnable)1068*53ee8cc1Swenshuai.xi void HAL_TSO_FileinTimer_Enable(MS_U8 u8Eng, MS_U8 u8FileEng, MS_BOOL bEnable)
1069*53ee8cc1Swenshuai.xi {
1070*53ee8cc1Swenshuai.xi     REG16_TSO *pReg = (u8FileEng == 0)? &(_TSOCtrl->TSO_FILE_CONFIG) : &(_TSOCtrl->TSO_FILE_CONFIG1);
1071*53ee8cc1Swenshuai.xi 
1072*53ee8cc1Swenshuai.xi     if(bEnable)
1073*53ee8cc1Swenshuai.xi     {
1074*53ee8cc1Swenshuai.xi         _HAL_REG16_W(pReg, _HAL_REG16_R(pReg) | TSO_FILE_CONFIG_TIMER_EN);
1075*53ee8cc1Swenshuai.xi     }
1076*53ee8cc1Swenshuai.xi     else
1077*53ee8cc1Swenshuai.xi     {
1078*53ee8cc1Swenshuai.xi         _HAL_REG16_W(pReg, _HAL_REG16_R(pReg) & ~TSO_FILE_CONFIG_TIMER_EN);
1079*53ee8cc1Swenshuai.xi     }
1080*53ee8cc1Swenshuai.xi }
1081*53ee8cc1Swenshuai.xi 
HAL_TSO_Filein_Rate(MS_U8 u8Eng,MS_U8 u8FileEng,MS_U16 u16timer)1082*53ee8cc1Swenshuai.xi void HAL_TSO_Filein_Rate(MS_U8 u8Eng, MS_U8 u8FileEng, MS_U16 u16timer)
1083*53ee8cc1Swenshuai.xi {
1084*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->FILE_TIMER[u8FileEng]), u16timer);
1085*53ee8cc1Swenshuai.xi }
1086*53ee8cc1Swenshuai.xi 
HAL_TSO_Filein_192Mode_Enable(MS_U8 u8Eng,MS_U8 u8FileEng,MS_BOOL bEnable)1087*53ee8cc1Swenshuai.xi void HAL_TSO_Filein_192Mode_Enable(MS_U8 u8Eng, MS_U8 u8FileEng, MS_BOOL bEnable)
1088*53ee8cc1Swenshuai.xi {
1089*53ee8cc1Swenshuai.xi     REG16_TSO *FILE_CONFIG = (u8FileEng == 0)? &(_TSOCtrl->TSO_FILE_CONFIG) : &(_TSOCtrl->TSO_FILE_CONFIG1);
1090*53ee8cc1Swenshuai.xi 
1091*53ee8cc1Swenshuai.xi     if(bEnable)
1092*53ee8cc1Swenshuai.xi     {
1093*53ee8cc1Swenshuai.xi         _HAL_REG16_W(FILE_CONFIG, (_HAL_REG16_R(FILE_CONFIG) | TSO_FILE_CONFIG_PKT_192_EN));
1094*53ee8cc1Swenshuai.xi     }
1095*53ee8cc1Swenshuai.xi     else
1096*53ee8cc1Swenshuai.xi     {
1097*53ee8cc1Swenshuai.xi         _HAL_REG16_W(FILE_CONFIG, (_HAL_REG16_R(FILE_CONFIG) & ~TSO_FILE_CONFIG_PKT_192_EN));
1098*53ee8cc1Swenshuai.xi     }
1099*53ee8cc1Swenshuai.xi }
1100*53ee8cc1Swenshuai.xi 
HAL_TSO_Filein_192BlockMode_Enable(MS_U8 u8Eng,MS_U8 u8FileEng,MS_BOOL bEnable)1101*53ee8cc1Swenshuai.xi void HAL_TSO_Filein_192BlockMode_Enable(MS_U8 u8Eng, MS_U8 u8FileEng, MS_BOOL bEnable)
1102*53ee8cc1Swenshuai.xi {
1103*53ee8cc1Swenshuai.xi     REG16_TSO *FILE_CONFIG = (u8FileEng == 0)? &(_TSOCtrl->TSO_FILE_CONFIG) : &(_TSOCtrl->TSO_FILE_CONFIG1);
1104*53ee8cc1Swenshuai.xi 
1105*53ee8cc1Swenshuai.xi     if(bEnable)
1106*53ee8cc1Swenshuai.xi     {
1107*53ee8cc1Swenshuai.xi         _HAL_REG16_W(FILE_CONFIG, (_HAL_REG16_R(FILE_CONFIG) & ~TSO_FILE_CONFIG_PKT_192_BLK_DISABLE));
1108*53ee8cc1Swenshuai.xi     }
1109*53ee8cc1Swenshuai.xi     else
1110*53ee8cc1Swenshuai.xi     {
1111*53ee8cc1Swenshuai.xi         _HAL_REG16_W(FILE_CONFIG, (_HAL_REG16_R(FILE_CONFIG) | TSO_FILE_CONFIG_PKT_192_BLK_DISABLE));
1112*53ee8cc1Swenshuai.xi     }
1113*53ee8cc1Swenshuai.xi }
1114*53ee8cc1Swenshuai.xi 
HAL_TSO_CmdQ_FIFO_Get_WRCnt(MS_U8 u8Eng,MS_U8 u8FileEng)1115*53ee8cc1Swenshuai.xi MS_U16 HAL_TSO_CmdQ_FIFO_Get_WRCnt(MS_U8 u8Eng, MS_U8 u8FileEng)
1116*53ee8cc1Swenshuai.xi {
1117*53ee8cc1Swenshuai.xi     MS_U16 u16Mask = (u8FileEng == 0)? TSO_CMD_QUEUE_STATUS_CMD_WR_COUNT_MASK : TSO_CMD_QUEUE_STATUS1_CMD_WR_COUNT_MASK;
1118*53ee8cc1Swenshuai.xi     MS_U16 u16Shift = (u8FileEng == 0)? TSO_CMD_QUEUE_STATUS_CMD_WR_COUNT_SHIFT : TSO_CMD_QUEUE_STATUS1_CMD_WR_COUNT_SHIFT;
1119*53ee8cc1Swenshuai.xi 
1120*53ee8cc1Swenshuai.xi     return ((_HAL_REG16_R(&(_TSOCtrl[u8Eng].CMD_QUEUE_STATUS)) & u16Mask) >> u16Shift);
1121*53ee8cc1Swenshuai.xi }
1122*53ee8cc1Swenshuai.xi 
HAL_TSO_CmdQ_FIFO_IsFull(MS_U8 u8Eng)1123*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_CmdQ_FIFO_IsFull(MS_U8 u8Eng)
1124*53ee8cc1Swenshuai.xi {
1125*53ee8cc1Swenshuai.xi     //@TODO not implement
1126*53ee8cc1Swenshuai.xi     //return (MS_BOOL)(_HAL_REG16_R(&(_TSOCtrl[u8Eng].CmdQSts)) & TSO_CMDQ_STS_FIFO_FULL);
1127*53ee8cc1Swenshuai.xi     return FALSE;
1128*53ee8cc1Swenshuai.xi }
1129*53ee8cc1Swenshuai.xi 
HAL_TSO_CmdQ_FIFO_IsEmpty(MS_U8 u8Eng)1130*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_CmdQ_FIFO_IsEmpty(MS_U8 u8Eng)
1131*53ee8cc1Swenshuai.xi {
1132*53ee8cc1Swenshuai.xi     //@TODO not implement
1133*53ee8cc1Swenshuai.xi     //return (MS_BOOL)(_HAL_REG16_R(&(_TSOCtrl[u8Eng].CmdQSts)) & TSO_CMDQ_STS_FIFO_EMPTY);
1134*53ee8cc1Swenshuai.xi     return FALSE;
1135*53ee8cc1Swenshuai.xi }
1136*53ee8cc1Swenshuai.xi 
HAL_TSO_CmdQ_FIFO_Get_WRLevel(MS_U8 u8Eng,MS_U8 u8FileEng)1137*53ee8cc1Swenshuai.xi MS_U8 HAL_TSO_CmdQ_FIFO_Get_WRLevel(MS_U8 u8Eng, MS_U8 u8FileEng)
1138*53ee8cc1Swenshuai.xi {
1139*53ee8cc1Swenshuai.xi     MS_U16 u16Mask = (u8FileEng == 0)? TSO_CMD_QUEUE_STATUS_CMD_WR_LEVEL_MASK : TSO_CMD_QUEUE_STATUS1_CMD_WR_LEVEL_MASK;
1140*53ee8cc1Swenshuai.xi     MS_U16 u16Shift = (u8FileEng == 0)? TSO_CMD_QUEUE_STATUS_CMD_WR_LEVEL_SHIFT : TSO_CMD_QUEUE_STATUS1_CMD_WR_LEVEL_SHIFT;
1141*53ee8cc1Swenshuai.xi 
1142*53ee8cc1Swenshuai.xi     return (MS_U8)((_HAL_REG16_R(&(_TSOCtrl[u8Eng].CMD_QUEUE_STATUS)) & u16Mask) >> u16Shift);
1143*53ee8cc1Swenshuai.xi }
1144*53ee8cc1Swenshuai.xi 
HAL_TSO_CmdQ_Reset(MS_U8 u8Eng,MS_U8 u8FileEng)1145*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_CmdQ_Reset(MS_U8 u8Eng, MS_U8 u8FileEng)
1146*53ee8cc1Swenshuai.xi {
1147*53ee8cc1Swenshuai.xi     MS_U16 u16data = ((u8FileEng == 0)? TSO_SW_RST_CMDQ : TSO_SW_RST_CMDQ1);
1148*53ee8cc1Swenshuai.xi 
1149*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ), SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl->SW_RSTZ)), u16data));
1150*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ), RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl->SW_RSTZ)), u16data));
1151*53ee8cc1Swenshuai.xi 
1152*53ee8cc1Swenshuai.xi     return TRUE;
1153*53ee8cc1Swenshuai.xi }
1154*53ee8cc1Swenshuai.xi 
HAL_TSO_Cfg0_Enable(MS_U8 u8Eng,MS_U16 u16CfgItem,MS_BOOL benable)1155*53ee8cc1Swenshuai.xi void HAL_TSO_Cfg0_Enable(MS_U8 u8Eng, MS_U16 u16CfgItem, MS_BOOL benable)
1156*53ee8cc1Swenshuai.xi {
1157*53ee8cc1Swenshuai.xi     //@TODO not implement
1158*53ee8cc1Swenshuai.xi     /*
1159*53ee8cc1Swenshuai.xi     MS_U16 u16data = _HAL_REG16_R(&(_TSOCtrl[u8Eng].TSO_CFG0));
1160*53ee8cc1Swenshuai.xi 
1161*53ee8cc1Swenshuai.xi     if(benable)
1162*53ee8cc1Swenshuai.xi     {
1163*53ee8cc1Swenshuai.xi         u16data |= u16CfgItem;
1164*53ee8cc1Swenshuai.xi     }
1165*53ee8cc1Swenshuai.xi     else
1166*53ee8cc1Swenshuai.xi     {
1167*53ee8cc1Swenshuai.xi         u16data &= ~u16CfgItem;
1168*53ee8cc1Swenshuai.xi     }
1169*53ee8cc1Swenshuai.xi 
1170*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl[u8Eng].TSO_CFG0), u16data);
1171*53ee8cc1Swenshuai.xi     */
1172*53ee8cc1Swenshuai.xi }
1173*53ee8cc1Swenshuai.xi 
HAL_TSO_Cfg1_Enable(MS_U8 u8Eng,MS_U16 u16CfgItem,MS_BOOL benable)1174*53ee8cc1Swenshuai.xi void HAL_TSO_Cfg1_Enable(MS_U8 u8Eng, MS_U16 u16CfgItem, MS_BOOL benable)
1175*53ee8cc1Swenshuai.xi {
1176*53ee8cc1Swenshuai.xi     MS_U16 u16data = _HAL_REG16_R(&(_TSOCtrl->TSO_CONFIG1));
1177*53ee8cc1Swenshuai.xi 
1178*53ee8cc1Swenshuai.xi     if(benable)
1179*53ee8cc1Swenshuai.xi     {
1180*53ee8cc1Swenshuai.xi         u16data |= u16CfgItem;
1181*53ee8cc1Swenshuai.xi     }
1182*53ee8cc1Swenshuai.xi     else
1183*53ee8cc1Swenshuai.xi     {
1184*53ee8cc1Swenshuai.xi         u16data &= ~u16CfgItem;
1185*53ee8cc1Swenshuai.xi     }
1186*53ee8cc1Swenshuai.xi 
1187*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->TSO_CONFIG1), (u16data | TSO_CFG1_PKT_PARAM_LD));
1188*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSOCtrl->TSO_CONFIG1), TSO_CFG1_PKT_PARAM_LD);
1189*53ee8cc1Swenshuai.xi }
1190*53ee8cc1Swenshuai.xi 
HAL_TSO_ChIf_ClrByteCnt(MS_U8 u8Eng,MS_U8 u8ChIf)1191*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_ChIf_ClrByteCnt(MS_U8 u8Eng, MS_U8 u8ChIf)
1192*53ee8cc1Swenshuai.xi {
1193*53ee8cc1Swenshuai.xi     switch(u8ChIf)
1194*53ee8cc1Swenshuai.xi     {
1195*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
1196*53ee8cc1Swenshuai.xi             _REG16_SET(&(_TSOCtrl[u8Eng].CLR_BYTE_CNT),TSO_CLR_BYTE_CNT_1);
1197*53ee8cc1Swenshuai.xi             _REG16_CLR(&(_TSOCtrl[u8Eng].CLR_BYTE_CNT),TSO_CLR_BYTE_CNT_1);
1198*53ee8cc1Swenshuai.xi             break;
1199*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
1200*53ee8cc1Swenshuai.xi             _REG16_SET(&(_TSOCtrl[u8Eng].CLR_BYTE_CNT),TSO_CLR_BYTE_CNT_2);
1201*53ee8cc1Swenshuai.xi             _REG16_CLR(&(_TSOCtrl[u8Eng].CLR_BYTE_CNT),TSO_CLR_BYTE_CNT_2);
1202*53ee8cc1Swenshuai.xi             break;
1203*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
1204*53ee8cc1Swenshuai.xi             _REG16_SET(&(_TSOCtrl[u8Eng].CLR_BYTE_CNT),TSO_CLR_BYTE_CNT_3);
1205*53ee8cc1Swenshuai.xi             _REG16_CLR(&(_TSOCtrl[u8Eng].CLR_BYTE_CNT),TSO_CLR_BYTE_CNT_3);
1206*53ee8cc1Swenshuai.xi             break;
1207*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
1208*53ee8cc1Swenshuai.xi             _REG16_SET(&(_TSOCtrl[u8Eng].CLR_BYTE_CNT),TSO_CLR_BYTE_CNT_4);
1209*53ee8cc1Swenshuai.xi             _REG16_CLR(&(_TSOCtrl[u8Eng].CLR_BYTE_CNT),TSO_CLR_BYTE_CNT_4);
1210*53ee8cc1Swenshuai.xi             break;
1211*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
1212*53ee8cc1Swenshuai.xi             _REG16_SET(&(_TSOCtrl[u8Eng].CLR_BYTE_CNT),TSO_CLR_BYTE_CNT_5);
1213*53ee8cc1Swenshuai.xi             _REG16_CLR(&(_TSOCtrl[u8Eng].CLR_BYTE_CNT),TSO_CLR_BYTE_CNT_5);
1214*53ee8cc1Swenshuai.xi             break;
1215*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
1216*53ee8cc1Swenshuai.xi             _REG16_SET(&(_TSOCtrl[u8Eng].CLR_BYTE_CNT),TSO_CLR_BYTE_CNT_6);
1217*53ee8cc1Swenshuai.xi             _REG16_CLR(&(_TSOCtrl[u8Eng].CLR_BYTE_CNT),TSO_CLR_BYTE_CNT_6);
1218*53ee8cc1Swenshuai.xi             break;
1219*53ee8cc1Swenshuai.xi         default:
1220*53ee8cc1Swenshuai.xi             return FALSE;
1221*53ee8cc1Swenshuai.xi     }
1222*53ee8cc1Swenshuai.xi 
1223*53ee8cc1Swenshuai.xi     return TRUE;
1224*53ee8cc1Swenshuai.xi }
1225*53ee8cc1Swenshuai.xi 
HAL_TSO_ChIf_Enable(MS_U8 u8Eng,MS_U8 u8ChIf,MS_BOOL bEnable)1226*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_ChIf_Enable(MS_U8 u8Eng, MS_U8 u8ChIf, MS_BOOL bEnable)
1227*53ee8cc1Swenshuai.xi {
1228*53ee8cc1Swenshuai.xi     switch(u8ChIf)
1229*53ee8cc1Swenshuai.xi     {
1230*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
1231*53ee8cc1Swenshuai.xi             HAL_TSO_Cfg1_Enable(u8Eng, TSO_CFG1_TSO_TSIF1_EN, bEnable);
1232*53ee8cc1Swenshuai.xi             break;
1233*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
1234*53ee8cc1Swenshuai.xi             HAL_TSO_Cfg1_Enable(u8Eng, TSO_CFG1_TSO_TSIF2_EN, bEnable);
1235*53ee8cc1Swenshuai.xi             break;
1236*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
1237*53ee8cc1Swenshuai.xi             HAL_TSO_Cfg1_Enable(u8Eng, TSO_CFG1_TSO_TSIF3_EN, bEnable);
1238*53ee8cc1Swenshuai.xi             break;
1239*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
1240*53ee8cc1Swenshuai.xi             HAL_TSO_Cfg1_Enable(u8Eng, TSO_CFG1_TSO_TSIF4_EN, bEnable);
1241*53ee8cc1Swenshuai.xi             break;
1242*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
1243*53ee8cc1Swenshuai.xi             HAL_TSO_Cfg1_Enable(u8Eng, TSO_CFG1_TSO_TSIF5_EN, bEnable);
1244*53ee8cc1Swenshuai.xi             break;
1245*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
1246*53ee8cc1Swenshuai.xi             HAL_TSO_Cfg1_Enable(u8Eng, TSO_CFG1_TSO_TSIF6_EN, bEnable);
1247*53ee8cc1Swenshuai.xi             break;
1248*53ee8cc1Swenshuai.xi         default:
1249*53ee8cc1Swenshuai.xi             return FALSE;
1250*53ee8cc1Swenshuai.xi     }
1251*53ee8cc1Swenshuai.xi 
1252*53ee8cc1Swenshuai.xi     return TRUE;
1253*53ee8cc1Swenshuai.xi }
1254*53ee8cc1Swenshuai.xi 
HAL_TSO_ChIf_Cfg(MS_U8 u8Eng,MS_U8 u8ChIf,MS_U16 u16Cfg,MS_BOOL bEnable)1255*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_ChIf_Cfg(MS_U8 u8Eng, MS_U8 u8ChIf, MS_U16 u16Cfg, MS_BOOL bEnable)
1256*53ee8cc1Swenshuai.xi {
1257*53ee8cc1Swenshuai.xi     REG16_TSO *reg = NULL;
1258*53ee8cc1Swenshuai.xi     MS_U16 u16data = 0;
1259*53ee8cc1Swenshuai.xi 
1260*53ee8cc1Swenshuai.xi     switch(u8ChIf)
1261*53ee8cc1Swenshuai.xi     {
1262*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
1263*53ee8cc1Swenshuai.xi             reg = &(_TSOCtrl->CHANNEL0_IF1_CONFIG2);
1264*53ee8cc1Swenshuai.xi             break;
1265*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
1266*53ee8cc1Swenshuai.xi             reg = &(_TSOCtrl->CHANNEL0_IF2_CONFIG2);
1267*53ee8cc1Swenshuai.xi             break;
1268*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
1269*53ee8cc1Swenshuai.xi             reg = &(_TSOCtrl->CHANNEL0_IF3_CONFIG2);
1270*53ee8cc1Swenshuai.xi             break;
1271*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
1272*53ee8cc1Swenshuai.xi             reg = &(_TSOCtrl->CHANNEL0_IF4_CONFIG2);
1273*53ee8cc1Swenshuai.xi             break;
1274*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
1275*53ee8cc1Swenshuai.xi             reg = &(_TSOCtrl->CHANNEL0_IF5_CONFIG2);
1276*53ee8cc1Swenshuai.xi             break;
1277*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
1278*53ee8cc1Swenshuai.xi             reg = &(_TSOCtrl->CHANNEL0_IF6_CONFIG2);
1279*53ee8cc1Swenshuai.xi             break;
1280*53ee8cc1Swenshuai.xi         default:
1281*53ee8cc1Swenshuai.xi             return FALSE;
1282*53ee8cc1Swenshuai.xi     }
1283*53ee8cc1Swenshuai.xi 
1284*53ee8cc1Swenshuai.xi     u16data = _HAL_REG16_R(reg);
1285*53ee8cc1Swenshuai.xi 
1286*53ee8cc1Swenshuai.xi     if(bEnable)
1287*53ee8cc1Swenshuai.xi     {
1288*53ee8cc1Swenshuai.xi         u16data |= u16Cfg;
1289*53ee8cc1Swenshuai.xi     }
1290*53ee8cc1Swenshuai.xi     else
1291*53ee8cc1Swenshuai.xi     {
1292*53ee8cc1Swenshuai.xi         u16data &= ~u16Cfg;
1293*53ee8cc1Swenshuai.xi     }
1294*53ee8cc1Swenshuai.xi 
1295*53ee8cc1Swenshuai.xi     _HAL_REG16_W(reg, u16data);
1296*53ee8cc1Swenshuai.xi     return TRUE;
1297*53ee8cc1Swenshuai.xi }
1298*53ee8cc1Swenshuai.xi 
HAL_TSO_Get_ChIf_Cfg(MS_U8 u8Eng,MS_U8 u8ChIf,MS_U16 * pu16Cfg,MS_BOOL * pbEnable)1299*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_Get_ChIf_Cfg(MS_U8 u8Eng, MS_U8 u8ChIf, MS_U16* pu16Cfg, MS_BOOL *pbEnable)
1300*53ee8cc1Swenshuai.xi {
1301*53ee8cc1Swenshuai.xi     REG16_TSO* pReg = NULL;
1302*53ee8cc1Swenshuai.xi     MS_U16 u16data = 0;
1303*53ee8cc1Swenshuai.xi 
1304*53ee8cc1Swenshuai.xi     *pu16Cfg = 0;
1305*53ee8cc1Swenshuai.xi     *pbEnable = FALSE;
1306*53ee8cc1Swenshuai.xi 
1307*53ee8cc1Swenshuai.xi     switch(u8ChIf)
1308*53ee8cc1Swenshuai.xi     {
1309*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
1310*53ee8cc1Swenshuai.xi             pReg = &(_TSOCtrl->CHANNEL0_IF1_CONFIG2);
1311*53ee8cc1Swenshuai.xi             break;
1312*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
1313*53ee8cc1Swenshuai.xi             pReg = &(_TSOCtrl->CHANNEL0_IF2_CONFIG2);
1314*53ee8cc1Swenshuai.xi             break;
1315*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
1316*53ee8cc1Swenshuai.xi             pReg = &(_TSOCtrl->CHANNEL0_IF3_CONFIG2);
1317*53ee8cc1Swenshuai.xi             break;
1318*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
1319*53ee8cc1Swenshuai.xi             pReg = &(_TSOCtrl->CHANNEL0_IF4_CONFIG2);
1320*53ee8cc1Swenshuai.xi             break;
1321*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
1322*53ee8cc1Swenshuai.xi             pReg = &(_TSOCtrl->CHANNEL0_IF5_CONFIG2);
1323*53ee8cc1Swenshuai.xi             break;
1324*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
1325*53ee8cc1Swenshuai.xi             pReg = &(_TSOCtrl->CHANNEL0_IF6_CONFIG2);
1326*53ee8cc1Swenshuai.xi             break;
1327*53ee8cc1Swenshuai.xi         default:
1328*53ee8cc1Swenshuai.xi             return FALSE;
1329*53ee8cc1Swenshuai.xi     }
1330*53ee8cc1Swenshuai.xi 
1331*53ee8cc1Swenshuai.xi     *pu16Cfg = _HAL_REG16_R(pReg);
1332*53ee8cc1Swenshuai.xi 
1333*53ee8cc1Swenshuai.xi     switch(u8ChIf)
1334*53ee8cc1Swenshuai.xi     {
1335*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
1336*53ee8cc1Swenshuai.xi             u16data = TSO_CFG1_TSO_TSIF1_EN;
1337*53ee8cc1Swenshuai.xi             break;
1338*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
1339*53ee8cc1Swenshuai.xi             u16data = TSO_CFG1_TSO_TSIF2_EN;
1340*53ee8cc1Swenshuai.xi             break;
1341*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
1342*53ee8cc1Swenshuai.xi             u16data = TSO_CFG1_TSO_TSIF3_EN;
1343*53ee8cc1Swenshuai.xi             break;
1344*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
1345*53ee8cc1Swenshuai.xi             u16data = TSO_CFG1_TSO_TSIF4_EN;
1346*53ee8cc1Swenshuai.xi             break;
1347*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
1348*53ee8cc1Swenshuai.xi             u16data = TSO_CFG1_TSO_TSIF5_EN;
1349*53ee8cc1Swenshuai.xi             break;
1350*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
1351*53ee8cc1Swenshuai.xi             u16data = TSO_CFG1_TSO_TSIF6_EN;
1352*53ee8cc1Swenshuai.xi             break;
1353*53ee8cc1Swenshuai.xi         default:
1354*53ee8cc1Swenshuai.xi             return FALSE;
1355*53ee8cc1Swenshuai.xi     }
1356*53ee8cc1Swenshuai.xi 
1357*53ee8cc1Swenshuai.xi     *pbEnable = ((_HAL_REG16_R(&(_TSOCtrl->TSO_CONFIG1)) & u16data) == u16data);
1358*53ee8cc1Swenshuai.xi 
1359*53ee8cc1Swenshuai.xi     return TRUE;
1360*53ee8cc1Swenshuai.xi }
1361*53ee8cc1Swenshuai.xi 
HAL_TSO_File_Cfg1_Enable(MS_U8 u8Eng,MS_U16 u16CfgItem,MS_BOOL benable)1362*53ee8cc1Swenshuai.xi void HAL_TSO_File_Cfg1_Enable(MS_U8 u8Eng, MS_U16 u16CfgItem, MS_BOOL benable)
1363*53ee8cc1Swenshuai.xi {
1364*53ee8cc1Swenshuai.xi     REG16_TSO *reg = (u8Eng == 0)? &(_TSOCtrl->TSO_FILE_CONFIG) : &(_TSOCtrl->TSO_FILE_CONFIG1);
1365*53ee8cc1Swenshuai.xi     MS_U16 u16data = _HAL_REG16_R(reg);
1366*53ee8cc1Swenshuai.xi 
1367*53ee8cc1Swenshuai.xi     if(benable)
1368*53ee8cc1Swenshuai.xi     {
1369*53ee8cc1Swenshuai.xi         u16data |= u16CfgItem;
1370*53ee8cc1Swenshuai.xi     }
1371*53ee8cc1Swenshuai.xi     else
1372*53ee8cc1Swenshuai.xi     {
1373*53ee8cc1Swenshuai.xi         u16data &= ~u16CfgItem;
1374*53ee8cc1Swenshuai.xi     }
1375*53ee8cc1Swenshuai.xi 
1376*53ee8cc1Swenshuai.xi     _HAL_REG16_W(reg, u16data);
1377*53ee8cc1Swenshuai.xi }
1378*53ee8cc1Swenshuai.xi 
1379*53ee8cc1Swenshuai.xi 
1380*53ee8cc1Swenshuai.xi 
HAL_TSO_Cfg4_Enable(MS_U8 u8Eng,MS_U32 u32CfgItem,MS_BOOL benable)1381*53ee8cc1Swenshuai.xi void HAL_TSO_Cfg4_Enable(MS_U8 u8Eng, MS_U32 u32CfgItem, MS_BOOL benable)
1382*53ee8cc1Swenshuai.xi {
1383*53ee8cc1Swenshuai.xi     //@TODO not implement
1384*53ee8cc1Swenshuai.xi     /*
1385*53ee8cc1Swenshuai.xi     MS_U16 u16data = _HAL_REG16_R(&(_TSOCtrl[u8Eng].TSO_CFG4));
1386*53ee8cc1Swenshuai.xi 
1387*53ee8cc1Swenshuai.xi     if(benable)
1388*53ee8cc1Swenshuai.xi     {
1389*53ee8cc1Swenshuai.xi         u16data |= u32CfgItem;
1390*53ee8cc1Swenshuai.xi     }
1391*53ee8cc1Swenshuai.xi     else
1392*53ee8cc1Swenshuai.xi     {
1393*53ee8cc1Swenshuai.xi         u16data &= ~u32CfgItem;
1394*53ee8cc1Swenshuai.xi     }
1395*53ee8cc1Swenshuai.xi 
1396*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl[u8Eng].TSO_CFG4), u16data);
1397*53ee8cc1Swenshuai.xi     */
1398*53ee8cc1Swenshuai.xi }
1399*53ee8cc1Swenshuai.xi 
HAL_TSO_RW_ValidBlock_Count(MS_U8 u8Eng,MS_BOOL bWrite,MS_U16 * pu16ValidBlockCnt)1400*53ee8cc1Swenshuai.xi void HAL_TSO_RW_ValidBlock_Count(MS_U8 u8Eng, MS_BOOL bWrite, MS_U16 *pu16ValidBlockCnt)
1401*53ee8cc1Swenshuai.xi {
1402*53ee8cc1Swenshuai.xi     MS_U16 u16data = _HAL_REG16_R(&(_TSOCtrl[u8Eng].TSO_CONFIG2));
1403*53ee8cc1Swenshuai.xi 
1404*53ee8cc1Swenshuai.xi     if(bWrite)
1405*53ee8cc1Swenshuai.xi     {
1406*53ee8cc1Swenshuai.xi         u16data &= ~TSO_CONFIG2_VALID_BYTE_CNT_MASK;
1407*53ee8cc1Swenshuai.xi         u16data |= (*pu16ValidBlockCnt << TSO_CONFIG2_VALID_BYTE_CNT_SHIFT);
1408*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TSOCtrl[u8Eng].TSO_CONFIG2), u16data);
1409*53ee8cc1Swenshuai.xi 
1410*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSOCtrl[u8Eng].TSO_CONFIG1), TSO_CFG1_PKT_PARAM_LD);
1411*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSOCtrl[u8Eng].TSO_CONFIG1), TSO_CFG1_PKT_PARAM_LD);
1412*53ee8cc1Swenshuai.xi     }
1413*53ee8cc1Swenshuai.xi     else
1414*53ee8cc1Swenshuai.xi     {
1415*53ee8cc1Swenshuai.xi         *pu16ValidBlockCnt = ((u16data & TSO_CONFIG2_VALID_BYTE_CNT_MASK) >> TSO_CONFIG2_VALID_BYTE_CNT_SHIFT);
1416*53ee8cc1Swenshuai.xi     }
1417*53ee8cc1Swenshuai.xi }
1418*53ee8cc1Swenshuai.xi 
HAL_TSO_RW_InvalidBlock_Count(MS_U8 u8Eng,MS_BOOL bWrite,MS_U16 * pu16InvalidBlockCnt)1419*53ee8cc1Swenshuai.xi void HAL_TSO_RW_InvalidBlock_Count(MS_U8 u8Eng, MS_BOOL bWrite, MS_U16 *pu16InvalidBlockCnt)
1420*53ee8cc1Swenshuai.xi {
1421*53ee8cc1Swenshuai.xi     MS_U16 u16data = _HAL_REG16_R(&(_TSOCtrl[u8Eng].TSO_CONFIG2));
1422*53ee8cc1Swenshuai.xi 
1423*53ee8cc1Swenshuai.xi     if(bWrite)
1424*53ee8cc1Swenshuai.xi     {
1425*53ee8cc1Swenshuai.xi         u16data &= ~TSO_CONFIG2_INVALID_BYTE_CNT_MASK;
1426*53ee8cc1Swenshuai.xi         u16data |= (*pu16InvalidBlockCnt << TSO_CONFIG2_INVALID_BYTE_CNT_SHIFT);
1427*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TSOCtrl[u8Eng].TSO_CONFIG2), u16data);
1428*53ee8cc1Swenshuai.xi 
1429*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSOCtrl[u8Eng].TSO_CONFIG1), TSO_CFG1_PKT_PARAM_LD);
1430*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSOCtrl[u8Eng].TSO_CONFIG1), TSO_CFG1_PKT_PARAM_LD);
1431*53ee8cc1Swenshuai.xi     }
1432*53ee8cc1Swenshuai.xi     else
1433*53ee8cc1Swenshuai.xi     {
1434*53ee8cc1Swenshuai.xi         *pu16InvalidBlockCnt = (u16data & TSO_CONFIG2_INVALID_BYTE_CNT_MASK) >> TSO_CONFIG2_INVALID_BYTE_CNT_SHIFT;
1435*53ee8cc1Swenshuai.xi     }
1436*53ee8cc1Swenshuai.xi }
1437*53ee8cc1Swenshuai.xi 
HAL_TSO_Get_TsHDInfo_CC(MS_U8 u8Eng)1438*53ee8cc1Swenshuai.xi MS_U32 HAL_TSO_Get_TsHDInfo_CC(MS_U8 u8Eng)
1439*53ee8cc1Swenshuai.xi {
1440*53ee8cc1Swenshuai.xi     //@TODO not implement
1441*53ee8cc1Swenshuai.xi     //return (_HAL_REG32_R(&(_TSOCtrl[u8Eng].TSO_Header)) & TSO_HD_CONT_COUNTER_MASK);
1442*53ee8cc1Swenshuai.xi     return 0;
1443*53ee8cc1Swenshuai.xi }
1444*53ee8cc1Swenshuai.xi 
HAL_TSO_Get_TsHDInfo_ADP(MS_U8 u8Eng)1445*53ee8cc1Swenshuai.xi MS_U32  HAL_TSO_Get_TsHDInfo_ADP(MS_U8 u8Eng)
1446*53ee8cc1Swenshuai.xi {
1447*53ee8cc1Swenshuai.xi     //@TODO not implement
1448*53ee8cc1Swenshuai.xi     //return ((_HAL_REG32_R(&(_TSOCtrl[u8Eng].TSO_Header)) & TSO_HD_CONT_COUNTER_MASK) >> TSO_HD_ADP_FIELD_SHIFT);
1449*53ee8cc1Swenshuai.xi     return 0;
1450*53ee8cc1Swenshuai.xi }
1451*53ee8cc1Swenshuai.xi 
HAL_TSO_Get_TsHDInfo_SCM(MS_U8 u8Eng)1452*53ee8cc1Swenshuai.xi MS_U32  HAL_TSO_Get_TsHDInfo_SCM(MS_U8 u8Eng)
1453*53ee8cc1Swenshuai.xi {
1454*53ee8cc1Swenshuai.xi     //@TODO not implement
1455*53ee8cc1Swenshuai.xi     //return ((_HAL_REG32_R(&(_TSOCtrl[u8Eng].TSO_Header)) & TSO_HD_PID_MASK) >> TSO_HD_PID_SHIFT);
1456*53ee8cc1Swenshuai.xi     return 0;
1457*53ee8cc1Swenshuai.xi }
1458*53ee8cc1Swenshuai.xi 
HAL_TSO_Get_TsHDInfo_PID(MS_U8 u8Eng)1459*53ee8cc1Swenshuai.xi MS_U32  HAL_TSO_Get_TsHDInfo_PID(MS_U8 u8Eng)
1460*53ee8cc1Swenshuai.xi {
1461*53ee8cc1Swenshuai.xi     //@TODO not implement
1462*53ee8cc1Swenshuai.xi     //return ((_HAL_REG32_R(&(_TSOCtrl[u8Eng].TSO_Header)) & TSO_HD_SCRM_FIELD_MASK) >> TSO_HD_SCRM_FIELD_SHIFT);
1463*53ee8cc1Swenshuai.xi     return 0;
1464*53ee8cc1Swenshuai.xi }
1465*53ee8cc1Swenshuai.xi 
HAL_TSO_Get_TsHDInfo_TSPri(MS_U8 u8Eng)1466*53ee8cc1Swenshuai.xi MS_U32  HAL_TSO_Get_TsHDInfo_TSPri(MS_U8 u8Eng)
1467*53ee8cc1Swenshuai.xi {
1468*53ee8cc1Swenshuai.xi     //@TODO not implement
1469*53ee8cc1Swenshuai.xi     //return ((_HAL_REG32_R(&(_TSOCtrl[u8Eng].TSO_Header)) & TSO_HD_TS_PRIORITY_MASK) >> TSO_HD_TS_PRIORITY_SHIFT);
1470*53ee8cc1Swenshuai.xi     return 0;
1471*53ee8cc1Swenshuai.xi }
1472*53ee8cc1Swenshuai.xi 
HAL_TSO_Get_TsHDInfo_PSI(MS_U8 u8Eng)1473*53ee8cc1Swenshuai.xi MS_U32  HAL_TSO_Get_TsHDInfo_PSI(MS_U8 u8Eng)
1474*53ee8cc1Swenshuai.xi {
1475*53ee8cc1Swenshuai.xi     //@TODO not implement
1476*53ee8cc1Swenshuai.xi     //return ((_HAL_REG32_R(&(_TSOCtrl[u8Eng].TSO_Header)) & TSO_HD_PAYLOAD_START_IND_MASK) >> TSO_HD_PAYLOAD_START_IND_SHIFT);
1477*53ee8cc1Swenshuai.xi     return 0;
1478*53ee8cc1Swenshuai.xi }
1479*53ee8cc1Swenshuai.xi 
HAL_TSO_Get_TsHDInfo_ErrInd(MS_U8 u8Eng)1480*53ee8cc1Swenshuai.xi MS_U32  HAL_TSO_Get_TsHDInfo_ErrInd(MS_U8 u8Eng)
1481*53ee8cc1Swenshuai.xi {
1482*53ee8cc1Swenshuai.xi     //@TODO not implement
1483*53ee8cc1Swenshuai.xi     //return ((_HAL_REG32_R(&(_TSOCtrl[u8Eng].TSO_Header)) & TSO_HD_PAYLOAD_ERR_IND_MASK) >> TSO_HD_PAYLOAD_ERR_IND_SHIFT);
1484*53ee8cc1Swenshuai.xi     return 0;
1485*53ee8cc1Swenshuai.xi }
1486*53ee8cc1Swenshuai.xi 
HAL_TSO_Get_Pid_Info(MS_U8 u8Eng,MS_U16 * pu16matchpid,MS_BOOL * pbchanged)1487*53ee8cc1Swenshuai.xi void   HAL_TSO_Get_Pid_Info(MS_U8 u8Eng, MS_U16 *pu16matchpid, MS_BOOL *pbchanged)
1488*53ee8cc1Swenshuai.xi {
1489*53ee8cc1Swenshuai.xi     //@TODO not implement
1490*53ee8cc1Swenshuai.xi     /*
1491*53ee8cc1Swenshuai.xi     MS_U16 u16temp;
1492*53ee8cc1Swenshuai.xi 
1493*53ee8cc1Swenshuai.xi     u16temp = _HAL_REG16_R(&(_TSOCtrl[u8Eng].TSO_PID_Info));
1494*53ee8cc1Swenshuai.xi 
1495*53ee8cc1Swenshuai.xi     *pu16matchpid = u16temp & TSO_PID_INFO_MATCH_PID_MASK;
1496*53ee8cc1Swenshuai.xi     *pbchanged = (((u16temp & TSO_PID_INFO_MATCH_PID_CHANGE_MASK) > 0) ? TRUE: FALSE);
1497*53ee8cc1Swenshuai.xi     */
1498*53ee8cc1Swenshuai.xi }
1499*53ee8cc1Swenshuai.xi 
HAL_TSO_LPcr2_Set(MS_U8 u8Eng,MS_U8 u8FileEng,MS_U32 u32lpcr2)1500*53ee8cc1Swenshuai.xi void   HAL_TSO_LPcr2_Set(MS_U8 u8Eng, MS_U8 u8FileEng, MS_U32 u32lpcr2)
1501*53ee8cc1Swenshuai.xi {
1502*53ee8cc1Swenshuai.xi     REG32_TSO *LPCR2 = (u8FileEng == 0)? &(_TSOCtrl->LPCR2_BUF) : &(_TSOCtrl->LPCR2_BUF1);
1503*53ee8cc1Swenshuai.xi     REG16_TSO *FILE_CONFIG = (u8FileEng == 0)? &(_TSOCtrl->TSO_FILE_CONFIG) : &(_TSOCtrl->TSO_FILE_CONFIG1);
1504*53ee8cc1Swenshuai.xi 
1505*53ee8cc1Swenshuai.xi 
1506*53ee8cc1Swenshuai.xi     _REG16_SET(FILE_CONFIG,TSO_FILE_CONFIG_LPCR2_WLD);
1507*53ee8cc1Swenshuai.xi     _HAL_REG32_W(LPCR2, u32lpcr2);
1508*53ee8cc1Swenshuai.xi     _REG16_CLR(FILE_CONFIG,TSO_FILE_CONFIG_LPCR2_WLD);
1509*53ee8cc1Swenshuai.xi }
1510*53ee8cc1Swenshuai.xi 
HAL_TSO_LPcr2_Get(MS_U8 u8Eng,MS_U8 u8FileEng)1511*53ee8cc1Swenshuai.xi MS_U32 HAL_TSO_LPcr2_Get(MS_U8 u8Eng, MS_U8 u8FileEng)
1512*53ee8cc1Swenshuai.xi {
1513*53ee8cc1Swenshuai.xi     MS_U32 u32temp = 0;
1514*53ee8cc1Swenshuai.xi     REG32_TSO *LPCR2 = (u8FileEng == 0)? &(_TSOCtrl->LPCR2_BUF) : &(_TSOCtrl->LPCR2_BUF1);
1515*53ee8cc1Swenshuai.xi     REG16_TSO *FILE_CONFIG = (u8FileEng == 0)? &(_TSOCtrl->TSO_FILE_CONFIG) : &(_TSOCtrl->TSO_FILE_CONFIG1);
1516*53ee8cc1Swenshuai.xi 
1517*53ee8cc1Swenshuai.xi 
1518*53ee8cc1Swenshuai.xi     _REG16_SET(FILE_CONFIG,TSO_FILE_CONFIG_LPCR2_LOAD);
1519*53ee8cc1Swenshuai.xi     u32temp = _HAL_REG32_R(LPCR2);
1520*53ee8cc1Swenshuai.xi     _REG16_CLR(FILE_CONFIG,TSO_FILE_CONFIG_LPCR2_LOAD);
1521*53ee8cc1Swenshuai.xi 
1522*53ee8cc1Swenshuai.xi     return u32temp;
1523*53ee8cc1Swenshuai.xi }
1524*53ee8cc1Swenshuai.xi 
HAL_TSO_TimeStamp_Get(MS_U8 u8Eng,MS_U8 u8FileEng)1525*53ee8cc1Swenshuai.xi MS_U32 HAL_TSO_TimeStamp_Get(MS_U8 u8Eng, MS_U8 u8FileEng)
1526*53ee8cc1Swenshuai.xi {
1527*53ee8cc1Swenshuai.xi     REG32_TSO *TIMESTAMP = (u8FileEng == 0)? &(_TSOCtrl->TIMESTAMP) : &(_TSOCtrl->TIMESTAMP1);
1528*53ee8cc1Swenshuai.xi 
1529*53ee8cc1Swenshuai.xi     return _HAL_REG32_R(TIMESTAMP);
1530*53ee8cc1Swenshuai.xi }
1531*53ee8cc1Swenshuai.xi 
HAL_TSO_PktChkSize_Set(MS_U8 u8Eng,MS_U8 u8If,MS_U8 u8size)1532*53ee8cc1Swenshuai.xi void HAL_TSO_PktChkSize_Set(MS_U8 u8Eng, MS_U8 u8If, MS_U8 u8size)
1533*53ee8cc1Swenshuai.xi {
1534*53ee8cc1Swenshuai.xi     switch(u8If)
1535*53ee8cc1Swenshuai.xi     {
1536*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
1537*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF1_CONFIG0),
1538*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF1_CONFIG0)) & ~TSO_CHANNEL0_IF1_CONFIG0_PIDFLT_PKT_SIZE_MASK)
1539*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8size << TSO_CHANNEL0_IF1_CONFIG0_PIDFLT_PKT_SIZE_SHIFT)) & TSO_CHANNEL0_IF1_CONFIG0_PIDFLT_PKT_SIZE_MASK));
1540*53ee8cc1Swenshuai.xi             break;
1541*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
1542*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF2_CONFIG0),
1543*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF2_CONFIG0)) & ~TSO_CHANNEL0_IF2_CONFIG0_PIDFLT_PKT_SIZE_MASK)
1544*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8size << TSO_CHANNEL0_IF2_CONFIG0_PIDFLT_PKT_SIZE_SHIFT)) & TSO_CHANNEL0_IF2_CONFIG0_PIDFLT_PKT_SIZE_MASK));
1545*53ee8cc1Swenshuai.xi             break;
1546*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
1547*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF3_CONFIG0),
1548*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF3_CONFIG0)) & ~TSO_CHANNEL0_IF3_CONFIG0_PIDFLT_PKT_SIZE_MASK)
1549*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8size << TSO_CHANNEL0_IF3_CONFIG0_PIDFLT_PKT_SIZE_SHIFT)) & TSO_CHANNEL0_IF3_CONFIG0_PIDFLT_PKT_SIZE_MASK));
1550*53ee8cc1Swenshuai.xi             break;
1551*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
1552*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF4_CONFIG0),
1553*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF4_CONFIG0)) & ~TSO_CHANNEL0_IF4_CONFIG0_PIDFLT_PKT_SIZE_MASK)
1554*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8size << TSO_CHANNEL0_IF4_CONFIG0_PIDFLT_PKT_SIZE_SHIFT)) & TSO_CHANNEL0_IF4_CONFIG0_PIDFLT_PKT_SIZE_MASK));
1555*53ee8cc1Swenshuai.xi             break;
1556*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
1557*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF5_CONFIG0),
1558*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF5_CONFIG0)) & ~TSO_CHANNEL0_IF5_CONFIG0_PIDFLT_PKT_SIZE_MASK)
1559*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8size << TSO_CHANNEL0_IF5_CONFIG0_PIDFLT_PKT_SIZE_SHIFT)) & TSO_CHANNEL0_IF5_CONFIG0_PIDFLT_PKT_SIZE_MASK));
1560*53ee8cc1Swenshuai.xi             break;
1561*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
1562*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF6_CONFIG0),
1563*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF6_CONFIG0)) & ~TSO_CHANNEL0_IF6_CONFIG0_PIDFLT_PKT_SIZE_MASK)
1564*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8size << TSO_CHANNEL0_IF6_CONFIG0_PIDFLT_PKT_SIZE_SHIFT)) & TSO_CHANNEL0_IF6_CONFIG0_PIDFLT_PKT_SIZE_MASK));
1565*53ee8cc1Swenshuai.xi             break;
1566*53ee8cc1Swenshuai.xi         default:
1567*53ee8cc1Swenshuai.xi             printf("Not support !!\n");
1568*53ee8cc1Swenshuai.xi             break;
1569*53ee8cc1Swenshuai.xi     }
1570*53ee8cc1Swenshuai.xi }
1571*53ee8cc1Swenshuai.xi 
HAL_TSO_RW_OutputPktSize(MS_U8 u8Eng,MS_BOOL bWrite,MS_U16 * pu16PktSize)1572*53ee8cc1Swenshuai.xi void HAL_TSO_RW_OutputPktSize(MS_U8 u8Eng, MS_BOOL bWrite, MS_U16 *pu16PktSize)
1573*53ee8cc1Swenshuai.xi {
1574*53ee8cc1Swenshuai.xi     if(bWrite)
1575*53ee8cc1Swenshuai.xi     {
1576*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TSOCtrl->TSO_CONFIG3), *pu16PktSize);
1577*53ee8cc1Swenshuai.xi     }
1578*53ee8cc1Swenshuai.xi     else
1579*53ee8cc1Swenshuai.xi     {
1580*53ee8cc1Swenshuai.xi         *pu16PktSize = _HAL_REG16_R(&(_TSOCtrl->TSO_CONFIG3));
1581*53ee8cc1Swenshuai.xi     }
1582*53ee8cc1Swenshuai.xi 
1583*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->TSO_CONFIG1), SET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_CONFIG1), TSO_CFG1_PKT_PARAM_LD));
1584*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl->TSO_CONFIG1), RESET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_CONFIG1), TSO_CFG1_PKT_PARAM_LD));
1585*53ee8cc1Swenshuai.xi }
1586*53ee8cc1Swenshuai.xi 
HAL_TSO_Filein_PktChkSize_Set(MS_U8 u8Eng,MS_U8 u8FileEng,MS_U8 u8size)1587*53ee8cc1Swenshuai.xi void HAL_TSO_Filein_PktChkSize_Set(MS_U8 u8Eng, MS_U8 u8FileEng, MS_U8 u8size)
1588*53ee8cc1Swenshuai.xi {
1589*53ee8cc1Swenshuai.xi     switch(u8FileEng)
1590*53ee8cc1Swenshuai.xi     {
1591*53ee8cc1Swenshuai.xi         case 0:
1592*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->PKT_CHK_SIZE_FIN),
1593*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->PKT_CHK_SIZE_FIN)) & ~TSO_PKT_CHK_SIZE_FIN_MASK)
1594*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8size << TSO_PKT_CHK_SIZE_FIN_SHIFT)) & TSO_PKT_CHK_SIZE_FIN_MASK));
1595*53ee8cc1Swenshuai.xi             break;
1596*53ee8cc1Swenshuai.xi         case 1:
1597*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->PKT_CHK_SIZE_FIN),
1598*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->PKT_CHK_SIZE_FIN)) & ~TSO_PKT_CHK_SIZE_FIN1_MASK)
1599*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8size << TSO_PKT_CHK_SIZE_FIN1_SHIFT)) & TSO_PKT_CHK_SIZE_FIN1_MASK));
1600*53ee8cc1Swenshuai.xi             break;
1601*53ee8cc1Swenshuai.xi         default:
1602*53ee8cc1Swenshuai.xi             printf("Not support !!\n");
1603*53ee8cc1Swenshuai.xi             break;
1604*53ee8cc1Swenshuai.xi     }
1605*53ee8cc1Swenshuai.xi }
1606*53ee8cc1Swenshuai.xi 
HAL_TSO_Livein_PktChkSize_Set(MS_U8 u8Eng,MS_U8 u8If,MS_U8 u8size)1607*53ee8cc1Swenshuai.xi void HAL_TSO_Livein_PktChkSize_Set(MS_U8 u8Eng, MS_U8 u8If, MS_U8 u8size)
1608*53ee8cc1Swenshuai.xi {
1609*53ee8cc1Swenshuai.xi     switch(u8If)
1610*53ee8cc1Swenshuai.xi     {
1611*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
1612*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF1_CONFIG0),
1613*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF1_CONFIG0)) & ~TSO_CHANNEL0_IF1_CONFIG0_PKT_SIZE_CHK_LIVE_MASK)
1614*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8size << TSO_CHANNEL0_IF1_CONFIG0_PKT_SIZE_CHK_LIVE_SHIFT)) & TSO_CHANNEL0_IF1_CONFIG0_PKT_SIZE_CHK_LIVE_MASK));
1615*53ee8cc1Swenshuai.xi             break;
1616*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
1617*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF2_CONFIG0),
1618*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF2_CONFIG0)) & ~TSO_CHANNEL0_IF2_CONFIG0_PKT_SIZE_CHK_LIVE_MASK)
1619*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8size << TSO_CHANNEL0_IF2_CONFIG0_PKT_SIZE_CHK_LIVE_SHIFT)) & TSO_CHANNEL0_IF2_CONFIG0_PKT_SIZE_CHK_LIVE_MASK));
1620*53ee8cc1Swenshuai.xi             break;
1621*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
1622*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF3_CONFIG0),
1623*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF3_CONFIG0)) & ~TSO_CHANNEL0_IF3_CONFIG0_PKT_SIZE_CHK_LIVE_MASK)
1624*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8size << TSO_CHANNEL0_IF3_CONFIG0_PKT_SIZE_CHK_LIVE_SHIFT)) & TSO_CHANNEL0_IF3_CONFIG0_PKT_SIZE_CHK_LIVE_MASK));
1625*53ee8cc1Swenshuai.xi             break;
1626*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
1627*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF4_CONFIG0),
1628*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF4_CONFIG0)) & ~TSO_CHANNEL0_IF4_CONFIG0_PKT_SIZE_CHK_LIVE_MASK)
1629*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8size << TSO_CHANNEL0_IF4_CONFIG0_PKT_SIZE_CHK_LIVE_SHIFT)) & TSO_CHANNEL0_IF4_CONFIG0_PKT_SIZE_CHK_LIVE_MASK));
1630*53ee8cc1Swenshuai.xi             break;
1631*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
1632*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF5_CONFIG0),
1633*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF5_CONFIG0)) & ~TSO_CHANNEL0_IF5_CONFIG0_PKT_SIZE_CHK_LIVE_MASK)
1634*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8size << TSO_CHANNEL0_IF5_CONFIG0_PKT_SIZE_CHK_LIVE_SHIFT)) & TSO_CHANNEL0_IF5_CONFIG0_PKT_SIZE_CHK_LIVE_MASK));
1635*53ee8cc1Swenshuai.xi             break;
1636*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
1637*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF6_CONFIG0),
1638*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF6_CONFIG0)) & ~TSO_CHANNEL0_IF6_CONFIG0_PKT_SIZE_CHK_LIVE_MASK)
1639*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8size << TSO_CHANNEL0_IF6_CONFIG0_PKT_SIZE_CHK_LIVE_SHIFT)) & TSO_CHANNEL0_IF6_CONFIG0_PKT_SIZE_CHK_LIVE_MASK));
1640*53ee8cc1Swenshuai.xi             break;
1641*53ee8cc1Swenshuai.xi         default:
1642*53ee8cc1Swenshuai.xi             printf("Not support !!\n");
1643*53ee8cc1Swenshuai.xi             break;
1644*53ee8cc1Swenshuai.xi     }
1645*53ee8cc1Swenshuai.xi }
1646*53ee8cc1Swenshuai.xi 
1647*53ee8cc1Swenshuai.xi 
HAL_TSO_Livein_Input_Config(MS_U8 u8Eng,MS_U8 u8PktInputMode,MS_U8 u8PktSyncByte,MS_U8 u8PktHeaderLength)1648*53ee8cc1Swenshuai.xi void HAL_TSO_Livein_Input_Config(MS_U8 u8Eng, MS_U8 u8PktInputMode, MS_U8 u8PktSyncByte, MS_U8 u8PktHeaderLength)
1649*53ee8cc1Swenshuai.xi {
1650*53ee8cc1Swenshuai.xi     switch(u8Eng)
1651*53ee8cc1Swenshuai.xi     {
1652*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
1653*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF1_CONFIG1),
1654*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF1_CONFIG1)) & ~TSO_CHANNEL0_IF1_CONFIG1_PKT_INPUT_MODE_MASK)
1655*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktInputMode << TSO_CHANNEL0_IF1_CONFIG1_PKT_INPUT_MODE_SHIFT)) & TSO_CHANNEL0_IF1_CONFIG1_PKT_INPUT_MODE_MASK));
1656*53ee8cc1Swenshuai.xi 
1657*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF1_CONFIG1),
1658*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF1_CONFIG1)) & ~TSO_CHANNEL0_IF1_CONFIG1_SYNC_BYTE_MASK)
1659*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktSyncByte << TSO_CHANNEL0_IF1_CONFIG1_SYNC_BYTE_SHIFT)) & TSO_CHANNEL0_IF1_CONFIG1_SYNC_BYTE_MASK));
1660*53ee8cc1Swenshuai.xi 
1661*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF1_CONFIG1),
1662*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF1_CONFIG1)) & ~TSO_CHANNEL0_IF1_CONFIG1_PKT_HEADER_LEN_MASK)
1663*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktHeaderLength << TSO_CHANNEL0_IF1_CONFIG1_PKT_HEADER_LEN_SHIFT)) & TSO_CHANNEL0_IF1_CONFIG1_PKT_HEADER_LEN_MASK));
1664*53ee8cc1Swenshuai.xi             break;
1665*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
1666*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF2_CONFIG1),
1667*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF2_CONFIG1)) & ~TSO_CHANNEL0_IF2_CONFIG1_PKT_INPUT_MODE_MASK)
1668*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktInputMode << TSO_CHANNEL0_IF2_CONFIG1_PKT_INPUT_MODE_SHIFT)) & TSO_CHANNEL0_IF2_CONFIG1_PKT_INPUT_MODE_MASK));
1669*53ee8cc1Swenshuai.xi 
1670*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF2_CONFIG1),
1671*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF2_CONFIG1)) & ~TSO_CHANNEL0_IF2_CONFIG1_SYNC_BYTE_MASK)
1672*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktSyncByte << TSO_CHANNEL0_IF2_CONFIG1_SYNC_BYTE_SHIFT)) & TSO_CHANNEL0_IF2_CONFIG1_SYNC_BYTE_MASK));
1673*53ee8cc1Swenshuai.xi 
1674*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF2_CONFIG1),
1675*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF2_CONFIG1)) & ~TSO_CHANNEL0_IF2_CONFIG1_PKT_HEADER_LEN_MASK)
1676*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktHeaderLength << TSO_CHANNEL0_IF2_CONFIG1_PKT_HEADER_LEN_SHIFT)) & TSO_CHANNEL0_IF2_CONFIG1_PKT_HEADER_LEN_MASK));
1677*53ee8cc1Swenshuai.xi             break;
1678*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
1679*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF3_CONFIG1),
1680*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF3_CONFIG1)) & ~TSO_CHANNEL0_IF3_CONFIG1_PKT_INPUT_MODE_MASK)
1681*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktInputMode << TSO_CHANNEL0_IF3_CONFIG1_PKT_INPUT_MODE_SHIFT)) & TSO_CHANNEL0_IF3_CONFIG1_PKT_INPUT_MODE_MASK));
1682*53ee8cc1Swenshuai.xi 
1683*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF3_CONFIG1),
1684*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF3_CONFIG1)) & ~TSO_CHANNEL0_IF3_CONFIG1_SYNC_BYTE_MASK)
1685*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktSyncByte << TSO_CHANNEL0_IF3_CONFIG1_SYNC_BYTE_SHIFT)) & TSO_CHANNEL0_IF3_CONFIG1_SYNC_BYTE_MASK));
1686*53ee8cc1Swenshuai.xi 
1687*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF3_CONFIG1),
1688*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF3_CONFIG1)) & ~TSO_CHANNEL0_IF3_CONFIG1_PKT_HEADER_LEN_MASK)
1689*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktHeaderLength << TSO_CHANNEL0_IF3_CONFIG1_PKT_HEADER_LEN_SHIFT)) & TSO_CHANNEL0_IF3_CONFIG1_PKT_HEADER_LEN_MASK));
1690*53ee8cc1Swenshuai.xi             break;
1691*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
1692*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF4_CONFIG1),
1693*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF4_CONFIG1)) & ~TSO_CHANNEL0_IF4_CONFIG1_PKT_INPUT_MODE_MASK)
1694*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktInputMode << TSO_CHANNEL0_IF4_CONFIG1_PKT_INPUT_MODE_SHIFT)) & TSO_CHANNEL0_IF4_CONFIG1_PKT_INPUT_MODE_MASK));
1695*53ee8cc1Swenshuai.xi 
1696*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF4_CONFIG1),
1697*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF4_CONFIG1)) & ~TSO_CHANNEL0_IF4_CONFIG1_SYNC_BYTE_MASK)
1698*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktSyncByte << TSO_CHANNEL0_IF4_CONFIG1_SYNC_BYTE_SHIFT)) & TSO_CHANNEL0_IF4_CONFIG1_SYNC_BYTE_MASK));
1699*53ee8cc1Swenshuai.xi 
1700*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF4_CONFIG1),
1701*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF4_CONFIG1)) & ~TSO_CHANNEL0_IF4_CONFIG1_PKT_HEADER_LEN_MASK)
1702*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktHeaderLength << TSO_CHANNEL0_IF4_CONFIG1_PKT_HEADER_LEN_SHIFT)) & TSO_CHANNEL0_IF4_CONFIG1_PKT_HEADER_LEN_MASK));
1703*53ee8cc1Swenshuai.xi             break;
1704*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
1705*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF5_CONFIG1),
1706*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF5_CONFIG1)) & ~TSO_CHANNEL0_IF5_CONFIG1_PKT_INPUT_MODE_MASK)
1707*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktInputMode << TSO_CHANNEL0_IF5_CONFIG1_PKT_INPUT_MODE_SHIFT)) & TSO_CHANNEL0_IF5_CONFIG1_PKT_INPUT_MODE_MASK));
1708*53ee8cc1Swenshuai.xi 
1709*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF5_CONFIG1),
1710*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF5_CONFIG1)) & ~TSO_CHANNEL0_IF5_CONFIG1_SYNC_BYTE_MASK)
1711*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktSyncByte << TSO_CHANNEL0_IF5_CONFIG1_SYNC_BYTE_SHIFT)) & TSO_CHANNEL0_IF5_CONFIG1_SYNC_BYTE_MASK));
1712*53ee8cc1Swenshuai.xi 
1713*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF5_CONFIG1),
1714*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF5_CONFIG1)) & ~TSO_CHANNEL0_IF5_CONFIG1_PKT_HEADER_LEN_MASK)
1715*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktHeaderLength << TSO_CHANNEL0_IF5_CONFIG1_PKT_HEADER_LEN_SHIFT)) & TSO_CHANNEL0_IF5_CONFIG1_PKT_HEADER_LEN_MASK));
1716*53ee8cc1Swenshuai.xi             break;
1717*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
1718*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF6_CONFIG1),
1719*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF6_CONFIG1)) & ~TSO_CHANNEL0_IF6_CONFIG1_PKT_INPUT_MODE_MASK)
1720*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktInputMode << TSO_CHANNEL0_IF5_CONFIG1_PKT_INPUT_MODE_SHIFT)) & TSO_CHANNEL0_IF6_CONFIG1_PKT_INPUT_MODE_MASK));
1721*53ee8cc1Swenshuai.xi 
1722*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF6_CONFIG1),
1723*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF6_CONFIG1)) & ~TSO_CHANNEL0_IF6_CONFIG1_SYNC_BYTE_MASK)
1724*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktSyncByte << TSO_CHANNEL0_IF6_CONFIG1_SYNC_BYTE_SHIFT)) & TSO_CHANNEL0_IF6_CONFIG1_SYNC_BYTE_MASK));
1725*53ee8cc1Swenshuai.xi 
1726*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TSOCtrl->CHANNEL0_IF6_CONFIG1),
1727*53ee8cc1Swenshuai.xi                           (_HAL_REG16_R(&(_TSOCtrl->CHANNEL0_IF6_CONFIG1)) & ~TSO_CHANNEL0_IF6_CONFIG1_PKT_HEADER_LEN_MASK)
1728*53ee8cc1Swenshuai.xi                          |(((MS_U16)(u8PktHeaderLength << TSO_CHANNEL0_IF6_CONFIG1_PKT_HEADER_LEN_SHIFT)) & TSO_CHANNEL0_IF6_CONFIG1_PKT_HEADER_LEN_MASK));
1729*53ee8cc1Swenshuai.xi             break;
1730*53ee8cc1Swenshuai.xi         default:
1731*53ee8cc1Swenshuai.xi             printf("Not support !!\n");
1732*53ee8cc1Swenshuai.xi             break;
1733*53ee8cc1Swenshuai.xi     }
1734*53ee8cc1Swenshuai.xi }
1735*53ee8cc1Swenshuai.xi 
1736*53ee8cc1Swenshuai.xi 
HAL_TSO_Livein_3Wire(MS_U8 u8Eng,MS_U8 u8ChIf,MS_BOOL bEnable)1737*53ee8cc1Swenshuai.xi void HAL_TSO_Livein_3Wire(MS_U8 u8Eng, MS_U8 u8ChIf, MS_BOOL bEnable)
1738*53ee8cc1Swenshuai.xi {
1739*53ee8cc1Swenshuai.xi     if(bEnable)
1740*53ee8cc1Swenshuai.xi     {
1741*53ee8cc1Swenshuai.xi         switch(u8ChIf)
1742*53ee8cc1Swenshuai.xi         {
1743*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE1:
1744*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_3_WIRE_EN_1);
1745*53ee8cc1Swenshuai.xi                 break;
1746*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE2:
1747*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_3_WIRE_EN_2);
1748*53ee8cc1Swenshuai.xi                 break;
1749*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE3:
1750*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_3_WIRE_EN_3);
1751*53ee8cc1Swenshuai.xi                 break;
1752*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE4:
1753*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_3_WIRE_EN_4);
1754*53ee8cc1Swenshuai.xi                 break;
1755*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE5:
1756*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_3_WIRE_EN_5);
1757*53ee8cc1Swenshuai.xi                 break;
1758*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE6:
1759*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_3_WIRE_EN_6);
1760*53ee8cc1Swenshuai.xi                 break;
1761*53ee8cc1Swenshuai.xi             default:
1762*53ee8cc1Swenshuai.xi                 HAL_TSO_DBGMSG(E_HAL_TSO_DBG_LEVEL_ERR, E_HAL_TSO_DBG_MODEL_ALL, printf("[PVR ERROR][%s][%d] ChIf not support !!\n",__FUNCTION__,__LINE__));
1763*53ee8cc1Swenshuai.xi                 break;
1764*53ee8cc1Swenshuai.xi         }
1765*53ee8cc1Swenshuai.xi     }
1766*53ee8cc1Swenshuai.xi     else
1767*53ee8cc1Swenshuai.xi     {
1768*53ee8cc1Swenshuai.xi         switch(u8ChIf)
1769*53ee8cc1Swenshuai.xi         {
1770*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE1:
1771*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_3_WIRE_EN_1);
1772*53ee8cc1Swenshuai.xi                 break;
1773*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE2:
1774*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_3_WIRE_EN_2);
1775*53ee8cc1Swenshuai.xi                 break;
1776*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE3:
1777*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_3_WIRE_EN_3);
1778*53ee8cc1Swenshuai.xi                 break;
1779*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE4:
1780*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_3_WIRE_EN_4);
1781*53ee8cc1Swenshuai.xi                 break;
1782*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE5:
1783*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_3_WIRE_EN_5);
1784*53ee8cc1Swenshuai.xi                 break;
1785*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE6:
1786*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_3_WIRE_EN_6);
1787*53ee8cc1Swenshuai.xi                 break;
1788*53ee8cc1Swenshuai.xi             default:
1789*53ee8cc1Swenshuai.xi                 HAL_TSO_DBGMSG(E_HAL_TSO_DBG_LEVEL_ERR, E_HAL_TSO_DBG_MODEL_ALL, printf("[PVR ERROR][%s][%d] ChIf not support !!\n",__FUNCTION__,__LINE__));
1790*53ee8cc1Swenshuai.xi                 break;
1791*53ee8cc1Swenshuai.xi         }
1792*53ee8cc1Swenshuai.xi 
1793*53ee8cc1Swenshuai.xi     }
1794*53ee8cc1Swenshuai.xi }
1795*53ee8cc1Swenshuai.xi 
HAL_TSO_TsioMode_En(MS_BOOL bEnable)1796*53ee8cc1Swenshuai.xi void HAL_TSO_TsioMode_En(MS_BOOL bEnable)
1797*53ee8cc1Swenshuai.xi {
1798*53ee8cc1Swenshuai.xi     if(bEnable)
1799*53ee8cc1Swenshuai.xi     {
1800*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_REG_TSIO_MODE);
1801*53ee8cc1Swenshuai.xi     }
1802*53ee8cc1Swenshuai.xi     else
1803*53ee8cc1Swenshuai.xi     {
1804*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_REG_TSIO_MODE);
1805*53ee8cc1Swenshuai.xi     }
1806*53ee8cc1Swenshuai.xi }
1807*53ee8cc1Swenshuai.xi 
HAL_TSO_Tsio2Opif_En(MS_BOOL bEnable)1808*53ee8cc1Swenshuai.xi void HAL_TSO_Tsio2Opif_En(MS_BOOL bEnable)
1809*53ee8cc1Swenshuai.xi {
1810*53ee8cc1Swenshuai.xi     if(bEnable)
1811*53ee8cc1Swenshuai.xi     {
1812*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_REG_TSIO2OPIF);
1813*53ee8cc1Swenshuai.xi     }
1814*53ee8cc1Swenshuai.xi     else
1815*53ee8cc1Swenshuai.xi     {
1816*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_REG_TSIO2OPIF);
1817*53ee8cc1Swenshuai.xi     }
1818*53ee8cc1Swenshuai.xi }
1819*53ee8cc1Swenshuai.xi 
HAL_TSO_SerialMode_En(MS_BOOL bEnable)1820*53ee8cc1Swenshuai.xi void HAL_TSO_SerialMode_En(MS_BOOL bEnable)
1821*53ee8cc1Swenshuai.xi {
1822*53ee8cc1Swenshuai.xi     if(bEnable)
1823*53ee8cc1Swenshuai.xi     {
1824*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSOCtrl->TSO_CONFIG1),TSO_CONFIG1_SERIAL_OUT_EN);
1825*53ee8cc1Swenshuai.xi     }
1826*53ee8cc1Swenshuai.xi     else
1827*53ee8cc1Swenshuai.xi     {
1828*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSOCtrl->TSO_CONFIG1),TSO_CONFIG1_SERIAL_OUT_EN);
1829*53ee8cc1Swenshuai.xi     }
1830*53ee8cc1Swenshuai.xi }
1831*53ee8cc1Swenshuai.xi 
HAL_TSO_SVQBuf_Set(MS_U8 u8Eng,MS_U8 u8ChIf,MS_PHY phyBufAddr,MS_U32 u32BufSize)1832*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_SVQBuf_Set(MS_U8 u8Eng, MS_U8 u8ChIf, MS_PHY phyBufAddr, MS_U32 u32BufSize)
1833*53ee8cc1Swenshuai.xi {
1834*53ee8cc1Swenshuai.xi     REG32_TSO *Base = NULL;
1835*53ee8cc1Swenshuai.xi     REG16_TSO *Size = NULL, *TX_Config = NULL;
1836*53ee8cc1Swenshuai.xi 
1837*53ee8cc1Swenshuai.xi 
1838*53ee8cc1Swenshuai.xi     switch(u8ChIf)
1839*53ee8cc1Swenshuai.xi     {
1840*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
1841*53ee8cc1Swenshuai.xi             Base = &(_TSOCtrl1->SVQ1_BASE);
1842*53ee8cc1Swenshuai.xi             Size = &(_TSOCtrl1->SVQ1_SIZE_200BYTE);
1843*53ee8cc1Swenshuai.xi             TX_Config = &(_TSOCtrl1->SVQ1_TX_CONFIG);
1844*53ee8cc1Swenshuai.xi             break;
1845*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
1846*53ee8cc1Swenshuai.xi             Base = &(_TSOCtrl1->SVQ2_BASE);
1847*53ee8cc1Swenshuai.xi             Size = &(_TSOCtrl1->SVQ2_SIZE_200BYTE);
1848*53ee8cc1Swenshuai.xi             TX_Config = &(_TSOCtrl1->SVQ2_TX_CONFIG);
1849*53ee8cc1Swenshuai.xi             break;
1850*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
1851*53ee8cc1Swenshuai.xi             Base = &(_TSOCtrl1->SVQ3_BASE);
1852*53ee8cc1Swenshuai.xi             Size = &(_TSOCtrl1->SVQ3_SIZE_200BYTE);
1853*53ee8cc1Swenshuai.xi             TX_Config = &(_TSOCtrl1->SVQ3_TX_CONFIG);
1854*53ee8cc1Swenshuai.xi             break;
1855*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
1856*53ee8cc1Swenshuai.xi             Base = &(_TSOCtrl1->SVQ4_BASE);
1857*53ee8cc1Swenshuai.xi             Size = &(_TSOCtrl1->SVQ4_SIZE_200BYTE);
1858*53ee8cc1Swenshuai.xi             TX_Config = &(_TSOCtrl1->SVQ4_TX_CONFIG);
1859*53ee8cc1Swenshuai.xi             break;
1860*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
1861*53ee8cc1Swenshuai.xi             Base = &(_TSOCtrl1->SVQ5_BASE);
1862*53ee8cc1Swenshuai.xi             Size = &(_TSOCtrl1->SVQ5_SIZE_200BYTE);
1863*53ee8cc1Swenshuai.xi             TX_Config = &(_TSOCtrl1->SVQ5_TX_CONFIG);
1864*53ee8cc1Swenshuai.xi             break;
1865*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
1866*53ee8cc1Swenshuai.xi             Base = &(_TSOCtrl1->SVQ6_BASE);
1867*53ee8cc1Swenshuai.xi             Size = &(_TSOCtrl1->SVQ6_SIZE_200BYTE);
1868*53ee8cc1Swenshuai.xi             TX_Config = &(_TSOCtrl1->SVQ6_TX_CONFIG);
1869*53ee8cc1Swenshuai.xi             break;
1870*53ee8cc1Swenshuai.xi         default:
1871*53ee8cc1Swenshuai.xi             printf("Not support !!\n");
1872*53ee8cc1Swenshuai.xi             return FALSE;
1873*53ee8cc1Swenshuai.xi     }
1874*53ee8cc1Swenshuai.xi 
1875*53ee8cc1Swenshuai.xi     _HAL_REG32_W(Base, ((phyBufAddr >> TSO_MIU_BUS) & TSO1_SVQ1_BASE_MASK));
1876*53ee8cc1Swenshuai.xi     _HAL_REG16_W(Size, ((u32BufSize / TSO_SVQ_UNIT_SIZE) & TSO1_SVQ1_SIZE_200BYTE_SVQ_SIZE_MASK));
1877*53ee8cc1Swenshuai.xi     _REG16_SET(TX_Config, TSO1_SVQ1_TX_CONFIG_TX_RESET);
1878*53ee8cc1Swenshuai.xi     _REG16_CLR(TX_Config, TSO1_SVQ1_TX_CONFIG_TX_RESET);
1879*53ee8cc1Swenshuai.xi     _REG16_SET(TX_Config, TSO1_SVQ1_TX_CONFIG_SVQ_TX_ENABLE);
1880*53ee8cc1Swenshuai.xi 
1881*53ee8cc1Swenshuai.xi     return TRUE;
1882*53ee8cc1Swenshuai.xi }
1883*53ee8cc1Swenshuai.xi 
HAL_TSO_SVQ_TX_Reset(MS_U8 u8Eng,MS_U8 u8ChIf)1884*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_SVQ_TX_Reset(MS_U8 u8Eng, MS_U8 u8ChIf)
1885*53ee8cc1Swenshuai.xi {
1886*53ee8cc1Swenshuai.xi     REG16_TSO* p16Reg = NULL;
1887*53ee8cc1Swenshuai.xi 
1888*53ee8cc1Swenshuai.xi     if(u8Eng > 0)
1889*53ee8cc1Swenshuai.xi     {
1890*53ee8cc1Swenshuai.xi         return FALSE;
1891*53ee8cc1Swenshuai.xi     }
1892*53ee8cc1Swenshuai.xi 
1893*53ee8cc1Swenshuai.xi     switch(u8ChIf)
1894*53ee8cc1Swenshuai.xi     {
1895*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
1896*53ee8cc1Swenshuai.xi             p16Reg = &(_TSOCtrl1->SVQ1_TX_CONFIG);
1897*53ee8cc1Swenshuai.xi             break;
1898*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
1899*53ee8cc1Swenshuai.xi             p16Reg = &(_TSOCtrl1->SVQ2_TX_CONFIG);
1900*53ee8cc1Swenshuai.xi             break;
1901*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
1902*53ee8cc1Swenshuai.xi             p16Reg = &(_TSOCtrl1->SVQ3_TX_CONFIG);
1903*53ee8cc1Swenshuai.xi             break;
1904*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
1905*53ee8cc1Swenshuai.xi             p16Reg = &(_TSOCtrl1->SVQ4_TX_CONFIG);
1906*53ee8cc1Swenshuai.xi             break;
1907*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
1908*53ee8cc1Swenshuai.xi             p16Reg = &(_TSOCtrl1->SVQ5_TX_CONFIG);
1909*53ee8cc1Swenshuai.xi             break;
1910*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
1911*53ee8cc1Swenshuai.xi             p16Reg = &(_TSOCtrl1->SVQ6_TX_CONFIG);
1912*53ee8cc1Swenshuai.xi             break;
1913*53ee8cc1Swenshuai.xi 	default:
1914*53ee8cc1Swenshuai.xi             printf("Not support !!\n");
1915*53ee8cc1Swenshuai.xi             return FALSE;
1916*53ee8cc1Swenshuai.xi     }
1917*53ee8cc1Swenshuai.xi 
1918*53ee8cc1Swenshuai.xi     _HAL_REG16_W(p16Reg , SET_FLAG1(_HAL_REG16_R(p16Reg), TSO1_SVQ1_TX_CONFIG_TX_RESET));
1919*53ee8cc1Swenshuai.xi     _HAL_REG16_W(p16Reg , RESET_FLAG1(_HAL_REG16_R(p16Reg), TSO1_SVQ1_TX_CONFIG_TX_RESET));
1920*53ee8cc1Swenshuai.xi     return TRUE;
1921*53ee8cc1Swenshuai.xi }
1922*53ee8cc1Swenshuai.xi 
HAL_TSO1_SVQ_Rx_Enable(MS_U16 u16CfgItem,MS_BOOL benable)1923*53ee8cc1Swenshuai.xi void HAL_TSO1_SVQ_Rx_Enable(MS_U16 u16CfgItem, MS_BOOL benable)
1924*53ee8cc1Swenshuai.xi {
1925*53ee8cc1Swenshuai.xi     MS_U16 u16data = _HAL_REG16_R(&(_TSOCtrl1->SVQ_RX_CONFIG));
1926*53ee8cc1Swenshuai.xi 
1927*53ee8cc1Swenshuai.xi     if(benable)
1928*53ee8cc1Swenshuai.xi     {
1929*53ee8cc1Swenshuai.xi         u16data |= u16CfgItem;
1930*53ee8cc1Swenshuai.xi     }
1931*53ee8cc1Swenshuai.xi     else
1932*53ee8cc1Swenshuai.xi     {
1933*53ee8cc1Swenshuai.xi         u16data &= ~u16CfgItem;
1934*53ee8cc1Swenshuai.xi     }
1935*53ee8cc1Swenshuai.xi 
1936*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl1->SVQ_RX_CONFIG), u16data);
1937*53ee8cc1Swenshuai.xi }
1938*53ee8cc1Swenshuai.xi 
HAL_TSO_Set_SVQRX_PktMode(MS_U8 u8Eng,MS_U16 u16mode)1939*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_Set_SVQRX_PktMode(MS_U8 u8Eng, MS_U16 u16mode)
1940*53ee8cc1Swenshuai.xi {
1941*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl1->SVQ_RX_CONFIG), (_HAL_REG16_R(&(_TSOCtrl1->SVQ_RX_CONFIG)) & ~TSO1_SVQ_RX_CONFIG_MODE_MASK) | u16mode);
1942*53ee8cc1Swenshuai.xi 
1943*53ee8cc1Swenshuai.xi     return TRUE;
1944*53ee8cc1Swenshuai.xi }
1945*53ee8cc1Swenshuai.xi 
HAL_TSO_Get_SVQ_Status(MS_U8 u8Eng,MS_U8 u8ChIf,MS_U16 * pu16Status)1946*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_Get_SVQ_Status(MS_U8 u8Eng, MS_U8 u8ChIf, MS_U16* pu16Status)
1947*53ee8cc1Swenshuai.xi {
1948*53ee8cc1Swenshuai.xi     MS_U32 u32data = 0;
1949*53ee8cc1Swenshuai.xi     MS_U32 u32Shift = 0;
1950*53ee8cc1Swenshuai.xi 
1951*53ee8cc1Swenshuai.xi     *pu16Status = 0;
1952*53ee8cc1Swenshuai.xi     u32data = _HAL_REG32_R(&(_TSOCtrl1->SVQ_STATUS));
1953*53ee8cc1Swenshuai.xi 
1954*53ee8cc1Swenshuai.xi     switch(u8ChIf)
1955*53ee8cc1Swenshuai.xi     {
1956*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
1957*53ee8cc1Swenshuai.xi             u32Shift = TSO_SVQ1_STS_SHIFT;
1958*53ee8cc1Swenshuai.xi             break;
1959*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
1960*53ee8cc1Swenshuai.xi             u32Shift = TSO_SVQ2_STS_SHIFT;
1961*53ee8cc1Swenshuai.xi             break;
1962*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
1963*53ee8cc1Swenshuai.xi             u32Shift = TSO_SVQ3_STS_SHIFT;
1964*53ee8cc1Swenshuai.xi             break;
1965*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
1966*53ee8cc1Swenshuai.xi             u32Shift = TSO_SVQ4_STS_SHIFT;
1967*53ee8cc1Swenshuai.xi             break;
1968*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
1969*53ee8cc1Swenshuai.xi             u32Shift = TSO_SVQ5_STS_SHIFT;
1970*53ee8cc1Swenshuai.xi             break;
1971*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
1972*53ee8cc1Swenshuai.xi             u32Shift = TSO_SVQ6_STS_SHIFT;
1973*53ee8cc1Swenshuai.xi             break;
1974*53ee8cc1Swenshuai.xi         default:
1975*53ee8cc1Swenshuai.xi             return FALSE;
1976*53ee8cc1Swenshuai.xi     }
1977*53ee8cc1Swenshuai.xi 
1978*53ee8cc1Swenshuai.xi     *pu16Status = ((MS_U16)(u32data >> u32Shift) & TSO_SVQ_STS_MASK);
1979*53ee8cc1Swenshuai.xi 
1980*53ee8cc1Swenshuai.xi     return TRUE;
1981*53ee8cc1Swenshuai.xi }
1982*53ee8cc1Swenshuai.xi 
HAL_TSO_Set_SVQRX_ArbitorMode(MS_U8 u8Eng,MS_U16 u16mode,MS_U16 * pu16SvqRxPri)1983*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_Set_SVQRX_ArbitorMode(MS_U8 u8Eng, MS_U16 u16mode, MS_U16 *pu16SvqRxPri)
1984*53ee8cc1Swenshuai.xi {
1985*53ee8cc1Swenshuai.xi     //@TODO not implement
1986*53ee8cc1Swenshuai.xi     return TRUE;
1987*53ee8cc1Swenshuai.xi }
1988*53ee8cc1Swenshuai.xi 
HAL_TSO_Set_SVQ_LocalSysTimestamp(MS_U8 u8Eng,MS_U32 u32systime)1989*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_Set_SVQ_LocalSysTimestamp(MS_U8 u8Eng, MS_U32 u32systime)
1990*53ee8cc1Swenshuai.xi {
1991*53ee8cc1Swenshuai.xi     //@TODO not implement
1992*53ee8cc1Swenshuai.xi     return TRUE;
1993*53ee8cc1Swenshuai.xi }
1994*53ee8cc1Swenshuai.xi 
HAL_TSO_LocalStreamID(MS_U8 u8Eng,MS_U8 u8ChIf,MS_U8 * pu8StrID,MS_BOOL beSet)1995*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_LocalStreamID(MS_U8 u8Eng, MS_U8 u8ChIf, MS_U8* pu8StrID, MS_BOOL beSet)
1996*53ee8cc1Swenshuai.xi {
1997*53ee8cc1Swenshuai.xi     REG16_TSO* p16Reg = NULL;
1998*53ee8cc1Swenshuai.xi 
1999*53ee8cc1Swenshuai.xi     switch(u8ChIf)
2000*53ee8cc1Swenshuai.xi     {
2001*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
2002*53ee8cc1Swenshuai.xi             p16Reg = &(_TSOCtrl1->REG_PRE_HEADER_1_CONFIG_0);
2003*53ee8cc1Swenshuai.xi             break;
2004*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
2005*53ee8cc1Swenshuai.xi             p16Reg = &(_TSOCtrl1->REG_PRE_HEADER_2_CONFIG_0);
2006*53ee8cc1Swenshuai.xi             break;
2007*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
2008*53ee8cc1Swenshuai.xi             p16Reg = &(_TSOCtrl1->REG_PRE_HEADER_3_CONFIG_0);
2009*53ee8cc1Swenshuai.xi             break;
2010*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
2011*53ee8cc1Swenshuai.xi             p16Reg = &(_TSOCtrl1->REG_PRE_HEADER_4_CONFIG_0);
2012*53ee8cc1Swenshuai.xi             break;
2013*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
2014*53ee8cc1Swenshuai.xi             p16Reg = &(_TSOCtrl1->REG_PRE_HEADER_5_CONFIG_0);
2015*53ee8cc1Swenshuai.xi             break;
2016*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
2017*53ee8cc1Swenshuai.xi             p16Reg = &(_TSOCtrl1->REG_PRE_HEADER_6_CONFIG_0);
2018*53ee8cc1Swenshuai.xi             break;
2019*53ee8cc1Swenshuai.xi         default:
2020*53ee8cc1Swenshuai.xi             return FALSE;
2021*53ee8cc1Swenshuai.xi     }
2022*53ee8cc1Swenshuai.xi 
2023*53ee8cc1Swenshuai.xi     if(beSet == TRUE)
2024*53ee8cc1Swenshuai.xi     {
2025*53ee8cc1Swenshuai.xi         _HAL_REG16_W(p16Reg , (MS_U16)(*pu8StrID) & TSO1_REG_PRE_HEADER_1_CONFIG_0_LOCAL_STREAMID_MASK);
2026*53ee8cc1Swenshuai.xi     }
2027*53ee8cc1Swenshuai.xi     else
2028*53ee8cc1Swenshuai.xi     {
2029*53ee8cc1Swenshuai.xi         *pu8StrID = (MS_U8)(_HAL_REG16_R(p16Reg) & TSO1_REG_PRE_HEADER_1_CONFIG_0_LOCAL_STREAMID_MASK);
2030*53ee8cc1Swenshuai.xi     }
2031*53ee8cc1Swenshuai.xi 
2032*53ee8cc1Swenshuai.xi     return TRUE;
2033*53ee8cc1Swenshuai.xi 
2034*53ee8cc1Swenshuai.xi }
2035*53ee8cc1Swenshuai.xi 
HAL_TSO_Flt_SetInputSrc(MS_U8 u8Eng,MS_U16 u16FltId,MS_U16 u16InputSrc)2036*53ee8cc1Swenshuai.xi void HAL_TSO_Flt_SetInputSrc(MS_U8 u8Eng, MS_U16 u16FltId, MS_U16 u16InputSrc)
2037*53ee8cc1Swenshuai.xi {
2038*53ee8cc1Swenshuai.xi     MS_U16 u16Temp = 0;
2039*53ee8cc1Swenshuai.xi 
2040*53ee8cc1Swenshuai.xi     u16Temp = _HAL_TSO_PageTableIndR(TSO_PIDFLT_ADDR(u16FltId));
2041*53ee8cc1Swenshuai.xi     u16Temp = (u16Temp & TSO_PIDFLT_PID_MASK) | ((u16InputSrc & TSO_PIDFLT_IN_MASK) << TSO_PIDFLT_IN_SHIFT);
2042*53ee8cc1Swenshuai.xi     _HAL_TSO_PageTableIndW(TSO_PIDFLT_ADDR(u16FltId), u16Temp);
2043*53ee8cc1Swenshuai.xi }
2044*53ee8cc1Swenshuai.xi 
HAL_TSO_Flt_SetSid(MS_U8 u8Eng,MS_U16 u16FltId,MS_U8 u8Sid)2045*53ee8cc1Swenshuai.xi void HAL_TSO_Flt_SetSid(MS_U8 u8Eng, MS_U16 u16FltId, MS_U8 u8Sid)
2046*53ee8cc1Swenshuai.xi {
2047*53ee8cc1Swenshuai.xi     MS_U16 u16Temp = 0;
2048*53ee8cc1Swenshuai.xi 
2049*53ee8cc1Swenshuai.xi     u16Temp = _HAL_TSO_PageTableIndR(TSO_PIDFLT_ADDR(u16FltId));
2050*53ee8cc1Swenshuai.xi     _HAL_TSO_PageTableIndW_withSid(TSO_PIDFLT_ADDR(u16FltId), u16Temp, u8Sid);
2051*53ee8cc1Swenshuai.xi }
2052*53ee8cc1Swenshuai.xi 
HAL_TSO_ReplaceFlt_SetPktPid(MS_U8 u8Eng,MS_U16 u16FltId,MS_U8 u8TsIf,MS_U16 u16OldPid,MS_U16 u16NewPid)2053*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_ReplaceFlt_SetPktPid(MS_U8 u8Eng, MS_U16 u16FltId, MS_U8 u8TsIf, MS_U16 u16OldPid, MS_U16 u16NewPid)
2054*53ee8cc1Swenshuai.xi {
2055*53ee8cc1Swenshuai.xi     //@TODO not implement
2056*53ee8cc1Swenshuai.xi     return TRUE;
2057*53ee8cc1Swenshuai.xi }
2058*53ee8cc1Swenshuai.xi 
HAL_TSO_ReplaceFlt_Enable(MS_U8 u8Eng,MS_U16 u16FltId,MS_BOOL bEnable)2059*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_ReplaceFlt_Enable(MS_U8 u8Eng, MS_U16 u16FltId, MS_BOOL bEnable)
2060*53ee8cc1Swenshuai.xi {
2061*53ee8cc1Swenshuai.xi     //@TODO not implement
2062*53ee8cc1Swenshuai.xi     return TRUE;
2063*53ee8cc1Swenshuai.xi }
2064*53ee8cc1Swenshuai.xi 
HAL_TSO_SaveRegs(void)2065*53ee8cc1Swenshuai.xi void HAL_TSO_SaveRegs(void)
2066*53ee8cc1Swenshuai.xi {
2067*53ee8cc1Swenshuai.xi     //@TODO not implement
2068*53ee8cc1Swenshuai.xi }
2069*53ee8cc1Swenshuai.xi 
HAL_TSO_RestoreRegs(void)2070*53ee8cc1Swenshuai.xi void HAL_TSO_RestoreRegs(void)
2071*53ee8cc1Swenshuai.xi {
2072*53ee8cc1Swenshuai.xi     //@TODO not implement
2073*53ee8cc1Swenshuai.xi }
2074*53ee8cc1Swenshuai.xi 
2075*53ee8cc1Swenshuai.xi #ifdef CONFIG_MSTAR_CLKM
HAL_TSO_PowerCtrl(MS_BOOL bOn)2076*53ee8cc1Swenshuai.xi void HAL_TSO_PowerCtrl(MS_BOOL bOn)
2077*53ee8cc1Swenshuai.xi {
2078*53ee8cc1Swenshuai.xi     MS_S32 s32ClkHandle;
2079*53ee8cc1Swenshuai.xi 
2080*53ee8cc1Swenshuai.xi     if (bOn)
2081*53ee8cc1Swenshuai.xi     {
2082*53ee8cc1Swenshuai.xi         // Enable TSO out Clock
2083*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso_out");
2084*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TSOOUT_DIV");
2085*53ee8cc1Swenshuai.xi 
2086*53ee8cc1Swenshuai.xi         // Enable TSO in Clock
2087*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso_in");
2088*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TSOIN0_PAD0");
2089*53ee8cc1Swenshuai.xi 
2090*53ee8cc1Swenshuai.xi         // Enable TSO1 in Clock
2091*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso1_in");
2092*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TSIN1_PAD0");
2093*53ee8cc1Swenshuai.xi 
2094*53ee8cc1Swenshuai.xi         // Enable TSO2 in Clock
2095*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso2_in");
2096*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TSIN2_PAD0");
2097*53ee8cc1Swenshuai.xi 
2098*53ee8cc1Swenshuai.xi         // Enable TSO3 in Clock
2099*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso3_in");
2100*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TSIN3_PAD0");
2101*53ee8cc1Swenshuai.xi 
2102*53ee8cc1Swenshuai.xi         // Enable TSO4 in Clock
2103*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso4_in");
2104*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TSIN4_PAD0");
2105*53ee8cc1Swenshuai.xi 
2106*53ee8cc1Swenshuai.xi         // Enable TSO5 in Clock
2107*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso5_in");
2108*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TSIN5_PAD0");
2109*53ee8cc1Swenshuai.xi 
2110*53ee8cc1Swenshuai.xi         // Disable MCM
2111*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSOCtrl->TSO_CONFIG1), TSO_CONFIG1_TURN_OFF_MCM);
2112*53ee8cc1Swenshuai.xi     }
2113*53ee8cc1Swenshuai.xi     else
2114*53ee8cc1Swenshuai.xi     {
2115*53ee8cc1Swenshuai.xi         // Enable MCM
2116*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSOCtrl->TSO_CONFIG1), TSO_CONFIG1_TURN_OFF_MCM);
2117*53ee8cc1Swenshuai.xi 
2118*53ee8cc1Swenshuai.xi         // Disabel TSO out Clock
2119*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso_out");
2120*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
2121*53ee8cc1Swenshuai.xi 
2122*53ee8cc1Swenshuai.xi         // Disabel TSO in Clock
2123*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso_in");
2124*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
2125*53ee8cc1Swenshuai.xi 
2126*53ee8cc1Swenshuai.xi         // Disabel TSO1 in Clock
2127*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso1_in");
2128*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
2129*53ee8cc1Swenshuai.xi 
2130*53ee8cc1Swenshuai.xi         // Disabel TSO2 in Clock
2131*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso2_in");
2132*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
2133*53ee8cc1Swenshuai.xi 
2134*53ee8cc1Swenshuai.xi         // Disabel TSO3 in Clock
2135*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso3_in");
2136*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
2137*53ee8cc1Swenshuai.xi 
2138*53ee8cc1Swenshuai.xi         // Disabel TSO4 in Clock
2139*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso4_in");
2140*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
2141*53ee8cc1Swenshuai.xi 
2142*53ee8cc1Swenshuai.xi         // Disabel TSO5 in Clock
2143*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso5_in");
2144*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
2145*53ee8cc1Swenshuai.xi     }
2146*53ee8cc1Swenshuai.xi }
2147*53ee8cc1Swenshuai.xi #else
HAL_TSO_PowerCtrl(MS_BOOL bOn)2148*53ee8cc1Swenshuai.xi void HAL_TSO_PowerCtrl(MS_BOOL bOn)
2149*53ee8cc1Swenshuai.xi {
2150*53ee8cc1Swenshuai.xi     if (bOn)
2151*53ee8cc1Swenshuai.xi     {
2152*53ee8cc1Swenshuai.xi         TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) &= ~REG_CLKGEN0_TSO_OUT_CLK_MASK;
2153*53ee8cc1Swenshuai.xi         TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) &= ~REG_CLKGEN0_TSO_IN_MASK;
2154*53ee8cc1Swenshuai.xi         TSO_CLKGEN2_REG(REG_CLKGEN2_TSO1_IN) &= ~REG_CLKGEN0_TSO_IN_MASK;
2155*53ee8cc1Swenshuai.xi         TSO_CLKGEN2_REG(REG_CLKGEN2_TSO2_IN) &= ~REG_CLKGEN0_TSO_IN_MASK;
2156*53ee8cc1Swenshuai.xi         TSO_CLKGEN2_REG(REG_CLKGEN2_TSO3_IN) &= ~REG_CLKGEN0_TSO_IN_MASK;
2157*53ee8cc1Swenshuai.xi         TSO_CLKGEN2_REG(REG_CLKGEN2_TSO4_IN) &= ~REG_CLKGEN0_TSO_IN_MASK;
2158*53ee8cc1Swenshuai.xi         TSO_CLKGEN2_REG(REG_CLKGEN2_TSO5_IN) &= ~REG_CLKGEN0_TSO_IN_MASK;
2159*53ee8cc1Swenshuai.xi 
2160*53ee8cc1Swenshuai.xi         // Disable MCM
2161*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSOCtrl->TSO_CONFIG1), TSO_CONFIG1_TURN_OFF_MCM);
2162*53ee8cc1Swenshuai.xi     }
2163*53ee8cc1Swenshuai.xi     else
2164*53ee8cc1Swenshuai.xi     {
2165*53ee8cc1Swenshuai.xi         // Enable MCM
2166*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSOCtrl->TSO_CONFIG1), TSO_CONFIG1_TURN_OFF_MCM);
2167*53ee8cc1Swenshuai.xi 
2168*53ee8cc1Swenshuai.xi         TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) |= REG_CLKGEN0_TSO_OUT_CLK_DISABLE;
2169*53ee8cc1Swenshuai.xi         TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) |= REG_CLKGEN0_TSO_IN_DISABLE;
2170*53ee8cc1Swenshuai.xi         TSO_CLKGEN2_REG(REG_CLKGEN2_TSO1_IN) |= REG_CLKGEN0_TSO_IN_DISABLE;
2171*53ee8cc1Swenshuai.xi         TSO_CLKGEN2_REG(REG_CLKGEN2_TSO2_IN) |= REG_CLKGEN0_TSO_IN_DISABLE;
2172*53ee8cc1Swenshuai.xi         TSO_CLKGEN2_REG(REG_CLKGEN2_TSO3_IN) |= REG_CLKGEN0_TSO_IN_DISABLE;
2173*53ee8cc1Swenshuai.xi         TSO_CLKGEN2_REG(REG_CLKGEN2_TSO4_IN) |= REG_CLKGEN0_TSO_IN_DISABLE;
2174*53ee8cc1Swenshuai.xi         TSO_CLKGEN2_REG(REG_CLKGEN2_TSO5_IN) |= REG_CLKGEN0_TSO_IN_DISABLE;
2175*53ee8cc1Swenshuai.xi     }
2176*53ee8cc1Swenshuai.xi }
2177*53ee8cc1Swenshuai.xi #endif
2178*53ee8cc1Swenshuai.xi 
HAL_TSO_PcrFlt_Enable(MS_U8 u8ChIf,MS_U16 u16PID,MS_BOOL bEnable)2179*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_PcrFlt_Enable(MS_U8 u8ChIf, MS_U16 u16PID, MS_BOOL bEnable)
2180*53ee8cc1Swenshuai.xi {
2181*53ee8cc1Swenshuai.xi     if(bEnable)
2182*53ee8cc1Swenshuai.xi     {
2183*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TSOCtrl2->REG_TSO2_PIDFLT_PCR_CFG32_37[u8ChIf]), (TSO2_REG_PIDFLT_PCR_ENPCR | (TSO2_REG_PIDFLT_PCR_PID_MASK & u16PID)));
2184*53ee8cc1Swenshuai.xi     }
2185*53ee8cc1Swenshuai.xi     else
2186*53ee8cc1Swenshuai.xi     {
2187*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TSOCtrl2->REG_TSO2_PIDFLT_PCR_CFG32_37[u8ChIf]), (~TSO2_REG_PIDFLT_PCR_ENPCR | TSO2_REG_PIDFLT_PCR_PID_MASK));
2188*53ee8cc1Swenshuai.xi     }
2189*53ee8cc1Swenshuai.xi     return TRUE;
2190*53ee8cc1Swenshuai.xi }
2191*53ee8cc1Swenshuai.xi 
HAL_TSO_Pcr_Get(MS_U8 u8ChIf,MS_U32 * pu32Pcr_H,MS_U32 * pu32Pcr)2192*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_Pcr_Get(MS_U8 u8ChIf, MS_U32 *pu32Pcr_H, MS_U32 *pu32Pcr)
2193*53ee8cc1Swenshuai.xi {
2194*53ee8cc1Swenshuai.xi 
2195*53ee8cc1Swenshuai.xi     switch(u8ChIf)
2196*53ee8cc1Swenshuai.xi     {
2197*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE1:
2198*53ee8cc1Swenshuai.xi             _REG16_SET(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR1_READ);
2199*53ee8cc1Swenshuai.xi             *pu32Pcr = _HAL_REG32_R(&(_TSOCtrl2->REG_TSO2_PCR1_LOW32_CFG38_39));
2200*53ee8cc1Swenshuai.xi             *pu32Pcr_H = _HAL_REG16_R(&(_TSOCtrl2->REG_TSO2_PCR1_VAILD_CFG3A)) & 0x1;
2201*53ee8cc1Swenshuai.xi             _REG16_CLR(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR1_READ);
2202*53ee8cc1Swenshuai.xi             break;
2203*53ee8cc1Swenshuai.xi 
2204*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE2:
2205*53ee8cc1Swenshuai.xi             _REG16_SET(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR2_READ);
2206*53ee8cc1Swenshuai.xi             *pu32Pcr = _HAL_REG32_R(&(_TSOCtrl2->REG_TSO2_PCR2_LOW32_CFG3B_3C));
2207*53ee8cc1Swenshuai.xi             *pu32Pcr_H = _HAL_REG16_R(&(_TSOCtrl2->REG_TSO2_PCR2_VAILD_CFG3D)) & 0x1;
2208*53ee8cc1Swenshuai.xi             _REG16_CLR(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR2_READ);
2209*53ee8cc1Swenshuai.xi             break;
2210*53ee8cc1Swenshuai.xi 
2211*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE3:
2212*53ee8cc1Swenshuai.xi             _REG16_SET(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR3_READ);
2213*53ee8cc1Swenshuai.xi             *pu32Pcr = _HAL_REG32_R(&(_TSOCtrl2->REG_TSO2_PCR3_LOW32_CFG3E_3F));
2214*53ee8cc1Swenshuai.xi             *pu32Pcr_H = _HAL_REG16_R(&(_TSOCtrl2->REG_TSO2_PCR3_VAILD_CFG40)) & 0x1;
2215*53ee8cc1Swenshuai.xi             _REG16_CLR(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR3_READ);
2216*53ee8cc1Swenshuai.xi             break;
2217*53ee8cc1Swenshuai.xi 
2218*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE4:
2219*53ee8cc1Swenshuai.xi             _REG16_SET(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR4_READ);
2220*53ee8cc1Swenshuai.xi             *pu32Pcr = _HAL_REG32_R(&(_TSOCtrl2->REG_TSO2_PCR4_LOW32_CFG41_42));
2221*53ee8cc1Swenshuai.xi             *pu32Pcr_H = _HAL_REG16_R(&(_TSOCtrl2->REG_TSO2_PCR4_VAILD_CFG43)) & 0x1;
2222*53ee8cc1Swenshuai.xi             _REG16_CLR(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR4_READ);
2223*53ee8cc1Swenshuai.xi             break;
2224*53ee8cc1Swenshuai.xi 
2225*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE5:
2226*53ee8cc1Swenshuai.xi             _REG16_SET(&(_TSOCtrl2->REG_TSO2_PCR2_CFG31),TSO2_REG_PCR5_READ);
2227*53ee8cc1Swenshuai.xi             *pu32Pcr = _HAL_REG32_R(&(_TSOCtrl2->REG_TSO2_PCR5_LOW32_CFG44_45));
2228*53ee8cc1Swenshuai.xi             *pu32Pcr_H = _HAL_REG16_R(&(_TSOCtrl2->REG_TSO2_PCR5_VAILD_CFG46)) & 0x1;
2229*53ee8cc1Swenshuai.xi             _REG16_CLR(&(_TSOCtrl2->REG_TSO2_PCR2_CFG31),TSO2_REG_PCR5_READ);
2230*53ee8cc1Swenshuai.xi             break;
2231*53ee8cc1Swenshuai.xi 
2232*53ee8cc1Swenshuai.xi         case HAL_TSO_TSIF_LIVE6:
2233*53ee8cc1Swenshuai.xi             _REG16_SET(&(_TSOCtrl2->REG_TSO2_PCR2_CFG31),TSO2_REG_PCR6_READ);
2234*53ee8cc1Swenshuai.xi             *pu32Pcr = _HAL_REG32_R(&(_TSOCtrl2->REG_TSO2_PCR6_LOW32_CFG47_48));
2235*53ee8cc1Swenshuai.xi             *pu32Pcr_H = _HAL_REG16_R(&(_TSOCtrl2->REG_TSO2_PCR6_VAILD_CFG49)) & 0x1;
2236*53ee8cc1Swenshuai.xi             _REG16_CLR(&(_TSOCtrl2->REG_TSO2_PCR2_CFG31),TSO2_REG_PCR6_READ);
2237*53ee8cc1Swenshuai.xi             break;
2238*53ee8cc1Swenshuai.xi 
2239*53ee8cc1Swenshuai.xi         default:
2240*53ee8cc1Swenshuai.xi             return FALSE;
2241*53ee8cc1Swenshuai.xi     }
2242*53ee8cc1Swenshuai.xi     return TRUE;
2243*53ee8cc1Swenshuai.xi }
2244*53ee8cc1Swenshuai.xi 
2245*53ee8cc1Swenshuai.xi 
HAL_TSO_PcrClr(MS_U8 u8ChIf,MS_BOOL bEnable)2246*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_PcrClr(MS_U8 u8ChIf, MS_BOOL bEnable)
2247*53ee8cc1Swenshuai.xi {
2248*53ee8cc1Swenshuai.xi     if(bEnable == TRUE)
2249*53ee8cc1Swenshuai.xi     {
2250*53ee8cc1Swenshuai.xi         switch(u8ChIf)
2251*53ee8cc1Swenshuai.xi         {
2252*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE1:
2253*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR1_RESET);
2254*53ee8cc1Swenshuai.xi                 break;
2255*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE2:
2256*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR2_RESET);
2257*53ee8cc1Swenshuai.xi                 break;
2258*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE3:
2259*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR3_RESET);
2260*53ee8cc1Swenshuai.xi                 break;
2261*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE4:
2262*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR4_RESET);
2263*53ee8cc1Swenshuai.xi                 break;
2264*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE5:
2265*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR5_RESET);
2266*53ee8cc1Swenshuai.xi                 break;
2267*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE6:
2268*53ee8cc1Swenshuai.xi                 _REG16_CLR(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR6_RESET);
2269*53ee8cc1Swenshuai.xi                 break;
2270*53ee8cc1Swenshuai.xi             default:
2271*53ee8cc1Swenshuai.xi                 return FALSE;
2272*53ee8cc1Swenshuai.xi         }
2273*53ee8cc1Swenshuai.xi         return TRUE;
2274*53ee8cc1Swenshuai.xi     }
2275*53ee8cc1Swenshuai.xi     else
2276*53ee8cc1Swenshuai.xi     {
2277*53ee8cc1Swenshuai.xi         switch(u8ChIf)
2278*53ee8cc1Swenshuai.xi         {
2279*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE1:
2280*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR1_RESET);
2281*53ee8cc1Swenshuai.xi                 break;
2282*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE2:
2283*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR2_RESET);
2284*53ee8cc1Swenshuai.xi                 break;
2285*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE3:
2286*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR3_RESET);
2287*53ee8cc1Swenshuai.xi                 break;
2288*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE4:
2289*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR4_RESET);
2290*53ee8cc1Swenshuai.xi                 break;
2291*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE5:
2292*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR5_RESET);
2293*53ee8cc1Swenshuai.xi                 break;
2294*53ee8cc1Swenshuai.xi             case HAL_TSO_TSIF_LIVE6:
2295*53ee8cc1Swenshuai.xi                 _REG16_SET(&(_TSOCtrl2->REG_TSO2_PCR_CFG30),TSO2_REG_PCR6_RESET);
2296*53ee8cc1Swenshuai.xi                 break;
2297*53ee8cc1Swenshuai.xi             default:
2298*53ee8cc1Swenshuai.xi                 return FALSE;
2299*53ee8cc1Swenshuai.xi         }
2300*53ee8cc1Swenshuai.xi         return TRUE;
2301*53ee8cc1Swenshuai.xi 
2302*53ee8cc1Swenshuai.xi     }
2303*53ee8cc1Swenshuai.xi 
2304*53ee8cc1Swenshuai.xi }
2305*53ee8cc1Swenshuai.xi 
2306*53ee8cc1Swenshuai.xi 
HAL_TSO_Set_SvqBypass(MS_BOOL bEnable)2307*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSO_Set_SvqBypass(MS_BOOL bEnable)
2308*53ee8cc1Swenshuai.xi {
2309*53ee8cc1Swenshuai.xi     if(bEnable)
2310*53ee8cc1Swenshuai.xi     {
2311*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_BYPASS_SVQ_FOR_CH1);
2312*53ee8cc1Swenshuai.xi     }
2313*53ee8cc1Swenshuai.xi     else
2314*53ee8cc1Swenshuai.xi     {
2315*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSOCtrl->TSO_CONFIG5),TSO_CONFIG5_BYPASS_SVQ_FOR_CH1);
2316*53ee8cc1Swenshuai.xi     }
2317*53ee8cc1Swenshuai.xi 
2318*53ee8cc1Swenshuai.xi     return TRUE;
2319*53ee8cc1Swenshuai.xi }
2320