1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 // Software and any modification/derivatives thereof.
18 // No right, ownership, or interest to MStar Software and any
19 // modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 // supplied together with third party`s software and the use of MStar
23 // Software may require additional licenses from third parties.
24 // Therefore, you hereby agree it is your sole responsibility to separately
25 // obtain any and all third party right and license necessary for your use of
26 // such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 // MStar`s confidential information and you agree to keep MStar`s
30 // confidential information in strictest confidence and not disclose to any
31 // third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 // kind. Any warranties are hereby expressly disclaimed by MStar, including
35 // without limitation, any warranties of merchantability, non-infringement of
36 // intellectual property rights, fitness for a particular purpose, error free
37 // and in conformity with any international standard. You agree to waive any
38 // claim against MStar for any loss, damage, cost or expense that you may
39 // incur related to your use of MStar Software.
40 // In no event shall MStar be liable for any direct, indirect, incidental or
41 // consequential damages, including without limitation, lost of profit or
42 // revenues, lost or damage of data, and unauthorized system use.
43 // You agree that this Section 4 shall still apply without being affected
44 // even if MStar Software has been modified by MStar in accordance with your
45 // request or instruction for your use, except otherwise agreed by both
46 // parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 // services in relation with MStar Software to you for your use of
50 // MStar Software in conjunction with your or your customer`s product
51 // ("Services").
52 // You understand and agree that, except otherwise agreed by both parties in
53 // writing, Services are provided on an "AS IS" basis and the warranty
54 // disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 // or otherwise:
58 // (a) conferring any license or right to use MStar name, trademark, service
59 // mark, symbol or any other identification;
60 // (b) obligating MStar or any of its affiliates to furnish any person,
61 // including without limitation, you and your customers, any assistance
62 // of any kind whatsoever, or any information; or
63 // (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 // of Taiwan, R.O.C., excluding its conflict of law rules.
67 // Any and all dispute arising out hereof or related hereto shall be finally
68 // settled by arbitration referred to the Chinese Arbitration Association,
69 // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 // Rules of the Association by three (3) arbitrators appointed in accordance
71 // with the said Rules.
72 // The place of arbitration shall be in Taipei, Taiwan and the language shall
73 // be English.
74 // The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 ////////////////////////////////////////////////////////////////////////////////
79 //
80 // Copyright (c) 2011-2013 MStar Semiconductor, Inc.
81 // All rights reserved.
82 //
83 // Unless otherwise stipulated in writing, any and all information contained
84 // herein regardless in any format shall remain the sole proprietary of
85 // MStar Semiconductor Inc. and be kept in strict confidence
86 // ("MStar Confidential Information") by the recipient.
87 // Any unauthorized act including without limitation unauthorized disclosure,
88 // copying, use, reproduction, sale, distribution, modification, disassembling,
89 // reverse engineering and compiling of the contents of MStar Confidential
90 // Information is unlawful and strictly prohibited. MStar hereby reserves the
91 // rights to any and all damages, losses, costs and expenses resulting therefrom.
92 //
93 ////////////////////////////////////////////////////////////////////////////////
94
95 ////////////////////////////////////////////////////////////////////////////////////////////////////
96 // file halTSO.c
97 // @brief TS I/O HAL
98 // @author MStar Semiconductor,Inc.
99 ////////////////////////////////////////////////////////////////////////////////////////////////////
100 #include "halTSO.h"
101 #include "halCHIP.h"
102
103 #ifdef CONFIG_MSTAR_CLKM
104 #include "drvCLKM.h"
105 #endif //CONFIG_MSTAR_CLKM
106
107
108 //--------------------------------------------------------------------------------------------------
109 // Driver Compiler Option
110 //--------------------------------------------------------------------------------------------------
111 #define TSP_HAL_REG_SAFE_MODE 1UL // Register protection access between 1 task and 1+ ISR
112
113 //-------------------------------------------------------------------------------------------------
114 // Local Structures
115 //-------------------------------------------------------------------------------------------------
116 typedef struct _HalTSO_OutPad
117 {
118 MS_U16 u16OutPad[TSO_ENGINE_NUM];
119 MS_U16 u16TSCfgOld[TSO_ENGINE_NUM];
120 MS_U16 u16TSOutModeOld[TSO_ENGINE_NUM];
121 } HalTSO_OutPad;
122
123 //--------------------------------------------------------------------------------------------------
124 // TSP Hardware Abstraction Layer
125 //--------------------------------------------------------------------------------------------------
126 static REG_Ctrl_TSO* _TSOCtrl = NULL;
127 static REG_Ctrl_TSO1* _TSOCtrl1 = NULL;
128 static REG_Ctrl_TSO2* _TSOCtrl2 = NULL;
129
130
131 static MS_VIRT _virtTSORegBase = 0;
132 static MS_PHY _phyTSOFiMiuOffset[TSO_FILE_IF_NUM] = {[0 ... (TSO_FILE_IF_NUM-1)] = 0UL};
133 static MS_PHY _phyTSOVQiMiuOffset = 0UL;
134 static MS_PHY _phyPVRBufMiuOffset = 0UL;
135
136 static HalTSO_OutPad _stOutPadCtrl;
137
138 #ifdef MSOS_TYPE_LINUX_KERNEL
139 static MS_U16 _u16TSORegArray[2][128];
140 static MS_U16 _u16TSOTopReg[3][8];
141 #endif
142
143
144 //[NOTE] Jerry
145 // Some register has write order, for example, writing PCR_L will disable PCR counter
146 // writing PCR_M trigger nothing, writing PCR_H will enable PCR counter
147 #define _HAL_REG32_W(reg, value) do { (reg)->L = ((value) & 0x0000FFFFUL); \
148 (reg)->H = ((value) >> 16UL); } while(0)
149
150 #define _HAL_REG16_W(reg, value) (reg)->data = (value);
151
152 #define TSO0_REG(addr) (*((volatile MS_U16*)(_virtTSORegBase + REG_CTRL_BASE_TSO + ((addr)<<2UL))))
153 #define TSO1_REG(addr) (*((volatile MS_U16*)(_virtTSORegBase + REG_CTRL_BASE_TSO1 + ((addr)<<2UL))))
154
155 //--------------------------------------------------------------------------------------------------
156 // Macro of bit operations
157 //--------------------------------------------------------------------------------------------------
158 #define HAS_FLAG(flag, bit) ((flag) & (bit))
159 #define SET_FLAG(flag, bit) ((flag)|= (bit))
160 #define RESET_FLAG(flag, bit) ((flag)&= (~(bit)))
161 #define SET_FLAG1(flag, bit) ((flag)| (bit))
162 #define RESET_FLAG1(flag, bit) ((flag)& (~(bit)))
163
164 #define TSO_CLKGEN0_REG(addr) (*((volatile MS_U16*)(_virtTSORegBase + 0x1600UL + ((addr)<<2UL))))
165 #define REG_CLKGEN0_TSO_IN 0x27UL
166 #define REG_CLKGEN0_TSO_TRACE_MASK 0x000FUL
167 #define REG_CLKGEN0_TSO_TRACE_DISABLE 0x0001UL
168 #define REG_CLKGEN0_TSO_TRACE_INVERT 0x0002UL
169 #define REG_CLKGEN0_TSO_TRACE_216M 0x0000UL
170 #define REG_CLKGEN0_TSO_IN_MASK 0x1F00UL
171 #define REG_CLKGEN0_TSO_IN_SHIFT 8UL
172 #define REG_CLKGEN0_TSO_IN_DISABLE 0x0100UL
173 #define REG_CLKGEN0_TSO_IN_INVERT 0x0200UL
174 // bit[12:8] -> 0: disable clock
175 // 1: invert clock
176 // bit [4:2] -> 000: Sel TS0 Clk
177 // 001: Sel TS1 Clk
178 // 010: Sel TS2 Clk
179 // 011: Sel TS3 Clk
180 // 100: Sel TS4 Clk
181 // 110: Sel Dmd Clk
182 #define REG_CLKGEN0_TSO_OUT_PHASE 0x7CUL
183 #define REG_CLKGEN0_TSO_OUT_DIVNUM_MASK 0x001FUL
184 #define REG_CLKGEN0_TSO_OUT_PH_TUN_NUM_MASK 0x1F00UL
185 #define REG_CLKGEN0_TSO_OUT_PH_TUN_NUM_SHIFT 8UL
186
187 #define REG_CLKGEN0_TSO_OUT_CLK 0x7DUL
188 #define REG_CLKGEN0_TSO_OUT_DIV_SEL_MASK 0x0001UL
189 // bit[0] -> 0: CLK_DMPLLDIV2
190 // 1: CLK_DMPLLDIV3
191 #define REG_CLKGEN0_TSO_OUT_INV 0x0002UL
192 #define REG_CLKGEN0_TSO_OUT_PHASE_TUN_ENABLE 0x0004UL
193 #define REG_CLKGEN1_TSO_OUT_PRE_CLK_MASK 0x0070UL
194 #define REG_CLKGEN1_TSO_OUT_PRE_CLK_SHIFT 4UL
195 // bit[6:4] -> 000:CLK_TS0_IN
196 // 001:CLK_TS1_IN
197 // 010:CLK_TS2_IN
198 // 011:CLK_TS3_IN
199 // 100:CLK_TS4_IN
200 #define REG_CLKGEN0_TSO_OUT_CLK_MASK 0x1F00UL
201 #define REG_CLKGEN0_TSO_OUT_CLK_DISABLE 0x0100UL
202 #define REG_CLKGEN0_TSO_OUT_CLK_INVERT 0x0200UL
203 // bit[12:8] -> 0: disable clock
204 // 1: invert clock
205 // bit [4:2] -> 000: TSO_OUT_DIV2 (clock/2N+1)
206 // 001: 62MHz
207 // 010: 54MHz
208 // 011: clk_p_tso_out (live in)
209 // 100: clk_p_tso_out_div8 (live in)
210 // 101: 27MHz
211 // 111: clk_demod_ts_p
212 #define REG_CLKGEN0_RESERVED0 0x7EUL
213 #define REG_CLKGEN0_RES0_CLKTSO_TOPAD_INV 0x8000UL
214 #define TSO_CLKGEN2_REG(addr) (*((volatile MS_U16*)(_virtTSORegBase + 0x1400UL + ((addr)<<2UL))))
215 #define REG_CLKGEN2_TSO1_IN 0x10UL
216 #define REG_CLKGEN2_TSO1_IN_MASK 0x001FUL
217 #define REG_CLKGEN2_TSO1_IN_SHIFT 0UL
218 #define REG_CLKGEN2_TSO1_IN_DISABLE 0x0001UL
219 #define REG_CLKGEN2_TSO1_IN_INVERT 0x0002UL
220 // bit[4:0] -> 0: disable clock
221 // 1: invert clock
222 // bit [4:2] -> 000: Sel TS0 Clk
223 // 001: Sel TS1 Clk
224 // 010: Sel TS2 Clk
225 // 011: Sel TS3 Clk
226 // 100: Sel TS4 Clk
227 // 111: Sel Dmd Clk
228 #define REG_CLKGEN2_TSO2_IN_MASK 0x1F00UL
229 #define REG_CLKGEN2_TSO2_IN_SHIFT 8UL
230 #define REG_CLKGEN2_TSO2_IN_DISABLE 0x0001UL
231 #define REG_CLKGEN2_TSO2_IN_INVERT 0x0002UL
232 // bit[12:8] -> 0: disable clock
233 // 1: invert clock
234 // bit [12:10] -> 000: Sel TS0 Clk
235 // 001: Sel TS1 Clk
236 // 010: Sel TS2 Clk
237 // 011: Sel TS3 Clk
238 // 100: Sel TS4 Clk
239 // 111: Sel Dmd Clk
240 #define REG_CLKGEN2_MMT_IN 0x19UL
241 #define REG_CLKGEN2_MMT_IN_MASK 0x1F00UL
242 #define REG_CLKGEN2_MMT_IN_SHIFT 8UL
243 #define REG_CLKGEN2_MMT_IN_DISABLE 0x0001UL
244 #define REG_CLKGEN2_MMT_IN_INVERT 0x0002UL
245 // bit[4:0] -> 0: disable clock
246 // 1: invert clock
247 // bit [4:2] -> 000: Sel TS0 Clk
248 // 001: Sel TS1 Clk
249 // 010: Sel TS2 Clk
250 // 011: Sel TS3 Clk
251 // 100: Sel TS4 Clk
252 // 111: Sel Dmd Clk
253
254
255 #define TSP_TOP_REG(addr) (*((volatile MS_U16*)(_virtTSORegBase + 0x3c00UL + ((addr)<<2UL))))
256 #define REG_TOP_TSO_EVD 0x10UL
257 #define REG_TOP_TSO_EVDMODE_MASK 0x0600UL
258 #define REG_TOP_TS3_OUT_MODE_TSO 0x0400UL
259
260 #define REG_TOP_TS4_CFG 0x40UL
261 #define REG_TOP_TS_OUT_MODE_MASK 0x0070UL
262 #define REG_TOP_TS1_OUT_MODE_TSO 0x0030UL
263 #define REG_TOP_TS1_OUT_MODE_Ser2Par 0x0040UL
264 #define REG_TOP_TS1_OUT_MODE_Ser2Par1 0x0050UL
265 #define REG_TOP_TS4_CFG_MASK 0x0E00UL
266 #define REG_TOP_TS4_CFG_SHIFT 9UL
267 #define REG_TOP_TS4_CFG_SERIAL_IN 0x0400UL
268 #define REG_TOP_TS4_CFG_PARALLEL_IN 0x0800UL
269
270 #define REG_TOP_TS_CONFIG 0x57UL
271 #define REG_TOP_TS0_CONFIG_MASK 0x0700UL
272 #define REG_TOP_TS0_CONFIG_PARALLEL_IN 0x0100UL
273 #define REG_TOP_TS0_CONFIG_SERIAL_IN 0x0200UL
274 #define REG_TOP_TS0_CONFIG_MSPI_MODE 0x0300UL
275 #define REG_TOP_TS0_CONFIG_3WIRE_MODE 0x0400UL
276 #define REG_TOP_TS1_CONFIG_MASK 0x3800UL
277 #define REG_TOP_TS1_CONFIG_PARALLEL_IN 0x0800UL
278 #define REG_TOP_TS1_CONFIG_PARALLEL_OUT 0x1000UL //out from demod
279 #define REG_TOP_TS1_CONFIG_SERIAL_IN 0x1800UL
280 #define REG_TOP_TS1_CONFIG_3WIRE_MODE 0x2000UL
281 #define REG_TOP_TS1_CONFIG_MSPI_MODE 0x2800UL
282 #define REG_TOP_TS2_CONFIG 0x5AUL
283 #define REG_TOP_TS2_CONFIG_MASK 0x7000UL
284 #define REG_TOP_TS2_CONFIG_PARALLEL_IN 0x2000UL
285 #define REG_TOP_TS2_CONFIG_SERIAL_IN 0x1000UL
286
287 #define REG_TOP_TS3_CONFIG 0x67UL
288 #define REG_TOP_TS3_CONFIG_MASK 0xF000UL
289 #define REG_TOP_TS3_CONFIG_SERIAL_IN 0x1000UL
290 #define REG_TOP_TS3_CONFIG_PARALLEL_IN 0x2000UL
291 #define REG_TOP_TS3_CONFIG_MSPI 0x3000UL
292 #define REG_TOP_TS3_CONFIG_PAROUT_DMD 0x5000UL
293 #define REG_TOP_TS3_CONFIG_PAROUT_Ser2Par 0x7000UL
294 #define REG_TOP_TS3_CONFIG_PAROUT_Ser2Par1 0x8000UL
295
296 #define TSP_TSP5_REG(addr) (*((volatile MS_U16*)(_virtTSORegBase + 0xc7600 + ((addr)<<2))))
297 #define REG_TSP5_TSOIN_MUX 0x13UL
298 #define REG_TSP5_TSOIN_MUX_MASK 0x000FUL
299 #define REG_TSP5_TSOIN0_MUX_SHIFT 0UL
300 #define REG_TSP5_TSOIN1_MUX_SHIFT 4UL
301 #define REG_TSP5_TSOIN2_MUX_SHIFT 8UL
302 // bit[14:12] -> 000: PAD_TS0
303 // 001: PAD_TS1
304 // 010: PAD_TS2
305 // 011: PAD_TS3
306 // 100: PAD_TS4
307 // 111: DEMOD
308 #define REG_TSP5_TSOOUT_MUX 0x15UL
309 #define REG_TSP5_TSOOUT_MUX_MASK 0x000FUL
310 #define REG_TSP5_TSOOUT_MUX_TSO 0x0000UL
311 #define REG_TSP5_TSOOUT_MUX_S2P0 0x0001UL
312 #define REG_TSP5_MMT_MUX 0x16
313 #define REG_TSP5_MMT_MUX_SHIFT 0UL
314 #define REG_TSP5_MMT_MUX_MASK 0x000FUL
315
316 #define TSP_TS_SAMPLE_REG(addr) (*((volatile MS_U16*)(_virtTSORegBase + 0x21600 + ((addr)<<2))))
317 #define REG_TSO_OUT_CLK_SEL 0x30UL
318 #define REG_TSO_OUT_CLK_SEL_MASK 1UL
319 #define REG_TSO_OUT_TSO 0x0000UL
320 #define REG_TSO_OUT_S2P 0x0001UL
321
322 //--------------------------------------------------------------------------------------------------
323 // Implementation
324 //--------------------------------------------------------------------------------------------------
_HAL_REG32_R(REG32 * reg)325 static MS_U32 _HAL_REG32_R(REG32 *reg)
326 {
327 MS_U32 value = 0UL;
328 value = (reg)->H << 16UL;
329 value |= (reg)->L;
330 return value;
331 }
332
_HAL_REG16_R(REG16 * reg)333 static MS_U16 _HAL_REG16_R(REG16 *reg)
334 {
335 MS_U16 value = 0;
336 value = (reg)->data;
337 return value;
338 }
339
_HAL_TSO_MIU_OFFSET(MS_PHY Phyaddr)340 static MS_PHY _HAL_TSO_MIU_OFFSET(MS_PHY Phyaddr)
341 {
342 #ifdef HAL_MIU2_BASE
343 if(Phyaddr >= (MS_PHY)HAL_MIU2_BASE)
344 return ((MS_PHY)HAL_MIU2_BASE & 0xFFFFFFFFUL);
345 else
346 #endif //HAL_MIU2_BASE
347 #ifdef HAL_MIU1_BASE
348 if(Phyaddr >= (MS_PHY)HAL_MIU1_BASE)
349 return ((MS_PHY)HAL_MIU1_BASE & 0xFFFFFFFFUL);
350 else
351 #endif //HAL_MIU1_BASE
352 return ((MS_PHY)HAL_MIU0_BASE & 0xFFFFFFFFUL);
353 }
354
HAL_TSO_SetBank(MS_VIRT virtBankAddr)355 void HAL_TSO_SetBank(MS_VIRT virtBankAddr)
356 {
357 _virtTSORegBase = virtBankAddr;
358 _TSOCtrl = (REG_Ctrl_TSO*)(_virtTSORegBase+ REG_CTRL_BASE_TSO);
359 _TSOCtrl1 = (REG_Ctrl_TSO1*)(_virtTSORegBase+ REG_CTRL_BASE_TSO1);
360 _TSOCtrl2 = (REG_Ctrl_TSO2*)(_virtTSORegBase+ REG_CTRL_BASE_TSO2);
361
362 }
363
HAL_TSO_REG32_IndR(REG32 * reg)364 static MS_U32 HAL_TSO_REG32_IndR(REG32 *reg)
365 {
366 MS_U32 u32tmp;
367 MS_VIRT virtReg = (MS_VIRT)reg;
368
369 u32tmp = ((MS_U32)virtReg)>> 1UL;
370
371 _HAL_REG32_W(&(_TSOCtrl->TSO_INDR_ADDR), u32tmp); // set address
372 _HAL_REG16_W(&(_TSOCtrl->TSO_INDR_CTRL) , SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl->TSO_INDR_CTRL)), TSO_INDIR_R_ENABLE)); // set command
373
374 u32tmp = ((MS_U32)_HAL_REG16_R(&(_TSOCtrl->TSO_INDR_RDATA))) & 0xFFFFUL; // get read value
375
376 return u32tmp;
377 }
378
HAL_TSO_REG32_IndW(REG32 * reg,MS_U32 value)379 static void HAL_TSO_REG32_IndW(REG32 *reg, MS_U32 value)
380 {
381 MS_VIRT virtReg = (MS_VIRT)reg;
382 MS_U32 u32tmp = 0;
383
384 u32tmp = ((MS_U32)virtReg)>> 1;
385
386 _HAL_REG32_W(&(_TSOCtrl->TSO_INDR_ADDR), u32tmp); // set address
387 _HAL_REG32_W(&(_TSOCtrl->TSO_INDR_WDATA), value); // set write value
388 _HAL_REG16_W(&(_TSOCtrl->TSO_INDR_CTRL) , SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl->TSO_INDR_CTRL)), TSO_INDIR_W_ENABLE)); // set command
389 }
390
391 //
392 // General API
393 //
HAL_TSO_Init(void)394 void HAL_TSO_Init(void)
395 {
396 MS_U8 u8ii = 0;
397
398 //select MIU0, and 128bit MIU bus
399 #if 0
400 TSO_MIUDIG0_REG(REG_MIUDIG_MIU_SEL1) &= ~REG_MIUDIG_MIU_SEL1_TSO_SEL_MASK; //select miu0
401 TSO_MIUDIG1_REG(REG_MIUDIG_MIU_SEL1) &= ~REG_MIUDIG_MIU_SEL1_TSO_SEL_MASK; //select miu0
402 TSP_TOP_REG(REG_TOP_MIU_GP1_i64) =
403 (TSP_TOP_REG(REG_TOP_MIU_GP1_i64) & ~REG_TOP_MIU_GP1_i64_TSO_MASK) | REG_TOP_MIU_GP1_i64_TSO_128BIT_CLIENT;
404 #endif
405
406 for(u8ii = 0; u8ii < (MS_U8)TSO_ENGINE_NUM; u8ii++)
407 {
408 _stOutPadCtrl.u16OutPad[u8ii] = 0;
409 _stOutPadCtrl.u16TSCfgOld[u8ii] = 0;
410 _stOutPadCtrl.u16TSOutModeOld[u8ii] = 0;
411 }
412
413 //reset
414 _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ1), TSO_SW_RSTZ1_ALL);
415 _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ), TSO_SW_RSTZ_ALL);
416 _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ1), 0);
417 _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ), TSO_SW_RSTZ_DISABLE);
418
419 //reset MMT
420 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_21), SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_21)), TSO_MMT_SW_RST));
421 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_21), RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_21)), TSO_MMT_SW_RST));
422
423 //default local stream id
424 _HAL_REG16_W(&(_TSOCtrl1->TSO_PRE_HEADER1_CFG0), 0x47);
425 _HAL_REG16_W(&(_TSOCtrl1->TSO_PRE_HEADER5_CFG0), 0x47);
426 _HAL_REG16_W(&(_TSOCtrl1->TSO_PRE_HEADER6_CFG0), 0x47);
427
428 _HAL_REG16_W(&(_TSOCtrl1->TSO_SVQ_RX_CFG), (_HAL_REG16_R(&(_TSOCtrl1->TSO_SVQ_RX_CFG)) & ~TSO_SVQ_RX_CFG_MODE_MASK) | TSO_SVQ_RX_CFG_MODE_CIPL);
429
430 // Set SVQ FIFO timeout value
431 _HAL_REG16_W(&(_TSOCtrl1->TSO_SVQ1_TX_CFG), (_HAL_REG16_R(&(_TSOCtrl1->TSO_SVQ1_TX_CFG)) & ~TSO_SVQ_TX_CFG_FORCE_FIRE_CNT_MASK) | (0x0C << TSO_SVQ_TX_CFG_FORCE_FIRE_CNT_SHIFT));
432 _HAL_REG16_W(&(_TSOCtrl1->TSO_SVQ5_TX_CFG), (_HAL_REG16_R(&(_TSOCtrl1->TSO_SVQ5_TX_CFG)) & ~TSO_SVQ_TX_CFG_FORCE_FIRE_CNT_MASK) | (0x0C << TSO_SVQ_TX_CFG_FORCE_FIRE_CNT_SHIFT));
433 _HAL_REG16_W(&(_TSOCtrl1->TSO_SVQ6_TX_CFG), (_HAL_REG16_R(&(_TSOCtrl1->TSO_SVQ6_TX_CFG)) & ~TSO_SVQ_TX_CFG_FORCE_FIRE_CNT_MASK) | (0x0C << TSO_SVQ_TX_CFG_FORCE_FIRE_CNT_SHIFT));
434
435 //enable eco bit
436 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG4), SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl->TSO_CFG4)), TSO_TIMESTAMP_RING_BACK | TSO_LPCR_RING_BACK | TSO_INIT_STAMP_RSTART));
437
438 }
439
HAL_TSO_Reset_All(MS_U8 u8Eng)440 void HAL_TSO_Reset_All(MS_U8 u8Eng)
441 {
442 _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ1), TSO_SW_RSTZ1_ALL);
443 _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ), TSO_SW_RSTZ_ALL);
444
445 _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ1), 0);
446 _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ), TSO_SW_RSTZ_DISABLE);
447 }
448
HAL_TSO_Reset(MS_U8 u8Eng)449 void HAL_TSO_Reset(MS_U8 u8Eng)
450 {
451 _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ), _HAL_REG16_R(&(_TSOCtrl->SW_RSTZ)) & ~TSO_SW_RSTZ_DISABLE);
452 _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ), _HAL_REG16_R(&(_TSOCtrl->SW_RSTZ)) | TSO_SW_RSTZ_DISABLE);
453 }
454
HAL_TSO_Reset_SubItem(MS_U8 u8Eng,MS_U16 u16RstItem)455 void HAL_TSO_Reset_SubItem(MS_U8 u8Eng, MS_U16 u16RstItem)
456 {
457 _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ), (_HAL_REG16_R(&(_TSOCtrl->SW_RSTZ)) | u16RstItem));
458 _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ), (_HAL_REG16_R(&(_TSOCtrl->SW_RSTZ)) & ~u16RstItem));
459 }
460
HAL_TSO_HWInt_Enable(MS_U8 u8Eng,MS_BOOL bEnable,MS_U16 u16init)461 void HAL_TSO_HWInt_Enable(MS_U8 u8Eng, MS_BOOL bEnable, MS_U16 u16init)
462 {
463 MS_U16 u16data = _HAL_REG16_R(&(_TSOCtrl->TSO_Interrupt));
464
465 if(bEnable)
466 {
467 _HAL_REG16_W(&(_TSOCtrl->TSO_Interrupt), (u16data | u16init));
468 }
469 else
470 {
471 _HAL_REG16_W(&(_TSOCtrl->TSO_Interrupt), (u16data & ~u16init));
472 }
473 }
474
HAL_TSO_HWInt_Clear(MS_U8 u8Eng,MS_U16 u16Int)475 void HAL_TSO_HWInt_Clear(MS_U8 u8Eng, MS_U16 u16Int)
476 {
477 _HAL_REG16_W(&(_TSOCtrl->TSO_Interrupt), (_HAL_REG16_R(&(_TSOCtrl->TSO_Interrupt)) & ~u16Int));
478 }
479
HAL_TSO_HWInt_Status(MS_U8 u8Eng)480 MS_U16 HAL_TSO_HWInt_Status(MS_U8 u8Eng)
481 {
482 return (_HAL_REG16_R(&(_TSOCtrl->TSO_Interrupt)) & TSO_INT_STATUS_MASK);
483 }
484
485 #ifdef CONFIG_MSTAR_CLKM
HAL_TSO_PowerCtrl(MS_BOOL bOn)486 void HAL_TSO_PowerCtrl(MS_BOOL bOn)
487 {
488 MS_S32 s32ClkHandle;
489
490 if (bOn)
491 {
492 // Enable TSO Trace Clock
493 s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso_trace");
494 Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TSO_TRACE_NORMAL");
495
496 // Enable TSO out Clock
497 s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso_out");
498 Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TSOOUT_DIV");
499
500 // Enable TSO in Clock
501 s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso_in");
502 Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TSOIN0_PAD0");
503
504 // Enable TSO1 in Clock
505 s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso1_in");
506 Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TSIN1_PAD0");
507
508 // Enable TSO2 in Clock
509 s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso2_in");
510 Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TSIN2_PAD0");
511 }
512 else
513 {
514 // Disabel TSO Trace Clock
515 s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso_trace");
516 Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
517
518 // Disabel TSO out Clock
519 s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso_out");
520 Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
521
522 // Disabel TSO in Clock
523 s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso_in");
524 Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
525
526 // Disabel TSO1 in Clock
527 s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso1_in");
528 Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
529
530 // Disabel TSO2 in Clock
531 s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tso2_in");
532 Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
533 }
534 }
535 #else
HAL_TSO_PowerCtrl(MS_BOOL bOn)536 void HAL_TSO_PowerCtrl(MS_BOOL bOn)
537 {
538 if (bOn)
539 {
540 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) &= ~REG_CLKGEN0_TSO_TRACE_MASK;
541 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) &= ~REG_CLKGEN0_TSO_OUT_CLK_MASK;
542 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) &= ~REG_CLKGEN0_TSO_IN_MASK;
543 TSO_CLKGEN2_REG(REG_CLKGEN2_TSO1_IN) &= ~REG_CLKGEN2_TSO1_IN_MASK;
544 TSO_CLKGEN2_REG(REG_CLKGEN2_TSO1_IN) &= ~REG_CLKGEN2_TSO2_IN_MASK;
545 }
546 else
547 {
548 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) |= REG_CLKGEN0_TSO_OUT_CLK_DISABLE;
549 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) |= REG_CLKGEN0_TSO_TRACE_DISABLE;
550 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) |= REG_CLKGEN0_TSO_IN_DISABLE;
551 TSO_CLKGEN2_REG(REG_CLKGEN2_TSO1_IN) |= REG_CLKGEN2_TSO1_IN_DISABLE;
552 TSO_CLKGEN2_REG(REG_CLKGEN2_TSO1_IN) |= REG_CLKGEN2_TSO2_IN_DISABLE;
553 }
554 }
555 #endif
556
HAL_TSO_Recover_TSOutMode(MS_U8 u8Eng)557 void HAL_TSO_Recover_TSOutMode(MS_U8 u8Eng)
558 {
559 if(_stOutPadCtrl.u16OutPad[u8Eng] != HAL_TSOOUT_MUX_TS1)
560 return;
561
562 TSP_TOP_REG(REG_TOP_TS_CONFIG) = (TSP_TOP_REG(REG_TOP_TS_CONFIG) & ~REG_TOP_TS1_CONFIG_MASK) | _stOutPadCtrl.u16TSCfgOld[u8Eng];
563 TSP_TOP_REG(REG_TOP_TS4_CFG) = (TSP_TOP_REG(REG_TOP_TS4_CFG) & ~REG_TOP_TS_OUT_MODE_MASK) | _stOutPadCtrl.u16TSOutModeOld[u8Eng];
564 }
565
HAL_TSO_OutPad(MS_U8 u8Eng,MS_U16 * pu16OutPad,MS_BOOL bSet)566 MS_BOOL HAL_TSO_OutPad(MS_U8 u8Eng, MS_U16* pu16OutPad, MS_BOOL bSet)
567 {
568 if(bSet)
569 {
570 if(*pu16OutPad != HAL_TSOOUT_MUX_TS1)
571 return FALSE;
572
573 _stOutPadCtrl.u16OutPad[u8Eng] = *pu16OutPad;
574 _stOutPadCtrl.u16TSCfgOld[u8Eng] = TSP_TOP_REG(REG_TOP_TS_CONFIG) & REG_TOP_TS1_CONFIG_MASK;
575 _stOutPadCtrl.u16TSOutModeOld[u8Eng] = TSP_TOP_REG(REG_TOP_TS4_CFG) & REG_TOP_TS_OUT_MODE_MASK;
576 TSP_TOP_REG(REG_TOP_TS_CONFIG) = TSP_TOP_REG(REG_TOP_TS_CONFIG) & ~REG_TOP_TS1_CONFIG_MASK;
577 TSP_TOP_REG(REG_TOP_TS4_CFG) = (TSP_TOP_REG(REG_TOP_TS4_CFG) & ~REG_TOP_TS_OUT_MODE_MASK) | REG_TOP_TS1_OUT_MODE_TSO;
578 }
579 else
580 {
581 if(((TSP_TOP_REG(REG_TOP_TS4_CFG) & REG_TOP_TS_OUT_MODE_MASK) == REG_TOP_TS1_OUT_MODE_TSO)
582 && ((TSP_TOP_REG(REG_TOP_TS_CONFIG) & REG_TOP_TS1_CONFIG_MASK) == 0))
583 {
584 *pu16OutPad = HAL_TSOOUT_MUX_TS1;
585 }
586 else
587 {
588 *pu16OutPad = HAL_TSOOUT_MUX_NONE;
589 }
590 }
591 return TRUE;
592 }
593
HAL_TSO_SelPad(MS_U8 u8Eng,MS_U8 u8TsIf,MS_U16 u16InPadSel,MS_BOOL bParallel)594 MS_BOOL HAL_TSO_SelPad(MS_U8 u8Eng, MS_U8 u8TsIf, MS_U16 u16InPadSel, MS_BOOL bParallel)
595 {
596 MS_U16 u16Reg, u16RegMask, u16RegShift;
597 MS_U16 u16MuxReg, u16MuxRegMask;
598 MS_U16 u16data = 0;
599
600 //printf("[%s][%d] u8Eng %d, u8TsIf %d, u16InPadSel %d, bParallel %d\n", __FUNCTION__, __LINE__, (int)u8Eng, (int)u8TsIf, (int)u16InPadSel, (int)bParallel);
601
602 // Set pad mux
603 switch(u8TsIf)
604 {
605 case HAL_TSO_TSIF_LIVE1:
606 u16MuxReg = REG_TSP5_TSOIN_MUX;
607 u16MuxRegMask = REG_TSP5_TSOIN_MUX_MASK;
608 u16RegShift = REG_TSP5_TSOIN0_MUX_SHIFT;
609 break;
610 case HAL_TSO_TSIF_LIVE2:
611 u16MuxReg = REG_TSP5_TSOIN_MUX;
612 u16MuxRegMask = REG_TSP5_TSOIN_MUX_MASK;
613 u16RegShift = REG_TSP5_TSOIN1_MUX_SHIFT;
614 break;
615 case HAL_TSO_TSIF_LIVE3:
616 u16MuxReg = REG_TSP5_TSOIN_MUX;
617 u16MuxRegMask = REG_TSP5_TSOIN_MUX_MASK;
618 u16RegShift = REG_TSP5_TSOIN2_MUX_SHIFT;
619 break;
620 case HAL_TSO_TSIF_LIVE_MMT:
621 u16MuxReg = REG_TSP5_MMT_MUX;
622 u16MuxRegMask = REG_TSP5_MMT_MUX_MASK;
623 u16RegShift = REG_TSP5_MMT_MUX_SHIFT;
624 break;
625 default:
626 return FALSE;
627 }
628
629 //set pad configure
630 switch(u16InPadSel)
631 {
632 case HAL_TSOIN_MUX_TS0:
633 u16Reg = REG_TOP_TS_CONFIG;
634 u16RegMask = REG_TOP_TS0_CONFIG_MASK;
635 if(bParallel)
636 {
637 u16data = REG_TOP_TS0_CONFIG_PARALLEL_IN;
638 }
639 else
640 {
641 u16data = REG_TOP_TS0_CONFIG_SERIAL_IN;
642 }
643 break;
644 case HAL_TSOIN_MUX_TS1:
645 u16Reg = REG_TOP_TS_CONFIG;
646 u16RegMask = REG_TOP_TS1_CONFIG_MASK;
647 if(bParallel)
648 {
649 u16data = REG_TOP_TS1_CONFIG_PARALLEL_IN;
650 }
651 else
652 {
653 u16data = REG_TOP_TS1_CONFIG_SERIAL_IN;
654 }
655 break;
656 case HAL_TSOIN_MUX_TS2:
657 u16Reg = REG_TOP_TS2_CONFIG;
658 u16RegMask = REG_TOP_TS2_CONFIG_MASK;
659 if(bParallel)
660 {
661 u16data = REG_TOP_TS2_CONFIG_PARALLEL_IN;
662 }
663 else
664 {
665 u16data = REG_TOP_TS2_CONFIG_SERIAL_IN;
666 }
667 break;
668 case HAL_TSOIN_MUX_TS3:
669 u16Reg = REG_TOP_TS3_CONFIG;
670 u16RegMask = REG_TOP_TS3_CONFIG_MASK;
671 if(bParallel)
672 {
673 u16data = REG_TOP_TS3_CONFIG_PARALLEL_IN;
674 }
675 else
676 {
677 u16data = REG_TOP_TS3_CONFIG_SERIAL_IN;
678 }
679 break;
680 case HAL_TSOIN_MUX_TS4:
681 u16Reg = REG_TOP_TS4_CFG;
682 u16RegMask = REG_TOP_TS4_CFG_MASK;
683 if(bParallel)
684 {
685 return FALSE;
686 }
687 else
688 {
689 u16data = REG_TOP_TS4_CFG_SERIAL_IN;
690 }
691 break;
692 case HAL_TSOIN_MUX_TSDEMOD0:
693 TSP_TSP5_REG(u16MuxReg) = (TSP_TSP5_REG(u16MuxReg) & ~(u16MuxRegMask << u16RegShift)) | (u16InPadSel << u16RegShift);
694 return TRUE;
695
696 default:
697 return FALSE;
698 }
699
700 TSP_TOP_REG(u16Reg) = (TSP_TOP_REG(u16Reg) & ~u16RegMask) | u16data;
701
702 TSP_TSP5_REG(u16MuxReg) = (TSP_TSP5_REG(u16MuxReg) & ~(u16MuxRegMask << u16RegShift)) | (u16InPadSel << u16RegShift);
703
704 return TRUE;
705 }
706
HAL_TSO_Set_InClk(MS_U8 u8Eng,MS_U8 u8TsIf,MS_U16 u16ClkSel,MS_BOOL bClkInvert,MS_BOOL bEnable)707 MS_BOOL HAL_TSO_Set_InClk(MS_U8 u8Eng, MS_U8 u8TsIf, MS_U16 u16ClkSel, MS_BOOL bClkInvert, MS_BOOL bEnable)
708 {
709 MS_U16 u16Reg, u16RegMask, u16RegShift;
710 MS_U16 u16value = 0;
711
712 //printf("[%s] u8TsIf %x, u16ClkSel %d\n", __FUNCTION__, (int)u8TsIf, u16ClkSel);
713
714 //set clock
715 switch(u8TsIf)
716 {
717 case HAL_TSO_TSIF_LIVE1:
718 u16Reg = REG_CLKGEN0_TSO_IN;
719 u16RegMask = REG_CLKGEN0_TSO_IN_MASK;
720 u16RegShift = REG_CLKGEN0_TSO_IN_SHIFT;
721 u16value = TSO_CLKGEN0_REG(u16Reg) & ~u16RegMask;
722 break;
723 case HAL_TSO_TSIF_LIVE2:
724 u16Reg = REG_CLKGEN2_TSO1_IN;
725 u16RegMask = REG_CLKGEN2_TSO1_IN_MASK;
726 u16RegShift = REG_CLKGEN2_TSO1_IN_SHIFT;
727 u16value = TSO_CLKGEN2_REG(u16Reg) & ~u16RegMask;
728 break;
729 case HAL_TSO_TSIF_LIVE3:
730 u16Reg = REG_CLKGEN2_TSO1_IN;
731 u16RegMask = REG_CLKGEN2_TSO2_IN_MASK;
732 u16RegShift = REG_CLKGEN2_TSO2_IN_SHIFT;
733 u16value = TSO_CLKGEN2_REG(u16Reg) & ~u16RegMask;
734 break;
735 case HAL_TSO_TSIF_LIVE_MMT:
736 u16Reg = REG_CLKGEN2_MMT_IN;
737 u16RegMask = REG_CLKGEN2_MMT_IN_MASK;
738 u16RegShift = REG_CLKGEN2_MMT_IN_SHIFT;
739 u16value = TSO_CLKGEN2_REG(u16Reg) & ~u16RegMask;
740 break;
741
742 default:
743 return FALSE;
744 }
745
746 //printf("[%s] u16RegMask %x, u16RegShift %d\n", __FUNCTION__, u16RegMask, u16RegShift);
747
748 if(!bEnable)
749 {
750 u16value |= ((REG_CLKGEN2_TSO1_IN_DISABLE << u16RegShift) & 0xFFFFUL);
751 }
752 else
753 {
754 if(u16ClkSel > TSO_CLKIN_TS4)
755 {
756 return FALSE;
757 }
758
759 u16value |= (u16ClkSel << u16RegShift);
760 if(bClkInvert)
761 {
762 u16value |= ((REG_CLKGEN2_TSO1_IN_INVERT << u16RegShift) & 0xFFFFUL);
763 }
764 }
765
766 switch(u8TsIf)
767 {
768 case HAL_TSO_TSIF_LIVE1:
769 TSO_CLKGEN0_REG(u16Reg) = u16value;
770 break;
771 case HAL_TSO_TSIF_LIVE2:
772 case HAL_TSO_TSIF_LIVE3:
773 case HAL_TSO_TSIF_LIVE_MMT:
774 TSO_CLKGEN2_REG(u16Reg) = u16value;
775 break;
776 default:
777 return FALSE;
778 }
779
780 return TRUE;
781 }
782
HAL_TSO_GetInputTSIF_Status(MS_U8 u8Eng,MS_U8 u8TsIf,MS_U16 * pu16Pad,MS_BOOL * pbClkInvert,MS_BOOL * pbExtSync,MS_BOOL * pbParl)783 MS_BOOL HAL_TSO_GetInputTSIF_Status(MS_U8 u8Eng, MS_U8 u8TsIf, MS_U16* pu16Pad, MS_BOOL* pbClkInvert, MS_BOOL* pbExtSync, MS_BOOL* pbParl)
784 {
785 MS_U16 u16Reg, u16RegMask, u16RegShift;
786 MS_U16 u16data = 0;
787 REG16* reg16 = 0;
788
789 // Set pad mux
790 switch(u8TsIf)
791 {
792 case HAL_TSO_TSIF_LIVE1:
793 u16Reg = REG_TSP5_TSOIN_MUX;
794 u16RegMask = REG_TSP5_TSOIN_MUX_MASK;
795 u16RegShift = REG_TSP5_TSOIN0_MUX_SHIFT;
796 break;
797 case HAL_TSO_TSIF_LIVE2:
798 u16Reg = REG_TSP5_TSOIN_MUX;
799 u16RegMask = REG_TSP5_TSOIN_MUX_MASK;
800 u16RegShift = REG_TSP5_TSOIN1_MUX_SHIFT;
801 break;
802 case HAL_TSO_TSIF_LIVE3:
803 u16Reg = REG_TSP5_TSOIN_MUX;
804 u16RegMask = REG_TSP5_TSOIN_MUX_MASK;
805 u16RegShift = REG_TSP5_TSOIN2_MUX_SHIFT;
806 break;
807 case HAL_TSO_TSIF_LIVE_MMT:
808 u16Reg = REG_TSP5_MMT_MUX;
809 u16RegMask = REG_TSP5_MMT_MUX_MASK;
810 u16RegShift = REG_TSP5_MMT_MUX_SHIFT;
811 break;
812
813 default:
814 return FALSE;
815 }
816 *pu16Pad = (TSP_TSP5_REG(u16Reg) & (u16RegMask << u16RegShift)) >> u16RegShift;
817
818 switch(u8TsIf)
819 {
820 case HAL_TSO_TSIF_LIVE1:
821 u16data = (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) & REG_CLKGEN0_TSO_IN_MASK) >> REG_CLKGEN0_TSO_IN_SHIFT;
822 reg16 = &(_TSOCtrl->TSO_CH0_IF1_CFG2);
823 break;
824 case HAL_TSO_TSIF_LIVE2:
825 u16data = (TSO_CLKGEN2_REG(REG_CLKGEN2_TSO1_IN) & REG_CLKGEN2_TSO1_IN_MASK) >> REG_CLKGEN2_TSO1_IN_SHIFT;
826 reg16 = &(_TSOCtrl->TSO_CH0_IF5_CFG2);
827 break;
828 case HAL_TSO_TSIF_LIVE3:
829 u16data = (TSO_CLKGEN2_REG(REG_CLKGEN2_TSO1_IN) & REG_CLKGEN2_TSO2_IN_MASK) >> REG_CLKGEN2_TSO2_IN_SHIFT;
830 reg16 = &(_TSOCtrl->TSO_CH0_IF6_CFG2);
831 break;
832 case HAL_TSO_TSIF_LIVE_MMT:
833 u16data = (TSO_CLKGEN2_REG(REG_CLKGEN2_MMT_IN) & REG_CLKGEN2_MMT_IN_MASK) >> REG_CLKGEN2_MMT_IN_SHIFT;
834 *pbExtSync = _HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_0D)) & TSO_MMT_EXTSYNC;
835 *pbParl = _HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_0D)) & TSO_MMT_PARL;
836 *pbClkInvert = ((u16data & REG_CLKGEN2_TSO1_IN_INVERT) == REG_CLKGEN2_TSO1_IN_INVERT);
837 return TRUE;
838 default:
839 return FALSE;
840 }
841
842 *pbExtSync = ((_HAL_REG16_R(reg16) & TSO_CHCFG_EXT_SYNC_SEL) == TSO_CHCFG_EXT_SYNC_SEL);
843 *pbParl = ((_HAL_REG16_R(reg16) & TSO_CHCFG_P_SEL) == TSO_CHCFG_P_SEL);
844 *pbClkInvert = ((u16data & REG_CLKGEN2_TSO1_IN_INVERT) == REG_CLKGEN2_TSO1_IN_INVERT);
845
846 return TRUE;
847
848 }
849
HAL_TSO_OutClk_DefSelect(MS_U8 u8Eng,MS_U16 u16PadSel,MS_BOOL bSet,HalTSOOutClk * pstOutClkSet)850 MS_BOOL HAL_TSO_OutClk_DefSelect(MS_U8 u8Eng, MS_U16 u16PadSel, MS_BOOL bSet, HalTSOOutClk* pstOutClkSet)
851 {
852 if((u16PadSel == 0xFFFF) || (bSet == TRUE))
853 {
854 return FALSE; //not support yet
855 }
856
857 switch(u16PadSel)
858 {
859 case HAL_TSOIN_MUX_TS0:
860 pstOutClkSet->u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT;
861 pstOutClkSet->u16PreTsoOutClk = HAL_PRE_TSO_OUT_SEL_TS0IN;
862 break;
863 case HAL_TSOIN_MUX_TS1:
864 pstOutClkSet->u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT;
865 pstOutClkSet->u16PreTsoOutClk = HAL_PRE_TSO_OUT_SEL_TS1IN;
866 break;
867 case HAL_TSOIN_MUX_TS2:
868 pstOutClkSet->u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT;
869 pstOutClkSet->u16PreTsoOutClk = HAL_PRE_TSO_OUT_SEL_TS2IN;
870 break;
871 case HAL_TSOIN_MUX_TS3:
872 pstOutClkSet->u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT;
873 pstOutClkSet->u16PreTsoOutClk = HAL_PRE_TSO_OUT_SEL_TS3IN;
874 break;
875 case HAL_TSOIN_MUX_TS4:
876 pstOutClkSet->u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT;
877 pstOutClkSet->u16PreTsoOutClk = HAL_PRE_TSO_OUT_SEL_TS4IN;
878 break;
879 case HAL_TSOIN_MUX_TSDEMOD0:
880 pstOutClkSet->u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_FROM_DEMOD;
881 break;
882 case HAL_TSOIN_MUX_MEM:
883 case HAL_TSOIN_MUX_MEM1:
884 pstOutClkSet->u16OutClk = HAL_TSO_OUT_SEL_TSO_OUT_DIV2N;
885 pstOutClkSet->u16OutDivSrc = HAL_TSO_OUT_DIV_SEL_172M_2N;
886 pstOutClkSet->u16OutDivNum = 0x0F; //default: 172.8/2(15+1) = 5.4M
887 break;
888 default:
889 return FALSE;
890 }
891
892 return TRUE;
893 }
894
895 // default: dmplldiv5 / 2 (11+1) = 7.2 MHz
896 // default: dmplldiv_3 / 2 (17+1) = 8 MHz
HAL_TSO_OutputClk(MS_U8 u8Eng,HalTSOOutClk * pstOutClkSet,MS_BOOL bSet)897 void HAL_TSO_OutputClk(MS_U8 u8Eng, HalTSOOutClk* pstOutClkSet, MS_BOOL bSet)
898 {
899 if(bSet == TRUE)
900 {
901 if(pstOutClkSet->bEnable == FALSE)
902 {
903 HAL_TSO_OutClk(u8Eng, &(pstOutClkSet->u16OutClk), &(pstOutClkSet->bClkInvert), &(pstOutClkSet->bEnable), TRUE);
904 return;
905 }
906
907 switch(pstOutClkSet->u16OutClk)
908 {
909 case HAL_TSO_OUT_SEL_TSO_OUT_DIV2N:
910 HAL_TSO_TSOOutDiv(u8Eng, &(pstOutClkSet->u16OutDivSrc), &(pstOutClkSet->u16OutDivNum), TRUE);
911 break;
912 case HAL_TSO_OUT_SEL_TSO_OUT_62MHz:
913 case HAL_TSO_OUT_SEL_TSO_OUT_54MHz:
914 case HAL_TSO_OUT_SEL_TSO_OUT_27MHz:
915 case HAL_TSO_OUT_SEL_TSO_OUT_FROM_DEMOD:
916 break;
917 case HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT:
918 case HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT_DIV8:
919 HAL_TSO_PreTsoOutClk(u8Eng, &(pstOutClkSet->u16PreTsoOutClk), TRUE);
920 break;
921 default:
922 return;
923 }
924
925 HAL_TSO_Set_TSOOut_Phase_Tune(u8Eng, 0, FALSE); //default -> no phase tuning
926 HAL_TSO_OutClk(u8Eng, &(pstOutClkSet->u16OutClk), &(pstOutClkSet->bClkInvert), &(pstOutClkSet->bEnable), TRUE); //alyays need TSO out clock
927 }
928 else
929 {
930 HAL_TSO_OutClk(u8Eng, &(pstOutClkSet->u16OutClk), &(pstOutClkSet->bClkInvert), &(pstOutClkSet->bEnable), FALSE);
931 if(pstOutClkSet->u16OutClk == HAL_TSO_OUT_SEL_TSO_OUT_DIV2N)
932 {
933 HAL_TSO_TSOOutDiv(u8Eng, &(pstOutClkSet->u16OutDivSrc), &(pstOutClkSet->u16OutDivNum), FALSE);
934 }
935 else if((pstOutClkSet->u16OutClk == HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT) || (pstOutClkSet->u16OutClk == HAL_TSO_OUT_SEL_TSO_OUT_PTSOOUT_DIV8))
936 {
937 HAL_TSO_PreTsoOutClk(u8Eng, &(pstOutClkSet->u16PreTsoOutClk), FALSE);
938 }
939 }
940 }
941
HAL_TSO_Set_TSOOut_Phase_Tune(MS_U8 u8Eng,MS_U16 u16ClkOutPhase,MS_BOOL bPhaseEnable)942 MS_BOOL HAL_TSO_Set_TSOOut_Phase_Tune(MS_U8 u8Eng, MS_U16 u16ClkOutPhase, MS_BOOL bPhaseEnable)
943 {
944 MS_U16 u16value = 0;
945
946 if(!bPhaseEnable)
947 {
948 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) &= ~REG_CLKGEN0_TSO_OUT_PHASE_TUN_ENABLE;
949 }
950 else
951 {
952 u16value = (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE) & ~REG_CLKGEN0_TSO_OUT_PH_TUN_NUM_MASK)
953 | (u16ClkOutPhase << REG_CLKGEN0_TSO_OUT_PH_TUN_NUM_SHIFT);
954
955 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE) = u16value;
956 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) |= REG_CLKGEN0_TSO_OUT_PHASE_TUN_ENABLE;
957 }
958
959 return TRUE;
960 }
961
HAL_TSO_PreTsoOutClk(MS_U8 u8Eng,MS_U16 * pu16PreTsoOutSel,MS_BOOL bSet)962 MS_BOOL HAL_TSO_PreTsoOutClk(MS_U8 u8Eng, MS_U16* pu16PreTsoOutSel, MS_BOOL bSet)
963 {
964 if(bSet == TRUE)
965 {
966 if(*pu16PreTsoOutSel > HAL_PRE_TSO_OUT_SEL_TS4IN)
967 {
968 return FALSE;
969 }
970
971 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) =
972 (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) & ~REG_CLKGEN1_TSO_OUT_PRE_CLK_MASK) | (*pu16PreTsoOutSel << REG_CLKGEN1_TSO_OUT_PRE_CLK_SHIFT);
973 }
974 else
975 {
976 *pu16PreTsoOutSel = (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) & REG_CLKGEN1_TSO_OUT_PRE_CLK_MASK) >> REG_CLKGEN1_TSO_OUT_PRE_CLK_SHIFT;
977 }
978
979 return TRUE;
980 }
981
HAL_TSO_TSOOutDiv(MS_U8 u8Eng,MS_U16 * pu16ClkOutDivSrcSel,MS_U16 * pu16ClkOutDivNum,MS_BOOL bSet)982 MS_BOOL HAL_TSO_TSOOutDiv(MS_U8 u8Eng, MS_U16* pu16ClkOutDivSrcSel, MS_U16 *pu16ClkOutDivNum, MS_BOOL bSet)
983 {
984 //clock source for clock divide
985 if(bSet == TRUE)
986 {
987 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) =
988 (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) & ~REG_CLKGEN0_TSO_TRACE_MASK) | REG_CLKGEN0_TSO_TRACE_216M;
989
990 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) =
991 (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) & ~REG_CLKGEN0_TSO_OUT_DIV_SEL_MASK) | (*pu16ClkOutDivSrcSel);
992
993 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE) =
994 (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE) & ~REG_CLKGEN0_TSO_OUT_DIVNUM_MASK) | (*pu16ClkOutDivNum);
995 }
996 else
997 {
998 *pu16ClkOutDivSrcSel = TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) & REG_CLKGEN0_TSO_OUT_DIV_SEL_MASK;
999 *pu16ClkOutDivNum = TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE) & REG_CLKGEN0_TSO_OUT_DIVNUM_MASK;
1000 }
1001
1002 return TRUE;
1003 }
1004
HAL_TSO_OutClk(MS_U8 u8Eng,MS_U16 * pu16ClkOutSel,MS_BOOL * pbClkInvert,MS_BOOL * pbEnable,MS_BOOL bSet)1005 MS_BOOL HAL_TSO_OutClk(MS_U8 u8Eng, MS_U16* pu16ClkOutSel, MS_BOOL* pbClkInvert, MS_BOOL* pbEnable, MS_BOOL bSet)
1006 {
1007 MS_U16 u16Clk = TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) & ~REG_CLKGEN0_TSO_OUT_CLK_MASK;
1008
1009 if(bSet == TRUE)
1010 {
1011 if(*pbEnable == FALSE)
1012 {
1013 u16Clk |= REG_CLKGEN0_TSO_OUT_CLK_DISABLE;
1014 }
1015 else
1016 {
1017 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) =
1018 (TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) & ~REG_CLKGEN0_TSO_TRACE_MASK) | REG_CLKGEN0_TSO_TRACE_216M;
1019
1020 u16Clk |= (*pu16ClkOutSel);
1021
1022 if(*pbClkInvert)
1023 u16Clk |= REG_CLKGEN0_TSO_OUT_CLK_INVERT;
1024
1025 TSO_CLKGEN0_REG(REG_CLKGEN0_RESERVED0) |= REG_CLKGEN0_RES0_CLKTSO_TOPAD_INV;
1026 }
1027 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) = u16Clk;
1028 }
1029 else
1030 {
1031 *pbEnable = ((u16Clk & REG_CLKGEN0_TSO_OUT_CLK_DISABLE) == 0);
1032 *pbClkInvert = ((u16Clk & REG_CLKGEN0_TSO_OUT_CLK_INVERT) == REG_CLKGEN0_TSO_OUT_CLK_INVERT);
1033 *pu16ClkOutSel = u16Clk;
1034 }
1035
1036 return TRUE;
1037 }
1038
1039 // ------------------------------------------------------
1040 // APIS
1041 //-------------------------------------------------------
HAL_TSO_Flt_SetPid(MS_U8 u8Eng,MS_U16 u16FltId,MS_U16 u16PID)1042 void HAL_TSO_Flt_SetPid(MS_U8 u8Eng, MS_U16 u16FltId, MS_U16 u16PID)
1043 {
1044 MS_U32 u32value;
1045 REG_PidFlt* pidReg = &(_TsoPid[u8Eng].Flt[u16FltId]);
1046
1047 u32value = (HAL_TSO_REG32_IndR((REG32 *)pidReg) & ~TSO_PIDFLT_PID_MASK) | (((MS_U32)u16PID << TSO_PIDFLT_PID_SHFT) & TSO_PIDFLT_PID_MASK);
1048 HAL_TSO_REG32_IndW((REG32 *)pidReg, u32value);
1049 }
1050
HAL_TSO_Flt_SetInputSrc(MS_U8 u8Eng,MS_U16 u16FltId,MS_U16 u16InputSrc)1051 void HAL_TSO_Flt_SetInputSrc(MS_U8 u8Eng, MS_U16 u16FltId, MS_U16 u16InputSrc)
1052 {
1053 MS_U32 u32value;
1054 REG_PidFlt* pidReg = &(_TsoPid[u8Eng].Flt[u16FltId]);
1055
1056 u32value = (HAL_TSO_REG32_IndR((REG32 *)pidReg) & ~TSO_PIDFLT_IN_MASK) | (u16InputSrc << TSO_PIDFLT_IN_SHIFT);
1057 HAL_TSO_REG32_IndW((REG32 *)pidReg, u32value);
1058 }
1059
HAL_TSO_ReplaceFlt_SetPktPid(MS_U8 u8Eng,MS_U16 u16FltId,MS_U8 u8TsIf,MS_U16 u16OldPid,MS_U16 u16NewPid)1060 MS_BOOL HAL_TSO_ReplaceFlt_SetPktPid(MS_U8 u8Eng, MS_U16 u16FltId, MS_U8 u8TsIf, MS_U16 u16OldPid, MS_U16 u16NewPid)
1061 {
1062 MS_U16 u32data = (((MS_U32)u16OldPid) & REP_PIDFLT_ORG_PID_MASK) | (((MS_U32)u8TsIf) << REP_PIDFLT_SRC_SHIFT) |
1063 ((((MS_U32)u16NewPid) << REP_PIDFLT_NEW_PID_SHIFT) & REP_PIDFLT_NEW_PID_MASK);
1064
1065 _HAL_REG32_W(&(_TSOCtrl->REP_PidFlt[u16FltId]), u32data);
1066
1067 return TRUE;
1068 }
1069
HAL_TSO_ReplaceFlt_Enable(MS_U8 u8Eng,MS_U16 u16FltId,MS_BOOL bEnable)1070 MS_BOOL HAL_TSO_ReplaceFlt_Enable(MS_U8 u8Eng, MS_U16 u16FltId, MS_BOOL bEnable)
1071 {
1072 if(bEnable)
1073 {
1074 _HAL_REG32_W(&(_TSOCtrl->REP_PidFlt[u16FltId]), SET_FLAG1(_HAL_REG32_R(&(_TSOCtrl->REP_PidFlt[u16FltId])), REP_PIDFLT_REPLACE_EN));
1075 }
1076 else
1077 {
1078 _HAL_REG32_W(&(_TSOCtrl->REP_PidFlt[u16FltId]), RESET_FLAG1(_HAL_REG32_R(&(_TSOCtrl->REP_PidFlt[u16FltId])), REP_PIDFLT_REPLACE_EN));
1079 }
1080
1081 return TRUE;
1082 }
1083
HAL_TSO_Set_Filein_ReadAddr(MS_U8 u8Eng,MS_U8 u8FileEng,MS_PHY phyAddr)1084 void HAL_TSO_Set_Filein_ReadAddr(MS_U8 u8Eng, MS_U8 u8FileEng, MS_PHY phyAddr)
1085 {
1086 _phyTSOFiMiuOffset[u8FileEng] = _HAL_TSO_MIU_OFFSET(phyAddr);
1087
1088 if(u8FileEng == 0)
1089 {
1090 _HAL_REG32_W(&(_TSOCtrl->TSO_Filein_raddr), (MS_U32)(phyAddr-_phyTSOFiMiuOffset[u8FileEng]));
1091 }
1092 else if(u8FileEng == 1)
1093 {
1094 _HAL_REG32_W(&(_TSOCtrl->TSO_Filein_raddr1), (MS_U32)(phyAddr-_phyTSOFiMiuOffset[u8FileEng]));
1095 }
1096 }
1097
HAL_TSO_Set_Filein_ReadLen(MS_U8 u8Eng,MS_U8 u8FileEng,MS_U32 u32len)1098 void HAL_TSO_Set_Filein_ReadLen(MS_U8 u8Eng, MS_U8 u8FileEng, MS_U32 u32len)
1099 {
1100 if(u8FileEng == 0)
1101 {
1102 _HAL_REG32_W(&(_TSOCtrl->TSO_Filein_rNum), u32len);
1103 }
1104 else if(u8FileEng == 1)
1105 {
1106 _HAL_REG32_W(&(_TSOCtrl->TSO_Filein_rNum1), u32len);
1107 }
1108 }
1109
HAL_TSO_Get_Filein_ReadAddr(MS_U8 u8Eng,MS_U8 u8FileEng)1110 MS_PHY HAL_TSO_Get_Filein_ReadAddr(MS_U8 u8Eng, MS_U8 u8FileEng)
1111 {
1112 MS_PHY phyvalue = 0;
1113
1114 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]), _HAL_REG16_R(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng])) | TSO_FICFG_RADDR_READ);
1115 phyvalue = ((MS_PHY)_HAL_REG32_R(&(_TSOCtrl->TSO_TSO2MI_RADDR[u8FileEng])) & 0xFFFFFFFFUL) << TSO_MIU_BUS;
1116 phyvalue += _phyTSOFiMiuOffset[u8FileEng];
1117 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]), _HAL_REG16_R(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng])) & ~TSO_FICFG_RADDR_READ);
1118 return phyvalue;
1119 }
1120
HAL_TSO_Set_Filein_Ctrl(MS_U8 u8Eng,MS_U8 u8FileEng,MS_U16 u16ctrl)1121 void HAL_TSO_Set_Filein_Ctrl(MS_U8 u8Eng, MS_U8 u8FileEng, MS_U16 u16ctrl)
1122 {
1123 if(u8FileEng == 0)
1124 {
1125 _HAL_REG16_W(&(_TSOCtrl->TSO_Filein_Ctrl), (_HAL_REG16_R(&(_TSOCtrl->TSO_Filein_Ctrl)) & ~TSO_FILEIN_CTRL_MASK) | u16ctrl);
1126 }
1127 else if(u8FileEng == 1)
1128 {
1129 _HAL_REG16_W(&(_TSOCtrl->TSO_Filein_Ctrl1), (_HAL_REG16_R(&(_TSOCtrl->TSO_Filein_Ctrl1)) & ~TSO_FILEIN_CTRL_MASK) | u16ctrl);
1130 }
1131 }
1132
HAL_TSO_Get_Filein_Ctrl(MS_U8 u8Eng,MS_U8 u8FileEng)1133 MS_U16 HAL_TSO_Get_Filein_Ctrl(MS_U8 u8Eng, MS_U8 u8FileEng)
1134 {
1135 if(u8FileEng == 0)
1136 {
1137 return (_HAL_REG16_R(&(_TSOCtrl->TSO_Filein_Ctrl)) & TSO_FILEIN_CTRL_MASK);
1138 }
1139 else if(u8FileEng == 1)
1140 {
1141 return (_HAL_REG16_R(&(_TSOCtrl->TSO_Filein_Ctrl1)) & TSO_FILEIN_CTRL_MASK);
1142 }
1143
1144 return 0;
1145 }
1146
HAL_TSO_Set_Filein_MOBFKey(MS_U8 u8FileEng,MS_U32 u32Key,MS_BOOL bSecured)1147 MS_BOOL HAL_TSO_Set_Filein_MOBFKey(MS_U8 u8FileEng, MS_U32 u32Key, MS_BOOL bSecured)
1148 {
1149 MS_U16 u16data = (bSecured ? TSO_FILEIN_RIU_TSO_NS : 0);
1150 REG16* pReg = ((u8FileEng == 0)? (&(_TSOCtrl->TSO_Filein_Ctrl)) : (&(_TSOCtrl->TSO_Filein_Ctrl1)));
1151
1152 if((_HAL_REG16_R(pReg) & (TSO_FILEIN_RSTART|TSO_FILEIN_ABORT)) != 0)
1153 {
1154 return FALSE;
1155 }
1156
1157 u16data |= ((MS_U16)(u32Key << TSO_FILEIN_MOBF_IDX_SHIFT) & TSO_FILEIN_MOBF_IDX_MASK);
1158 _HAL_REG16_W(pReg, u16data)
1159
1160 return TRUE;
1161 }
1162
HAL_TSO_Filein_Enable(MS_U8 u8Eng,MS_U8 u8FileEng,MS_BOOL bEnable)1163 MS_BOOL HAL_TSO_Filein_Enable(MS_U8 u8Eng, MS_U8 u8FileEng, MS_BOOL bEnable)
1164 {
1165 MS_U16 u16ChIf = ((u8Eng == 0)? TSO_CFG1_TSO_TSIF5_EN: TSO_CFG1_TSO_TSIF6_EN);
1166
1167 if(bEnable)
1168 {
1169 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG1), SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl->TSO_CFG1)), u16ChIf));
1170 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]),
1171 SET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_FILE_CFG[u8FileEng]), TSO_FICFG_TSO_FILEIN|TSO_FICFG_FILE_SEGMENT|TSO_FICFG_TS_DATAPORT_SEL));
1172 }
1173 else
1174 {
1175 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG1), RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl->TSO_CFG1)), u16ChIf));
1176 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]),
1177 RESET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_FILE_CFG[u8FileEng]), TSO_FICFG_TSO_FILEIN|TSO_FICFG_FILE_SEGMENT|TSO_FICFG_TS_DATAPORT_SEL));
1178 }
1179
1180 return TRUE;
1181 }
1182
HAL_TSO_FileinTimer_Enable(MS_U8 u8Eng,MS_U8 u8FileEng,MS_BOOL bEnable)1183 void HAL_TSO_FileinTimer_Enable(MS_U8 u8Eng, MS_U8 u8FileEng, MS_BOOL bEnable)
1184 {
1185 if(bEnable)
1186 {
1187 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]), _HAL_REG16_R(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng])) | TSO_FICFG_TIMER_ENABLE);
1188 }
1189 else
1190 {
1191 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]), _HAL_REG16_R(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng])) & ~TSO_FICFG_TIMER_ENABLE);
1192 }
1193 }
1194
HAL_TSO_Filein_Rate(MS_U8 u8Eng,MS_U8 u8FileEng,MS_U16 u16timer)1195 void HAL_TSO_Filein_Rate(MS_U8 u8Eng, MS_U8 u8FileEng, MS_U16 u16timer)
1196 {
1197 _HAL_REG16_W(&(_TSOCtrl->TSO_FI_TIMER[u8FileEng]), u16timer);
1198 }
1199
HAL_TSO_Filein_192Mode_Enable(MS_U8 u8Eng,MS_U8 u8FileEng,MS_BOOL bEnable)1200 void HAL_TSO_Filein_192Mode_Enable(MS_U8 u8Eng, MS_U8 u8FileEng, MS_BOOL bEnable)
1201 {
1202 if(bEnable)
1203 {
1204 //init timestamp
1205 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]), SET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_FILE_CFG[u8FileEng]), TSO_FICFG_INIT_TIMESTAMP));
1206 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]), RESET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_FILE_CFG[u8FileEng]), TSO_FICFG_INIT_TIMESTAMP));
1207
1208 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]), SET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_FILE_CFG[u8FileEng]), TSO_FICFG_PKT192_ENABLE));
1209 }
1210 else
1211 {
1212 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]),
1213 RESET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_FILE_CFG[u8FileEng]), TSO_FICFG_PKT192_ENABLE));
1214 }
1215 }
1216
HAL_TSO_Filein_192BlockMode_Enable(MS_U8 u8Eng,MS_U8 u8FileEng,MS_BOOL bEnable)1217 void HAL_TSO_Filein_192BlockMode_Enable(MS_U8 u8Eng, MS_U8 u8FileEng, MS_BOOL bEnable)
1218 {
1219 if(bEnable)
1220 {
1221 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]),
1222 RESET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_FILE_CFG[u8FileEng]), TSO_FICFG_PKT192_BLK_DISABLE));
1223 }
1224 else
1225 {
1226 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]),
1227 SET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_FILE_CFG[u8FileEng]), TSO_FICFG_PKT192_BLK_DISABLE));
1228 }
1229 }
1230
HAL_TSO_CmdQ_FIFO_Get_WRCnt(MS_U8 u8Eng,MS_U8 u8FileEng)1231 MS_U16 HAL_TSO_CmdQ_FIFO_Get_WRCnt(MS_U8 u8Eng, MS_U8 u8FileEng)
1232 {
1233 MS_U16 u16Shift = ((u8FileEng == 0) ? 0: 8);
1234
1235 return ((_HAL_REG16_R(&(_TSOCtrl->TSO_CMDQ_STATUS)) >> u16Shift) & TSO_CMDQ_STS_WCNT_MASK);
1236 }
1237
HAL_TSO_CmdQ_FIFO_IsFull(MS_U8 u8Eng,MS_U8 u8FileEng)1238 MS_BOOL HAL_TSO_CmdQ_FIFO_IsFull(MS_U8 u8Eng, MS_U8 u8FileEng)
1239 {
1240 MS_U16 u16Shift = ((u8FileEng == 0) ? 0: 8);
1241
1242 return (MS_BOOL)((_HAL_REG16_R(&(_TSOCtrl->TSO_CMDQ_STATUS)) >> u16Shift) & TSO_CMDQ_STS_FIFO_FULL);
1243 }
1244
HAL_TSO_CmdQ_FIFO_IsEmpty(MS_U8 u8Eng,MS_U8 u8FileEng)1245 MS_BOOL HAL_TSO_CmdQ_FIFO_IsEmpty(MS_U8 u8Eng, MS_U8 u8FileEng)
1246 {
1247 MS_U16 u16Shift = ((u8FileEng == 0) ? 0: 8);
1248
1249 return (MS_BOOL)((_HAL_REG16_R(&(_TSOCtrl->TSO_CMDQ_STATUS)) >> u16Shift) & TSO_CMDQ_STS_FIFO_EMPTY);
1250 }
1251
HAL_TSO_CmdQ_FIFO_Get_WRLevel(MS_U8 u8Eng,MS_U8 u8FileEng)1252 MS_U8 HAL_TSO_CmdQ_FIFO_Get_WRLevel(MS_U8 u8Eng, MS_U8 u8FileEng)
1253 {
1254 MS_U16 u16Shift = ((u8FileEng == 0) ? 0: 8);
1255
1256 return (MS_U8)((_HAL_REG16_R(&(_TSOCtrl[u8Eng].TSO_CMDQ_STATUS)) >> u16Shift) & TSO_CMDQ_STS_WLEVEL_MASK);
1257 }
1258
HAL_TSO_CmdQ_Reset(MS_U8 u8Eng,MS_U8 u8FileEng)1259 MS_BOOL HAL_TSO_CmdQ_Reset(MS_U8 u8Eng, MS_U8 u8FileEng)
1260 {
1261 MS_U16 u16data = ((u8FileEng == 0)? TSO_SW_RSTZ_CMDQ : TSO_SW_RSTZ_CMDQ1);
1262
1263 _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ), SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl->SW_RSTZ)), u16data));
1264 _HAL_REG16_W(&(_TSOCtrl->SW_RSTZ), RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl->SW_RSTZ)), u16data));
1265 return TRUE;
1266 }
1267
HAL_TSO_RW_ValidBlock_Count(MS_U8 u8Eng,MS_BOOL bWrite,MS_U16 * pu16ValidBlockCnt)1268 void HAL_TSO_RW_ValidBlock_Count(MS_U8 u8Eng, MS_BOOL bWrite, MS_U16 *pu16ValidBlockCnt)
1269 {
1270 MS_U16 u16data = _HAL_REG16_R(&(_TSOCtrl->TSO_CFG2));
1271
1272 if(bWrite)
1273 {
1274 u16data &= ~TSO_CFG2_VALID_BYTECNT_MASK;
1275 u16data |= (*pu16ValidBlockCnt << TSO_CFG2_VALID_BYTECNT_SHIFT);
1276 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG2), u16data);
1277
1278 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG1), SET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_CFG1), TSO_CFG1_PKT_PARAM_LD));
1279 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG1), RESET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_CFG1), TSO_CFG1_PKT_PARAM_LD));
1280 }
1281 else
1282 {
1283 *pu16ValidBlockCnt = (u16data & TSO_CFG2_VALID_BYTECNT_MASK) >> TSO_CFG2_VALID_BYTECNT_SHIFT;
1284 }
1285 }
1286
HAL_TSO_RW_InvalidBlock_Count(MS_U8 u8Eng,MS_BOOL bWrite,MS_U16 * pu16InvalidBlockCnt)1287 void HAL_TSO_RW_InvalidBlock_Count(MS_U8 u8Eng, MS_BOOL bWrite, MS_U16 *pu16InvalidBlockCnt)
1288 {
1289 MS_U16 u16data = _HAL_REG16_R(&(_TSOCtrl->TSO_CFG2));
1290
1291 if(bWrite)
1292 {
1293 u16data &= ~TSO_CFG2_INVALID_BYTECNT_MASK;
1294 u16data |= (*pu16InvalidBlockCnt << TSO_CFG2_INVALID_BYTECNT_SHIFT);
1295 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG2), u16data);
1296
1297 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG1), SET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_CFG1), TSO_CFG1_PKT_PARAM_LD));
1298 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG1), RESET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_CFG1), TSO_CFG1_PKT_PARAM_LD));
1299 }
1300 else
1301 {
1302 *pu16InvalidBlockCnt = u16data & TSO_CFG2_INVALID_BYTECNT_MASK;
1303 }
1304 }
1305
HAL_TSO_RW_OutputPktSize(MS_U8 u8Eng,MS_BOOL bWrite,MS_U16 * pu16PktSize)1306 void HAL_TSO_RW_OutputPktSize(MS_U8 u8Eng, MS_BOOL bWrite, MS_U16 *pu16PktSize)
1307 {
1308 if(bWrite)
1309 {
1310 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG3), *pu16PktSize);
1311 }
1312 else
1313 {
1314 *pu16PktSize = _HAL_REG16_R(&(_TSOCtrl->TSO_CFG3));
1315 }
1316
1317 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG1), SET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_CFG1), TSO_CFG1_PKT_PARAM_LD));
1318 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG1), RESET_FLAG1(_HAL_REG16_R(&_TSOCtrl->TSO_CFG1), TSO_CFG1_PKT_PARAM_LD));
1319 }
1320
HAL_TSO_LPcr2_Set(MS_U8 u8Eng,MS_U8 u8FileEng,MS_U32 u32lpcr2)1321 void HAL_TSO_LPcr2_Set(MS_U8 u8Eng, MS_U8 u8FileEng, MS_U32 u32lpcr2)
1322 {
1323 MS_U16 u16temp = _HAL_REG16_R(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]));
1324
1325 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]), u16temp | TSO_FICFG_LPCR2_WLD);
1326 _HAL_REG32_W(&(_TSOCtrl->TSO_LPCR2[u8FileEng]), u32lpcr2);
1327 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]), u16temp);
1328 }
1329
HAL_TSO_LPcr2_Get(MS_U8 u8Eng,MS_U8 u8FileEng)1330 MS_U32 HAL_TSO_LPcr2_Get(MS_U8 u8Eng, MS_U8 u8FileEng)
1331 {
1332 MS_U32 u32temp = 0;
1333 MS_U16 u16temp = _HAL_REG16_R(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]));
1334
1335 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]), ((u16temp & ~TSO_FICFG_LPCR2_WLD)|TSO_FICFG_LPCR2_LD));
1336 u32temp = _HAL_REG32_R(&_TSOCtrl->TSO_LPCR2[u8FileEng]);
1337 _HAL_REG16_W(&(_TSOCtrl->TSO_FILE_CFG[u8FileEng]), u16temp);
1338
1339 return u32temp;
1340 }
1341
HAL_TSO_TimeStamp_Get(MS_U8 u8Eng,MS_U8 u8FileEng)1342 MS_U32 HAL_TSO_TimeStamp_Get(MS_U8 u8Eng, MS_U8 u8FileEng)
1343 {
1344 return _HAL_REG32_R(&(_TSOCtrl->TSO_TIMESTAMP[u8FileEng]));
1345 }
1346
HAL_TSO_PktChkSize_Set(MS_U8 u8Eng,MS_U8 u8If,MS_U8 u8size)1347 MS_BOOL HAL_TSO_PktChkSize_Set(MS_U8 u8Eng, MS_U8 u8If, MS_U8 u8size)
1348 {
1349 MS_U16 u16data = 0;
1350
1351 if(u8If == HAL_TSO_TSIF_LIVE1)
1352 {
1353 u16data = _HAL_REG16_R(&(_TSOCtrl->TSO_CH0_IF1_CFG0)) & ~TSO_PKT_SIZE_CHK_LIVE_MASK;
1354 _HAL_REG16_W(&(_TSOCtrl->TSO_CH0_IF1_CFG0), u16data | (MS_U16)u8size);
1355 }
1356 else if((u8If == HAL_TSO_TSIF_LIVE2) || (u8If == HAL_TSO_TSIF_FILE1))
1357 {
1358 u16data = _HAL_REG16_R(&(_TSOCtrl->TSO_CH0_IF5_CFG0)) & ~TSO_PKT_SIZE_CHK_LIVE_MASK;
1359 _HAL_REG16_W(&(_TSOCtrl->TSO_CH0_IF5_CFG0), u16data | (MS_U16)u8size);
1360 }
1361 else if((u8If == HAL_TSO_TSIF_LIVE3) || (u8If == HAL_TSO_TSIF_FILE2))
1362 {
1363 u16data = _HAL_REG16_R(&(_TSOCtrl->TSO_CH0_IF6_CFG0)) & ~TSO_PKT_SIZE_CHK_LIVE_MASK;
1364 _HAL_REG16_W(&(_TSOCtrl->TSO_CH0_IF6_CFG0), u16data | (MS_U16)u8size);
1365 }
1366 else
1367 {
1368 return FALSE;
1369 }
1370
1371 return TRUE;
1372 }
1373
HAL_TSO_Filein_PktChkSize_Set(MS_U8 u8Eng,MS_U8 u8FileEng,MS_U8 u8size)1374 void HAL_TSO_Filein_PktChkSize_Set(MS_U8 u8Eng, MS_U8 u8FileEng, MS_U8 u8size)
1375 {
1376 MS_U16 u16temp = 0, u16shift = ((u8FileEng == 0) ? 0: 8);
1377
1378 u16temp = _HAL_REG16_R(&(_TSOCtrl->TSO_PKT_CHKSIZE_FI)) & ~(TSO_PKT_CHKSIZE_FI_MASK << u16shift);
1379 u16temp |= (((MS_U16)(u8size & 0xFF)) << u16shift);
1380
1381 _HAL_REG16_W(&(_TSOCtrl->TSO_PKT_CHKSIZE_FI), u16temp);
1382 }
1383
HAL_TSO_Cfg1_Enable(MS_U8 u8Eng,MS_U16 u16CfgItem,MS_BOOL bEnable)1384 void HAL_TSO_Cfg1_Enable(MS_U8 u8Eng, MS_U16 u16CfgItem, MS_BOOL bEnable)
1385 {
1386 MS_U16 u16data = _HAL_REG16_R(&(_TSOCtrl->TSO_CFG1));
1387
1388 if(bEnable)
1389 {
1390 u16data |= u16CfgItem;
1391 }
1392 else
1393 {
1394 u16data &= ~u16CfgItem;
1395 }
1396
1397 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG1), u16data);
1398 }
1399
HAL_TSO_Cfg4_Enable(MS_U8 u8Eng,MS_U16 u16CfgItem,MS_BOOL bEnable)1400 void HAL_TSO_Cfg4_Enable(MS_U8 u8Eng, MS_U16 u16CfgItem, MS_BOOL bEnable)
1401 {
1402 MS_U16 u16data = _HAL_REG16_R(&(_TSOCtrl->TSO_CFG4));
1403
1404 if(bEnable)
1405 {
1406 u16data |= u16CfgItem;
1407 }
1408 else
1409 {
1410 u16data &= ~u16CfgItem;
1411 }
1412
1413 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG4), u16data);
1414 }
1415
HAL_TSO_ChIf_Enable(MS_U8 u8Eng,MS_U8 u8ChIf,MS_BOOL bEnable)1416 MS_BOOL HAL_TSO_ChIf_Enable(MS_U8 u8Eng, MS_U8 u8ChIf, MS_BOOL bEnable)
1417 {
1418 MS_U16 u16data = 0;
1419 REG16* pReg = &(_TSOCtrl->TSO_CFG1);
1420
1421 if(u8Eng > 0)
1422 {
1423 return FALSE;
1424 }
1425
1426 switch(u8ChIf)
1427 {
1428 case HAL_TSO_TSIF_LIVE1:
1429 u16data = TSO_CFG1_TSO_TSIF1_EN;
1430 break;
1431 case HAL_TSO_TSIF_LIVE2:
1432 u16data = TSO_CFG1_TSO_TSIF5_EN;
1433 break;
1434 case HAL_TSO_TSIF_LIVE3:
1435 u16data = TSO_CFG1_TSO_TSIF6_EN;
1436 break;
1437 case HAL_TSO_TSIF_LIVE_MMT:
1438 pReg = &(_TSOCtrl2->TSO_CFG_21);
1439 u16data = TSO_MMT_EN;
1440 break;
1441 default:
1442 return FALSE;
1443 }
1444
1445 if(bEnable)
1446 {
1447 _HAL_REG16_W(pReg, SET_FLAG1(_HAL_REG16_R(pReg), u16data));
1448 }
1449 else
1450 {
1451 _HAL_REG16_W(pReg, RESET_FLAG1(_HAL_REG16_R(pReg), u16data));
1452 }
1453
1454 return TRUE;
1455
1456 }
1457
HAL_TSO_ChIf_Cfg(MS_U8 u8Eng,MS_U8 u8ChIf,MS_U16 u16Cfg,MS_BOOL bEnable)1458 MS_BOOL HAL_TSO_ChIf_Cfg(MS_U8 u8Eng, MS_U8 u8ChIf, MS_U16 u16Cfg, MS_BOOL bEnable)
1459 {
1460 REG16* pReg = NULL;
1461
1462 if(u8Eng > 0)
1463 {
1464 return FALSE;
1465 }
1466
1467 switch(u8ChIf)
1468 {
1469 case HAL_TSO_TSIF_LIVE1:
1470 pReg = &(_TSOCtrl->TSO_CH0_IF1_CFG2);
1471 break;
1472 case HAL_TSO_TSIF_LIVE2:
1473 pReg = &(_TSOCtrl->TSO_CH0_IF5_CFG2);
1474 break;
1475 case HAL_TSO_TSIF_LIVE3:
1476 pReg = &(_TSOCtrl->TSO_CH0_IF6_CFG2);
1477 break;
1478 case HAL_TSO_TSIF_LIVE_MMT:
1479 pReg = &(_TSOCtrl2->TSO_CFG_20);
1480 u16Cfg = HAL_TSO_MMT_Cfg_Map(u16Cfg);
1481 break;
1482 default:
1483 return FALSE;
1484 }
1485
1486 if(bEnable)
1487 {
1488 _HAL_REG16_W(pReg, SET_FLAG1(_HAL_REG16_R(pReg), u16Cfg));
1489 }
1490 else
1491 {
1492 _HAL_REG16_W(pReg, RESET_FLAG1(_HAL_REG16_R(pReg), u16Cfg));
1493 }
1494
1495 return TRUE;
1496 }
1497
HAL_TSO_Get_ChIf_Cfg(MS_U8 u8Eng,MS_U8 u8ChIf,MS_U16 * pu16Cfg,MS_BOOL * pbEnable)1498 MS_BOOL HAL_TSO_Get_ChIf_Cfg(MS_U8 u8Eng, MS_U8 u8ChIf, MS_U16* pu16Cfg, MS_BOOL *pbEnable)
1499 {
1500 REG16* pReg = NULL;
1501 MS_U16 u16data = 0;
1502
1503 *pu16Cfg = 0;
1504 *pbEnable = FALSE;
1505
1506 if(u8Eng > 0)
1507 {
1508 return FALSE;
1509 }
1510
1511 switch(u8ChIf)
1512 {
1513 case HAL_TSO_TSIF_LIVE1:
1514 pReg = &(_TSOCtrl->TSO_CH0_IF1_CFG2);
1515 break;
1516 case HAL_TSO_TSIF_LIVE2:
1517 pReg = &(_TSOCtrl->TSO_CH0_IF5_CFG2);
1518 break;
1519 case HAL_TSO_TSIF_LIVE3:
1520 pReg = &(_TSOCtrl->TSO_CH0_IF6_CFG2);
1521 break;
1522 default:
1523 return FALSE;
1524 }
1525
1526 *pu16Cfg = _HAL_REG16_R(pReg);
1527
1528 switch(u8ChIf)
1529 {
1530 case HAL_TSO_TSIF_LIVE1:
1531 u16data = TSO_CFG1_TSO_TSIF1_EN;
1532 break;
1533 case HAL_TSO_TSIF_LIVE2:
1534 u16data = TSO_CFG1_TSO_TSIF5_EN;
1535 break;
1536 case HAL_TSO_TSIF_LIVE3:
1537 u16data = TSO_CFG1_TSO_TSIF6_EN;
1538 break;
1539 default:
1540 return FALSE;
1541 }
1542
1543 *pbEnable = ((_HAL_REG16_R(&(_TSOCtrl->TSO_CFG1)) & u16data) == u16data);
1544
1545 return TRUE;
1546
1547 }
1548
1549
HAL_TSO_SVQBuf_Set(MS_U8 u8Eng,MS_U8 u8ChIf,MS_PHY phyBufAddr,MS_U32 u32BufSize)1550 MS_BOOL HAL_TSO_SVQBuf_Set(MS_U8 u8Eng, MS_U8 u8ChIf, MS_PHY phyBufAddr, MS_U32 u32BufSize)
1551 {
1552 REG32* p32Reg = NULL;
1553 REG16* p16Reg = NULL;
1554 REG16* p16RegCfg = NULL;
1555 MS_U32 u32addr = 0;
1556
1557 _phyTSOVQiMiuOffset = _HAL_TSO_MIU_OFFSET(phyBufAddr);
1558 u32addr = (MS_U32)(phyBufAddr - _phyTSOVQiMiuOffset);
1559
1560 if(u8Eng > 0)
1561 {
1562 return FALSE;
1563 }
1564
1565 switch(u8ChIf)
1566 {
1567 case HAL_TSO_TSIF_LIVE1:
1568 p32Reg = &(_TSOCtrl1->TSO_SVQ1_BASE);
1569 p16Reg = &(_TSOCtrl1->TSO_SVQ1_SIZE);
1570 p16RegCfg = &(_TSOCtrl1->TSO_SVQ1_TX_CFG);
1571 break;
1572 case HAL_TSO_TSIF_LIVE2:
1573 p32Reg = &(_TSOCtrl1->TSO_SVQ5_BASE);
1574 p16Reg = &(_TSOCtrl1->TSO_SVQ5_SIZE);
1575 p16RegCfg = &(_TSOCtrl1->TSO_SVQ5_TX_CFG);
1576 break;
1577 case HAL_TSO_TSIF_LIVE3:
1578 p32Reg = &(_TSOCtrl1->TSO_SVQ6_BASE);
1579 p16Reg = &(_TSOCtrl1->TSO_SVQ6_SIZE);
1580 p16RegCfg = &(_TSOCtrl1->TSO_SVQ6_TX_CFG);
1581 break;
1582 default:
1583 return FALSE;
1584 }
1585
1586 _HAL_REG32_W(p32Reg, u32addr >> TSO_MIU_BUS);
1587 _HAL_REG16_W(p16Reg , u32BufSize/TSO_SVQ_UNIT_SIZE);
1588
1589 // Reset SVQ
1590 _HAL_REG16_W(p16RegCfg , SET_FLAG1(_HAL_REG16_R(p16RegCfg), TSO_SVQ_TX_CFG_TX_RESET));
1591 _HAL_REG16_W(p16RegCfg , RESET_FLAG1(_HAL_REG16_R(p16RegCfg), TSO_SVQ_TX_CFG_TX_RESET));
1592
1593 _HAL_REG16_W(p16RegCfg, SET_FLAG1(_HAL_REG16_R(p16RegCfg), TSO_SVQ_TX_CFG_SVQ_EN));
1594
1595 return TRUE;
1596 }
1597
HAL_TSO_ChIf_ClrByteCnt(MS_U8 u8Eng,MS_U8 u8ChIf)1598 MS_BOOL HAL_TSO_ChIf_ClrByteCnt(MS_U8 u8Eng, MS_U8 u8ChIf)
1599 {
1600 MS_U16 u16data = 0;
1601
1602 switch(u8ChIf)
1603 {
1604 case HAL_TSO_TSIF_LIVE1:
1605 u16data = TSO_CLR_BYTE_CNT_1;
1606 break;
1607 case HAL_TSO_TSIF_LIVE2:
1608 u16data = TSO_CLR_BYTE_CNT_5;
1609 break;
1610 case HAL_TSO_TSIF_LIVE3:
1611 u16data = TSO_CLR_BYTE_CNT_6;
1612 break;
1613 default:
1614 return FALSE;
1615 }
1616
1617
1618 _HAL_REG16_W(&(_TSOCtrl->TSO_CLR_BYTE_CNT), SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl->TSO_CLR_BYTE_CNT)), u16data));
1619 _HAL_REG16_W(&(_TSOCtrl->TSO_CLR_BYTE_CNT), RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl->TSO_CLR_BYTE_CNT)), u16data));
1620
1621 return TRUE;
1622 }
1623
HAL_TSO_LocalStreamID(MS_U8 u8Eng,MS_U8 u8ChIf,MS_U8 * pu8StrID,MS_BOOL beSet)1624 MS_BOOL HAL_TSO_LocalStreamID(MS_U8 u8Eng, MS_U8 u8ChIf, MS_U8* pu8StrID, MS_BOOL beSet)
1625 {
1626 REG16* p16Reg = NULL;
1627
1628 if(beSet == FALSE)
1629 {
1630 *pu8StrID = 0xFF;
1631 }
1632
1633 if(u8Eng > 0)
1634 {
1635 return FALSE;
1636 }
1637
1638 switch(u8ChIf)
1639 {
1640 case HAL_TSO_TSIF_LIVE1:
1641 p16Reg = &(_TSOCtrl1->TSO_PRE_HEADER1_CFG0);
1642 break;
1643 case HAL_TSO_TSIF_LIVE2:
1644 p16Reg = &(_TSOCtrl1->TSO_PRE_HEADER5_CFG0);
1645 break;
1646 case HAL_TSO_TSIF_LIVE3:
1647 p16Reg = &(_TSOCtrl1->TSO_PRE_HEADER6_CFG0);
1648 break;
1649 default:
1650 return FALSE;
1651 }
1652
1653 if(beSet == TRUE)
1654 {
1655 _HAL_REG16_W(p16Reg , (MS_U16)(*pu8StrID) & 0xFF);
1656 }
1657 else
1658 {
1659 *pu8StrID = (MS_U8)(_HAL_REG16_R(p16Reg) & 0xFF);
1660 }
1661
1662 return TRUE;
1663
1664 }
1665
HAL_TSO_SVQ_TX_Reset(MS_U8 u8Eng,MS_U8 u8ChIf)1666 MS_BOOL HAL_TSO_SVQ_TX_Reset(MS_U8 u8Eng, MS_U8 u8ChIf)
1667 {
1668 REG16* p16Reg = NULL;
1669
1670 if(u8Eng > 0)
1671 {
1672 return FALSE;
1673 }
1674
1675 switch(u8ChIf)
1676 {
1677 case HAL_TSO_TSIF_LIVE1:
1678 p16Reg = &(_TSOCtrl1->TSO_SVQ1_TX_CFG);
1679 break;
1680 case HAL_TSO_TSIF_LIVE2:
1681 p16Reg = &(_TSOCtrl1->TSO_SVQ5_TX_CFG);
1682 break;
1683 case HAL_TSO_TSIF_LIVE3:
1684 p16Reg = &(_TSOCtrl1->TSO_SVQ6_TX_CFG);
1685 break;
1686 default:
1687 return FALSE;
1688 }
1689
1690 _HAL_REG16_W(p16Reg , SET_FLAG1(_HAL_REG16_R(p16Reg), TSO_SVQ_TX_CFG_TX_RESET));
1691 _HAL_REG16_W(p16Reg , RESET_FLAG1(_HAL_REG16_R(p16Reg), TSO_SVQ_TX_CFG_TX_RESET));
1692
1693 return TRUE;
1694
1695 }
1696
HAL_TSO_Set_SVQRX_MOBFKey(MS_U8 u8Eng,MS_U32 u32Key,MS_BOOL bSecured)1697 MS_BOOL HAL_TSO_Set_SVQRX_MOBFKey(MS_U8 u8Eng, MS_U32 u32Key, MS_BOOL bSecured)
1698 {
1699 MS_U16 u16data = _HAL_REG16_R(&(_TSOCtrl1->TSO_SVQ_RX_CFG)) & ~TSO_SVQ_RX_CFG_SVQ_MOBF_IDX_MASK;
1700
1701 u16data |= ((MS_U16)(u32Key << TSO_SVQ_RX_CFG_SVQ_MOBF_IDX_SHIFT) & TSO_SVQ_RX_CFG_SVQ_MOBF_IDX_MASK);
1702
1703 if(bSecured)
1704 {
1705 u16data |= TSO_SVQ_RX_CFG_SVQ_MIU_NS;
1706 }
1707 else
1708 {
1709 u16data &= ~TSO_SVQ_RX_CFG_SVQ_MIU_NS;
1710 }
1711
1712 _HAL_REG16_W(&(_TSOCtrl1->TSO_SVQ_RX_CFG), u16data);
1713
1714 return TRUE;
1715 }
1716
HAL_TSO_Set_SVQRX_PktMode(MS_U8 u8Eng,MS_U16 u16mode)1717 MS_BOOL HAL_TSO_Set_SVQRX_PktMode(MS_U8 u8Eng, MS_U16 u16mode)
1718 {
1719 _HAL_REG16_W(&(_TSOCtrl1->TSO_SVQ_RX_CFG), (_HAL_REG16_R(&(_TSOCtrl1->TSO_SVQ_RX_CFG)) & ~TSO_SVQ_RX_CFG_MODE_MASK) | u16mode);
1720
1721 return TRUE;
1722 }
1723
HAL_TSO_Set_SVQRX_ArbitorMode(MS_U8 u8Eng,MS_U16 u16mode,MS_U16 * pu16SvqRxPri)1724 MS_BOOL HAL_TSO_Set_SVQRX_ArbitorMode(MS_U8 u8Eng, MS_U16 u16mode, MS_U16 *pu16SvqRxPri)
1725 {
1726 MS_U8 u8ii = 0, u8jj = 0;
1727 MS_U16 u16shift = 0;
1728
1729 _HAL_REG16_W(&(_TSOCtrl1->TSO_SVQ_RX_CFG), (_HAL_REG16_R(&(_TSOCtrl1->TSO_SVQ_RX_CFG)) & ~TSO_SVQ_RX_CFG_ARBMODE_MASK) | u16mode);
1730
1731 if(u16mode != TSO_SVQ_RX_CFG_ARBMODE_FIXPRI)
1732 {
1733 return TRUE;
1734 }
1735
1736 for(u8ii = 0; u8ii < TSO_SVQ_RX_NUM; u8ii++)
1737 {
1738 u8jj = u8ii >> 1;
1739 u16shift = ((u8ii % 2) ? TSO_SVQ_RX_PRI_SHIFT: 0);
1740
1741 _HAL_REG16_W(&(_TSOCtrl1->TSO_SVQ_RX_PRI[u8jj]),
1742 (_HAL_REG16_R(&(_TSOCtrl1->TSO_SVQ_RX_PRI[u8jj])) & ~(TSO_SVQ_RX_PRI_MASK << u16shift)) | (pu16SvqRxPri[u8ii] << u16shift));
1743 }
1744
1745 return TRUE;
1746 }
1747
HAL_TSO_Set_SVQ_LocalSysTimestamp(MS_U8 u8Eng,MS_U32 u32systime)1748 MS_BOOL HAL_TSO_Set_SVQ_LocalSysTimestamp(MS_U8 u8Eng, MS_U32 u32systime)
1749 {
1750 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG4) , RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl->TSO_CFG4)), TSO_CFG4_SET_SYS_TIMESTAMP));
1751 _HAL_REG32_W(&(_TSOCtrl->TSO_SYSTIMESTAMP), u32systime);
1752 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG4) , SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl->TSO_CFG4)), TSO_CFG4_SET_SYS_TIMESTAMP));
1753
1754 return FALSE;
1755 }
1756
HAL_TSO_Get_SVQ_Status(MS_U8 u8Eng,MS_U8 u8ChIf,MS_U16 * pu16Status)1757 MS_BOOL HAL_TSO_Get_SVQ_Status(MS_U8 u8Eng, MS_U8 u8ChIf, MS_U16* pu16Status)
1758 {
1759 MS_U32 u32data = 0;
1760 MS_U32 u32Shift = 0;
1761
1762 *pu16Status = 0;
1763
1764 if(u8Eng > 0)
1765 {
1766 return FALSE;
1767 }
1768
1769 u32data = _HAL_REG32_R(&(_TSOCtrl1->TSO_SVQ_STATUS));
1770
1771 switch(u8ChIf)
1772 {
1773 case HAL_TSO_TSIF_LIVE1:
1774 u32Shift = 0;
1775 break;
1776 case HAL_TSO_TSIF_LIVE2:
1777 u32Shift = 16;
1778 break;
1779 case HAL_TSO_TSIF_LIVE3:
1780 u32Shift = 20;
1781 break;
1782 default:
1783 return FALSE;
1784 }
1785
1786 *pu16Status = ((MS_U16)(u32data >> u32Shift) & TSO_SVQ_STS_MASK);
1787
1788 return TRUE;
1789
1790 }
1791
HAL_TSO_GetDelayTime_PreHd2Output(MS_U8 u8Eng,MS_U8 u8ChIf,MS_U32 * pu32time)1792 MS_BOOL HAL_TSO_GetDelayTime_PreHd2Output(MS_U8 u8Eng, MS_U8 u8ChIf, MS_U32 *pu32time)
1793 {
1794 *pu32time = 0;
1795
1796 if(u8Eng > 0)
1797 {
1798 return FALSE;
1799 }
1800
1801 _HAL_REG16_W(&(_TSOCtrl1->TSO_DELTA_CFG) , SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl1->TSO_DELTA_CFG)), TSO_DELTA_CFG_DELTA_CLR));
1802 _HAL_REG16_W(&(_TSOCtrl1->TSO_DELTA_CFG) , RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl1->TSO_DELTA_CFG)), TSO_DELTA_CFG_DELTA_CLR));
1803
1804 _HAL_REG16_W(&(_TSOCtrl1->TSO_DELTA_CFG) ,
1805 (_HAL_REG16_R(&(_TSOCtrl1->TSO_DELTA_CFG)) & ~TSO_DELTA_CFG_SEL_CH_MASK) | u8ChIf);
1806
1807 *pu32time = _HAL_REG32_R(&(_TSOCtrl1->TSO_DELTA));
1808
1809 return TRUE;
1810 }
1811
HAL_TSO_Get_MaxDelta_ChId(MS_U8 u8Eng,MS_U8 * pu8ChIf)1812 MS_BOOL HAL_TSO_Get_MaxDelta_ChId(MS_U8 u8Eng, MS_U8 *pu8ChIf)
1813 {
1814 *pu8ChIf = 0xFF;
1815
1816 *pu8ChIf = (MS_U8)((_HAL_REG16_R(&(_TSOCtrl1->TSO_DELTA_CFG)) & TSO_DELTA_CFG_MAX_ID_MASK) >> TSO_DELTA_CFG_MAX_ID_SHIFT);
1817
1818 return TRUE;
1819 }
1820
HAL_TSO_Sel_LocalSysStampClkBase(MS_U8 u8Eng,MS_U16 u16ClkBase)1821 MS_BOOL HAL_TSO_Sel_LocalSysStampClkBase(MS_U8 u8Eng, MS_U16 u16ClkBase)
1822 {
1823 if(u16ClkBase == HAL_TSO_TIMESTAMP_27M)
1824 {
1825 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG4) , SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl->TSO_CFG4)), TSO_CFG4_SET_TIMESTAMP_27M));
1826 }
1827 else
1828 {
1829 _HAL_REG16_W(&(_TSOCtrl->TSO_CFG4) , RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl->TSO_CFG4)), TSO_CFG4_SET_TIMESTAMP_BASE_MASK));
1830 }
1831
1832 return TRUE;
1833 }
1834
1835
HAL_TSO_MMT_Cfg_Map(MS_U16 u16Cfg)1836 MS_U16 HAL_TSO_MMT_Cfg_Map(MS_U16 u16Cfg)
1837 {
1838 switch(u16Cfg)
1839 {
1840 case TSO_CHCFG_TS_SIN_C0:
1841 return TSO_MMT_TS_SIN_C0;
1842 case TSO_CHCFG_TS_SIN_C1:
1843 return TSO_MMT_TS_SIN_C1;
1844 case TSO_CHCFG_P_SEL:
1845 return TSO_MMT_PARL;
1846 case TSO_CHCFG_EXT_SYNC_SEL:
1847 return TSO_MMT_EXTSYNC;
1848 default:
1849 return 0;
1850 }
1851 }
1852
HAL_TSO_PVR_WaitFlush(MS_U8 u8PVRId)1853 void HAL_TSO_PVR_WaitFlush(MS_U8 u8PVRId)
1854 {
1855 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_0D), SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_0D)), TSP_FLUSH_EN));
1856 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_0D), RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_0D)), TSP_FLUSH_EN));
1857 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_00), SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_00)), TSO_PVR_RST_WADR));
1858 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_00), RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_00)), TSO_PVR_RST_WADR));
1859 }
1860
1861
HAL_TSO_PVR_SetBuffer(MS_U8 u8PVRId,MS_PHY phyBufStart0,MS_PHY phyBufStart1,MS_U32 u32BufSize0,MS_U32 u32BufSize1)1862 void HAL_TSO_PVR_SetBuffer(MS_U8 u8PVRId, MS_PHY phyBufStart0, MS_PHY phyBufStart1, MS_U32 u32BufSize0, MS_U32 u32BufSize1)
1863 {
1864 MS_PHY phyBufEnd = phyBufStart0 + u32BufSize0;
1865
1866 _phyPVRBufMiuOffset = _HAL_TSO_MIU_OFFSET(phyBufStart0);
1867 _HAL_REG32_W(&(_TSOCtrl2->TSO_PVR_Head1), ((MS_U32)((phyBufStart0-_phyPVRBufMiuOffset)>> MIU_BUS)));
1868 _HAL_REG32_W(&(_TSOCtrl2->TSO_PVR_Tail), ((MS_U32)((phyBufEnd-_phyPVRBufMiuOffset)>> MIU_BUS)));
1869
1870 phyBufEnd = phyBufStart1+ u32BufSize1;
1871
1872 _HAL_REG32_W(&(_TSOCtrl2->TSO_PVR_Head2), ((MS_U32)((phyBufStart1-_phyPVRBufMiuOffset)>> MIU_BUS)));
1873 _HAL_REG32_W(&(_TSOCtrl2->TSO_PVR_Tail2), ((MS_U32)((phyBufEnd-_phyPVRBufMiuOffset)>> MIU_BUS)));
1874
1875
1876 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_00),
1877 SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_00)), TSO_PVR_PINGPONG));
1878
1879 // flush PVR buffer
1880 HAL_TSO_PVR_WaitFlush(u8PVRId);
1881 }
1882
1883
HAL_TSO_PVR_GetBufWrite(MS_U8 u8PVRId)1884 MS_PHY HAL_TSO_PVR_GetBufWrite(MS_U8 u8PVRId)
1885 {
1886 MS_U32 u32value = 0;
1887
1888 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_0D),
1889 RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_0D)), TSO_CH_BW_WP_LD));
1890
1891 u32value = _HAL_REG32_R(&(_TSOCtrl2->TSO_PVR_WPTR));
1892
1893 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_0D),
1894 SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_0D)), TSO_CH_BW_WP_LD));
1895
1896 return ((((MS_PHY)u32value) << MIU_BUS) + _phyPVRBufMiuOffset);
1897
1898 }
1899
1900
HAL_TSO_PVR_Enable(MS_U8 u8PVRId,MS_BOOL bEnable)1901 void HAL_TSO_PVR_Enable(MS_U8 u8PVRId,MS_BOOL bEnable)
1902 {
1903 if (bEnable)
1904 {
1905 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_00), (_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_00)) & ~TSO_BURST_LEN_MASK) | TSO_BURST_LEN_4);
1906 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_0D), SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_0D)), TSO_PVR_DMA_FLUSH_EN));
1907 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_00), SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_00)), TSO_PVR_ENABLE));
1908 }
1909 else
1910 {
1911 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_00), RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_00)), TSO_PVR_ENABLE));
1912 }
1913 }
1914
1915
HAL_TSO_PVR_PacketMode(MS_U8 u8PVRId,MS_BOOL bSet)1916 void HAL_TSO_PVR_PacketMode(MS_U8 u8PVRId, MS_BOOL bSet)
1917 {
1918 if (bSet)
1919 {
1920 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_00), SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_00)), TSO_RECORD192_EN));
1921 }
1922 else
1923 {
1924 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_00), RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_00)), TSO_RECORD192_EN));
1925 }
1926 }
1927
1928
HAL_TSO_SetPVRTimeStamp(MS_U8 u8PVRId,MS_U32 u32Stamp)1929 void HAL_TSO_SetPVRTimeStamp(MS_U8 u8PVRId, MS_U32 u32Stamp)
1930 {
1931 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_00), SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_00)), TSO_PVR_LPCR1_WLD));
1932
1933 _HAL_REG32_W(&(_TSOCtrl2->PVR1_LPcr1),u32Stamp);
1934
1935 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_00), RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_00)), TSO_PVR_LPCR1_WLD));
1936 }
1937
1938
HAL_TSO_GetPVRTimeStamp(MS_U8 u8PVRId)1939 MS_U32 HAL_TSO_GetPVRTimeStamp(MS_U8 u8PVRId)
1940 {
1941 MS_U32 u32lpcr = 0;
1942
1943 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_00), RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_00)), TSO_PVR_LPCR1_RLD));
1944
1945 u32lpcr = _HAL_REG32_R(&(_TSOCtrl2->PVR1_LPcr1));
1946
1947 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_00), SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_00)), TSO_PVR_LPCR1_RLD));
1948
1949 return u32lpcr;
1950 }
1951
1952
HAL_TSO_SetPVRTimeStampClk(MS_U8 u8PVRId,MS_U32 u32ClkSrc)1953 void HAL_TSO_SetPVRTimeStampClk(MS_U8 u8PVRId, MS_U32 u32ClkSrc)
1954 {
1955 if(u32ClkSrc == 0x0) // 90K
1956 {
1957 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_14),
1958 RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_14)), TSO_PVR_CLK_STAMP_27_EN));
1959 }
1960 else // 27M
1961 {
1962 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_14),
1963 SET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_14)), TSO_PVR_CLK_STAMP_27_EN));
1964 }
1965
1966 }
1967
HAL_TSO_PVR_IsEnabled(MS_U32 u32EngId)1968 MS_BOOL HAL_TSO_PVR_IsEnabled(MS_U32 u32EngId)
1969 {
1970 return ((_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_00)) & TSO_PVR_ENABLE) > 0);
1971 }
1972
HAL_TSO_PVR_Src(MS_U32 u32Src)1973 void HAL_TSO_PVR_Src(MS_U32 u32Src)
1974 {
1975 if(u32Src == HAL_TSO_PVR_SVQ)//from SVQ
1976 {
1977 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_14), (_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_14)) & ~TSO_PVR_SRC_MASK) | TSO_PVR_SRC_SVQ);
1978 }
1979 else if(u32Src == HAL_TSO_PVR_MMT)
1980 {
1981 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_14), (_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_14)) & ~TSO_PVR_SRC_MASK) | TSO_PVR_SRC_MMT);
1982 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_00), RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_00)), TSO_RECORD192_EN)); //MMT mode will add timestamp automatically
1983 }
1984 else
1985 {
1986 _HAL_REG16_W(&(_TSOCtrl2->TSO_CFG_14),
1987 RESET_FLAG1(_HAL_REG16_R(&(_TSOCtrl2->TSO_CFG_14)), TSO_PVR_SRC_MASK));
1988 }
1989 }
1990
HAL_TSO_ChIf_Ng_Protocol_ID(MS_U8 u8Eng,MS_U8 u8ChIf,MS_U16 u16ID)1991 MS_BOOL HAL_TSO_ChIf_Ng_Protocol_ID(MS_U8 u8Eng, MS_U8 u8ChIf, MS_U16 u16ID)
1992 {
1993 REG32* p32Reg = NULL;
1994
1995 switch(u8ChIf)
1996 {
1997 case HAL_TSO_TSIF_LIVE1:
1998 p32Reg = &(_TSOCtrl1->TSO_DONGLE_TSIF1);
1999 break;
2000 case HAL_TSO_TSIF_LIVE2:
2001 p32Reg = &(_TSOCtrl1->TSO_DONGLE_TSIF5);
2002 break;
2003 case HAL_TSO_TSIF_LIVE3:
2004 p32Reg = &(_TSOCtrl1->TSO_DONGLE_TSIF6);
2005 break;
2006 default:
2007 return FALSE;
2008 }
2009 _HAL_REG32_W(p32Reg, (_HAL_REG32_R(p32Reg) & ~TSO_DONGLE_PROTOCAL_ID_MASK) | (u16ID<<TSO_DONGLE_PROTOCAL_ID_SHIFT));
2010
2011 return TRUE;
2012 }
2013
HAL_TSO_ChIf_Ng_Stream_ID(MS_U8 u8Eng,MS_U8 u8ChIf,MS_U16 u16ID)2014 MS_BOOL HAL_TSO_ChIf_Ng_Stream_ID(MS_U8 u8Eng, MS_U8 u8ChIf, MS_U16 u16ID)
2015 {
2016 REG32* p32Reg = NULL;
2017
2018 switch(u8ChIf)
2019 {
2020 case HAL_TSO_TSIF_LIVE1:
2021 p32Reg = &(_TSOCtrl1->TSO_DONGLE_TSIF1);
2022 break;
2023 case HAL_TSO_TSIF_LIVE2:
2024 p32Reg = &(_TSOCtrl1->TSO_DONGLE_TSIF5);
2025 break;
2026 case HAL_TSO_TSIF_LIVE3:
2027 p32Reg = &(_TSOCtrl1->TSO_DONGLE_TSIF6);
2028 break;
2029 default:
2030 return FALSE;
2031 }
2032 _HAL_REG32_W(p32Reg, (_HAL_REG32_R(p32Reg) & ~TSO_DONGLE_STREAM_ID_MASK) | (u16ID<<TSO_DONGLE_STREAM_ID_SHIFT));
2033 return TRUE;
2034 }
2035
2036
2037 #ifdef MSOS_TYPE_LINUX_KERNEL
2038
HAL_TSO_SaveRegs(void)2039 MS_BOOL HAL_TSO_SaveRegs(void)
2040 {
2041 MS_U32 u32ii = 0;
2042
2043 _u16TSORegArray[0][0x04] = TSO0_REG(0x04);
2044 _u16TSORegArray[0][0x05] = TSO0_REG(0x05);
2045 _u16TSORegArray[0][0x06] = TSO0_REG(0x06);
2046
2047 _u16TSORegArray[0][0x14] = TSO0_REG(0x14);
2048 _u16TSORegArray[0][0x15] = TSO0_REG(0x15);
2049 _u16TSORegArray[0][0x16] = TSO0_REG(0x16);
2050
2051 _u16TSORegArray[0][0x18] = TSO0_REG(0x18);
2052 _u16TSORegArray[0][0x19] = TSO0_REG(0x19);
2053 _u16TSORegArray[0][0x1a] = TSO0_REG(0x1a);
2054
2055 for(u32ii = 0x1c; u32ii <= 0x44; u32ii++)
2056 {
2057 _u16TSORegArray[0][u32ii] = TSO0_REG(u32ii);
2058 }
2059
2060 _u16TSORegArray[0][0x4c] = TSO0_REG(0x4c);
2061 _u16TSORegArray[0][0x4d] = TSO0_REG(0x4d);
2062
2063 for(u32ii = 0x60; u32ii <= 0x6f; u32ii++)
2064 {
2065 _u16TSORegArray[0][u32ii] = TSO0_REG(u32ii);
2066 }
2067
2068 _u16TSORegArray[0][0x79] = TSO0_REG(0x79);
2069 _u16TSORegArray[0][0x7a] = TSO0_REG(0x7a);
2070 _u16TSORegArray[0][0x7b] = TSO0_REG(0x7b);
2071 _u16TSORegArray[0][0x7c] = TSO0_REG(0x7c);
2072
2073 //TSO1
2074 _u16TSORegArray[1][0x00] = TSO1_REG(0x00);
2075 _u16TSORegArray[1][0x10] = TSO1_REG(0x10);
2076 _u16TSORegArray[1][0x14] = TSO1_REG(0x14);
2077
2078 for(u32ii = 0x18; u32ii <= 0x1b; u32ii++)
2079 {
2080 _u16TSORegArray[1][u32ii] = TSO1_REG(u32ii);
2081 }
2082
2083 for(u32ii = 0x28; u32ii <= 0x33; u32ii++)
2084 {
2085 _u16TSORegArray[1][u32ii] = TSO1_REG(u32ii);
2086 }
2087
2088 _u16TSOTopReg[0][0] = TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN);
2089 _u16TSOTopReg[0][1] = TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE);
2090 _u16TSOTopReg[0][2] = TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK);
2091 _u16TSOTopReg[0][3] = TSO_CLKGEN0_REG(REG_CLKGEN0_RESERVED0);
2092 _u16TSOTopReg[0][4] = TSO_CLKGEN2_REG(REG_CLKGEN2_TSO1_IN);
2093 _u16TSOTopReg[0][5] = TSO_CLKGEN2_REG(REG_CLKGEN2_MMT_IN);
2094 _u16TSOTopReg[0][6] = TSP_TS_SAMPLE_REG(REG_TSO_OUT_CLK_SEL);
2095
2096 _u16TSOTopReg[1][0] = TSP_TOP_REG(REG_TOP_TSO_EVD);
2097 _u16TSOTopReg[1][1] = TSP_TOP_REG(REG_TOP_TS4_CFG);
2098 _u16TSOTopReg[1][2] = TSP_TOP_REG(REG_TOP_TS_CONFIG);
2099 _u16TSOTopReg[1][3] = TSP_TOP_REG(REG_TOP_TS2_CONFIG);
2100 _u16TSOTopReg[1][4] = TSP_TOP_REG(REG_TOP_TS3_CONFIG);
2101
2102 _u16TSOTopReg[2][0] = TSP_TSP5_REG(REG_TSP5_TSOIN_MUX);
2103 _u16TSOTopReg[2][1] = TSP_TSP5_REG(REG_TSP5_TSOOUT_MUX);
2104 _u16TSOTopReg[2][2] = TSP_TSP5_REG(REG_TSP5_MMT_MUX);
2105
2106 return TRUE;
2107 }
2108
HAL_TSO_RestoreRegs(void)2109 MS_BOOL HAL_TSO_RestoreRegs(void)
2110 {
2111 MS_U32 u32ii = 0, u32jj, u32temp = 0;
2112
2113
2114 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_IN) = _u16TSOTopReg[0][0];
2115 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_PHASE) = _u16TSOTopReg[0][1];
2116 TSO_CLKGEN0_REG(REG_CLKGEN0_TSO_OUT_CLK) = _u16TSOTopReg[0][2];
2117 TSO_CLKGEN0_REG(REG_CLKGEN0_RESERVED0) = _u16TSOTopReg[0][3];
2118 TSO_CLKGEN2_REG(REG_CLKGEN2_TSO1_IN) = _u16TSOTopReg[0][4];
2119 TSO_CLKGEN2_REG(REG_CLKGEN2_MMT_IN) = _u16TSOTopReg[0][5];
2120 TSP_TS_SAMPLE_REG(REG_TSO_OUT_CLK_SEL) = _u16TSOTopReg[0][6];
2121
2122 TSP_TOP_REG(REG_TOP_TSO_EVD) = _u16TSOTopReg[1][0];
2123 TSP_TOP_REG(REG_TOP_TS4_CFG) = _u16TSOTopReg[1][1];
2124 TSP_TOP_REG(REG_TOP_TS_CONFIG) = _u16TSOTopReg[1][2] ;
2125 TSP_TOP_REG(REG_TOP_TS2_CONFIG) = _u16TSOTopReg[1][3];
2126 TSP_TOP_REG(REG_TOP_TS3_CONFIG) = _u16TSOTopReg[1][4];
2127
2128 TSP_TSP5_REG(REG_TSP5_TSOIN_MUX) = _u16TSOTopReg[2][0];
2129 TSP_TSP5_REG(REG_TSP5_TSOOUT_MUX) = _u16TSOTopReg[2][1];
2130 TSP_TSP5_REG(REG_TSP5_MMT_MUX) = _u16TSOTopReg[2][2];
2131
2132 TSO0_REG(0x04) = _u16TSORegArray[0][0x04];
2133 TSO0_REG(0x05) = _u16TSORegArray[0][0x05];
2134 TSO0_REG(0x06) = _u16TSORegArray[0][0x06];
2135
2136 for(u32ii = 0; u32ii < TSO_FILE_IF_NUM; u32ii++)
2137 {
2138 TSO0_REG(u32temp+0x14) = _u16TSORegArray[0][u32temp+0x14];
2139 TSO0_REG(u32temp+0x15) = _u16TSORegArray[0][u32temp+0x15];
2140 TSO0_REG(u32temp+0x16) = _u16TSORegArray[0][u32temp+0x16];
2141 u32temp += 4;
2142 }
2143
2144 for(u32ii = 0x1c; u32ii <= 0x3f; u32ii++)
2145 {
2146 TSO0_REG(u32ii) = _u16TSORegArray[0][u32ii];
2147 }
2148
2149 TSO0_REG(0x43) = _u16TSORegArray[0][0x43] & ~0x0004;
2150 TSO0_REG(0x44) = _u16TSORegArray[0][0x44];
2151
2152 for(u32ii = 0; u32ii < TSO_FILE_IF_NUM; u32ii++)
2153 {
2154 TSO0_REG(u32ii+0x4c) = _u16TSORegArray[0][u32ii+0x4c];
2155 }
2156
2157 u32temp = 0;
2158 for(u32ii = 0; u32ii < TSO_FILE_IF_NUM; u32ii++)
2159 {
2160 TSO0_REG(u32temp+0x60) = _u16TSORegArray[0][u32temp+0x60];
2161 TSO0_REG(u32temp+0x61) = _u16TSORegArray[0][u32temp+0x61];
2162 TSO0_REG(u32temp+0x62) = _u16TSORegArray[0][u32temp+0x62];
2163 TSO0_REG(u32temp+0x63) = _u16TSORegArray[0][u32temp+0x63];
2164 u32temp += 5;
2165 }
2166
2167 TSO0_REG(0x6a) = _u16TSORegArray[0][0x6a];
2168 TSO0_REG(0x6b) = _u16TSORegArray[0][0x6b];
2169
2170 for(u32ii = 0; u32ii < TSO_FILE_IF_NUM; u32ii++)
2171 {
2172 TSO0_REG(u32ii+0x79) = _u16TSORegArray[0][u32ii+0x79];
2173 }
2174 TSO0_REG(0x7b) = _u16TSORegArray[0][0x7b];
2175 TSO0_REG(0x7c) = _u16TSORegArray[0][0x7c];
2176
2177 //TSO1
2178 TSO1_REG(0x00) = _u16TSORegArray[1][0x00];
2179
2180 for(u32ii = 0; u32ii < TSO_FILE_IF_NUM; u32ii++)
2181 {
2182 TSO1_REG(u32temp+0x10) = _u16TSORegArray[1][u32temp+0x10];
2183 u32temp += 4;
2184 }
2185
2186 TSO1_REG(0x18) = _u16TSORegArray[1][0x18];
2187 TSO1_REG(0x19) = _u16TSORegArray[1][0x19];
2188 TSO1_REG(0x1a) = _u16TSORegArray[1][0x1a];
2189 TSO1_REG(0x1b) = _u16TSORegArray[1][0x1b] & ~TSO_SVQ_TX_CFG_SVQ_EN; //disable SVQ fisr
2190
2191 u32temp =0;
2192 for(u32ii = 0; u32ii < TSO_FILE_IF_NUM; u32ii++)
2193 {
2194 TSO1_REG(u32temp+0x28) = _u16TSORegArray[1][u32temp+0x28];
2195 TSO1_REG(u32temp+0x29) = _u16TSORegArray[1][u32temp+0x29];
2196 TSO1_REG(u32temp+0x2a) = _u16TSORegArray[1][u32temp+0x2a];
2197 TSO1_REG(u32temp+0x2b) = _u16TSORegArray[1][u32temp+0x2b] & ~TSO_SVQ_TX_CFG_SVQ_EN; //disable SVQ first
2198 u32temp += 4;
2199 }
2200 for(u32ii = 0x30; u32ii <= 0x33; u32ii++)
2201 {
2202 TSO1_REG(u32ii) = _u16TSORegArray[1][u32ii];
2203 }
2204
2205 //enable SVQ
2206 if(_u16TSORegArray[1][0x1b] & TSO_SVQ_TX_CFG_SVQ_EN)
2207 {
2208 TSO1_REG(0x1b) |= TSO_SVQ_TX_CFG_TX_RESET;
2209 TSO1_REG(0x1b) &= ~TSO_SVQ_TX_CFG_TX_RESET;
2210 TSO1_REG(0x2b) |= TSO_SVQ_TX_CFG_TX_RESET;
2211 TSO1_REG(0x2b) &= ~TSO_SVQ_TX_CFG_TX_RESET;
2212 TSO1_REG(0x2f) |= TSO_SVQ_TX_CFG_TX_RESET;
2213 TSO1_REG(0x2f) &= ~TSO_SVQ_TX_CFG_TX_RESET;
2214
2215 TSO1_REG(0x1b) |= TSO_SVQ_TX_CFG_SVQ_EN;
2216 }
2217
2218 if(_u16TSORegArray[0][0x43] & 0x0004)
2219 {
2220 TSO0_REG(0x43) |= 0x0004;
2221 TSO0_REG(0x43) &= ~0x0004;
2222 }
2223
2224 //enable TSO setting
2225 TSO0_REG(0x1d) |= TSO_CFG1_PKT_PARAM_LD;
2226 TSO0_REG(0x1d) &= ~TSO_CFG1_PKT_PARAM_LD;
2227
2228 //set lpcr2, TSO file in start
2229 u32temp = 0;
2230 u32jj = 0;
2231 for(u32ii = 0; u32ii < TSO_FILE_IF_NUM; u32ii++)
2232 {
2233 if(_u16TSORegArray[0][u32temp+0x64] & 0x0003)
2234 {
2235 TSO0_REG(u32ii+0x79) = _u16TSORegArray[0][u32ii+0x79] | TSO_FICFG_LPCR2_WLD;
2236 TSO0_REG(u32jj+0x6c) = _u16TSORegArray[0][u32jj+0x6c];
2237 TSO0_REG(u32jj+0x6d) = _u16TSORegArray[0][u32jj+0x6d];
2238 TSO0_REG(u32ii+0x79) = _u16TSORegArray[0][u32ii+0x79] & ~TSO_FICFG_LPCR2_WLD;
2239 TSO0_REG(u32temp+0x64) = _u16TSORegArray[0][u32temp+0x64];
2240 }
2241 u32temp += 5;
2242 u32jj += 2;
2243 }
2244
2245 return TRUE;
2246 }
2247
2248 #endif //MSOS_TYPE_LINUX_KERNEL
2249
2250
2251