blob: fc4504d493fa8f73f8bb9664066fdac0f2c04cc5 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/******************************************************************************
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) 2005
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#ifndef _PERF_API_H_
36#define _PERF_API_H_
37
38#include "kal_general_types.h"
39#include "kal_public_defs.h"
40#include "kal_public_api.h"
41#include "kal_trace.h"
42#include "event_info_utility.h"
43#include "md_sap.h"
44#include "perf_msgid.h"
45
46/********************************************
47 * TYPE DEFINITIONS & ENUMS *
48 ********************************************/
49typedef enum
50{
51 RECOVERY_TYPE_ASSERT = 0,
52 RECOVERY_TYPE_SIM_PLUG = 0, /// not support yet
53 RECOVERY_TYPE_FLIGHT_MODE,
54 RECOVERY_TYPE_REATTACH = RECOVERY_TYPE_FLIGHT_MODE, /// not support yet
55 RECOVERY_TYPE_LTE_LOCAL_RELEASE,
56 RECOVERY_TYPE_LTE_RRC_REESTABLISH,
57 RECOVERY_TYPE_PERF_SUPPORT_NUM, /// the max number PERF support (not include NR)
58
59 RECOVERY_TYPE_NR_LOCAL_RELEASE = RECOVERY_TYPE_PERF_SUPPORT_NUM,
60 RECOVERY_TYPE_NR_RRC_REESTABLISH,
61 RECOVERY_TYPE_NR_SCG_FAILURE_INFO,
62 RECOVERY_TYPE_NR_RRC_REDIRECT_FAIL, // RRC ask ERM to notify scenario when redirection fail, and notify NRRC when scenario happened
rjw2b1408e2022-12-19 11:19:29 +080063 RECOVERY_TYPE_NR_NW_REJECT_WITH_LONG_WAIT_TIME
rjw6c1fd8f2022-11-30 14:33:01 +080064} protocol_exception_recovery_type_enum;
65
66typedef enum
67{
68 LTE_LOCAL_RELEASE_RESULT_OK,
69 LTE_LOCAL_RELEASE_RESULT_FAIL
70} lte_local_release_result_enum;
71
72typedef enum
73{
74 LTE_RRC_REESTABLISH_RESULT_OK,
75 LTE_RRC_REESTABLISH_RESULT_ONGOING,
76 LTE_RRC_REESTABLISH_RESULT_FAIL
77} lte_rrc_reestablish_result_enum;
78
79typedef enum
80{
81 PERF_UT_MSG_SEND_NONE = 0,
82 PERF_UT_MSG_SEND_KAL,
83 PERF_UT_MSG_SEND_UTT
84} perf_ut_msg_send_mode_enum;
85
86/********************
87 NR related enum
88********************/
89
90typedef enum
91{
92 ERROR_RECOVERY_METHOD_NON = 0,
93 ERROR_RECOVERY_METHOD_RELEASE,
94 ERROR_RECOVERY_METHOD_REEST,
95 ERROR_RECOVERY_METHOD_SCG_FAIL_INFO,
96} error_recovery_method_enum;
97
98/********************************************
99 * VARIABLES *
100 ********************************************/
101#define PEFR_ALL_PROTOCOL_ID (0xF)
102#define PERF_MAX_DEBUG_BUF_SIZE (128) /// in byte
103#define PERF_FILENAME_LENGTH (90)
104#define PERF_FUNCTION_NAME_LENGTH (50)
105
106/********************************************
107 * STRUCTURES *
108 ********************************************/
109/// interface for Offender
110typedef struct
111{
112 void *p_buf;
113 kal_uint32 size; /// size of p_buf in byte
114} protocol_exception_recovery_debug_struct;
115
116/// User API parameter: PROTOCOL_EXCEPTION_RECOVERY()
117typedef struct
118{
119 kal_uint8 protocol_id; /**<
120 0x0 ~ 0x3: protocol stack 1 ~ 4
121 PEFR_ALL_PROTOCOL_ID (0xF): all protocol stack id
122 **/
123 kal_bool disable_escalate_recovery; /// KAL_TRUE: disable escalating recovery feature
124 protocol_exception_recovery_debug_struct debug;
125} protocol_exception_recovery_info_struct;
126
127/// trigger PERF primitive structure (MSG_ID_PROTOCOL_EXCEPTION_RECOVERY)
128typedef struct
129{
130 LOCAL_PARA_HDR
131
132 protocol_exception_recovery_type_enum recovery_type;
133 protocol_exception_recovery_info_struct info;
134 char filename[PERF_FILENAME_LENGTH];
135 char function_name[PERF_FUNCTION_NAME_LENGTH];
136 kal_uint32 line;
137 //kal_uint8 debug_buff_id;
138} protocol_exception_recovery_struct;
139
140/// interface for flight mode Actor
141typedef struct
142{
143 LOCAL_PARA_HDR
144
145 kal_bool is_flight_mode;
146 kal_uint8 ps_id; /// protocol stack id bitmap
147} perf_l4bpwr_flight_mode_recovery_req, perf_l4bpwr_flight_mode_recovery_req_struct;
148
149typedef struct
150{
151 LOCAL_PARA_HDR
152
153 kal_bool result;
154} perf_l4bpwr_flight_mode_recovery_cnf, perf_l4bpwr_flight_mode_recovery_cnf_struct;
155
156/// interface for LTE local release Actor
157typedef struct
158{
159 LOCAL_PARA_HDR
160
161 lte_local_release_result_enum cause;
162 kal_uint8 protocol_id;
163} perf_emm_lte_local_release_recovery_cnf, perf_emm_lte_local_release_recovery_cnf_struct;
164
165/// interface for LTE RRC reestablishment Actor
166typedef struct
167{
168 LOCAL_PARA_HDR
169
170 lte_rrc_reestablish_result_enum cause;
171} perf_errc_lte_rrc_reestablishment_recovery_cnf, perf_errc_reestablishment_recovery_cnf_struct;
172
173/********************
174 NR related Struct.
175********************/
176/* MSG_ID_ERM_ERROR_IND*/
177typedef struct
178{
179 LOCAL_PARA_HDR
180
181 protocol_exception_recovery_type_enum err_event;
182 protocol_exception_recovery_info_struct info;
183} erm_error_ind_struct;
184
185/* MSG_ID_ERM_VGMM_ERROR_RECOVERY_REQ */
186typedef struct
187{
188 LOCAL_PARA_HDR
189
190 error_recovery_method_enum recovery_method;
191 kal_uint16 timer_period;
192} erm_vgmm_error_recovery_req_struct;
193
194/* MSG_ID_ERM_VGMM_ERROR_RECOVERY_CNF */
195typedef struct
196{
197 LOCAL_PARA_HDR
198} erm_vgmm_error_recovery_cnf_struct;
199/********************************************
200 * MACROS and API *
201 ********************************************/
202/// interface for LTE Local Release Actor
203/// hook function pointer from EMM to PERF
204typedef kal_bool (*perf_query_is_lte_conn_status_idle_f)(kal_uint8 protocol_id);
205extern void lte_local_release_actor_hook_conn_status_query_fp(perf_query_is_lte_conn_status_idle_f fp_query);
206
207/// atomic read PERF need update IDLE status (for local release recovery result)
208extern void lte_local_release_actor_update_conn_status(kal_bool is_idle, kal_uint8 protocol_id);
209
210kal_bool protocol_exception_recovery_trigger(
211 module_type module_id,
212 const char *filename,
213 const char *function_name,
214 kal_uint32 line,
215 protocol_exception_recovery_type_enum recovery_type,
216 protocol_exception_recovery_info_struct *p_info);
217/// Note: User shall "not" use below internal macro directly !
218#define __PERF_TRIGGER(_module, _file, _func, _line, _type, _info) \
219 protocol_exception_recovery_trigger(\
220 (_module),\
221 (_file),\
222 (_func),\
223 (kal_uint32)(_line),\
224 (protocol_exception_recovery_type_enum)(_type),\
225 (protocol_exception_recovery_info_struct *)(_info));
226
227#define _PERF_TRIGGER(_module, _type, _info) \
228 __PERF_TRIGGER((_module),__FILE__,__func__,__LINE__,(_type),(_info))
229
230#define _PERF_TRIGGER_LITE(_module, _type, _info) \
231 __PERF_TRIGGER((_module),"","",__LINE__,(_type),(_info))
232
233/// recovery API for general user
234#if defined(__MTK_TARGET__) && defined(__PERF_SUPPORT__) && !defined(__DEBUG_ASSERT_SUPPORT__) && !defined(__UE_SIMULATOR__)
235/// will change before/after SQC start
236#define PROTOCOL_EXCEPTION_RECOVERY _PERF_TRIGGER
237#define PROTOCOL_EXCEPTION_RECOVERY_LITE _PERF_TRIGGER_LITE
238#define EMM_HOOK_CONN_STATUS_QUERY_FP(_fp) lte_local_release_actor_hook_conn_status_query_fp((_fp))
239#define EMM_UPDATE_CONN_STATUS_TO_PERF(_is_idle, _protocol_id) lte_local_release_actor_update_conn_status((_is_idle), (_protocol_id))
240
241#elif defined(UNIT_TEST) && defined(__PERF_SUPPORT__) && !defined(__UE_SIMULATOR__)
242 /// UT always enable API
243#define PROTOCOL_EXCEPTION_RECOVERY _PERF_TRIGGER
244#define PROTOCOL_EXCEPTION_RECOVERY_LITE _PERF_TRIGGER_LITE
245#define EMM_HOOK_CONN_STATUS_QUERY_FP(_fp) lte_local_release_actor_hook_conn_status_query_fp((_fp))
246#define EMM_UPDATE_CONN_STATUS_TO_PERF(_is_idle, _protocol_id) lte_local_release_actor_update_conn_status((_is_idle), (_protocol_id))
247
248#else
249 /// for other build, always keep assert
250#define PROTOCOL_EXCEPTION_RECOVERY(_module, _type, _info) \
251 ASSERT(0); \
252 kal_prompt_trace((_module), "[PROTOCOL EXCEPTION] current stage is disable (%x,%x,%x)", (_module), (_type), (_info));
253#define PROTOCOL_EXCEPTION_RECOVERY_LITE PROTOCOL_EXCEPTION_RECOVERY
254#define EMM_HOOK_CONN_STATUS_QUERY_FP(_fp) lte_local_release_actor_hook_conn_status_query_fp((_fp))
255#define EMM_UPDATE_CONN_STATUS_TO_PERF(_is_idle, _protocol_id) if ((_is_idle) && (_protocol_id)){}
256
257#endif // ~ #if defined(__MTK_TARGET__) && !defined(__DEBUG_ASSERT_SUPPORT__) #elif defined(UNIT_TEST) #else
258
259/// recovery API for HISR user
260#define PROTOCOL_EXCEPTION_RECOVERY_HISR PROTOCOL_EXCEPTION_RECOVERY
261
262/// recovery API for LISR without multi-thread user
263#define PROTOCOL_EXCEPTION_RECOVERY_LISR PROTOCOL_EXCEPTION_RECOVERY
264
265/// recovery API for LISR with multi-thread user
266#define PROTOCOL_EXCEPTION_RECOVERY_MT_LISR PROTOCOL_EXCEPTION_RECOVERY
267
268/// Actor result update message send
269#ifdef UNIT_TEST
270extern perf_ut_msg_send_mode_enum g_ut_enable_msg_send;
271#ifdef __GTEST_ENABLE__
272#define PERF_UT_MSG_SEND6(...) \
273 if (g_ut_enable_msg_send == PERF_UT_MSG_SEND_NONE) \
274 { \
275 } \
276 else if (g_ut_enable_msg_send == PERF_UT_MSG_SEND_UTT) \
277 { \
278 utt_msg_send6(__VA_ARGS__); \
279 } \
280 else \
281 { \
282 msg_send6(__VA_ARGS__); \
283 }
284#else
285#define PERF_UT_MSG_SEND6(...) \
286 if (g_ut_enable_msg_send == PERF_UT_MSG_SEND_NONE) \
287 { \
288 } \
289 else \
290 { \
291 msg_send6(__VA_ARGS__); \
292 }
293#endif // ~ #ifdef __GTEST_ENABLE__ #else
294
295#define PERF_MSG_SEND6(...) PERF_UT_MSG_SEND6(__VA_ARGS__)
296#define ENABLE_PERF_MSG_SEND6() do{g_ut_enable_msg_send = PERF_UT_MSG_SEND_UTT;}while(0);
297#define ENABLE_PERF_MSG_SEND6_FOR_MSC() do{g_ut_enable_msg_send = PERF_UT_MSG_SEND_KAL;}while(0);
298#define DISABLE_PERF_MSG_SEND6() do{g_ut_enable_msg_send = PERF_UT_MSG_SEND_NONE;}while(0);
299#define DISABLE_PERF_MSG_SEND6_FOR_MSC DISABLE_PERF_MSG_SEND6
300#else
301#define PERF_MSG_SEND6(...) msg_send6(__VA_ARGS__)
302#endif // ~ #ifdef UNIT_TEST #else
303
304#ifdef __PERF_TEST_MODE__
305typedef void (*perf_test_mode_case_f)(void *param);
306extern kal_uint32 perf_test_mode_regist_a_case(perf_test_mode_case_f fp, void *param);
307#define PERF_REGIST_IT_CASE_FP(_fp, _param) perf_test_mode_regist_a_case((_fp), (void *)(_param))
308#else
309#define PERF_REGIST_IT_CASE_FP(_fp, _param)
310#endif // ~ #ifdef __PERF_TEST_MODE__
311
312#endif // ~ #ifndef _PERF_API_H_