[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