[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/protocol/interface/errc/5g/errc_nrrc_struct.h b/mcu/protocol/interface/errc/5g/errc_nrrc_struct.h
new file mode 100644
index 0000000..76a122a
--- /dev/null
+++ b/mcu/protocol/interface/errc/5g/errc_nrrc_struct.h
@@ -0,0 +1,1205 @@
+/*****************************************************************************
+*  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) 2016
+*
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * errc_nrrc_struct.h
+ *
+ * Project:
+ * --------
+ *
+ *
+ * Description:
+ * ------------
+ *  Messages and common definitions for ERRC-NRRC interface
+ *
+ * Author:
+ * -------
+ *
+ *
+ * ==========================================================================
+ * $Log$
+ *
+ * 01 20 2022 tina.ma
+ * [MOLY00750695] N77/78????????
+ * 	
+ * 	.
+ *
+ * 11 09 2021 ashik.tj
+ * [MOLY00686649] [Gen97] NR EPS Voice Fallback Indicator (Porting from GEN98 MOLY00604278 )
+ *
+ * 11 02 2020 yi-han.chung
+ * [MOLY00584170] 5G SA elevator mode
+ * 	
+ * 	errc_nrrc_struct.h
+ *
+ * 09 23 2020 hoho.chen
+ * [MOLY00567882] [MT6875][Margaux][Q0][MP6][SQC][Globe][WW FT][Philippines][Manila][IMS][VoLTE][5GMM][NSA][TCID: FREE_TEST][Moving] EE ASSERT after power up in 5G Area
+ * .
+ *
+ * 09 18 2020 tsung-wei.tu
+ * [MOLY00561862] [Gen97][MP7][VzW][AFR] feature check-in,  (check-in approved:?item_344)
+ * .
+ *
+ * 09 14 2020 tsung-wei.tu
+ * [MOLY00561862] [Gen97][MP7][VzW][AFR] feature check-in,  (check-in approved:?item_344)
+ * .
+ *
+ * 07 17 2020 jari.korva
+ * [MOLY00534361] ?19420??UK??EE??FT??EVT?DUT can't always stay on NR while activating small data in the background
+ * 	
+ * 	[NCONN] NR Cell Detection with auto-gap (EN-DC).
+ *
+ * 06 30 2020 doris.jiang
+ * [MOLY00534637] [Gen97] EM/ICD check in for DMF feature
+ * 	
+ * 	[MOLY00525281] NSA°åç»´æ?求ïSCGæ·»å失败主动上报事件
+ * 	
+ * 	[Huawei requirement] ICD development - SCG Failure event/ SCG release event
+ *
+ * 06 19 2020 stephen-wy.chen
+ * [MOLY00534712] [MT6853][Mouton][MT6190][R3][MP5][Q0][SQC][China][Shantou][5GMM][NSA][Internal][FT][NSA Self-Cer][TCID:NSA_Self-Cer_FT_02_002][CU+CMCC][error times:1][Fatal error(MPU_NOT_ALLOW)] err_code1:0x0000001D err_code2:0x90CE30BE err_code3:0x29D0DF20
+ * 	
+ * 	SCG/MAIN pass release NR/LTE info to EL1 through NCONFIG
+ *
+ * 05 29 2020 jutta.liuska
+ * [MOLY00527121] LGE/FCC requirement for Band 41 AMPR
+ * 	
+ * 	MAIN, NRRC INTERFACE and UTILITY: AMPR
+ *
+ * 05 05 2020 shin.chen
+ * [MOLY00520212] (Code Sync to Gen97) [Gen98][UNITE][5G][R15_SA_IRAT_HO_NR2LTE_4]Assert fail: protocol/enl2/pdcp/common/src/epdcp_rbm.c 4076 - EL2
+ * 	
+ * 	.
+ *
+ * 03 23 2020 hoho.chen
+ * [MOLY00502844] 2713368Gi19165jiMPjiWIj?d`?5GA?kWI
+ * .
+ *
+ * 02 27 2020 hoho.chen
+ * [MOLY00501962] [MT6873][Margaux][Q0][MP2][SQC][China][Lanzhou][5GMM][NSA][Internal][FT][MDST][CAT][Static][CMCC+CT][ASSERT]err_code1:0x00000433 err_code2:0x2B4F8C1C err_code3:0xCCCCCCCC MD Offender:ERRC
+ * .
+ *
+ * 02 10 2020 shin.chen
+ * [MOLY00495934] [MT6873][Margaux][Q0][MP2][SQC][China][Shanghai][4GMM][Internal][FT][MDST][CAT][Moving][CT+CMCC]md1:(MCU_core0.vpe1.tc2(VPE1)) [ASSERT] file:mcu/driver/dpcopro/src/dpcopro_hisr.c line:775
+ * 	
+ * 	.
+ *
+ * 11 14 2019 chin-chia.chang
+ * [MOLY00458872] [Network Issue][MT6885][Petrus][Q0][SQC][MP1][TDD][CMCC][FT][IMS][CMCC FT][China][Changsha][1.3.2]Call drop 5 times
+ * 	
+ * 	[SCG][SecurityAlgo][VMTRK][EWSP]
+ *
+ * 09 25 2019 yuhhwang.yu
+ * [MOLY00443312] [MT6885][Petrus][Sanity][VMOLY][VMOLY][2019-09-21_1700] ASSERT = [1][core1,vpe0,tc0(vpe3)] Assert fail: epdcp_rbm.c 6392 - EL2 _
+ * . leave VC CONN part
+ *
+ * 09 17 2019 tereasa.huang
+ * [MOLY00440649] [Gen97][NL1_MOB][NRRC_MEAS] Gaming cell list for mobility enhancement
+ * [NRRC][MEAS] Remove PRS_GAP_IND.
+ *
+ * 08 26 2019 jutta.liuska
+ * [MOLY00432893] [Gen97][Interworking] refactor IRAT structure & procedure
+ * [NCONN] Update 'nas_container' field in ERRC_NRRC_HANDOVER_NRCELL_CNF (VMOLY.APOLLO.SQC)
+ *
+ * 08 15 2019 hoho.chen
+ * [MOLY00427072] [Gen97][NSA] Deactivate ENDC feature
+ * .
+ *
+ * 07 01 2019 chin-chia.chang
+ * [MOLY00415645] [MT6297][Apollo][IODT][MP0.5][Ericsson][Lab][5GSM][China][Beijing][NSA][TC7][Mobility] IE check error for LTE MeNB handover
+ * [VM TRK]NR SEC: SCG feedback NR Sec Algo back to ERRC by Config_Cnf.
+ *
+ * 06 20 2019 sakari.niemela
+ * [MOLY00407048] [6297][NRRC] LTE OTDOA Measurement in NR
+ * [NCONN] LTE OTDOA measurements in NR (MPD part)
+ *
+ * 05 30 2019 charley-cc.cheng
+ * [MOLY00402003] [VMOLY] GEMINI N+L DSDS
+ *
+ * 	[CONFIG][SA and NSA Gemini] Config code and interface
+ *
+ * 05 16 2019 bekim.abazi
+ * [MOLY00407048] [6297][NRRC] LTE OTDOA Measurement in NR
+ * NRRC MAIN: LTE OTDOA Measurements in NR message handling for MAIN, part 1
+ *
+ * 03 28 2019 hoho.chen
+ * [MOLY00379215] [MT6297][EN-DC] Scenario where SRB1 is configured to use NR PDCP before the initial security configuration does not work
+ * .
+ *
+ * 03 28 2019 hoho.chen
+ * [MOLY00379215] [MT6297][EN-DC] Scenario where SRB1 is configured to use NR PDCP before the initial security configuration does not work
+ * .
+ *
+ * 03 27 2019 shin.chen
+ * [MOLY00378596] [MT6297] SMTC received in LTE signaling for EN-DC PSCell add and EN-DC SN change is not handled at all
+ * .
+ *
+ * 03 26 2019 chin-chia.chang
+ * [MOLY00394187] [VMOLY] [ERRC] [SCG]: (R2-1817620) Introducing procedure for reporting RLC failures
+ *
+ * 	1)
+ * 	[NRRC SCG] [RLC failure]
+ * 	 interface
+ * 	must include evth_tbl
+ *
+ * 03 26 2019 chin-chia.chang
+ * [MOLY00388674] [VMOLY] [ERRC] [CONN]: IR Redirect: RatChangeInd is reserved till ERRC-CONN recv NRRC_CNF
+ *
+ * 	[1] = 1) + 7)
+ * 	[ERRC CONN]
+ * 	[IR Redirect] : RatChangeInd is reserved till ERRC-CONN recv NRRC_CNF
+ * 	[SCG_reconfigSyncFail]
+ *
+ * 03 25 2019 hannu.huusko
+ * [MOLY00393510] [6297][NRRC] InterRAT-RSTD
+ * [NRRC-ERRC SAP] InterRAT RSTD message structures
+ *
+ * 02 17 2019 jutta.liuska
+ * [MOLY00378596] [MT6297] SMTC received in LTE signaling for EN-DC PSCell add and EN-DC SN change is not handled at all
+ * Changes to SMTC implementation
+ *
+ * 12 24 2018 lorenz.lin
+ * [MOLY00374379] [ERRC][CEL] 5G4 RCGI development
+ * 5G4 RCGI related interface (MPD).
+ *
+ * 12 20 2018 farming.tseng
+ * [MOLY00373070] [VMOLY] CONN SA IRAT HO, interface part.
+ *
+ * 12 20 2018 po-yu.huang
+ * [MOLY00370464] [Gen97][ERRC][MOB] NR development on VMOLY.EVB.SEPT.DEV
+ *
+ * 	.
+ *
+ * 12 18 2018 po-yu.huang
+ * [MOLY00370464] [Gen97][ERRC][MOB] NR development on VMOLY.EVB.SEPT.DEV
+ *
+ * 	.
+ *
+ * 12 12 2018 otto.liu
+ * [MOLY00368748] [GEN97][CEL] SEP.DEV to VMOLY integrating
+ * 4G5 IR redirect
+ *
+ * 11 29 2018 otto.liu
+ * [MOLY00368748] [GEN97][CEL] SEP.DEV to VMOLY integrating
+ *
+ * 	SA to VMOLY
+ *
+ * 11 29 2018 po-yu.huang
+ * [MOLY00368762] [Gen97][ERRC][MOB] VMOLY.FPGA.SEP.DEV to VMOLY
+ *
+ * 	NR RCGI & ENDC auto gap IF
+ *
+ * 11 29 2018 tsung-wei.tu
+ * [MOLY00367484] [Gen97][SEARCH] NRRC-SEARCH 1st version
+ * NRRC-SEARCH common part
+ *
+ * 11 06 2018 yi-han.chung
+ * [MOLY00346944] [Gen97][NRRC] IDLE development
+ *
+ * 	.
+ *
+ * 10 31 2018 hannu.huusko
+ * [MOLY00361478] [Gen97] Gemini Compile Option Clean Up
+ *
+ * 	Replace __REMOTE_SIM__ with __GEMINI__
+ *
+ * 10 31 2018 chin-chia.chang
+ * [MOLY00346103] [6297] [NRRC] SCG dev
+ *
+ * 	[VMOLY]
+ * 	LTE fullConfig
+ * 	NRRC MAIN interface:
+ *
+ * 10 16 2018 doug.shih
+ * [MOLY00324797] [6297][ERRC] CHM development
+ * [ERRC-NRRC Interface] PSCell Status Indication in CHECK_IE_CNF/CONFIG_CNF.
+ *
+ * 10 03 2018 ming.shen
+ * [MOLY00356286] [Gen97] background search feature - interface
+ *
+ * 08 07 2018 antti.kaisto
+ * [MOLY00309859] [6297][NRRC] CONFIG module EN-DC implementation
+ * NRRC: drb_config_exist renamed to rb_config_exist. (CBr to GEN97.DEV merge)
+ *
+ * 07 31 2018 jutta.liuska
+ * [MOLY00309859] [6297][NRRC] CONFIG module EN-DC implementation
+ * Update CONFIG implementation according to the latest SAP agreements
+ *
+ * 	[Protocol build tag]
+ * 	[Is CL self testable: NO]
+ * 	[Group CL list: WAIT]
+ *
+ * 07 20 2018 esko.oikarinen
+ * [MOLY00311681] [6297][NRRC] MAIN module changes
+ * 	Background search for LTE
+ *
+ * 	[Protocol build tag]
+ * 	[Is CL self testable: YES]
+ * 	[Group CL list: NO]
+ *
+ * 07 04 2018 nicky.chou
+ * [MOLY00320629] [6297] PS.DEV patch back to GEN97.DEV
+ * [CONN][NSA] remove 'is_idle' and 'cmd' in ERRC_NRRC_QOS_UPDATE_REQ.
+ *
+ * [Protocol build tag]
+ * [Is CL self testable: NO]
+ * [Group CL list: WAIT]
+ *
+ * 06 19 2018 jutta.liuska
+ * [MOLY00309859] [6297][NRRC] CONFIG module EN-DC implementation
+ * NRRC CONFIG:  Added suspend_scg to nrrc_errc_pdcp_config_req_struct
+ *
+ * 	[Protocol build tag]
+ * 	[Is CL self testable: YES]
+ * 	[Group CL list: n/a]
+ *
+ * 06 01 2018 shin.chen
+ * [MOLY00324797] [6297][ERRC] CHM development
+ * .
+ *
+ * 05 18 2018 nicky.chou
+ * [MOLY00320629] [6297] PS.DEV patch back to GEN97.DEV
+ * .
+ *
+ * 05 18 2018 nicky.chou
+ * [MOLY00320629] [6297] PS.DEV patch back to GEN97.DEV
+ * .
+ *
+ * 05 18 2018 nicky.chou
+ * [MOLY00320629] [6297] PS.DEV patch back to GEN97.DEV
+ * .
+ *
+ * 05 18 2018 nicky.chou
+ * [MOLY00320629] [6297] PS.DEV patch back to GEN97.DEV
+ * .
+ *
+ * 05 17 2018 jutta.liuska
+ * [MOLY00309859] [6297][NRRC] CONFIG module EN-DC implementation
+ * Correction for Qos update command
+ *
+ * 05 17 2018 jutta.liuska
+ * [MOLY00309859] [6297][NRRC] CONFIG module EN-DC implementation
+ * Corrections to QoS update structures
+ *
+ * 05 14 2018 jutta.liuska
+ * [MOLY00309859] [6297][NRRC] CONFIG module EN-DC implementation
+ * QOS update
+ *
+ * 04 27 2018 claud.li
+ * [MOLY00316750] [6297][NRRC] SCG development
+ * [SCG] SCG DEV basic procedures (Gen97 DEV)
+ *
+ * 04 03 2018 nicky.chou
+ * [MOLY00316692] [6297] Interface build-up for ERRC-NRRC, ERRC/NRRC-ENL2, ERRC-EL2 SAP
+ * .
+ *
+ * 04 03 2018 doug.shih
+ * [MOLY00316692] [6297] Interface build-up for ERRC-NRRC, ERRC/NRRC-ENL2, ERRC-EL2 SAP
+ * .
+ *
+ * 03 31 2018 nicky.chou
+ * [MOLY00316692] [6297] Interface build-up for ERRC-NRRC, ERRC/NRRC-ENL2, ERRC-EL2 SAP
+ * .
+ *
+ * 03 29 2018 hannu.huusko
+ * [MOLY00308815] [6297][NRRC] MAIN module implementation
+ * [NRRC][MAIN] ERRC_NRRC_SRB3_CONFIG_IND sending
+ *
+ * 03 28 2018 claud.li
+ * [MOLY00316750] [6297][NRRC] SCG development
+ * [SCG] interface: remvoe #define ENPDCP_SAP_MAX_NUM_RB_IDX 8
+ * use it in enl2_sap_common.h
+ *
+ * 03 28 2018 nicky.chou
+ * [MOLY00316692] [6297] Interface build-up for ERRC-NRRC, ERRC/NRRC-ENL2, ERRC-EL2 SAP
+ * .
+ *
+ * 03 28 2018 nicky.chou
+ * [MOLY00316692] [6297] Interface build-up for ERRC-NRRC, ERRC/NRRC-ENL2, ERRC-EL2 SAP
+ *
+ * 03 28 2018 claud.li
+ * [MOLY00316750] [6297][NRRC] SCG development
+ * [SCG] interface
+ *
+ * 03 27 2018 sam.tsai
+ * [MOLY00316475] [6297][NRRC] MEAS development
+ * . interface check-in
+ *
+ * 03 14 2018 sakari.niemela
+ * [MOLY00309859] [6297][NRRC] CONFIG module EN-DC implementation
+ * Take ERRC - NRRC SAP skeletons in use
+ *
+ * 02 21 2018 hannu.huusko
+ * [MOLY00308815] [6297][NRRC] MAIN module implementation
+ *  [NRRC][MAIN] ERRC and SCG message sending functions.
+ *
+ ****************************************************************************/
+
+
+#ifndef _ERRC_NRRC_STRUCT_H
+#define _ERRC_NRRC_STRUCT_H
+
+#include "kal_general_types.h"
+#include "kal_public_defs.h"
+
+#include "enl2_sap_common.h"
+#include "nrrc_nl1_struct.h" // for NR_SCS_TYPE_E and nl1_primary_ssb_mtc_struct
+
+#include "irat_common_enums.h"
+#include "irat_common_struct.h"
+#include "mcd_l3_inc_struct.h"
+
+#include "as_inter_core_enum.h"
+
+#include "global_type.h"
+#include "as_inter_core_struct.h"
+#include "lpp_msg_struct.h" // For interRAT RSTD messages
+
+#include "enl2_sap_common.h" // for 1)enpdcp_ciphering_alg_enum 2)enpdcp_integrity_alg_enum
+
+/********************************************
+ *                  MACROS                  *
+ ********************************************/
+#define NR_CONFIG_IE_SCG    0x01
+#define NR_CONFIG_IE_MEAS   0x02
+
+#define ENRRC_ENL2_RB_ID_MAX       34  /* Maximum number of RB configuration between ERRC and NRRC IE check synchronization.
+                                        * DRB: 1~32 (32), SRB: 1~2 (2) */
+
+#define ERRC_NRRC_MAX_DRB          11
+
+#define LPP_OTDOA_MAX_IRAT_FREQ_NUM          3
+
+#define MAX_NUM_NR_CELL_INFO (16)
+#define MAX_NUM_NR_REDIRECTION_FREQ (64)
+#define MAX_NUM_LTE_REDIRECTION_FREQ (8)
+
+#define ERRC_NRRC_MAX_NR_FREQ_CFG_NUM (16)
+#define ERRC_NRRC_MAX_MULTI_BAND_NUM (8)
+
+#define MAX_PLMN_36331 (6) /* maxPLMN-r11 */
+#define MAX_PLMN_MINUS1_36331 (5) /* maxPLMN-1-r14 */
+#define MAX_NUM_OF_MULTI_BANDS_36331 (8)  /* maxNrofMultiBands */
+
+#define MAX_PLMN_38331 (12) /* maxPLMN in 38.331 6.4 */
+#define MAX_NUM_OF_MULTI_BANDS_38331 (8)  /* maxNrofMultiBands in 38.331 6.4 */
+
+#define CELL_REJ_INF_MAX_NUM (2)
+
+/********************************************
+ *         TYPE DEFINITIONS & ENUMS         *
+ ********************************************/
+
+typedef struct {
+   kal_uint16 freq_band_ind;
+   kal_uint8 multi_band_info_num;
+   kal_uint16 multi_band_info_list[MAX_NUM_OF_MULTI_BANDS_36331];
+   kal_bool freq_band_ind_pri;
+}errc_nrrc_eutra_mfbi_info_struct;
+
+typedef struct {
+   kal_uint8 plmn_id_num;
+   plmn_id_struct plmn_id_list[MAX_PLMN_36331];
+   kal_uint16 tracking_area_code;
+   kal_uint32 cell_identity;
+}errc_nrrc_cgi_info_epc_cell_struct;
+
+typedef struct {
+   errc_nrrc_cgi_info_epc_cell_struct cgi_info_epc_legacy;
+   kal_uint8 cgi_info_epc_num;
+   errc_nrrc_cgi_info_epc_cell_struct cgi_info_epc_list[MAX_PLMN_MINUS1_36331];
+}errc_nrrc_cgi_info_epc_struct;
+
+typedef struct {
+   kal_bool cgi_info_epc_valid;
+   errc_nrrc_cgi_info_epc_struct cgi_info_epc;
+   errc_nrrc_eutra_mfbi_info_struct mfbi_info;
+}errc_nrrc_eutra_cgi_info_struct;
+
+typedef enum {
+    ERRC_NRRC_RCGI_RESULT_SUCCESS = 0,
+    ERRC_NRRC_RCGI_RESULT_FAIL
+}errc_nrrc_rcgi_result_enum;
+
+typedef struct {
+    NRARFCN                       freq;
+    NR_SCS_TYPE_E                 ssb_scs; // or subcarrier_spacing_ssb
+    kal_bool                      is_smtc_valid;
+    nl1_primary_ssb_mtc_struct    smtc;
+} nr_redirect_info_struct;
+
+typedef struct {
+    kal_uint8                   redirect_freq_num;
+    nr_redirect_info_struct     redirect_info[MAX_NUM_NR_REDIRECTION_FREQ];
+} errc_nrrc_redirectInfo;
+
+typedef enum {
+    ERRC_NRRC_NR_CONFIG_FROM_SRB1 = 0,
+    ERRC_NRRC_NR_CONFIG_FROM_SRB3
+} errc_nrrc_nr_config_src_enum;
+
+typedef enum {
+    ERRC_NRRC_NR_CONFIG_RELEASE = 0,
+    ERRC_NRRC_NR_CONFIG_SETUP
+} errc_nrrc_nr_config_type_enum;
+
+typedef enum {
+    ERRC_NRRC_LTE_RECONF_MCG_CHANGE = 0,
+    ERRC_NRRC_LTE_CONNECTION_REEST,
+    ERRC_NRRC_LTE_CONNECTION_RELEASE
+} errc_nrrc_lte_proc_enum;
+
+typedef enum {
+    ERRC_NRRC_NR_REL_DRB_KEEP = 0,
+    ERRC_NRRC_NR_REL_DRB_RELEASE,
+    ERRC_NRRC_NR_REL_DRB_REVERT_KEEP,
+    ERRC_NRRC_NR_REL_DRB_RELEASE_FROM_LTE
+} errc_nrrc_nr_rel_drb_ctrl_enum;
+
+typedef enum {
+    ERRC_NRRC_NR_REL_SRB_CTRL_INVALID = 0,
+    ERRC_NRRC_NR_REL_SRB_CTRL_SUSPEND,
+    ERRC_NRRC_NR_REL_SRB_CTRL_RELEASE
+} errc_nrrc_nr_rel_srb_ctrl_enum;
+
+typedef enum {
+    ERRC_NRRC_SCG_FAILURE_TYPE_T310_EXPIRY = 0,
+    ERRC_NRRC_SCG_FAILURE_TYPE_RANDOM_ACCESS_PROBLEM,
+    ERRC_NRRC_SCG_FAILURE_TYPE_RLC_MAX_NUM_RETX,
+    //ERRC_NRRC_SCG_FAILURE_TYPE_SCG_CHANGE_FAIL,  /* 2018DEC ASN change it to  SCG_SYNC_RECONFIG_FAIL */
+    ERRC_NRRC_SCG_FAILURE_TYPE_SCG_SYNC_RECONFIG_FAIL,
+    ERRC_NRRC_SCG_FAILURE_TYPE_SCG_RECONFIG_FAIL,
+    ERRC_NRRC_SCG_FAILURE_TYPE_SRB3_INTEGRITY_FAIL
+} errc_nrrc_scg_failure_type_enum;
+
+typedef enum {
+    ERRC_NRRC_NR_PSCELL_NO_CHANGE = 0,
+    ERRC_NRRC_NR_PSCELL_ADDITION,
+    ERRC_NRRC_NR_PSCELL_CHANGE,
+    ERRC_NRRC_NR_PSCELL_RELEASE
+} errc_nrrc_nr_pscell_status_enum;
+
+typedef enum {
+    ENRRC_ENL2_RB_CFG_CMD_INVALID,
+    ENRRC_ENL2_RB_CFG_CMD_ADD,
+    ENRRC_ENL2_RB_CFG_CMD_MOD,
+    ENRRC_ENL2_RB_CFG_CMD_REL
+} enrrc_enl2_rb_cfg_cmd_enum;
+
+#ifdef __GEMINI__
+typedef enum {
+    ERRC_NRRC_VC_RESUME_NORMAL = 0,
+    ERRC_NRRC_VC_RESUME_ABORT
+} errc_nrrc_vc_resume_action_enum;
+
+typedef enum {
+    ERRC_NRRC_VC_ABORT_TO_RELEASE = 0,
+    ERRC_NRRC_VC_ABORT_TO_REESTABLISH
+} errc_nrrc_vc_resume_abort_proc_type_enum;
+#endif /* __GEMINI__ */
+
+typedef enum {
+    ERRC_NRRC_NR_AUTO_GAP_PROCEDURE_5G_REPORT_CGI = 1,
+    ERRC_NRRC_NR_AUTO_GAP_PROCEDURE_NR_CELL_DETECTION
+} errc_nrrc_nr_auto_gap_procedure_enum;
+
+typedef struct {
+    kal_uint16 data_len;
+    kal_uint8 *data;
+} errc_nrrc_octet_string_struct;
+
+typedef struct {
+    kal_bool is_key256_valid;
+    kal_uint8 hw_idx;
+    kal_uint8 key256[32];
+} errc_nrrc_key256_struct;
+
+typedef struct {
+    enpdcp_rb_type_enum         rb_type;
+    kal_uint8                   rb_id;
+    kal_uint8                   ebi;
+    enrrc_enl2_rb_cfg_cmd_enum  rb_cfg_cmd;
+    kal_bool                    nr_pdcp_present;
+    kal_bool                    nr_pdcp_has_ul;
+    kal_bool                    nr_pdcp_has_dl;
+    kal_bool                    nr_leg_present;
+    enpdcp_rlc_mode_enum        nr_leg_rlc_mode;
+} errc_nrrc_ie_check_cnf_nr_rb_config_struct;
+
+typedef struct {
+    kal_uint8  ebi;     /* EPS bearer ID, value range: 0 - 15 */
+    kal_uint8  rb_idx;  /* RB Index, value range: 0-36,
+                         * SRB3: 16, SRB2: 17, SRB1: 18
+                         * LTE PDCP DRB: 0-14; NR PDCP DRB: 0-14 + 20-36,
+                         * MTCH: 15, MCCH: 19
+                         */
+    kal_bool              lte_leg_present;
+    enpdcp_rlc_mode_enum  lte_leg_rlc_mode;
+} errc_nrrc_config_req_drb_struct;
+
+typedef struct {
+    kal_uint8  eps_bearer_id;
+    kal_uint8  qci;
+    kal_bool   is_gbr_bearer;
+    kal_bool   is_emc_related_bearer;
+    kal_bool   is_qos_equivalent_to_teleservice_11;
+} errc_nrrc_qos_info_struct;
+
+typedef struct {
+    kal_uint8 periodicity; /* Range: 5(sf5), 10(sf10), 20(sf20), 40(sf40), 80(sf80), 160(sf160)*/
+    kal_uint8 offset;      /* Range: 0..159*/
+} errc_nrrc_smtc_periodicity_and_offset_struct;
+
+typedef struct {
+    errc_nrrc_smtc_periodicity_and_offset_struct periodicity_and_offset;
+    kal_uint8 duration;    /* Range: 1(sf1), 2(sf2), 3(sf3), 4(sf4), 5(sf5)*/
+} errc_nrrc_ssb_mtc_struct;
+
+/* The following structures with postfix *chctrl_param_struct are paramters used between channel control modules. e.g. ERRC CHM/NRRC CONFIG */
+typedef struct {
+    kal_bool                       release_nr_pdcp_for_srb1;
+    kal_bool                       release_nr_pdcp_for_srb2;
+    kal_bool                       release_all_drbs;
+} errc_nrrc_ie_check_req_chctrl_param_struct;
+
+typedef struct {
+    kal_uint8                                   nr_rb_config_num;
+    errc_nrrc_ie_check_cnf_nr_rb_config_struct  nr_rb_config_list[ENRRC_ENL2_RB_ID_MAX]; /* NRRC's RB configurations in NR RB config IE */
+	errc_nrrc_nr_pscell_status_enum             pscell_status;  /* indicates the NR PSCell status of NR SCG configuration, valid only 'result' success */
+    kal_bool                                    is_nr_pscell_valid;
+    nr_cell_info                                nr_pscell;
+} errc_nrrc_ie_check_cnf_chctrl_param_struct;
+
+typedef struct {
+    kal_bool                           lte_rf_config;  /* indicate if LTE RF configuration is needed */
+    kal_uint8                          drb_num;
+    errc_nrrc_config_req_drb_struct    drb_list[ENPDCP_SAP_MAX_NUM_RB_IDX];  /* allocated RB index and EBI mapping for each RB */
+    kal_bool                           release_nr_pdcp_for_srb1;
+    kal_bool                           release_nr_pdcp_for_srb2;
+    kal_bool                           rb_reverting_possibility;
+    kal_bool                           release_all_drbs;
+    kal_bool                           is_smtc_valid;
+    errc_nrrc_ssb_mtc_struct           smtc;
+} errc_nrrc_config_req_chctrl_param_struct;
+
+typedef struct
+{
+    kal_bool                      is_secondary_key_used;
+    enpdcp_ciphering_alg_enum     ciphering_algo;  // valid when is_secondary_key_used  = true
+    enpdcp_integrity_alg_enum     integrity_algo;  // valid when is_secondary_key_used  = true
+} errc_nrrc_nr_sec_algo_struct;
+
+typedef struct {
+    errc_nrrc_nr_pscell_status_enum     pscell_status;  /* indicates the NR PSCell status of NR SCG configuration */
+    errc_nrrc_nr_sec_algo_struct        nr_sec_algo;
+} errc_nrrc_config_cnf_chctrl_param_struct;
+
+typedef struct {
+    errc_nrrc_nr_rel_drb_ctrl_enum  drb_control;
+    kal_bool                        release_nr_pdcp_for_srb1;
+    errc_nrrc_nr_rel_srb_ctrl_enum  srb2_control;
+} errc_nrrc_release_req_chctrl_param_struct;
+
+typedef struct {
+    kal_uint32                      earfcn;
+    kal_uint8                       prsOffset;
+} nrrc_errc_prs_gap_info_struct;
+
+/* TO_DO: To be removed - begin */
+typedef struct {
+    kal_uint32                      earfcn;
+    kal_uint8                       prsOffset;
+} errc_nrrc_prs_gap_info_struct;
+/* TO_DO: To be removed - end */
+
+/*MSG_ID_ERRC_NRRC_SRB1_SEC_ACTIVATE_REQ*/
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8 lte_krrc_int_idx;
+    kal_uint8 lte_krrc_enc_idx;
+    enpdcp_integrity_alg_enum integrity_algo;
+    enpdcp_ciphering_alg_enum ciphering_algo;
+} errc_nrrc_srb1_sec_activate_req_struct;
+
+/* MSG_ID_ERRC_NRRC_SRB1_SEC_ACTIVATE_CNF */
+typedef struct {
+    LOCAL_PARA_HDR
+} errc_nrrc_srb1_sec_activate_cnf_struct;
+
+/* MSG_ID_ERRC_NRRC_IE_CHECK_REQ */
+typedef struct {
+    LOCAL_PARA_HDR
+    errc_nrrc_nr_config_src_enum                 source_srb;
+    kal_bool                                     is_nr_config_type_valid;
+    errc_nrrc_nr_config_type_enum                nr_config_type;
+    kal_bool                                     scg_releaseAndAdd;
+    kal_bool                                     is_sk_counter_valid;
+    kal_uint16                                   sk_counter;
+    kal_bool                                     release_scg_configuration;
+    errc_nrrc_octet_string_struct                nr_secondaryCellGroupConfig;
+    errc_nrrc_octet_string_struct                nr_radioBearerConfig1;
+    errc_nrrc_octet_string_struct                nr_radioBearerConfig2;
+    errc_nrrc_ie_check_req_chctrl_param_struct   chctrl_param;
+    kal_bool                                     is_mcg_change;
+    kal_bool                                     is_current_plmn_valid;
+    plmn_id_struct                               current_plmn;
+} errc_nrrc_ie_check_req_struct;
+
+/* MSG_ID_ERRC_NRRC_IE_CHECK_CNF */
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool                                     result;
+    kal_uint8                                    config_bitmap;
+    errc_nrrc_ie_check_cnf_chctrl_param_struct   chctrl_param;
+} errc_nrrc_ie_check_cnf_struct;
+
+/* MSG_ID_ERRC_NRRC_MEAS_REQ */
+typedef struct {
+    LOCAL_PARA_HDR
+} errc_nrrc_meas_req_struct;
+
+/* MSG_ID_ERRC_NRRC_MEAS_CNF */
+typedef struct {
+    LOCAL_PARA_HDR
+} errc_nrrc_meas_cnf_struct;
+
+/* MSG_ID_ERRC_NRRC_CONFIG_REQ */
+typedef struct {
+    LOCAL_PARA_HDR
+    errc_nrrc_nr_config_src_enum               source_srb;
+    kal_bool                                   is_nr_config_type_valid;
+    errc_nrrc_nr_config_type_enum              nr_config_type;
+    kal_bool                                   scg_releaseAndAdd;
+    kal_bool                                   is_sk_counter_valid;
+    kal_uint16                                 sk_counter;
+    kal_bool                                   release_scg_configuration;
+    errc_nrrc_octet_string_struct              nr_secondaryCellGroupConfig;
+    errc_nrrc_octet_string_struct              nr_radioBearerConfig1;
+    errc_nrrc_octet_string_struct              nr_radioBearerConfig2;
+    errc_nrrc_key256_struct                    kenb;
+    errc_nrrc_config_req_chctrl_param_struct   chctrl_param;
+    kal_bool                                   is_current_plmn_valid;
+    plmn_id_struct                             current_plmn;
+} errc_nrrc_config_req_struct;
+
+/* MSG_ID_ERRC_NRRC_CONFIG_CNF */
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool                                  scg_exist;
+    kal_bool                                  rb_config_exist;
+    errc_nrrc_octet_string_struct             rrcReconfigurationComplete;
+    errc_nrrc_config_cnf_chctrl_param_struct  chctrl_param;
+} errc_nrrc_config_cnf_struct;
+
+/* MSG_ID_ERRC_NRRC_CONFIG_IND */
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool   nr_rf_config;    /* indicate if NR RF configuration is needed */
+} errc_nrrc_config_ind_struct;
+
+/* MSG_ID_NRRC_ERRC_PDCP_CONFIG_REQ */
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool                 suspend_scg;
+    kal_uint8                rb_add_num;
+    kal_uint8                rb_mod_num;
+    kal_uint8                rb_rel_num;
+    enpdcp_rb_addmod_struct  rb_add_list[ENPDCP_SAP_MAX_NUM_CFG_RB];
+    enpdcp_rb_addmod_struct  rb_mod_list[ENPDCP_SAP_MAX_NUM_CFG_RB];
+    enpdcp_rb_rel_struct     rb_rel_list[ENPDCP_SAP_MAX_NUM_CFG_RB];
+    kal_bool                 wait_for_key_update;
+} nrrc_errc_pdcp_config_req_struct;
+
+/* MSG_ID_NRRC_ERRC_PDCP_CONFIG_CNF */
+typedef struct {
+    LOCAL_PARA_HDR
+} nrrc_errc_pdcp_config_cnf_struct;
+
+/* MSG_ID_NRRC_ERRC_PDCP_SWITCH_VIRTUAL_CONNECTED_REQ */
+typedef struct {
+    LOCAL_PARA_HDR
+    rrc_enl2_switch_virtual_connected_enum status;
+} nrrc_errc_pdcp_switch_virtual_connected_req_struct;
+
+/* MSG_ID_NRRC_ERRC_PDCP_SWITCH_VIRTUAL_CONNECTED_CNF */
+typedef struct {
+    LOCAL_PARA_HDR
+} nrrc_errc_pdcp_switch_virtual_connected_cnf_struct;
+
+/* MSG_ID_ERRC_NRRC_RB_REVERT_FORGET_REQ */
+typedef struct {
+    LOCAL_PARA_HDR
+} errc_nrrc_rb_revert_forget_req_struct;
+
+/* MSG_ID_ERRC_NRRC_RB_REVERT_FORGET_CNF */
+typedef struct {
+    LOCAL_PARA_HDR
+} errc_nrrc_rb_revert_forget_cnf_struct;
+
+/* MSG_ID_ERRC_NRRC_CONFIG_CONTINUE_REQ */
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool  lte_key_indices_valid;
+    kal_uint8 lte_krrc_int_idx;
+    kal_uint8 lte_krrc_enc_idx;
+    kal_uint8 lte_kup_enc_idx;
+} errc_nrrc_config_continue_req_struct;
+
+/* MSG_ID_ERRC_NRRC_CONFIG_CONTINUE_CNF */
+typedef struct {
+    LOCAL_PARA_HDR
+} errc_nrrc_config_continue_cnf_struct;
+
+/* MSG_ID_ERRC_NRRC_SCG_FAILURE_IND */
+typedef struct {
+    LOCAL_PARA_HDR
+} errc_nrrc_scg_failure_ind_struct;
+
+/* MSG_ID_ERRC_NRRC_SUSPEND_REQ */
+typedef struct {
+    LOCAL_PARA_HDR
+} errc_nrrc_suspend_req_struct;
+
+/* MSG_ID_ERRC_NRRC_SUSPEND_CNF */
+typedef struct {
+    LOCAL_PARA_HDR
+    errc_nrrc_scg_failure_type_enum  scg_failure_type;
+    errc_nrrc_octet_string_struct    measResultScg;
+    kal_bool                         scg_fake_fail;
+} errc_nrrc_suspend_cnf_struct;
+
+/* MSG_ID_ERRC_NRRC_SRB3_CONFIG_IND */
+typedef struct {
+    LOCAL_PARA_HDR
+    errc_nrrc_octet_string_struct   rrcReconfiguration;
+} errc_nrrc_srb3_config_ind_struct;
+
+/* MSG_ID_ERRC_NRRC_RELEASE_REQ */
+typedef struct {
+    LOCAL_PARA_HDR
+    errc_nrrc_release_req_chctrl_param_struct   chctrl_param;
+    kal_bool                                    is_lte_nr_rel;
+    kal_uint8                                   lte_nr_rel_tid;
+    errc_nrrc_lte_proc_enum                     lte_proc;
+    kal_bool                                    enpdcp_first;
+} errc_nrrc_release_req_struct;
+
+/* MSG_ID_ERRC_NRRC_RELEASE_CNF */
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool rb_config_exist;
+} errc_nrrc_release_cnf_struct;
+
+/* MSG_ID_ERRC_NRRC_MEAS_REPORT_IND */
+typedef struct {
+    LOCAL_PARA_HDR
+    errc_nrrc_octet_string_struct measurementReport;
+} errc_nrrc_meas_report_ind_struct;
+
+/* MSG_ID_ERRC_NRRC_FAILURE_INFO_IND */
+typedef struct {
+    LOCAL_PARA_HDR
+    errc_nrrc_octet_string_struct failure_information;
+} errc_nrrc_failure_info_ind_struct;
+
+/* MSG_ID_ERRC_NRRC_QOS_UPDATE_REQ */
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8                     qos_info_num;
+    errc_nrrc_qos_info_struct     qos_info[ERRC_NRRC_MAX_DRB];
+} errc_nrrc_qos_update_req_struct;
+
+/* MSG_ID_ERRC_NRRC_QOS_UPDATE_CNF */
+typedef struct {
+    LOCAL_PARA_HDR
+} errc_nrrc_qos_update_cnf_struct;
+
+/*ERRC to NRRC rat_change_req container*/
+typedef struct{
+    LOCAL_PARA_HDR
+    kal_bool smtc_vaild;
+    errc_nrrc_ssb_mtc_struct smtc;
+}errc_nrrc_handover_to_nr_container_struct;
+
+#ifdef __GEMINI__
+/* MSG_ID_ERRC_NRRC_VIRTUAL_CONNECTED_RESUME_REQ */
+typedef struct {
+    LOCAL_PARA_HDR
+    errc_nrrc_vc_resume_action_enum vc_resume_action;
+    errc_nrrc_vc_resume_abort_proc_type_enum  vc_abort_proc; /* only used when vc_resume_action is ERRC_NRRC_VC_RESUME_ABORT */
+} errc_nrrc_virtual_connected_resume_req_struct;
+#endif /* __GEMINI__ */
+
+/*MSG_ID_ERRC_NRRC_HANDOVER_NRCELL_REQ*/
+typedef struct{
+    LOCAL_PARA_HDR
+    plmn_search_type_enum plmn_search_type;
+    kal_bool              is_current_plmn_valid;
+    plmn_id_struct        current_plmn;
+}errc_nrrc_handover_nrcell_req_struct;
+
+/*MSG_ID_ERRC_NRRC_HANDOVER_NRCELL_CNF*/
+typedef struct{
+    LOCAL_PARA_HDR
+    te_ir_handover_status ir_ho_eval_status;
+    errc_nrrc_nas_container_octet_string_struct nas_container;
+    nr_cell_info target_cell;
+}errc_nrrc_handover_nrcell_cnf_struct;
+
+/*MSG_ID_NRRC_ERRC_HANDOVER_ECELL_REQ*/
+typedef struct{
+    LOCAL_PARA_HDR
+    plmn_search_type_enum plmn_search_type;
+} nrrc_errc_handover_ecell_req_struct;
+
+/*MSG_ID_NRRC_ERRC_HANDOVER_ECELL_CNF*/
+typedef struct{
+    LOCAL_PARA_HDR
+    te_ir_handover_status ir_ho_eval_status;
+} nrrc_errc_handover_ecell_cnf_struct;
+
+/* MSG_ID_NRRC_ERRC_HO_ACTIVATE_ECELL_REQ */
+typedef struct{
+    LOCAL_PARA_HDR
+    kal_bool is_eps_voice_fallback;
+} nrrc_errc_ho_activate_ecell_req_struct;
+
+/* MSG_ID_NRRC_ERRC_HO_ACTIVATE_ECELL_CNF */
+typedef struct{
+    LOCAL_PARA_HDR
+    kal_bool is_lte_cell_available;
+} nrrc_errc_ho_activate_ecell_cnf_struct;
+
+/*MSG_ID_NRRC_ERRC_EVALUATE_ECELL_CNF*/
+typedef struct {
+   LOCAL_PARA_HDR
+   te_ir_cell_reselection_status  eval_status;
+   ts_eval_activate_fail_handle   eval_activate_fail_handle;
+} nrrc_errc_evaluate_ecell_cnf_struct;
+
+/*MSG_ID_NRRC_ERRC_ACTIVATE_ECELL_STOP_CNF*/
+typedef struct {
+   LOCAL_PARA_HDR
+   /* No parameters here */
+} nrrc_errc_evaluate_ecell_stop_cnf_struct;
+
+/*MSG_ID_NRRC_ERRC_ACTIVATE_ECELL_CNF*/
+typedef struct {
+   LOCAL_PARA_HDR
+   te_ir_cell_reselection_status  active_status;
+   ts_eval_activate_fail_handle   eval_activate_fail_handle;
+} nrrc_errc_activate_ecell_cnf_struct;
+
+
+/*MSG_ID_ERRC_NRRC_EVALUATE_NRCELL_REQ*/
+typedef struct{
+    LOCAL_PARA_HDR
+    nr_cell_info          target_cell;
+    plmn_search_type_enum plmn_search_type;
+    kal_bool                is_background_search_trigger;
+    eas_cell_info           serving_cell_info;
+} errc_nrrc_evaluate_nrcell_req_struct;
+
+/* MSG_ID_ERRC_NRRC_EVALUATE_NRCELL_CNF */
+typedef struct {
+    LOCAL_PARA_HDR
+    te_ir_cell_reselection_status   eval_status;
+    ts_eval_activate_fail_handle    eval_activate_fail_handle;
+} errc_nrrc_evaluate_nrcell_cnf_struct;
+
+/*MSG_ID_ERRC_NRRC_EVALUATE_NRCELL_STOP_REQ*/
+typedef struct{
+    LOCAL_PARA_HDR
+    /* No parameters here */
+} errc_nrrc_evaluate_nrcell_stop_req_struct;
+
+/* MSG_ID_ERRC_NRRC_EVALUATE_NRCELL_STOP_CNF */
+typedef struct {
+   LOCAL_PARA_HDR
+} errc_nrrc_evaluate_nrcell_stop_cnf_struct;
+
+/*MSG_ID_ERRC_NRRC_ACTIVATE_NRCELL_REQ*/
+typedef struct{
+    LOCAL_PARA_HDR
+    te_ir_cell_change_trigger  trigger;
+    nr_cell_info               target_cell;
+    plmn_search_type_enum      plmn_search_type;
+    kal_uint8                  redirect_freq_num;
+    nr_redirect_info_struct    redirect_info[MAX_NUM_NR_REDIRECTION_FREQ];
+    kal_uint32                 nr_afr_timer;
+    kal_bool                   is_elevator_mode;  // used for 4G5 elevator mode
+} errc_nrrc_activate_nrcell_req_struct;
+
+/* MSG_ID_ERRC_NRRC_ACTIVATE_NRCELL_CNF */
+typedef struct {
+    LOCAL_PARA_HDR
+    te_ir_cell_reselection_status  active_status;
+    ts_eval_activate_fail_handle   eval_activate_fail_handle;
+    kal_uint32                     remaining_time_afr;
+} errc_nrrc_activate_nrcell_cnf_struct;
+
+/* For 5G4 IRCR or IR Redirection */
+/* MSG_ID_NRRC_ERRC_EVALUATE_ECELL_REQ*/
+typedef struct {
+   LOCAL_PARA_HDR
+   eas_target_cell_info   target_cell;
+   plmn_search_type_enum  plmn_search_type;
+   /*5G4 background search parameter*/
+   kal_bool               is_background_search_trigger;
+   nr_cell_info           serving_cell_info;
+} nrrc_errc_evaluate_ecell_req_struct;
+
+/*MSG_ID_NRRC_ERRC_EVALUATE_ECELL_STOP_REQ*/
+typedef struct {
+   LOCAL_PARA_HDR
+   /* No parameters here */
+} nrrc_errc_evaluate_ecell_stop_req_struct;
+
+/* MSG_ID_NRRC_ERRC_ACTIVATE_ECELL_REQ */
+typedef struct {
+   LOCAL_PARA_HDR
+   te_ir_cell_change_trigger  trigger;
+   eas_target_cell_info       target_cell;
+   plmn_search_type_enum      plmn_search_type;
+   kal_uint8                  redirect_freq_num;
+   lte_redirect_info          redirect_freq_info[MAX_NUM_LTE_REDIRECTION_FREQ];
+   kal_uint32                 wait_time;
+   kal_bool                   is_eps_voice_fallback;
+} nrrc_errc_activate_ecell_req_struct;
+
+/* __5G_BACKGROUND_SEARCH__ */
+/*MSG_ID_ERRC_NRRC_BACKGROUND_SEARCH_START_REQ*/
+typedef struct {
+   LOCAL_PARA_HDR
+   /* No parameters here */
+} errc_nrrc_background_search_start_req_struct;
+
+typedef struct {
+   LOCAL_PARA_HDR
+} errc_nrrc_background_search_start_cnf_struct;
+
+/*MSG_ID_ERRC_NRRC_BACKGROUND_SEARCH_STOP_REQ*/
+typedef struct {
+   LOCAL_PARA_HDR
+   /* No parameters here */
+} errc_nrrc_background_search_stop_req_struct;
+
+typedef struct {
+   LOCAL_PARA_HDR
+   /* NR detected cell info */
+   nr_cell_info detected_cell;
+} errc_nrrc_background_search_found_ind_struct;
+
+/* MSG_ID_NRRC_ERRC_PRS_GAP_IND */
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool                      action;
+    kal_uint8                     num;
+    nrrc_errc_prs_gap_info_struct freq[LPP_OTDOA_MAX_IRAT_FREQ_NUM];
+} nrrc_errc_prs_gap_ind_struct;
+
+/* MSG_ID_NRRC_ERRC_OTDOA_MEAS_REQ */
+typedef lpp_nrrc_otdoa_meas_req_struct nrrc_errc_otdoa_meas_req_struct;
+
+/* MSG_ID_NRRC_ERRC_OTDOA_MEAS_CNF */
+typedef lpp_nrrc_otdoa_meas_cnf_struct nrrc_errc_otdoa_meas_cnf_struct;
+
+/* MSG_ID_NRRC_ERRC_OTDOA_MEAS_IND */
+typedef lpp_nrrc_otdoa_meas_ind_struct nrrc_errc_otdoa_meas_ind_struct;
+
+/* MSG_ID_NRRC_ERRC_OTDOA_MEAS_ABORT_REQ */
+typedef lpp_nrrc_otdoa_meas_abort_req_struct nrrc_errc_otdoa_meas_abort_req_struct;
+
+/* MSG_ID_NRRC_ERRC_OTDOA_AUTO_GAP_OFF_IND */
+typedef struct
+{
+    LOCAL_PARA_HDR
+} nrrc_errc_otdoa_auto_gap_off_ind_struct;
+
+typedef enum {
+    ERRC_NRRC_NR_SCS_15KHZ,
+    ERRC_NRRC_NR_SCS_30KHZ,
+    ERRC_NRRC_NR_SCS_120KHZ,
+    ERRC_NRRC_NR_SCS_240KHZ,
+    ERRC_NRRC_NR_SCS_UNKNOWN,
+} errc_nrrc_nr_scs_enum;
+
+typedef enum {
+    ERRC_NRRC_INTER_RAT_FREQ_SIB24,
+    ERRC_NRRC_INTER_RAT_FREQ_RRC_CONN_RECONFIG,
+    ERRC_NRRC_INTER_RAT_FREQ_SIB24_PRIORITY_FREQ
+} errc_nrrc_inter_rat_freq_update_cause_enum;
+
+typedef enum {
+    ERRC_NRRC_SIB24_PRIORITY_INVALID,
+    ERRC_NRRC_SIB24_PRIORITY_LOW,
+    ERRC_NRRC_SIB24_PRIORITY_EQUAL,
+    ERRC_NRRC_SIB24_PRIORITY_NONE,
+    ERRC_NRRC_SIB24_PRIORITY_HIGH
+} errc_nrrc_sib24_priority_enum;
+
+typedef struct {
+    NRARFCN freq;
+    kal_uint8 band_num;
+    kal_uint16 band_list[ERRC_NRRC_MAX_MULTI_BAND_NUM];
+    errc_nrrc_nr_scs_enum ssb_scs;
+    kal_bool is_ssb_mtc_valid;
+    errc_nrrc_ssb_mtc_struct ssb_mtc;
+    errc_nrrc_sib24_priority_enum sib24_priority;   // The NR frequency priority compared with LTE serving cell priority
+} errc_nrrc_inter_rat_freq_info_struct;
+
+/* MSG_ID_ERRC_NRRC_INTER_RAT_FREQ_UPDATE_IND */
+typedef struct {
+    LOCAL_PARA_HDR
+    plmn_id_struct plmn_id;
+    errc_nrrc_inter_rat_freq_update_cause_enum update_cause;
+    kal_uint8 freq_num;
+    errc_nrrc_inter_rat_freq_info_struct freq_list[ERRC_NRRC_MAX_NR_FREQ_CFG_NUM];
+} errc_nrrc_inter_rat_freq_update_ind_struct;
+
+/* MSG_ID_ERRC_NRRC_REPORT_CGI_REQ */
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8                 tid;
+    report_cgi_req_type_enum  report_cgi_req_type; // in as_inter_core_enum.h
+    nr_cell_info              cgi_cell;
+    kal_bool                  is_auto_gap_used;
+} errc_nrrc_report_cgi_req_struct;
+
+typedef struct {
+    kal_uint8      plmn_id_num;
+    plmn_id_struct plmn_id_list[MAX_PLMN_38331];
+    kal_bool       tracking_area_code_valid; // tac is optional in SIB1
+    kal_uint8      tracking_area_code[3]; // BIT STRING (SIZE (24))
+                                          // tracking_area_code[0] = bit 23:16
+                                          // tracking_area_code[1] = bit 15:8
+                                          // tracking_area_code[2] = bit 7:0
+    kal_bool       ran_area_code_valid; // rac is optional in SIB1
+    kal_uint8      ran_area_code; // 0~255
+    kal_uint8      cell_identity[5]; // BIT STRING (SIZE (36))
+                                     // cell_identity[0] = bit 35:28
+                                     // cell_identity[1] = bit 27:20
+                                     // cell_identity[2] = bit 19:12
+                                     // cell_identity[3] = bit 11:4
+                                     // cell_identity[4] = bit 3:0 (XXXX-0000) 4 LSB is not used
+} errc_nrrc_plmn_id_info_nr_struct;
+
+typedef struct {
+    kal_uint8 ssb_subcarrier_offset; // INTEGER (0..15)
+    kal_uint8 pdcch_config_sib1; // INTEGER (0..255) = controlResourceSetZero (4 MSB) << 4 | searchSpaceZero (4 LSB)
+} errc_nrrc_no_nr_sib1_struct;
+
+typedef struct {
+    kal_uint8                        plmn_id_info_num;
+    errc_nrrc_plmn_id_info_nr_struct plmn_id_info_list[MAX_PLMN_38331];
+    kal_uint8                        freq_band_num;
+    kal_uint16                       freq_band_list[MAX_NUM_OF_MULTI_BANDS_38331];
+    kal_bool                         nr_no_sib1_valid;
+    errc_nrrc_no_nr_sib1_struct      nr_no_sib1;
+} errc_nrrc_nr_cgi_info_struct;
+
+/* MSG_ID_ERRC_NRRC_REPORT_CGI_CNF */
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8                    tid;
+    nr_cell_info                 cgi_cell;
+    cgi_info_status_enum         cgi_info_status; // in as_inter_core_enum.h
+    errc_nrrc_nr_cgi_info_struct cgi_info;
+} errc_nrrc_report_cgi_cnf_struct;
+
+/*MSG_ID_NRRC_ERRC_CGI_CONFLICT_JUDGE_REQ*/
+
+/*MSG_ID_NRRC_ERRC_CGI_CONFLICT_JUDGE_CNF*/
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool is_cgi_allowed;
+} nrrc_errc_cgi_conflict_judge_cnf_struct;
+
+/*MSG_ID_ERRC_NRRC_CGI_CONFLICT_FINISH_IND*/
+
+/*MSG_ID_NRRC_ERRC_AUTO_GAP_ON_REQ*/
+typedef struct {
+    LOCAL_PARA_HDR
+    errc_nrrc_nr_auto_gap_procedure_enum auto_gap_procedure;
+} nrrc_errc_auto_gap_on_req_struct;
+
+/*MSG_ID_NRRC_ERRC_AUTO_GAP_ON_CNF*/
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_bool is_auto_gap_activate_success;
+} nrrc_errc_auto_gap_on_cnf_struct;
+
+/*MSG_ID_NRRC_ERRC_AUTO_GAP_OFF_REQ*/
+/*MSG_ID_NRRC_ERRC_AUTO_GAP_OFF_CNF*/
+
+/*MSG_ID_NRRC_ERRC_AUTO_GAP_OFF_IND*/
+/*MSG_ID_NRRC_ERRC_AUTO_GAP_OFF_RSP*/
+
+/*MSG_ID_NRRC_ERRC_REPORT_CGI_REQ*/
+typedef struct {
+    LOCAL_PARA_HDR
+    kal_uint8                tid;
+    report_cgi_req_type_enum report_cgi_req_type;
+    EARFCN                   earfcn;
+    kal_uint16               pci;
+    kal_bool                 is_auto_gap_used;
+} nrrc_errc_report_cgi_req_struct;
+/*MSG_ID_NRRC_ERRC_REPORT_CGI_CNF*/
+typedef struct {
+    LOCAL_PARA_HDR
+    errc_nrrc_rcgi_result_enum rcgi_result;
+    kal_uint8   tid;
+    errc_nrrc_eutra_cgi_info_struct cgi_info;
+} nrrc_errc_report_cgi_cnf_struct;
+
+/*MSG_ID_NRRC_ERRC_CELL_REJ_IND*/
+typedef struct
+{
+    kal_bool                   is_valid;
+    nr_cell_info               reject_cell; /* Rejected Information */
+    cell_rej_cause_enum        cause; /* Rejected cause */
+    kal_uint16                 timer_val; /* Period of timer for rejection unit:s */
+} nrrc_errc_cell_rej_info_struct;
+
+typedef struct {
+    LOCAL_PARA_HDR
+
+    nrrc_errc_cell_rej_info_struct  rej_info[CELL_REJ_INF_MAX_NUM];
+} nrrc_errc_cell_rej_ind_struct;
+#endif /* _ERRC_NRRC_STRUCT_H */
+
diff --git a/mcu/protocol/interface/errc/errc_mrs_interface.h b/mcu/protocol/interface/errc/errc_mrs_interface.h
new file mode 100644
index 0000000..baac78e
--- /dev/null
+++ b/mcu/protocol/interface/errc/errc_mrs_interface.h
@@ -0,0 +1,542 @@
+/*****************************************************************************
+*  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) 2012
+*
+*  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).
+*
+*****************************************************************************/
+
+/****************************************************************************
+ * Filename:
+ * ---------
+ *   errc_mrs_interface.h
+ *
+ * Project:
+ * --------
+ *   UMOLY
+ *
+ * Description:
+ * ------------
+ *   ERRC MRS interface functions
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ * ==========================================================================
+ * $Log$
+ *
+ * 05 13 2021 mandy.zheng
+ * [MOLY00627894] [Blocking][MT6885][Petrus][TMO-US][MP7 Excluded][q0][Lab IOT][Ericsson-Nokia][VoNR]VoNR PSHO to LTE failed because no B2 MR from UE
+ * R3-interface.
+ *
+ * 07 27 2020 po-yu.huang
+ * [MOLY00545809] [Colgin] Global SKU CA band customization feature - ERRC
+ * 	
+ * 	.
+ *
+ * 06 01 2020 yi-han.chung
+ * [MOLY00527121] LGE/FCC requirement for Band 41 AMPR
+ * 	
+ * 	ERRC/MRS
+ *
+ * 04 29 2020 plum.tseng
+ * [MOLY00515893] [HCR][MT6875][Margaux][Q0][MP5][R3][SQC][HQ][MTBF][Lab][Ericsson][ErrorTimes:4][ASSERT] file:mcu/protocol/lte_sec/errc/common/src/errc_asn1_wrapper.c line:159
+ * 	
+ * 	[VMOLY_R3] UE capability restriction. (and recover enter connected mode)
+ *
+ * 02 07 2020 plum.tseng
+ * [MOLY00496701] [VMOLY][ERRC&NRRC][Capability] Gemini status sync between ERRC&NRRC
+ *
+ * 12 02 2019 yung-chun.chang
+ * [MOLY00462472] [Gen97][95.OPPO patch back to VMOLY]�i�G?�e?���ѡjFast return to 4G should be disabled on UE
+ * 	
+ * 	.
+ *
+ * 09 25 2019 mandy.zheng
+ * [MOLY00443402] [Gen97]2019 Jun CR - Clarification on SA fallback BC support
+ * 	
+ * 	-[ERRC]LTE SA band combination derived from  ENDC support check API.
+ *
+ * 09 23 2019 yung-chun.chang
+ * [MOLY00440687] VMOLY code sync CR
+ * 	
+ * 	1. CA TBL V2 main part
+ * 	2. fix rf_param_v1390 not reset problem
+ *
+ * 06 13 2019 plum.tseng
+ * [MOLY00413522] [VMOLY][Code Sync][ERRC][RCM] CA HPUE class B/C clarify
+ *
+ * 04 10 2019 plum.tseng
+ * [MOLY00395173] [Gen97][ERRC][MRA_EAS] Assertion removal
+ * 	
+ * 	and remove some internal info from interface file.
+ *
+ * 03 28 2019 morton.lin
+ * [MOLY00393767] [MT6297] TS 36.331 2018 December baseline migration
+ * [ERRC][RCM] 2018DEC version upgrading (MPD)
+ *
+ * 03 14 2019 plum.tseng
+ * [MOLY00391178] [MCF][VMOLY][ERRC] custom disable band feature with MCF
+ * 	
+ * 	[MCF][COSTOM_DISABLE_BAND][RCM & MRS].
+ *
+ * 12 27 2018 morton.lin
+ * [MOLY00375221] [Gen97][NSA] UE Capability development - Feature Set
+ * [ERRC][RCM] EUTRA Feature Set development
+ *
+ * 12 10 2018 morton.lin
+ * [MOLY00371624] [VMOLY][ERRC] provide API for NRRC to calculate P_compensation for LTE neighbor cells
+ * [ERRC][RCM][MRS] Pcompensation retrieval interface for 5G4 IRCR development
+ *
+ * 08 20 2018 plum.tseng
+ * [MOLY00346737] [ERRC][RCM] B41C HPUE
+ * 	
+ * 	[VMOLY] (OA)
+ *
+ * 07 03 2018 yung-chun.chang
+ * [MOLY00334670] [CV5a] block specific LTE bands for particular roaming plmns
+ * rcm/mrs part.
+ *
+ * 03 09 2018 morton.lin
+ * [MOLY00309570] [Gen93/95][UMOLYE][ERRC][RCM] WWLTEDB table movement for better customization
+ * 1. LTEBand and CAComb table movement
+ * 	2. Introduce LTEBandExcl
+ * 	3. Add new DL only bands: B75 & B76
+ *
+ * 12 11 2017 morton.lin
+ * [MOLY00295077] [Gen93][ERRC][RCM] LTE support band and CA combination customization re-arch
+ * Common IF and MRS part (LR12A.R3.MP) (Not in V-List)
+ *
+ * 11 29 2017 yung-chun.chang
+ * [MOLY00292082] 
+ * rcm oa part
+ *
+ * 01 25 2017 menghau.wu
+ * [MOLY00217129] [MT6293] code sync from UMOLY (Phase4)
+ * UMOLY CR : [MOLY00223173] [6292][Gemini][L+L][Merge LR12]
+ * UMOLY CL : 3370203
+ *
+ * 03 09 2016 sabrina.hsu
+ * [MOLY00156230] [6292] ERRC code sync LR11 to UMOLY
+ * merge LR11 CL 1801342 [MOLY00148166]
+ *
+ * 02 17 2016 sabrina.hsu
+ * [MOLY00156230] [6292] ERRC code sync LR11 to UMOLY
+ * mrs/nvram/sbp merge
+ *
+ *
+ ****************************************************************************/
+
+#ifndef _ERRC_MRS_INTERFACE_H_
+#define _ERRC_MRS_INTERFACE_H_
+
+#include "kal_general_types.h"
+#include "mrs_as_enums.h"
+#include "mrs_as_struct.h"
+#include "el1d_rf_public.h"
+#include "custom_eas_config.h"
+#include "errc_nvram_editor.h"
+#include "mrs_eas_capability.h"
+#include "mcd_l3_inc_struct.h"  //plmn_id_struct
+
+/****************************************************************************
+ * FUNCTION
+ *     errc_ue_eutra_capability_get
+ *
+ * DESCRIPTION
+ *     Get the encoded UE-EUTRA-Capability IE as defined in 36.311
+ *
+ * PARAMETERS
+ *     @param
+ *         MRS_SIM_INDEX sim_index:
+ *            SIM Index.
+ *     @param
+ *         kal_uint8 **pp_ue_eutra_capa:
+ *             Address of pointer to the encoded UE-EUTRA-Capability IE.
+ *             Function allocates memory for the encoded IE and sets the
+ *             pointer (*pp_ue_eutra_capa) to point to it. 
+ *             Caller is responsible for releasing the memory.
+ *     @param
+ *         mrs_plmn_id_list *p_plmn_id_list
+ *             The list of PLMN Id on which UE camped.
+ *             NOTE: The mnc3 should be set to 0x00 or 0x0F if it's not
+ *                   being used. (i.e. 5 digits PLMN Id)
+ *     @param
+ *         kal_bool is_disable_gsm
+ *             Flag used by other RATs to tell if 2G is disabled or not.
+ *
+ * RETURNS
+ *    @return
+ *        kal_uint32: Length of the encoded UE-EUTRA-Capability IE in bytes.
+ *
+ * GLOBALS AFFECTED
+ ****************************************************************************/
+
+kal_uint32 errc_ue_eutra_capability_get(
+    MRS_SIM_INDEX sim_index, kal_uint8 **pp_ue_eutra_capa, mrs_plmn_id_list *p_plmn_id_list, kal_bool is_disable_gsm);
+
+
+#if (CUR_GEN >= MD_GEN97)
+/**
+ * @brief Function to get UE-EUTRA-Capability for NRRC.
+ * @param[in] SIM index
+ * @param[in] The list of PLMN id of serving cell (on which UE camped). Use NULL
+ *            pointer if caller didn't have such a list but bear in mind the 
+ *            PLMN-specific filtering is not applied then.
+ * @param[in] Indicates that if GSM RAT is disabled or not (by operator requirement)
+ * @param[in] String data of the IE "capabilityRequestFilter" from TS 38.331.
+ * @param[out] The address of the encoded data of UE-EUTRA-Capability, callers
+ *             shall release this control buffer by themselves.
+ * @return The data length of encoded UE-EUTRA-Capability.
+ */
+kal_uint32 errc_ue_eutra_capability_get_for_nr(
+    MRS_SIM_INDEX sim_index,
+    mrs_plmn_id_list *p_plmn_id_list,
+    kal_bool is_disable_gsm,
+    mrs_nras_octet_string_struct cap_request_filter,
+    kal_uint8 **pp_ue_eutra_capa,
+    mrs_gemini_status_enum gemini_status,
+    kal_bool is_restriction_size_valid,
+    kal_uint32 restriction_size);
+
+/*****************************************************************************
+ * FUNCTION
+ *     errc_is_mrdc_lte_standalone_band_combination_supported
+ *
+ * DESCRIPTION
+ *     This function is used to check whether the LTE standalone band-combination 
+ *     derived from a given MR-DC band combination is supported.
+ *
+ * PARAMETERS
+ *     @param
+ *         MRS_SIM_INDEX sim_index:
+ *             SIM index if Gemini applied.
+ *
+ *         mrs_plmn_id_list *p_plmn_id_list:
+ *             The list of PLMN id of serving cell (on which UE camped). Use NULL
+ *             pointer if caller didn't have such a list but bear in mind the 
+ *             PLMN-specific filtering is not applied then.
+ *             NOTE: The mnc3 should be set to 0x00 or 0x0F if it's not being used.
+ *                  (i.e. 5 digits PLMN Id)
+ *
+ *         mrs_eas_mrdc_lte_standalone_bc_list *p_band_comb_list:
+ *             User should send the LTE SA band combination part, and function will fill
+ *             the support status of the band combination.
+ *            
+ * 
+ *
+ *****************************************************************************/
+void errc_is_mrdc_lte_standalone_band_combination_supported(
+    MRS_SIM_INDEX sim_index,
+    mrs_plmn_id_list *p_plmn_id_list,
+    mrs_eas_mrdc_lte_standalone_bc_list *p_band_comb_list);
+
+#endif /* (CUR_GEN >= MD_GEN97) */
+
+
+/****************************************************************************
+ * FUNCTION
+ *     errc_rcm_any_get_ue_category
+ *
+ * DESCRIPTION
+ *     Get the LTE UE category
+ *
+ * PARAMETERS
+ *     @param
+ *       void
+ * RETURNS
+ *    @return
+ *        kal_uint8: LTE UE categoty defined by ERRC RCM
+ *
+ * GLOBALS AFFECTED
+ ****************************************************************************/
+kal_uint8 errc_rcm_any_get_ue_category(void);
+
+
+/****************************************************************************
+ * FUNCTION
+ *     errc_rcm_get_lte_support_band_from_table
+ *
+ * DESCRIPTION
+ *     Get the LTE Support Band from table
+ *
+ * PARAMETERS
+ *     @param
+ *       [in] SIM index
+ *       [in] PLMN Id (MNC part will be skipped)
+ *       [out] Pointer to an array which can hold 32 elements each contains
+ *             kal_uint8 bitmask. The LSB in byte 0 is the Band 1.
+ *             Bit '1': supported ; Bit '0': not supported
+ *       [in] which table: can choose Capability size table/CA selection table
+ *       [in] plmn num for source table
+ * RETURNS
+ *    @return
+ *        kal_bool: TRUE if valid support band bitmask got successfully, and
+ *                  the content of p_lte_band_bitmask is the result.
+ *                  FALSE if no valid support band information got.
+ *
+ * GLOBALS AFFECTED
+ ****************************************************************************/
+
+kal_bool errc_rcm_get_lte_support_band_from_table(
+    const MRS_SIM_INDEX sim_idx,
+    const mrs_plmn_id *p_plmn_id,
+    kal_uint8 *p_lte_band_bitmask,
+	const eas_global_support_band_struct *src_table,
+	kal_uint32 src_table_plmn_num);
+	
+/****************************************************************************
+ * FUNCTION
+ *     errc_rcm_get_lte_support_band_for_plmn_list
+ *
+ * DESCRIPTION
+ *     Get the World Wide LTE Support Band by Public Land Mobile Network 
+ *     Identity list
+ *
+ * PARAMETERS
+ *     @param
+ *       [in] SIM index
+ *       [in] PLMN Id List
+ *       [out] Pointer to an array which can hold 32 elements each contains
+ *             kal_uint8 bitmask. The LSB in byte 0 is the Band 1.
+ *             Bit '1': supported ; Bit '0': not supported
+ *       [in] whether support requestFrequencyband(NW+UE)
+ * RETURNS
+ *    @return
+ *        kal_bool: TRUE if valid support band bitmask got successfully, and
+ *                  the content of p_lte_band_bitmask is the result.
+ *                  FALSE if no valid support band information got.
+ *
+ * GLOBALS AFFECTED
+ ****************************************************************************/
+kal_bool errc_rcm_get_lte_support_band_for_plmn_list(
+    const MRS_SIM_INDEX sim_idx,
+    const mrs_plmn_id_list *p_plmn_id_list,
+    kal_uint8 *p_lte_band_bitmask,
+    kal_bool is_requestfreband);
+
+/****************************************************************************
+ * FUNCTION
+ *     errc_rcm_get_custom_disable_band_list
+ *
+ * DESCRIPTION
+ *     Get the custom disable band list setting by nvram 
+ *
+ * PARAMETERS
+ *     @param
+ *       [in] SIM index
+ *       [out] p_positive_disable_band_list
+ *       [out] p_inverted_disable_band_list
+ * RETURNS
+ *    @return
+ *
+ * GLOBALS AFFECTED
+ ****************************************************************************/
+void errc_rcm_get_custom_disable_band_list(
+    const MRS_SIM_INDEX sim_idx,
+    nvram_errc_custom_disable_band_positive_struct *p_positive_disable_band_list,
+    nvram_errc_custom_disable_band_inverted_struct *p_inverted_disable_band_list);	
+
+/****************************************************************************
+ * FUNCTION
+ *     errc_rcm_check_special_plmn_excluded
+ *
+ * DESCRIPTION
+ *     Check if the input PLMN List contains any special PLMN which is set to
+ *     be excluded from being filtered by global LTE support band table.
+ *
+ * PARAMETERS
+ *     @param
+ *       [in] SIM index
+ *       [in] PLMN Id List
+ *
+ * RETURNS
+ *    @return
+ *        kal_bool: TRUE if the input PLMN list contains one or more special
+ *        PLMN identities.
+ *
+ * GLOBALS AFFECTED
+ ****************************************************************************/
+kal_bool errc_rcm_check_special_plmn_excluded(
+    const MRS_SIM_INDEX sim_idx,
+    const mrs_plmn_id_list *p_plmn_id_list);
+
+
+#if defined(__GEMINI_LTE__) && defined(UNIT_TEST)     //Gemini Multi LTE UT
+/****************************************************************************
+ * FUNCTION
+ *     errc_ut_duplicate_nvram_for_multiSIM
+ *
+ * DESCRIPTION
+ *     Function called by MRS_EAS to get ERRC MoDIS ut_duplicate_nvram_multiSIM setting
+ *
+ * PARAMETERS
+ *     @param
+ *       void
+ * RETURNS
+ *    @return
+ *        0: default duplicate NVRAM fro other SIM; 1: no duplicating, setting nvram is invoked by MSC
+ *
+ * GLOBALS AFFECTED
+ ****************************************************************************/
+kal_uint8 errc_ut_duplicate_nvram_for_multiSIM(void);
+#endif    // defined(__GEMINI_LTE__) && defined(UNIT_TEST)
+
+/****************************************************************************
+ * FUNCTION
+ *     errc_is_any_lte_band_exist
+ *
+ * DESCRIPTION
+ *     
+ *
+ * PARAMETERS
+ *     @param
+ *       void
+ * RETURNS
+ *   
+ *
+ * GLOBALS AFFECTED
+ ****************************************************************************/
+
+kal_bool errc_is_any_lte_band_exist(MRS_SIM_INDEX sim_index, mrs_plmn_id_list *p_plmn_list);
+
+/****************************************************************************
+ * FUNCTION
+ *     errc_com_get_hplmn
+ *
+ * DESCRIPTION
+ *     To get hplmn
+ *
+ * PARAMETERS
+ *     @param
+ *       void
+ * RETURNS
+ *     whether get hplmn successfully
+ *
+ * GLOBALS AFFECTED
+ ****************************************************************************/
+
+kal_bool errc_com_get_hplmn(plmn_id_struct *plmn_id, MRS_SIM_INDEX sim_idx);
+
+/****************************************************************************
+ * FUNCTION
+ *     errc_com_get_splmn
+ *
+ * DESCRIPTION
+ *     To get splmn
+ *
+ * PARAMETERS
+ *     @param
+ *       void
+ * RETURNS
+ *      whether get splmn successfully
+ *
+ * GLOBALS AFFECTED
+ ****************************************************************************/
+
+kal_bool errc_com_get_splmn(plmn_id_struct *plmn_id, MRS_SIM_INDEX sim_idx);
+
+#ifdef __NR_RAT__
+/****************************************************************************
+ * FUNCTION
+ *     errc_calculate_p_compensation
+ *
+ * DESCRIPTION
+ *     calculate p_compensation for NRRC
+ *
+ * PARAMETERS
+ *     @param
+ *       sim_idx
+ *       target_earfcn
+ *       p_max
+ *       *p_multi_band_list
+ * RETURNS
+ *    @return
+ *       Pcompensation
+ ****************************************************************************/
+kal_int8 errc_calculate_p_compensation(
+    MRS_SIM_INDEX sim_idx,
+    EARFCN target_earfcn,
+    kal_int8 p_max,
+    eutra_multibandinfo_list_struct *p_multi_band_list,
+    const plmn_id_struct *p_plmn_id);
+#endif /* __NR_RAT__ */
+
+#ifdef __NVM_GLOBAL_CABC__
+/****************************************************************************
+ * FUNCTION
+ *     errc_rcm_chk_nvram_global_band_ca_custom
+ *
+ * DESCRIPTION
+ *     API for checking if Global Band CA custom actiavted
+ *
+ * PARAMETERS
+ *     @param
+ *       [in] p_plmn_id_list
+ * RETURNS
+ *    @return
+ *       TRUE means Global Band CA Custom actiavted
+ ****************************************************************************/
+kal_bool errc_rcm_chk_is_global_band_ca_custom(const mrs_plmn_id_list *p_plmn_id_list);
+/****************************************************************************
+ * FUNCTION
+ *     errc_rcm_get_lte_band_from_nvram_global
+ *
+ * DESCRIPTION
+ *    API for geting LTE support band by filtering of Global Band CA Custom
+ *
+ * PARAMETERS
+ *     @param
+ *       [in] p_plmn_id_list
+ *       [out] p_lte_band_bitmask
+ * RETURNS
+ *    @return
+ *       void
+ ****************************************************************************/
+void errc_rcm_get_lte_band_from_nvram_global(mrs_plmn_id_list *p_plmn_id_list, kal_uint8 *p_lte_band_bitmask);
+#endif
+
+/****************************************************************************
+ * FUNCTION
+ *     errc_check_eutra_capability_supported
+ *
+ * DESCRIPTION
+ *     API for checking eutra capability support status
+ *
+ * PARAMETERS
+ *     @param
+ *       [in] eutra feature
+ * RETURNS
+ *    @return
+ *       TRUE means the feature is supported
+ ****************************************************************************/
+kal_bool errc_check_eutra_capability_supported(eas_cap_feature_enum feature);
+#endif /* _ERRC_MRS_INTERFACE_H_ */
diff --git a/mcu/protocol/interface/errc/errc_public_api.h b/mcu/protocol/interface/errc/errc_public_api.h
new file mode 100644
index 0000000..719c3c7
--- /dev/null
+++ b/mcu/protocol/interface/errc/errc_public_api.h
@@ -0,0 +1,130 @@
+/*****************************************************************************
+*  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) 2012                                       
+*                                                                             
+*  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).                  
+*                                                                             
+*****************************************************************************/
+                                                                              
+/*****************************************************************************
+ * 
+ * Filename:
+ * ---------
+ *   errc_public_api.h
+ *
+ * Project:
+ * --------
+ *   UMOLYA
+ *
+ * Description:
+ * ------------
+ *
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ * ========================================================================== 
+ 
+ ****************************************************************************/
+ 
+#ifndef ERRC_PUBLIC_API_H
+#define ERRC_PUBLIC_API_H
+
+#include "nl1_comm_inter_core_public.h"
+#include "as_inter_core_enum.h"
+
+#if (CUR_GEN >= MD_GEN95)
+typedef enum{
+	ERRC_PUBLIC_SIM1 = 0,
+#ifdef __GEMINI_LTE__
+	ERRC_PUBLIC_SIM2 = 1,
+#if (GEMINI_PLUS_LTE >=3)
+	ERRC_PUBLIC_SIM3 = 2,
+#if (GEMINI_PLUS_LTE >=4)
+	ERRC_PUBLIC_SIM4 = 3
+#endif /*GEMINI_PLUS_LTE >=4*/
+#endif /*GEMINI_PLUS_LTE >=3*/
+#endif /*__GEMINI_LTE__*/
+}errc_public_sim_idx_enum;
+
+typedef enum{
+	MOB_CELL_QUALITY_STRONG,
+	MOB_CELL_QUALITY_WEAK,
+	MOB_CELL_QUALITY_INVALID  = 0xFF
+}errc_mob_cell_quality_enum;
+
+kal_uint8 errc_public_any_get_max_ul_cc_num(errc_public_sim_idx_enum sim_idx); //SIM1=0, SIM2=1, SIM3=2, SIM4=3
+
+kal_bool errc_public_any_chk_ul_256qam_supported(errc_public_sim_idx_enum sim_idx); //SIM1=0, SIM2=1, SIM3=2, SIM4=3
+
+errc_mob_cell_quality_enum errc_query_servcell_quality_custom_thresh(errc_public_sim_idx_enum sim_idx,
+                                                                     kal_int32 thresh_rsrp, 
+                                                                     kal_int32 thresh_rsrq,
+                                                                     kal_int32 thresh_sinr );
+
+#ifdef __VOLTE_SI_ENH__
+/* mod_id is the module who call this callback function */
+void errc_mob_disable_status_sync_tau(module_type mod_id, errc_public_sim_idx_enum sim_idx);
+#endif
+
+#endif /* #if (CUR_GEN >= MD_GEN95) */
+
+void errc_any_alloc_srb_ul_buffer(KAL_AFM_ID afm_id, kal_uint32 size, kal_uint8 **o_ptr);
+
+void errc_any_free_srb_ul_buffer(KAL_AFM_ID afm_id, void *ptr);
+
+kal_int32 errc_any_get_left_buffer_num(KAL_AFM_ID afm_id, kal_uint32 buffer_size);
+
+/*sim_idx ranges (0,  GEMINI_PLUS_LTE-1)*/
+kal_uint8 errc_mob_otdoa_pcell_info_query(kal_uint8 sim_idx, kal_uint32 *pcellEarfcn, kal_bool *isFourAntPortConfig);
+
+
+kal_bool errc_mob_enpdcp_is_smart_idle_rel_a2_trigger(kal_uint8 sim_idx);
+
+
+kal_bool errc_current_cell_get(kal_uint8 sim_idx, kal_uint32 *earfcn, kal_uint16 *pci);
+
+void errc_public_get_new_nh_from_ncc(kal_uint8 ncc, kal_uint8* nh, kal_uint8 sim_index);
+
+void errc_mob_update_gapless_related_rfdb(errc_public_sim_idx_enum sim_idx);
+ 
+kal_uint32 errc_public_get_operator_id(errc_public_sim_idx_enum sim_index);
+
+void errc_chm_any_check_apply_l2_rb_idx_temp_list(kal_uint8 sim_idx);
+
+kal_bool errc_mob_icrej_is_nr_cell_rejected_by_cause(
+   kal_uint32 narfcn,
+   kal_uint16 pci,
+   NR_SCS_TYPE_E ssb_scs,
+   cell_rej_cause_enum cause,
+   kal_uint8 sim_index);
+
+#endif /* ERRC_PUBLIC_API_H */