blob: 9664eb761728de53bc5752f41d99d5c9c3e3c811 [file] [log] [blame]
yu.dongc33b3072024-08-21 23:14:49 -07001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2012
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35
36/****************************************************************************
37 * Filename:
38 * ---------
39 * @file L1Trc.h
40 *
41 * Description:
42 * ------------
43 * @brief Layer 1 /Layer 2 common & public interface for all trace user,
44 * Detail trace macro implement will put in each module's own interface.
45 *
46 * ==========================================================================
47 * $Log$
48 *
49 * 09 18 2019 victoria.wang
50 * [MOLY00416922] DHL Legacy Wrapper migration and phase-out
51 * [Remove][DHL] phase out legacy wrapper API
52 *
53 * 04 21 2019 yh.sung
54 * [MOLY00392990] [VMOLY][UTF] Phase 2 Landing
55 * [UTF][DHL] UTF Trace API - trace interface
56 *
57 * 12 05 2018 yu-hsiang.peng
58 * [MOLY00370324] NL1 timing information trace
59 * [VMOLY.EVB.SPET] [New Feature] Support NL1 time (SWRD part)
60 *
61 * 08 15 2018 yu-hsiang.peng
62 * [MOLY00343261] [MT6297] [Logging Service] DHL 2.0 Landing
63 * [DHL2.0] [ULSP] re-org file name & function pos.
64 *
65 ****************************************************************************/
66
67/*******************/
68/* CGen gen format */
69/*******************/
70typedef int cgen_use_L1ULSP;
71typedef int cgen_use_L1BitField;
72typedef int cgen_use_L1CondTrace;
73
74#if defined(__USE_ULSP_SW_SIMULATOR__)
75typedef int cgen_use_L1ULSP_Func_Impl;
76#endif
77
78
79#if defined (L1_CATCHER)
80#ifndef _L1TRC_H
81#define _L1TRC_H
82
83//#define __DHL_LEGACY_TRACE_API_ENABLE__
84
85/* for Cgen 92 SW logging, need Cgen help to remove, otherwise build error */
86typedef enum
87{
88 L1CSPM_DEFAULT,
89 SPIN_LOCK,
90 HW_ITC
91} E_DHL_TMD_CRIT_PROT;
92typedef enum
93{
94 L2_BUFFER_DEFAULT = 0,
95 L2_BUFFER_EL2 = L2_BUFFER_DEFAULT,
96 L2_BUFFER_HIF = 1,
97 L2_BUFFER_ERT = 2,
98 L2_BUFFER_END = 3
99} E_DHL_L2_BUFFER_MAPPING_TABLE;
100
101typedef enum
102{
103 MAX_L1_TRACE_CLASS_BYTE = 8
104} E_NUM_L1_TRACE_CLASS;
105
106/*******************/
107/* Include */
108/*******************/
109#include "kal_general_types.h"
110#include "kal_public_api.h"
111#if defined(__USE_ULSP__)
112#include "ulsp_mcu_logging.h"
113#endif//#if defined(__USE_ULSP__)
114
115
116/*******************/
117/* Definition - IRQ */
118/*******************/
119#if defined(__MTK_TARGET__)
120#if !defined(__L2_LOGGING_IRQ_LOC__)
121#define __L2_LOGGING_IRQ_LOC__
122#endif
123#endif
124
125#if defined(__L2_LOGGING_IRQ_LOC__)
126extern kal_uint32 dhl_SaveAndSetIRQMask_cirq_wrap(void);
127extern void dhl_RestoreIRQMask_cirq_wrap(kal_uint32 status);
128#define DHL_LOCK_CPU_INTERRUPT(oldmask) \
129 do{ \
130 oldmask = dhl_SaveAndSetIRQMask_cirq_wrap(); \
131 }while(0)
132
133#define DHL_UNLOCK_CPU_INTERRUPT(oldmask) \
134 do{ \
135 dhl_RestoreIRQMask_cirq_wrap(oldmask); \
136 }while(0)
137#elif defined(__MTK_TARGET__)
138
139extern kal_uint32 kal_hrt_SaveAndSetIRQMask(void);
140extern void kal_hrt_RestoreIRQMask(kal_uint32 irq);
141extern kal_uint32 dhl_SaveAndSetIRQMask_cirq_wrap(void);
142extern void dhl_RestoreIRQMask_cirq_wrap(kal_uint32 status);
143
144#define DHL_LOCK_CPU_INTERRUPT(oldmask) \
145 do{ \
146 oldmask = kal_hrt_SaveAndSetIRQMask(); \
147 }while(0)
148
149#define DHL_UNLOCK_CPU_INTERRUPT(oldmask) \
150 do{ \
151 kal_hrt_RestoreIRQMask(oldmask); \
152 }while(0)
153#else
154#define DHL_LOCK_CPU_INTERRUPT(oldmask) \
155 do{ \
156 oldmask = 0; \
157 }while(0)
158
159#define DHL_UNLOCK_CPU_INTERRUPT(oldmask) \
160 do{ \
161 oldmask = 0; \
162 }while(0)
163#endif /* __L2_LOGGING_IRQ_LOC__ */
164
165/************************/
166/* Definition -Trace Macro */
167/************************/
168
169
170#include "L1Trc_function.h"
171
172#if defined(L1_SIM)
173#include "dhl_ulsp_swsim_interface.h" // work around since xL1SIM can't get __USE_ULSP_SW_SIMULATOR__ option
174extern kal_bool l1_trc_assure_lisr(const char *func, const char *file, int line);
175
176#else
177
178#if defined(__USE_ULSP_L1L2SEQTEST__)
179#include "dhl_l1l2seqtest_hwulsp_interface.h"
180
181#elif defined(__USE_ULSP_SW_SIMULATOR__)
182#include "dhl_ulsp_swsim_interface.h"
183
184#elif defined(__USE_ULSP__)
185#include "dhl_ulsp_hw_interface.h"
186
187#endif
188
189#endif // L1_SIM
190
191#include "dhl_cond_l1_trace.h"
192
193/*******************/
194/* Definition - */
195/* code setting */
196/*******************/
197#if !defined(GEN_FOR_PC)
198
199#if defined(__MTK_TARGET__)
200#define __DHL_L2CACHE_LOCK_DATA __attribute__ ((section("L2CACHE_LOCK_RW")))
201#else
202#define __DHL_L2CACHE_LOCK_DATA
203#endif
204
205#define CONVERT_WORD_ALIGNMENT(val) (((val) + 4) / 4 * 4)
206
207typedef void (*trc_setfilterfunc)(unsigned char *);
208#define TRC_FILTER_FUNC_ARRAY trc_filterfuncarray
209#define TRC_NBR_MODULE trc_filterfuncnbr
210#define TRC_SET_FILTER_FUNC trc_setfilterfunc
211
212/*********************************************/
213/* Macro for declaring filter in codegen */
214/*********************************************/
215//force all to l2 cache in 93 to reduce mips, the conclusion after W16 PAE
216#define DECLARE_TMD_FILTER(VAR_TYPE, VAR_NAME, VAR_SIZE, P0, P1, P2, P3, P4, P5, P6, P7) \
217 VAR_TYPE VAR_NAME[VAR_SIZE] = {P0, P1, P2, P3, P4, P5, P6, P7};
218
219#define DECLARE_TMD_FILTER_L2SRAM(VAR_TYPE, VAR_NAME, VAR_SIZE, P0, P1, P2, P3, P4, P5, P6, P7) \
220 VAR_TYPE VAR_NAME[VAR_SIZE] = {P0, P1, P2, P3, P4, P5, P6, P7};
221
222#define DECLARE_TMD_FILTER_TCM(VAR_TYPE, VAR_NAME, VAR_SIZE, P0, P1, P2, P3, P4, P5, P6, P7) \
223 VAR_TYPE VAR_NAME[VAR_SIZE] = {P0, P1, P2, P3, P4, P5, P6, P7};
224
225/*********************************************/
226/* Macro for extern filter in codegen */
227/*********************************************/
228#define EXTERN_TMD_FILTER(VAR_TYPE, VAR_NAME, VAR_SIZE) \
229 extern VAR_TYPE VAR_NAME[VAR_SIZE];
230
231#define SET_TMD_FILTER(VAR_NAME, VAR_ARRAY_PTR, VAR_ARRAY_SIZE) \
232 do{ \
233 kal_uint32 i; \
234 for(i=0; i<VAR_ARRAY_SIZE; i++) VAR_NAME[i] = VAR_ARRAY_PTR[i]; \
235 }while(0)
236
237#define FILTER_COPY(DES_BUFFER, FILTER_NAME, FILTER_SIZE) \
238 do{ \
239 memcpy(DES_BUFFER, FILTER_NAME, FILTER_SIZE); \
240 }while(0);
241
242#define FILTER_CHECK(FILTER_NAME, FILTER_ARRAY_INDEX, FILTER_CLASS) ((FILTER_NAME[FILTER_ARRAY_INDEX] & FILTER_CLASS) != 0)
243
244//for Cgen bit encode
245#define TRC_L2_PAD (0xFA)
246#define TRC_BOXSTER_PAD (0xFA)
247//Use MACRO
248#define TRC_MERGE_2S_MACRO(v1, v2) ( (kal_uint32)(v1&0xFFFF) + ( ((kal_uint32)v2)<<16 ))
249#define TRC_MERGE_1S2C_MACRO(v1, v2, v3) ( (kal_uint32)(v1&0xFFFF) + ( ( (kal_uint32)(v2&0xFF) )<<16) + ( ((kal_uint32)v3)<<24) )
250#define TRC_MERGE_4C_MACRO(v1, v2, v3, v4) ( (kal_uint32)(v1&0xFF) + ( ((kal_uint32)(v2&0xFF))<<8) + ( ((kal_uint32)(v3&0xFF))<<16) + ( ((kal_uint32)v4)<<24))
251
252#define TRC_MERGE_2S(v1, v2) TRC_MERGE_2S_MACRO((v1), (v2))
253#define TRC_MERGE_1S2C(v1, v2, v3) TRC_MERGE_1S2C_MACRO((v1), (v2), (v3))
254#define TRC_MERGE_4C(v1, v2, v3, v4) TRC_MERGE_4C_MACRO((v1), (v2), (v3), (v4))
255
256#endif // #if !defined(GEN_FOR_PC)
257
258/************/
259/*Functions */
260/************/
261void trc_fillFrameNumber_multiple(kal_uint32 framenumber, kal_uint32 ebit, kal_uint32 time, kal_uint32 sim_index);
262void trc_UFillFrameNumber_multiple(kal_uint16 framenumber, kal_uint32 ebit, kal_int16 bsfn, kal_uint32 time, kal_uint32 sim_index);
263void trc_fill_4g_time(kal_uint32 phytimer, kal_uint16 sample, kal_uint32 time, kal_uint16 sfn, kal_uint8 subframe);
264void trc_fill_4g_time_2(kal_uint32 phytimer, kal_uint16 sample, kal_uint32 time, kal_uint16 sfn, kal_uint8 subframe, kal_uint32 _4g_time);
265void trc_fill_4g_time_gfrc2(kal_uint32 phytimer, kal_uint32 time, kal_uint16 sfn, kal_uint8 subframe, kal_uint32 absH, kal_uint32 absL);
266void trc_UpdateTimeStamp(kal_uint32 time);
267// Export for HIF GPT use
268void l2trc_fill_4G_time();
269void l2trc_update_4G_time(kal_uint32 celltime, kal_uint32 abstick);
270void l2trc_fill_23G_time();
271#if defined(__C2K_RAT__)
272extern void trc_fill_c2k_do_time(kal_uint8 fn_up, kal_uint32 fn_low, kal_uint8 slot, kal_uint32 echip, kal_uint32 frc);
273extern void trc_fill_c2k_1x_time(kal_uint8 fn_up, kal_uint32 fn_low, kal_uint8 slot, kal_uint32 echip, kal_uint32 frc);
274#endif // defined(__C2K_RAT__)
275void trc_fill_nl1_time(kal_uint8 nL1_idx, kal_uint32 timestamp, kal_uint32 abs_time, kal_uint16 cell_time, kal_uint32 sfbd_stime, kal_uint32 sfbd_frc, kal_uint32 frc);
276
277//if remove , will build error in el1
278void Trc_Init(void);
279void trc_handover(kal_uint32 handovertime, kal_uint32 framenumber);
280void trc_Uhandover(kal_uint32 handovertime, kal_uint32 framenumber);
281
282void trc_setfilter(kal_uint8 *setting, kal_uint32 len);
283void trc_set_l1_filter(kal_uint8 *setting, kal_uint32 len);
284void trc_set_l2_filter(kal_uint8 *setting, kal_uint32 len);
285kal_int32 trc_getfilter(kal_uint8 *buffer, kal_int32 len);
286
287#endif //_L1TRC_H
288#endif /* #if defined(L1_CATCHER) */