[Feature][Modem]Update MTK MODEM V1.6 baseline version: MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6
MTK modem version: MT2735_IVT_MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6.tar.gz
RF modem version: NA
Change-Id: I45a4c2752fa9d1a618beacd5d40737fb39ab64fb
diff --git a/mcu/interface/protocol/general/perf_api.h b/mcu/interface/protocol/general/perf_api.h
new file mode 100644
index 0000000..f445723
--- /dev/null
+++ b/mcu/interface/protocol/general/perf_api.h
@@ -0,0 +1,311 @@
+/******************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2005
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*******************************************************************************/
+#ifndef _PERF_API_H_
+#define _PERF_API_H_
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+#include "kal_public_api.h"
+#include "kal_trace.h"
+#include "event_info_utility.h"
+#include "md_sap.h"
+#include "perf_msgid.h"
+
+/********************************************
+ * TYPE DEFINITIONS & ENUMS *
+ ********************************************/
+typedef enum
+{
+ RECOVERY_TYPE_ASSERT = 0,
+ RECOVERY_TYPE_SIM_PLUG = 0, /// not support yet
+ RECOVERY_TYPE_FLIGHT_MODE,
+ RECOVERY_TYPE_REATTACH = RECOVERY_TYPE_FLIGHT_MODE, /// not support yet
+ RECOVERY_TYPE_LTE_LOCAL_RELEASE,
+ RECOVERY_TYPE_LTE_RRC_REESTABLISH,
+ RECOVERY_TYPE_PERF_SUPPORT_NUM, /// the max number PERF support (not include NR)
+
+ RECOVERY_TYPE_NR_LOCAL_RELEASE = RECOVERY_TYPE_PERF_SUPPORT_NUM,
+ RECOVERY_TYPE_NR_RRC_REESTABLISH,
+ RECOVERY_TYPE_NR_SCG_FAILURE_INFO,
+ RECOVERY_TYPE_NR_RRC_REDIRECT_FAIL, // RRC ask ERM to notify scenario when redirection fail, and notify NRRC when scenario happened
+} protocol_exception_recovery_type_enum;
+
+typedef enum
+{
+ LTE_LOCAL_RELEASE_RESULT_OK,
+ LTE_LOCAL_RELEASE_RESULT_FAIL
+} lte_local_release_result_enum;
+
+typedef enum
+{
+ LTE_RRC_REESTABLISH_RESULT_OK,
+ LTE_RRC_REESTABLISH_RESULT_ONGOING,
+ LTE_RRC_REESTABLISH_RESULT_FAIL
+} lte_rrc_reestablish_result_enum;
+
+typedef enum
+{
+ PERF_UT_MSG_SEND_NONE = 0,
+ PERF_UT_MSG_SEND_KAL,
+ PERF_UT_MSG_SEND_UTT
+} perf_ut_msg_send_mode_enum;
+
+/********************
+ NR related enum
+********************/
+
+typedef enum
+{
+ ERROR_RECOVERY_METHOD_NON = 0,
+ ERROR_RECOVERY_METHOD_RELEASE,
+ ERROR_RECOVERY_METHOD_REEST,
+ ERROR_RECOVERY_METHOD_SCG_FAIL_INFO,
+} error_recovery_method_enum;
+
+/********************************************
+ * VARIABLES *
+ ********************************************/
+#define PEFR_ALL_PROTOCOL_ID (0xF)
+#define PERF_MAX_DEBUG_BUF_SIZE (128) /// in byte
+#define PERF_FILENAME_LENGTH (90)
+#define PERF_FUNCTION_NAME_LENGTH (50)
+
+/********************************************
+ * STRUCTURES *
+ ********************************************/
+/// interface for Offender
+typedef struct
+{
+ void *p_buf;
+ kal_uint32 size; /// size of p_buf in byte
+} protocol_exception_recovery_debug_struct;
+
+/// User API parameter: PROTOCOL_EXCEPTION_RECOVERY()
+typedef struct
+{
+ kal_uint8 protocol_id; /**<
+ 0x0 ~ 0x3: protocol stack 1 ~ 4
+ PEFR_ALL_PROTOCOL_ID (0xF): all protocol stack id
+ **/
+ kal_bool disable_escalate_recovery; /// KAL_TRUE: disable escalating recovery feature
+ protocol_exception_recovery_debug_struct debug;
+} protocol_exception_recovery_info_struct;
+
+/// trigger PERF primitive structure (MSG_ID_PROTOCOL_EXCEPTION_RECOVERY)
+typedef struct
+{
+ LOCAL_PARA_HDR
+
+ protocol_exception_recovery_type_enum recovery_type;
+ protocol_exception_recovery_info_struct info;
+ char filename[PERF_FILENAME_LENGTH];
+ char function_name[PERF_FUNCTION_NAME_LENGTH];
+ kal_uint32 line;
+ //kal_uint8 debug_buff_id;
+} protocol_exception_recovery_struct;
+
+/// interface for flight mode Actor
+typedef struct
+{
+ LOCAL_PARA_HDR
+
+ kal_bool is_flight_mode;
+ kal_uint8 ps_id; /// protocol stack id bitmap
+} perf_l4bpwr_flight_mode_recovery_req, perf_l4bpwr_flight_mode_recovery_req_struct;
+
+typedef struct
+{
+ LOCAL_PARA_HDR
+
+ kal_bool result;
+} perf_l4bpwr_flight_mode_recovery_cnf, perf_l4bpwr_flight_mode_recovery_cnf_struct;
+
+/// interface for LTE local release Actor
+typedef struct
+{
+ LOCAL_PARA_HDR
+
+ lte_local_release_result_enum cause;
+ kal_uint8 protocol_id;
+} perf_emm_lte_local_release_recovery_cnf, perf_emm_lte_local_release_recovery_cnf_struct;
+
+/// interface for LTE RRC reestablishment Actor
+typedef struct
+{
+ LOCAL_PARA_HDR
+
+ lte_rrc_reestablish_result_enum cause;
+} perf_errc_lte_rrc_reestablishment_recovery_cnf, perf_errc_reestablishment_recovery_cnf_struct;
+
+/********************
+ NR related Struct.
+********************/
+/* MSG_ID_ERM_ERROR_IND*/
+typedef struct
+{
+ LOCAL_PARA_HDR
+
+ protocol_exception_recovery_type_enum err_event;
+ protocol_exception_recovery_info_struct info;
+} erm_error_ind_struct;
+
+/* MSG_ID_ERM_VGMM_ERROR_RECOVERY_REQ */
+typedef struct
+{
+ LOCAL_PARA_HDR
+
+ error_recovery_method_enum recovery_method;
+ kal_uint16 timer_period;
+} erm_vgmm_error_recovery_req_struct;
+
+/* MSG_ID_ERM_VGMM_ERROR_RECOVERY_CNF */
+typedef struct
+{
+ LOCAL_PARA_HDR
+} erm_vgmm_error_recovery_cnf_struct;
+/********************************************
+ * MACROS and API *
+ ********************************************/
+/// interface for LTE Local Release Actor
+/// hook function pointer from EMM to PERF
+typedef kal_bool (*perf_query_is_lte_conn_status_idle_f)(kal_uint8 protocol_id);
+extern void lte_local_release_actor_hook_conn_status_query_fp(perf_query_is_lte_conn_status_idle_f fp_query);
+
+/// atomic read PERF need update IDLE status (for local release recovery result)
+extern void lte_local_release_actor_update_conn_status(kal_bool is_idle, kal_uint8 protocol_id);
+
+kal_bool protocol_exception_recovery_trigger(
+ module_type module_id,
+ const char *filename,
+ const char *function_name,
+ kal_uint32 line,
+ protocol_exception_recovery_type_enum recovery_type,
+ protocol_exception_recovery_info_struct *p_info);
+/// Note: User shall "not" use below internal macro directly !
+#define __PERF_TRIGGER(_module, _file, _func, _line, _type, _info) \
+ protocol_exception_recovery_trigger(\
+ (_module),\
+ (_file),\
+ (_func),\
+ (kal_uint32)(_line),\
+ (protocol_exception_recovery_type_enum)(_type),\
+ (protocol_exception_recovery_info_struct *)(_info));
+
+#define _PERF_TRIGGER(_module, _type, _info) \
+ __PERF_TRIGGER((_module),__FILE__,__func__,__LINE__,(_type),(_info))
+
+#define _PERF_TRIGGER_LITE(_module, _type, _info) \
+ __PERF_TRIGGER((_module),"","",__LINE__,(_type),(_info))
+
+/// recovery API for general user
+#if defined(__MTK_TARGET__) && defined(__PERF_SUPPORT__) && !defined(__DEBUG_ASSERT_SUPPORT__) && !defined(__UE_SIMULATOR__)
+/// will change before/after SQC start
+#define PROTOCOL_EXCEPTION_RECOVERY _PERF_TRIGGER
+#define PROTOCOL_EXCEPTION_RECOVERY_LITE _PERF_TRIGGER_LITE
+#define EMM_HOOK_CONN_STATUS_QUERY_FP(_fp) lte_local_release_actor_hook_conn_status_query_fp((_fp))
+#define EMM_UPDATE_CONN_STATUS_TO_PERF(_is_idle, _protocol_id) lte_local_release_actor_update_conn_status((_is_idle), (_protocol_id))
+
+#elif defined(UNIT_TEST) && defined(__PERF_SUPPORT__) && !defined(__UE_SIMULATOR__)
+ /// UT always enable API
+#define PROTOCOL_EXCEPTION_RECOVERY _PERF_TRIGGER
+#define PROTOCOL_EXCEPTION_RECOVERY_LITE _PERF_TRIGGER_LITE
+#define EMM_HOOK_CONN_STATUS_QUERY_FP(_fp) lte_local_release_actor_hook_conn_status_query_fp((_fp))
+#define EMM_UPDATE_CONN_STATUS_TO_PERF(_is_idle, _protocol_id) lte_local_release_actor_update_conn_status((_is_idle), (_protocol_id))
+
+#else
+ /// for other build, always keep assert
+#define PROTOCOL_EXCEPTION_RECOVERY(_module, _type, _info) \
+ ASSERT(0); \
+ kal_prompt_trace((_module), "[PROTOCOL EXCEPTION] current stage is disable (%x,%x,%x)", (_module), (_type), (_info));
+#define PROTOCOL_EXCEPTION_RECOVERY_LITE PROTOCOL_EXCEPTION_RECOVERY
+#define EMM_HOOK_CONN_STATUS_QUERY_FP(_fp) lte_local_release_actor_hook_conn_status_query_fp((_fp))
+#define EMM_UPDATE_CONN_STATUS_TO_PERF(_is_idle, _protocol_id) if ((_is_idle) && (_protocol_id)){}
+
+#endif // ~ #if defined(__MTK_TARGET__) && !defined(__DEBUG_ASSERT_SUPPORT__) #elif defined(UNIT_TEST) #else
+
+/// recovery API for HISR user
+#define PROTOCOL_EXCEPTION_RECOVERY_HISR PROTOCOL_EXCEPTION_RECOVERY
+
+/// recovery API for LISR without multi-thread user
+#define PROTOCOL_EXCEPTION_RECOVERY_LISR PROTOCOL_EXCEPTION_RECOVERY
+
+/// recovery API for LISR with multi-thread user
+#define PROTOCOL_EXCEPTION_RECOVERY_MT_LISR PROTOCOL_EXCEPTION_RECOVERY
+
+/// Actor result update message send
+#ifdef UNIT_TEST
+extern perf_ut_msg_send_mode_enum g_ut_enable_msg_send;
+#ifdef __GTEST_ENABLE__
+#define PERF_UT_MSG_SEND6(...) \
+ if (g_ut_enable_msg_send == PERF_UT_MSG_SEND_NONE) \
+ { \
+ } \
+ else if (g_ut_enable_msg_send == PERF_UT_MSG_SEND_UTT) \
+ { \
+ utt_msg_send6(__VA_ARGS__); \
+ } \
+ else \
+ { \
+ msg_send6(__VA_ARGS__); \
+ }
+#else
+#define PERF_UT_MSG_SEND6(...) \
+ if (g_ut_enable_msg_send == PERF_UT_MSG_SEND_NONE) \
+ { \
+ } \
+ else \
+ { \
+ msg_send6(__VA_ARGS__); \
+ }
+#endif // ~ #ifdef __GTEST_ENABLE__ #else
+
+#define PERF_MSG_SEND6(...) PERF_UT_MSG_SEND6(__VA_ARGS__)
+#define ENABLE_PERF_MSG_SEND6() do{g_ut_enable_msg_send = PERF_UT_MSG_SEND_UTT;}while(0);
+#define ENABLE_PERF_MSG_SEND6_FOR_MSC() do{g_ut_enable_msg_send = PERF_UT_MSG_SEND_KAL;}while(0);
+#define DISABLE_PERF_MSG_SEND6() do{g_ut_enable_msg_send = PERF_UT_MSG_SEND_NONE;}while(0);
+#define DISABLE_PERF_MSG_SEND6_FOR_MSC DISABLE_PERF_MSG_SEND6
+#else
+#define PERF_MSG_SEND6(...) msg_send6(__VA_ARGS__)
+#endif // ~ #ifdef UNIT_TEST #else
+
+#ifdef __PERF_TEST_MODE__
+typedef void (*perf_test_mode_case_f)(void *param);
+extern kal_uint32 perf_test_mode_regist_a_case(perf_test_mode_case_f fp, void *param);
+#define PERF_REGIST_IT_CASE_FP(_fp, _param) perf_test_mode_regist_a_case((_fp), (void *)(_param))
+#else
+#define PERF_REGIST_IT_CASE_FP(_fp, _param)
+#endif // ~ #ifdef __PERF_TEST_MODE__
+
+#endif // ~ #ifndef _PERF_API_H_
\ No newline at end of file